code: function handleNotification(event, inst, fromProp, toPath, negate) {
    let value;
    let detail = /** @type {Object} */(event.detail);
    let fromPath = detail && detail.path;
    if (fromPath) {
      toPath = translate(fromProp, toPath, fromPath);
      value = detail && detail.value;
    } else {
      value = event.target[fromProp];
    }
    value = negate ? !value : value;
    if (!inst[TYPES.READ_ONLY] || !inst[TYPES.READ_ONLY][toPath]) {
      if (inst._setPendingPropertyOrPath(toPath, value, true, Boolean(fromPath))
        && (!detail || !detail.queueProperty)) {
        inst._invalidateProperties();
      }
    }
  }
docs: Handler function for 2-way notification events. Receives context
  information captured in the `addNotifyListener` closure from the
  `__notifyListeners` metadata.
  
  Sets the value of the notified property to the host property or path.  If
  the event contained path information, translate that path to the host
  scope's name for that path first.
  
  @param {CustomEvent} event Notification event (e.g. '<property>-changed')
  @param {!PropertyEffectsType} inst Host element instance handling the notification event
  @param {string} fromProp Child element property that was bound
  @param {string} toPath Host property/path that was bound
  @param {boolean} negate Whether the binding was negated
  @return {void}
  @private