UNPKG

@getopenpay/openpay-js-react

Version:

Accept payments through OpenPay, right on your site

1,614 lines 211 kB
import { Q as Xe } from "./index-BRlq-xUA.js";
function At(I) {
  return I === void 0 && (I = {}), typeof I.addEventListener == "function" && typeof I.removeEventListener == "function";
}
var dt = "OT_ZONE_CONTEXT", Gt = (
  /** @class */
  (function() {
    function I() {
      this._enabled = !1, this._zoneCounter = 0;
    }
    return I.prototype._activeContextFromZone = function(C) {
      return C && C.get(dt) || Xe;
    }, I.prototype._bindFunction = function(C, V) {
      var H = this, ee = function() {
        for (var te = this, ae = [], he = 0; he < arguments.length; he++)
          ae[he] = arguments[he];
        return H.with(C, function() {
          return V.apply(te, ae);
        });
      };
      return Object.defineProperty(ee, "length", {
        enumerable: !1,
        configurable: !0,
        writable: !1,
        value: V.length
      }), ee;
    }, I.prototype._bindListener = function(C, V) {
      var H = V;
      return H.__ot_listeners !== void 0 || (H.__ot_listeners = {}, typeof H.addEventListener == "function" && (H.addEventListener = this._patchAddEventListener(H, H.addEventListener, C)), typeof H.removeEventListener == "function" && (H.removeEventListener = this._patchRemoveEventListener(H, H.removeEventListener))), V;
    }, I.prototype._createZoneName = function() {
      this._zoneCounter++;
      var C = Math.random();
      return this._zoneCounter + "-" + C;
    }, I.prototype._createZone = function(C, V) {
      var H;
      return Zone.current.fork({
        name: C,
        properties: (H = {}, H[dt] = V, H)
      });
    }, I.prototype._getActiveZone = function() {
      return Zone.current;
    }, I.prototype._patchAddEventListener = function(C, V, H) {
      var ee = this;
      return function(te, ae, he) {
        C.__ot_listeners === void 0 && (C.__ot_listeners = {});
        var Te = C.__ot_listeners[te];
        Te === void 0 && (Te = /* @__PURE__ */ new WeakMap(), C.__ot_listeners[te] = Te);
        var be = ee.bind(H, ae);
        return Te.set(ae, be), V.call(this, te, be, he);
      };
    }, I.prototype._patchRemoveEventListener = function(C, V) {
      return function(H, ee) {
        if (C.__ot_listeners === void 0 || C.__ot_listeners[H] === void 0)
          return V.call(this, H, ee);
        var te = C.__ot_listeners[H], ae = te.get(ee);
        return te.delete(ee), V.call(this, H, ae || ee);
      };
    }, I.prototype.active = function() {
      if (!this._enabled)
        return Xe;
      var C = this._getActiveZone(), V = this._activeContextFromZone(C);
      return V || Xe;
    }, I.prototype.bind = function(C, V) {
      return C === void 0 && (C = this.active()), typeof V == "function" ? this._bindFunction(C, V) : (At(V) && this._bindListener(C, V), V);
    }, I.prototype.disable = function() {
      return this._enabled = !1, this;
    }, I.prototype.enable = function() {
      return this._enabled = !0, this;
    }, I.prototype.with = function(C, V, H) {
      for (var ee = [], te = 3; te < arguments.length; te++)
        ee[te - 3] = arguments[te];
      var ae = this._createZoneName(), he = this._createZone(ae, C);
      return he.run(V, H, ee);
    }, I;
  })()
), kt = {}, mt;
function xt() {
  if (mt) return kt;
  mt = 1;
  /**
   * @license Angular v<unknown>
   * (c) 2010-2025 Google LLC. https://angular.io/
   * License: MIT
   */
  const I = globalThis;
  function C(e) {
    return (I.__Zone_symbol_prefix || "__zone_symbol__") + e;
  }
  function V() {
    const e = I.performance;
    function n(L) {
      e && e.mark && e.mark(L);
    }
    function c(L, a) {
      e && e.measure && e.measure(L, a);
    }
    n("Zone");
    class t {
      static __symbol__ = C;
      static assertZonePatched() {
        if (I.Promise !== O.ZoneAwarePromise)
          throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)");
      }
      static get root() {
        let a = t.current;
        for (; a.parent; )
          a = a.parent;
        return a;
      }
      static get current() {
        return E.zone;
      }
      static get currentTask() {
        return S;
      }
      static __load_patch(a, s, r = !1) {
        if (O.hasOwnProperty(a)) {
          const T = I[C("forceDuplicateZoneCheck")] === !0;
          if (!r && T)
            throw Error("Already loaded patch: " + a);
        } else if (!I["__Zone_disable_" + a]) {
          const T = "Zone:" + a;
          n(T), O[a] = s(I, t, D), c(T, T);
        }
      }
      get parent() {
        return this._parent;
      }
      get name() {
        return this._name;
      }
      _parent;
      _name;
      _properties;
      _zoneDelegate;
      constructor(a, s) {
        this._parent = a, this._name = s ? s.name || "unnamed" : "<root>", this._properties = s && s.properties || {}, this._zoneDelegate = new u(this, this._parent && this._parent._zoneDelegate, s);
      }
      get(a) {
        const s = this.getZoneWith(a);
        if (s)
          return s._properties[a];
      }
      getZoneWith(a) {
        let s = this;
        for (; s; ) {
          if (s._properties.hasOwnProperty(a))
            return s;
          s = s._parent;
        }
        return null;
      }
      fork(a) {
        if (!a)
          throw new Error("ZoneSpec required!");
        return this._zoneDelegate.fork(this, a);
      }
      wrap(a, s) {
        if (typeof a != "function")
          throw new Error("Expecting function got: " + a);
        const r = this._zoneDelegate.intercept(this, a, s), T = this;
        return function() {
          return T.runGuarded(r, this, arguments, s);
        };
      }
      run(a, s, r, T) {
        E = { parent: E, zone: this };
        try {
          return this._zoneDelegate.invoke(this, a, s, r, T);
        } finally {
          E = E.parent;
        }
      }
      runGuarded(a, s = null, r, T) {
        E = { parent: E, zone: this };
        try {
          try {
            return this._zoneDelegate.invoke(this, a, s, r, T);
          } catch (U) {
            if (this._zoneDelegate.handleError(this, U))
              throw U;
          }
        } finally {
          E = E.parent;
        }
      }
      runTask(a, s, r) {
        if (a.zone != this)
          throw new Error("A task can only be run in the zone of creation! (Creation: " + (a.zone || re).name + "; Execution: " + this.name + ")");
        const T = a, { type: U, data: { isPeriodic: ie = !1, isRefreshable: N = !1 } = {} } = a;
        if (a.state === K && (U === B || U === k))
          return;
        const me = a.state != A;
        me && T._transitionTo(A, p);
        const ve = S;
        S = T, E = { parent: E, zone: this };
        try {
          U == k && a.data && !ie && !N && (a.cancelFn = void 0);
          try {
            return this._zoneDelegate.invokeTask(this, T, s, r);
          } catch (se) {
            if (this._zoneDelegate.handleError(this, se))
              throw se;
          }
        } finally {
          const se = a.state;
          if (se !== K && se !== J)
            if (U == B || ie || N && se === v)
              me && T._transitionTo(p, A, v);
            else {
              const we = T._zoneDelegates;
              this._updateTaskCount(T, -1), me && T._transitionTo(K, A, K), N && (T._zoneDelegates = we);
            }
          E = E.parent, S = ve;
        }
      }
      scheduleTask(a) {
        if (a.zone && a.zone !== this) {
          let r = this;
          for (; r; ) {
            if (r === a.zone)
              throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${a.zone.name}`);
            r = r.parent;
          }
        }
        a._transitionTo(v, K);
        const s = [];
        a._zoneDelegates = s, a._zone = this;
        try {
          a = this._zoneDelegate.scheduleTask(this, a);
        } catch (r) {
          throw a._transitionTo(J, v, K), this._zoneDelegate.handleError(this, r), r;
        }
        return a._zoneDelegates === s && this._updateTaskCount(a, 1), a.state == v && a._transitionTo(p, v), a;
      }
      scheduleMicroTask(a, s, r, T) {
        return this.scheduleTask(new d($, a, s, r, T, void 0));
      }
      scheduleMacroTask(a, s, r, T, U) {
        return this.scheduleTask(new d(k, a, s, r, T, U));
      }
      scheduleEventTask(a, s, r, T, U) {
        return this.scheduleTask(new d(B, a, s, r, T, U));
      }
      cancelTask(a) {
        if (a.zone != this)
          throw new Error("A task can only be cancelled in the zone of creation! (Creation: " + (a.zone || re).name + "; Execution: " + this.name + ")");
        if (!(a.state !== p && a.state !== A)) {
          a._transitionTo(G, p, A);
          try {
            this._zoneDelegate.cancelTask(this, a);
          } catch (s) {
            throw a._transitionTo(J, G), this._zoneDelegate.handleError(this, s), s;
          }
          return this._updateTaskCount(a, -1), a._transitionTo(K, G), a.runCount = -1, a;
        }
      }
      _updateTaskCount(a, s) {
        const r = a._zoneDelegates;
        s == -1 && (a._zoneDelegates = null);
        for (let T = 0; T < r.length; T++)
          r[T]._updateTaskCount(a.type, s);
      }
    }
    const i = {
      name: "",
      onHasTask: (L, a, s, r) => L.hasTask(s, r),
      onScheduleTask: (L, a, s, r) => L.scheduleTask(s, r),
      onInvokeTask: (L, a, s, r, T, U) => L.invokeTask(s, r, T, U),
      onCancelTask: (L, a, s, r) => L.cancelTask(s, r)
    };
    class u {
      get zone() {
        return this._zone;
      }
      _zone;
      _taskCounts = {
        microTask: 0,
        macroTask: 0,
        eventTask: 0
      };
      _parentDelegate;
      _forkDlgt;
      _forkZS;
      _forkCurrZone;
      _interceptDlgt;
      _interceptZS;
      _interceptCurrZone;
      _invokeDlgt;
      _invokeZS;
      _invokeCurrZone;
      _handleErrorDlgt;
      _handleErrorZS;
      _handleErrorCurrZone;
      _scheduleTaskDlgt;
      _scheduleTaskZS;
      _scheduleTaskCurrZone;
      _invokeTaskDlgt;
      _invokeTaskZS;
      _invokeTaskCurrZone;
      _cancelTaskDlgt;
      _cancelTaskZS;
      _cancelTaskCurrZone;
      _hasTaskDlgt;
      _hasTaskDlgtOwner;
      _hasTaskZS;
      _hasTaskCurrZone;
      constructor(a, s, r) {
        this._zone = a, this._parentDelegate = s, this._forkZS = r && (r && r.onFork ? r : s._forkZS), this._forkDlgt = r && (r.onFork ? s : s._forkDlgt), this._forkCurrZone = r && (r.onFork ? this._zone : s._forkCurrZone), this._interceptZS = r && (r.onIntercept ? r : s._interceptZS), this._interceptDlgt = r && (r.onIntercept ? s : s._interceptDlgt), this._interceptCurrZone = r && (r.onIntercept ? this._zone : s._interceptCurrZone), this._invokeZS = r && (r.onInvoke ? r : s._invokeZS), this._invokeDlgt = r && (r.onInvoke ? s : s._invokeDlgt), this._invokeCurrZone = r && (r.onInvoke ? this._zone : s._invokeCurrZone), this._handleErrorZS = r && (r.onHandleError ? r : s._handleErrorZS), this._handleErrorDlgt = r && (r.onHandleError ? s : s._handleErrorDlgt), this._handleErrorCurrZone = r && (r.onHandleError ? this._zone : s._handleErrorCurrZone), this._scheduleTaskZS = r && (r.onScheduleTask ? r : s._scheduleTaskZS), this._scheduleTaskDlgt = r && (r.onScheduleTask ? s : s._scheduleTaskDlgt), this._scheduleTaskCurrZone = r && (r.onScheduleTask ? this._zone : s._scheduleTaskCurrZone), this._invokeTaskZS = r && (r.onInvokeTask ? r : s._invokeTaskZS), this._invokeTaskDlgt = r && (r.onInvokeTask ? s : s._invokeTaskDlgt), this._invokeTaskCurrZone = r && (r.onInvokeTask ? this._zone : s._invokeTaskCurrZone), this._cancelTaskZS = r && (r.onCancelTask ? r : s._cancelTaskZS), this._cancelTaskDlgt = r && (r.onCancelTask ? s : s._cancelTaskDlgt), this._cancelTaskCurrZone = r && (r.onCancelTask ? this._zone : s._cancelTaskCurrZone), this._hasTaskZS = null, this._hasTaskDlgt = null, this._hasTaskDlgtOwner = null, this._hasTaskCurrZone = null;
        const T = r && r.onHasTask, U = s && s._hasTaskZS;
        (T || U) && (this._hasTaskZS = T ? r : i, this._hasTaskDlgt = s, this._hasTaskDlgtOwner = this, this._hasTaskCurrZone = this._zone, r.onScheduleTask || (this._scheduleTaskZS = i, this._scheduleTaskDlgt = s, this._scheduleTaskCurrZone = this._zone), r.onInvokeTask || (this._invokeTaskZS = i, this._invokeTaskDlgt = s, this._invokeTaskCurrZone = this._zone), r.onCancelTask || (this._cancelTaskZS = i, this._cancelTaskDlgt = s, this._cancelTaskCurrZone = this._zone));
      }
      fork(a, s) {
        return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, a, s) : new t(a, s);
      }
      intercept(a, s, r) {
        return this._interceptZS ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, a, s, r) : s;
      }
      invoke(a, s, r, T, U) {
        return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, a, s, r, T, U) : s.apply(r, T);
      }
      handleError(a, s) {
        return this._handleErrorZS ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, a, s) : !0;
      }
      scheduleTask(a, s) {
        let r = s;
        if (this._scheduleTaskZS)
          this._hasTaskZS && r._zoneDelegates.push(this._hasTaskDlgtOwner), r = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, a, s), r || (r = s);
        else if (s.scheduleFn)
          s.scheduleFn(s);
        else if (s.type == $)
          X(s);
        else
          throw new Error("Task is missing scheduleFn.");
        return r;
      }
      invokeTask(a, s, r, T) {
        return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, a, s, r, T) : s.callback.apply(r, T);
      }
      cancelTask(a, s) {
        let r;
        if (this._cancelTaskZS)
          r = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, a, s);
        else {
          if (!s.cancelFn)
            throw Error("Task is not cancelable");
          r = s.cancelFn(s);
        }
        return r;
      }
      hasTask(a, s) {
        try {
          this._hasTaskZS && this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, a, s);
        } catch (r) {
          this.handleError(a, r);
        }
      }
      _updateTaskCount(a, s) {
        const r = this._taskCounts, T = r[a], U = r[a] = T + s;
        if (U < 0)
          throw new Error("More tasks executed then were scheduled.");
        if (T == 0 || U == 0) {
          const ie = {
            microTask: r.microTask > 0,
            macroTask: r.macroTask > 0,
            eventTask: r.eventTask > 0,
            change: a
          };
          this.hasTask(this._zone, ie);
        }
      }
    }
    class d {
      type;
      source;
      invoke;
      callback;
      data;
      scheduleFn;
      cancelFn;
      _zone = null;
      runCount = 0;
      _zoneDelegates = null;
      _state = "notScheduled";
      constructor(a, s, r, T, U, ie) {
        if (this.type = a, this.source = s, this.data = T, this.scheduleFn = U, this.cancelFn = ie, !r)
          throw new Error("callback is not defined");
        this.callback = r;
        const N = this;
        a === B && T && T.useG ? this.invoke = d.invokeTask : this.invoke = function() {
          return d.invokeTask.call(I, N, this, arguments);
        };
      }
      static invokeTask(a, s, r) {
        a || (a = this), oe++;
        try {
          return a.runCount++, a.zone.runTask(a, s, r);
        } finally {
          oe == 1 && ne(), oe--;
        }
      }
      get zone() {
        return this._zone;
      }
      get state() {
        return this._state;
      }
      cancelScheduleRequest() {
        this._transitionTo(K, v);
      }
      _transitionTo(a, s, r) {
        if (this._state === s || this._state === r)
          this._state = a, a == K && (this._zoneDelegates = null);
        else
          throw new Error(`${this.type} '${this.source}': can not transition to '${a}', expecting state '${s}'${r ? " or '" + r + "'" : ""}, was '${this._state}'.`);
      }
      toString() {
        return this.data && typeof this.data.handleId < "u" ? this.data.handleId.toString() : Object.prototype.toString.call(this);
      }
      // add toJSON method to prevent cyclic error when
      // call JSON.stringify(zoneTask)
      toJSON() {
        return {
          type: this.type,
          state: this.state,
          source: this.source,
          zone: this.zone.name,
          runCount: this.runCount
        };
      }
    }
    const g = C("setTimeout"), y = C("Promise"), w = C("then");
    let _ = [], R = !1, j;
    function x(L) {
      if (j || I[y] && (j = I[y].resolve(0)), j) {
        let a = j[w];
        a || (a = j.then), a.call(j, L);
      } else
        I[g](L, 0);
    }
    function X(L) {
      oe === 0 && _.length === 0 && x(ne), L && _.push(L);
    }
    function ne() {
      if (!R) {
        for (R = !0; _.length; ) {
          const L = _;
          _ = [];
          for (let a = 0; a < L.length; a++) {
            const s = L[a];
            try {
              s.zone.runTask(s, null, null);
            } catch (r) {
              D.onUnhandledError(r);
            }
          }
        }
        D.microtaskDrainDone(), R = !1;
      }
    }
    const re = { name: "NO ZONE" }, K = "notScheduled", v = "scheduling", p = "scheduled", A = "running", G = "canceling", J = "unknown", $ = "microTask", k = "macroTask", B = "eventTask", O = {}, D = {
      symbol: C,
      currentZoneFrame: () => E,
      onUnhandledError: Y,
      microtaskDrainDone: Y,
      scheduleMicroTask: X,
      showUncaughtError: () => !t[C("ignoreConsoleErrorUncaughtError")],
      patchEventTarget: () => [],
      patchOnProperties: Y,
      patchMethod: () => Y,
      bindArguments: () => [],
      patchThen: () => Y,
      patchMacroTask: () => Y,
      patchEventPrototype: () => Y,
      isIEOrEdge: () => !1,
      getGlobalObjects: () => {
      },
      ObjectDefineProperty: () => Y,
      ObjectGetOwnPropertyDescriptor: () => {
      },
      ObjectCreate: () => {
      },
      ArraySlice: () => [],
      patchClass: () => Y,
      wrapWithCurrentZone: () => Y,
      filterProperties: () => [],
      attachOriginToPatched: () => Y,
      _redefineProperty: () => Y,
      patchCallbacks: () => Y,
      nativeScheduleMicroTask: x
    };
    let E = { parent: null, zone: new t(null, null) }, S = null, oe = 0;
    function Y() {
    }
    return c("Zone", "Zone"), t;
  }
  function H() {
    const e = globalThis, n = e[C("forceDuplicateZoneCheck")] === !0;
    if (e.Zone && (n || typeof e.Zone.__symbol__ != "function"))
      throw new Error("Zone already loaded.");
    return e.Zone ??= V(), e.Zone;
  }
  const ee = Object.getOwnPropertyDescriptor, te = Object.defineProperty, ae = Object.getPrototypeOf, he = Object.create, Te = Array.prototype.slice, be = "addEventListener", Ne = "removeEventListener", Ie = C(be), Fe = C(Ne), _e = "true", ge = "false", Se = C("");
  function Ae(e, n) {
    return Zone.current.wrap(e, n);
  }
  function xe(e, n, c, t, i) {
    return Zone.current.scheduleMacroTask(e, n, c, t, i);
  }
  const F = C, Pe = typeof window < "u", Ce = Pe ? window : void 0, Q = Pe && Ce || globalThis, yt = "removeAttribute";
  function He(e, n) {
    for (let c = e.length - 1; c >= 0; c--)
      typeof e[c] == "function" && (e[c] = Ae(e[c], n + "_" + c));
    return e;
  }
  function vt(e, n) {
    const c = e.constructor.name;
    for (let t = 0; t < n.length; t++) {
      const i = n[t], u = e[i];
      if (u) {
        const d = ee(e, i);
        if (!$e(d))
          continue;
        e[i] = ((g) => {
          const y = function() {
            return g.apply(this, He(arguments, c + "." + i));
          };
          return ke(y, g), y;
        })(u);
      }
    }
  }
  function $e(e) {
    return e ? e.writable === !1 ? !1 : !(typeof e.get == "function" && typeof e.set > "u") : !0;
  }
  const Be = typeof WorkerGlobalScope < "u" && self instanceof WorkerGlobalScope, Re = !("nw" in Q) && typeof Q.process < "u" && Q.process.toString() === "[object process]", Ge = !Re && !Be && !!(Pe && Ce.HTMLElement), Ye = typeof Q.process < "u" && Q.process.toString() === "[object process]" && !Be && !!(Pe && Ce.HTMLElement), je = {}, Tt = F("enable_beforeunload"), Ke = function(e) {
    if (e = e || Q.event, !e)
      return;
    let n = je[e.type];
    n || (n = je[e.type] = F("ON_PROPERTY" + e.type));
    const c = this || e.target || Q, t = c[n];
    let i;
    if (Ge && c === Ce && e.type === "error") {
      const u = e;
      i = t && t.call(this, u.message, u.filename, u.lineno, u.colno, u.error), i === !0 && e.preventDefault();
    } else
      i = t && t.apply(this, arguments), // https://github.com/angular/angular/issues/47579
      // https://www.w3.org/TR/2011/WD-html5-20110525/history.html#beforeunloadevent
      // This is the only specific case we should check for. The spec defines that the
      // `returnValue` attribute represents the message to show the user. When the event
      // is created, this attribute must be set to the empty string.
      e.type === "beforeunload" && // To prevent any breaking changes resulting from this change, given that
      // it was already causing a significant number of failures in G3, we have hidden
      // that behavior behind a global configuration flag. Consumers can enable this
      // flag explicitly if they want the `beforeunload` event to be handled as defined
      // in the specification.
      Q[Tt] && // The IDL event definition is `attribute DOMString returnValue`, so we check whether
      // `typeof result` is a string.
      typeof i == "string" ? e.returnValue = i : i != null && !i && e.preventDefault();
    return i;
  };
  function Je(e, n, c) {
    let t = ee(e, n);
    if (!t && c && ee(c, n) && (t = { enumerable: !0, configurable: !0 }), !t || !t.configurable)
      return;
    const i = F("on" + n + "patched");
    if (e.hasOwnProperty(i) && e[i])
      return;
    delete t.writable, delete t.value;
    const u = t.get, d = t.set, g = n.slice(2);
    let y = je[g];
    y || (y = je[g] = F("ON_PROPERTY" + g)), t.set = function(w) {
      let _ = this;
      !_ && e === Q && (_ = Q), _ && (typeof _[y] == "function" && _.removeEventListener(g, Ke), d?.call(_, null), _[y] = w, typeof w == "function" && _.addEventListener(g, Ke, !1));
    }, t.get = function() {
      let w = this;
      if (!w && e === Q && (w = Q), !w)
        return null;
      const _ = w[y];
      if (_)
        return _;
      if (u) {
        let R = u.call(this);
        if (R)
          return t.set.call(this, R), typeof w[yt] == "function" && w.removeAttribute(n), R;
      }
      return null;
    }, te(e, n, t), e[i] = !0;
  }
  function Qe(e, n, c) {
    if (n)
      for (let t = 0; t < n.length; t++)
        Je(e, "on" + n[t], c);
    else {
      const t = [];
      for (const i in e)
        i.slice(0, 2) == "on" && t.push(i);
      for (let i = 0; i < t.length; i++)
        Je(e, t[i], c);
    }
  }
  const le = F("originalInstance");
  function Oe(e) {
    const n = Q[e];
    if (!n)
      return;
    Q[F(e)] = n, Q[e] = function() {
      const i = He(arguments, e);
      switch (i.length) {
        case 0:
          this[le] = new n();
          break;
        case 1:
          this[le] = new n(i[0]);
          break;
        case 2:
          this[le] = new n(i[0], i[1]);
          break;
        case 3:
          this[le] = new n(i[0], i[1], i[2]);
          break;
        case 4:
          this[le] = new n(i[0], i[1], i[2], i[3]);
          break;
        default:
          throw new Error("Arg list too long.");
      }
    }, ke(Q[e], n);
    const c = new n(function() {
    });
    let t;
    for (t in c)
      e === "XMLHttpRequest" && t === "responseBlob" || (function(i) {
        typeof c[i] == "function" ? Q[e].prototype[i] = function() {
          return this[le][i].apply(this[le], arguments);
        } : te(Q[e].prototype, i, {
          set: function(u) {
            typeof u == "function" ? (this[le][i] = Ae(u, e + "." + i), ke(this[le][i], u)) : this[le][i] = u;
          },
          get: function() {
            return this[le][i];
          }
        });
      })(t);
    for (t in n)
      t !== "prototype" && n.hasOwnProperty(t) && (Q[e][t] = n[t]);
  }
  function de(e, n, c) {
    let t = e;
    for (; t && !t.hasOwnProperty(n); )
      t = ae(t);
    !t && e[n] && (t = e);
    const i = F(n);
    let u = null;
    if (t && (!(u = t[i]) || !t.hasOwnProperty(i))) {
      u = t[i] = t[n];
      const d = t && ee(t, n);
      if ($e(d)) {
        const g = c(u, i, n);
        t[n] = function() {
          return g(this, arguments);
        }, ke(t[n], u);
      }
    }
    return u;
  }
  function bt(e, n, c) {
    let t = null;
    function i(u) {
      const d = u.data;
      return d.args[d.cbIdx] = function() {
        u.invoke.apply(this, arguments);
      }, t.apply(d.target, d.args), u;
    }
    t = de(e, n, (u) => function(d, g) {
      const y = c(d, g);
      return y.cbIdx >= 0 && typeof g[y.cbIdx] == "function" ? xe(y.name, g[y.cbIdx], y, i) : u.apply(d, g);
    });
  }
  function ke(e, n) {
    e[F("OriginalDelegate")] = n;
  }
  let et = !1, Ue = !1;
  function Et() {
    if (et)
      return Ue;
    et = !0;
    try {
      const e = Ce.navigator.userAgent;
      (e.indexOf("MSIE ") !== -1 || e.indexOf("Trident/") !== -1 || e.indexOf("Edge/") !== -1) && (Ue = !0);
    } catch {
    }
    return Ue;
  }
  function tt(e) {
    return typeof e == "function";
  }
  function nt(e) {
    return typeof e == "number";
  }
  const wt = {
    useG: !0
  }, ce = {}, rt = {}, ot = new RegExp("^" + Se + "(\\w+)(true|false)$"), st = F("propagationStopped");
  function at(e, n) {
    const c = (n ? n(e) : e) + ge, t = (n ? n(e) : e) + _e, i = Se + c, u = Se + t;
    ce[e] = {}, ce[e][ge] = i, ce[e][_e] = u;
  }
  function Zt(e, n, c, t) {
    const i = t && t.add || be, u = t && t.rm || Ne, d = t && t.listeners || "eventListeners", g = t && t.rmAll || "removeAllListeners", y = F(i), w = "." + i + ":", _ = "prependListener", R = "." + _ + ":", j = function(v, p, A) {
      if (v.isRemoved)
        return;
      const G = v.callback;
      typeof G == "object" && G.handleEvent && (v.callback = (k) => G.handleEvent(k), v.originalDelegate = G);
      let J;
      try {
        v.invoke(v, p, [A]);
      } catch (k) {
        J = k;
      }
      const $ = v.options;
      if ($ && typeof $ == "object" && $.once) {
        const k = v.originalDelegate ? v.originalDelegate : v.callback;
        p[u].call(p, A.type, k, $);
      }
      return J;
    };
    function x(v, p, A) {
      if (p = p || e.event, !p)
        return;
      const G = v || p.target || e, J = G[ce[p.type][A ? _e : ge]];
      if (J) {
        const $ = [];
        if (J.length === 1) {
          const k = j(J[0], G, p);
          k && $.push(k);
        } else {
          const k = J.slice();
          for (let B = 0; B < k.length && !(p && p[st] === !0); B++) {
            const O = j(k[B], G, p);
            O && $.push(O);
          }
        }
        if ($.length === 1)
          throw $[0];
        for (let k = 0; k < $.length; k++) {
          const B = $[k];
          n.nativeScheduleMicroTask(() => {
            throw B;
          });
        }
      }
    }
    const X = function(v) {
      return x(this, v, !1);
    }, ne = function(v) {
      return x(this, v, !0);
    };
    function re(v, p) {
      if (!v)
        return !1;
      let A = !0;
      p && p.useG !== void 0 && (A = p.useG);
      const G = p && p.vh;
      let J = !0;
      p && p.chkDup !== void 0 && (J = p.chkDup);
      let $ = !1;
      p && p.rt !== void 0 && ($ = p.rt);
      let k = v;
      for (; k && !k.hasOwnProperty(i); )
        k = ae(k);
      if (!k && v[i] && (k = v), !k || k[y])
        return !1;
      const B = p && p.eventNameToString, O = {}, D = k[y] = k[i], E = k[F(u)] = k[u], S = k[F(d)] = k[d], oe = k[F(g)] = k[g];
      let Y;
      p && p.prepend && (Y = k[F(p.prepend)] = k[p.prepend]);
      function L(o, h) {
        return h ? typeof o == "boolean" ? { capture: o, passive: !0 } : o ? typeof o == "object" && o.passive !== !1 ? { ...o, passive: !0 } : o : { passive: !0 } : o;
      }
      const a = function(o) {
        if (!O.isExisting)
          return D.call(O.target, O.eventName, O.capture ? ne : X, O.options);
      }, s = function(o) {
        if (!o.isRemoved) {
          const h = ce[o.eventName];
          let b;
          h && (b = h[o.capture ? _e : ge]);
          const Z = b && o.target[b];
          if (Z) {
            for (let m = 0; m < Z.length; m++)
              if (Z[m] === o) {
                Z.splice(m, 1), o.isRemoved = !0, o.removeAbortListener && (o.removeAbortListener(), o.removeAbortListener = null), Z.length === 0 && (o.allRemoved = !0, o.target[b] = null);
                break;
              }
          }
        }
        if (o.allRemoved)
          return E.call(o.target, o.eventName, o.capture ? ne : X, o.options);
      }, r = function(o) {
        return D.call(O.target, O.eventName, o.invoke, O.options);
      }, T = function(o) {
        return Y.call(O.target, O.eventName, o.invoke, O.options);
      }, U = function(o) {
        return E.call(o.target, o.eventName, o.invoke, o.options);
      }, ie = A ? a : r, N = A ? s : U, me = function(o, h) {
        const b = typeof h;
        return b === "function" && o.callback === h || b === "object" && o.originalDelegate === h;
      }, ve = p?.diff || me, se = Zone[F("UNPATCHED_EVENTS")], we = e[F("PASSIVE_EVENTS")];
      function f(o) {
        if (typeof o == "object" && o !== null) {
          const h = { ...o };
          return o.signal && (h.signal = o.signal), h;
        }
        return o;
      }
      const l = function(o, h, b, Z, m = !1, z = !1) {
        return function() {
          const M = this || e;
          let P = arguments[0];
          p && p.transferEventName && (P = p.transferEventName(P));
          let W = arguments[1];
          if (!W)
            return o.apply(this, arguments);
          if (Re && P === "uncaughtException")
            return o.apply(this, arguments);
          let q = !1;
          if (typeof W != "function") {
            if (!W.handleEvent)
              return o.apply(this, arguments);
            q = !0;
          }
          if (G && !G(o, W, M, arguments))
            return;
          const ye = !!we && we.indexOf(P) !== -1, fe = f(L(arguments[2], ye)), Ze = fe?.signal;
          if (Ze?.aborted)
            return;
          if (se) {
            for (let pe = 0; pe < se.length; pe++)
              if (P === se[pe])
                return ye ? o.call(M, P, W, fe) : o.apply(this, arguments);
          }
          const qe = fe ? typeof fe == "boolean" ? !0 : fe.capture : !1, ht = fe && typeof fe == "object" ? fe.once : !1, Ft = Zone.current;
          let Ve = ce[P];
          Ve || (at(P, B), Ve = ce[P]);
          const ft = Ve[qe ? _e : ge];
          let De = M[ft], pt = !1;
          if (De) {
            if (pt = !0, J) {
              for (let pe = 0; pe < De.length; pe++)
                if (ve(De[pe], W))
                  return;
            }
          } else
            De = M[ft] = [];
          let Me;
          const _t = M.constructor.name, gt = rt[_t];
          gt && (Me = gt[P]), Me || (Me = _t + h + (B ? B(P) : P)), O.options = fe, ht && (O.options.once = !1), O.target = M, O.capture = qe, O.eventName = P, O.isExisting = pt;
          const ze = A ? wt : void 0;
          ze && (ze.taskData = O), Ze && (O.options.signal = void 0);
          const ue = Ft.scheduleEventTask(Me, W, ze, b, Z);
          if (Ze) {
            O.options.signal = Ze;
            const pe = () => ue.zone.cancelTask(ue);
            o.call(Ze, "abort", pe, { once: !0 }), ue.removeAbortListener = () => Ze.removeEventListener("abort", pe);
          }
          if (O.target = null, ze && (ze.taskData = null), ht && (O.options.once = !0), typeof ue.options != "boolean" && (ue.options = fe), ue.target = M, ue.capture = qe, ue.eventName = P, q && (ue.originalDelegate = W), z ? De.unshift(ue) : De.push(ue), m)
            return M;
        };
      };
      return k[i] = l(D, w, ie, N, $), Y && (k[_] = l(Y, R, T, N, $, !0)), k[u] = function() {
        const o = this || e;
        let h = arguments[0];
        p && p.transferEventName && (h = p.transferEventName(h));
        const b = arguments[2], Z = b ? typeof b == "boolean" ? !0 : b.capture : !1, m = arguments[1];
        if (!m)
          return E.apply(this, arguments);
        if (G && !G(E, m, o, arguments))
          return;
        const z = ce[h];
        let M;
        z && (M = z[Z ? _e : ge]);
        const P = M && o[M];
        if (P)
          for (let W = 0; W < P.length; W++) {
            const q = P[W];
            if (ve(q, m)) {
              if (P.splice(W, 1), q.isRemoved = !0, P.length === 0 && (q.allRemoved = !0, o[M] = null, !Z && typeof h == "string")) {
                const ye = Se + "ON_PROPERTY" + h;
                o[ye] = null;
              }
              return q.zone.cancelTask(q), $ ? o : void 0;
            }
          }
        return E.apply(this, arguments);
      }, k[d] = function() {
        const o = this || e;
        let h = arguments[0];
        p && p.transferEventName && (h = p.transferEventName(h));
        const b = [], Z = it(o, B ? B(h) : h);
        for (let m = 0; m < Z.length; m++) {
          const z = Z[m];
          let M = z.originalDelegate ? z.originalDelegate : z.callback;
          b.push(M);
        }
        return b;
      }, k[g] = function() {
        const o = this || e;
        let h = arguments[0];
        if (h) {
          p && p.transferEventName && (h = p.transferEventName(h));
          const b = ce[h];
          if (b) {
            const Z = b[ge], m = b[_e], z = o[Z], M = o[m];
            if (z) {
              const P = z.slice();
              for (let W = 0; W < P.length; W++) {
                const q = P[W];
                let ye = q.originalDelegate ? q.originalDelegate : q.callback;
                this[u].call(this, h, ye, q.options);
              }
            }
            if (M) {
              const P = M.slice();
              for (let W = 0; W < P.length; W++) {
                const q = P[W];
                let ye = q.originalDelegate ? q.originalDelegate : q.callback;
                this[u].call(this, h, ye, q.options);
              }
            }
          }
        } else {
          const b = Object.keys(o);
          for (let Z = 0; Z < b.length; Z++) {
            const m = b[Z], z = ot.exec(m);
            let M = z && z[1];
            M && M !== "removeListener" && this[g].call(this, M);
          }
          this[g].call(this, "removeListener");
        }
        if ($)
          return this;
      }, ke(k[i], D), ke(k[u], E), oe && ke(k[g], oe), S && ke(k[d], S), !0;
    }
    let K = [];
    for (let v = 0; v < c.length; v++)
      K[v] = re(c[v], t);
    return K;
  }
  function it(e, n) {
    if (!n) {
      const u = [];
      for (let d in e) {
        const g = ot.exec(d);
        let y = g && g[1];
        if (y && (!n || y === n)) {
          const w = e[d];
          if (w)
            for (let _ = 0; _ < w.length; _++)
              u.push(w[_]);
        }
      }
      return u;
    }
    let c = ce[n];
    c || (at(n), c = ce[n]);
    const t = e[c[ge]], i = e[c[_e]];
    return t ? i ? t.concat(i) : t.slice() : i ? i.slice() : [];
  }
  function Dt(e, n) {
    const c = e.Event;
    c && c.prototype && n.patchMethod(c.prototype, "stopImmediatePropagation", (t) => function(i, u) {
      i[st] = !0, t && t.apply(i, u);
    });
  }
  function St(e, n) {
    n.patchMethod(e, "queueMicrotask", (c) => function(t, i) {
      Zone.current.scheduleMicroTask("queueMicrotask", i[0]);
    });
  }
  const Le = F("zoneTask");
  function Ee(e, n, c, t) {
    let i = null, u = null;
    n += t, c += t;
    const d = {};
    function g(w) {
      const _ = w.data;
      _.args[0] = function() {
        return w.invoke.apply(this, arguments);
      };
      const R = i.apply(e, _.args);
      return nt(R) ? _.handleId = R : (_.handle = R, _.isRefreshable = tt(R.refresh)), w;
    }
    function y(w) {
      const { handle: _, handleId: R } = w.data;
      return u.call(e, _ ?? R);
    }
    i = de(e, n, (w) => function(_, R) {
      if (tt(R[0])) {
        const j = {
          isRefreshable: !1,
          isPeriodic: t === "Interval",
          delay: t === "Timeout" || t === "Interval" ? R[1] || 0 : void 0,
          args: R
        }, x = R[0];
        R[0] = function() {
          try {
            return x.apply(this, arguments);
          } finally {
            const { handle: p, handleId: A, isPeriodic: G, isRefreshable: J } = j;
            !G && !J && (A ? delete d[A] : p && (p[Le] = null));
          }
        };
        const X = xe(n, R[0], j, g, y);
        if (!X)
          return X;
        const { handleId: ne, handle: re, isRefreshable: K, isPeriodic: v } = X.data;
        if (ne)
          d[ne] = X;
        else if (re && (re[Le] = X, K && !v)) {
          const p = re.refresh;
          re.refresh = function() {
            const { zone: A, state: G } = X;
            return G === "notScheduled" ? (X._state = "scheduled", A._updateTaskCount(X, 1)) : G === "running" && (X._state = "scheduling"), p.call(this);
          };
        }
        return re ?? ne ?? X;
      } else
        return w.apply(e, R);
    }), u = de(e, c, (w) => function(_, R) {
      const j = R[0];
      let x;
      nt(j) ? (x = d[j], delete d[j]) : (x = j?.[Le], x ? j[Le] = null : x = j), x?.type ? x.cancelFn && x.zone.cancelTask(x) : w.apply(e, R);
    });
  }
  function Ct(e, n) {
    const { isBrowser: c, isMix: t } = n.getGlobalObjects();
    if (!c && !t || !e.customElements || !("customElements" in e))
      return;
    const i = [
      "connectedCallback",
      "disconnectedCallback",
      "adoptedCallback",
      "attributeChangedCallback",
      "formAssociatedCallback",
      "formDisabledCallback",
      "formResetCallback",
      "formStateRestoreCallback"
    ];
    n.patchCallbacks(n, e.customElements, "customElements", "define", i);
  }
  function Ot(e, n) {
    if (Zone[n.symbol("patchEventTarget")])
      return;
    const { eventNames: c, zoneSymbolEventNames: t, TRUE_STR: i, FALSE_STR: u, ZONE_SYMBOL_PREFIX: d } = n.getGlobalObjects();
    for (let y = 0; y < c.length; y++) {
      const w = c[y], _ = w + u, R = w + i, j = d + _, x = d + R;
      t[w] = {}, t[w][u] = j, t[w][i] = x;
    }
    const g = e.EventTarget;
    if (!(!g || !g.prototype))
      return n.patchEventTarget(e, n, [g && g.prototype]), !0;
  }
  function zt(e, n) {
    n.patchEventPrototype(e, n);
  }
  function ct(e, n, c) {
    if (!c || c.length === 0)
      return n;
    const t = c.filter((u) => u.target === e);
    if (t.length === 0)
      return n;
    const i = t[0].ignoreProperties;
    return n.filter((u) => i.indexOf(u) === -1);
  }
  function lt(e, n, c, t) {
    if (!e)
      return;
    const i = ct(e, n, c);
    Qe(e, i, t);
  }
  function We(e) {
    return Object.getOwnPropertyNames(e).filter((n) => n.startsWith("on") && n.length > 2).map((n) => n.substring(2));
  }
  function Pt(e, n) {
    if (Re && !Ye || Zone[e.symbol("patchEvents")])
      return;
    const c = n.__Zone_ignore_on_properties;
    let t = [];
    if (Ge) {
      const i = window;
      t = t.concat([
        "Document",
        "SVGElement",
        "Element",
        "HTMLElement",
        "HTMLBodyElement",
        "HTMLMediaElement",
        "HTMLFrameSetElement",
        "HTMLFrameElement",
        "HTMLIFrameElement",
        "HTMLMarqueeElement",
        "Worker"
      ]);
      const u = [];
      lt(i, We(i), c && c.concat(u), ae(i));
    }
    t = t.concat([
      "XMLHttpRequest",
      "XMLHttpRequestEventTarget",
      "IDBIndex",
      "IDBRequest",
      "IDBOpenDBRequest",
      "IDBDatabase",
      "IDBTransaction",
      "IDBCursor",
      "WebSocket"
    ]);
    for (let i = 0; i < t.length; i++) {
      const u = n[t[i]];
      u?.prototype && lt(u.prototype, We(u.prototype), c);
    }
  }
  function Rt(e) {
    e.__load_patch("legacy", (n) => {
      const c = n[e.__symbol__("legacyPatch")];
      c && c();
    }), e.__load_patch("timers", (n) => {
      const c = "clear";
      Ee(n, "set", c, "Timeout"), Ee(n, "set", c, "Interval"), Ee(n, "set", c, "Immediate");
    }), e.__load_patch("requestAnimationFrame", (n) => {
      Ee(n, "request", "cancel", "AnimationFrame"), Ee(n, "mozRequest", "mozCancel", "AnimationFrame"), Ee(n, "webkitRequest", "webkitCancel", "AnimationFrame");
    }), e.__load_patch("blocking", (n, c) => {
      const t = ["alert", "prompt", "confirm"];
      for (let i = 0; i < t.length; i++) {
        const u = t[i];
        de(n, u, (d, g, y) => function(w, _) {
          return c.current.run(d, n, _, y);
        });
      }
    }), e.__load_patch("EventTarget", (n, c, t) => {
      zt(n, t), Ot(n, t);
      const i = n.XMLHttpRequestEventTarget;
      i && i.prototype && t.patchEventTarget(n, t, [i.prototype]);
    }), e.__load_patch("MutationObserver", (n, c, t) => {
      Oe("MutationObserver"), Oe("WebKitMutationObserver");
    }), e.__load_patch("IntersectionObserver", (n, c, t) => {
      Oe("IntersectionObserver");
    }), e.__load_patch("FileReader", (n, c, t) => {
      Oe("FileReader");
    }), e.__load_patch("on_property", (n, c, t) => {
      Pt(t, n);
    }), e.__load_patch("customElements", (n, c, t) => {
      Ct(n, t);
    }), e.__load_patch("XHR", (n, c) => {
      w(n);
      const t = F("xhrTask"), i = F("xhrSync"), u = F("xhrListener"), d = F("xhrScheduled"), g = F("xhrURL"), y = F("xhrErrorBeforeScheduled");
      function w(_) {
        const R = _.XMLHttpRequest;
        if (!R)
          return;
        const j = R.prototype;
        function x(D) {
          return D[t];
        }
        let X = j[Ie], ne = j[Fe];
        if (!X) {
          const D = _.XMLHttpRequestEventTarget;
          if (D) {
            const E = D.prototype;
            X = E[Ie], ne = E[Fe];
          }
        }
        const re = "readystatechange", K = "scheduled";
        function v(D) {
          const E = D.data, S = E.target;
          S[d] = !1, S[y] = !1;
          const oe = S[u];
          X || (X = S[Ie], ne = S[Fe]), oe && ne.call(S, re, oe);
          const Y = S[u] = () => {
            if (S.readyState === S.DONE)
              if (!E.aborted && S[d] && D.state === K) {
                const L = S[c.__symbol__("loadfalse")];
                if (S.status !== 0 && L && L.length > 0) {
                  const a = D.invoke;
                  D.invoke = function() {
                    const s = S[c.__symbol__("loadfalse")];
                    for (let r = 0; r < s.length; r++)
                      s[r] === D && s.splice(r, 1);
                    !E.aborted && D.state === K && a.call(D);
                  }, L.push(D);
                } else
                  D.invoke();
              } else !E.aborted && S[d] === !1 && (S[y] = !0);
          };
          return X.call(S, re, Y), S[t] || (S[t] = D), B.apply(S, E.args), S[d] = !0, D;
        }
        function p() {
        }
        function A(D) {
          const E = D.data;
          return E.aborted = !0, O.apply(E.target, E.args);
        }
        const G = de(j, "open", () => function(D, E) {
          return D[i] = E[2] == !1, D[g] = E[1], G.apply(D, E);
        }), J = "XMLHttpRequest.send", $ = F("fetchTaskAborting"), k = F("fetchTaskScheduling"), B = de(j, "send", () => function(D, E) {
          if (c.current[k] === !0 || D[i])
            return B.apply(D, E);
          {
            const S = {
              target: D,
              url: D[g],
              isPeriodic: !1,
              args: E,
              aborted: !1
            }, oe = xe(J, p, S, v, A);
            D && D[y] === !0 && !S.aborted && oe.state === K && oe.invoke();
          }
        }), O = de(j, "abort", () => function(D, E) {
          const S = x(D);
          if (S && typeof S.type == "string") {
            if (S.cancelFn == null || S.data && S.data.aborted)
              return;
            S.zone.cancelTask(S);
          } else if (c.current[$] === !0)
            return O.apply(D, E);
        });
      }
    }), e.__load_patch("geolocation", (n) => {
      n.navigator && n.navigator.geolocation && vt(n.navigator.geolocation, ["getCurrentPosition", "watchPosition"]);
    }), e.__load_patch("PromiseRejectionEvent", (n, c) => {
      function t(i) {
        return function(u) {
          it(n, i).forEach((d) => {
            const g = n.PromiseRejectionEvent;
            if (g) {
              const y = new g(i, {
                promise: u.promise,
                reason: u.rejection
              });
              d.invoke(y);
            }
          });
        };
      }
      n.PromiseRejectionEvent && (c[F("unhandledPromiseRejectionHandler")] = t("unhandledrejection"), c[F("rejectionHandledHandler")] = t("rejectionhandled"));
    }), e.__load_patch("queueMicrotask", (n, c, t) => {
      St(n, t);
    });
  }
  function jt(e) {
    e.__load_patch("ZoneAwarePromise", (n, c, t) => {
      const i = Object.getOwnPropertyDescriptor, u = Object.defineProperty;
      function d(f) {
        return f && f.toString === Object.prototype.toString ? (f.constructor && f.constructor.name || "") + ": " + JSON.stringify(f) : f ? f.toString() : Object.prototype.toString.call(f);
      }
      const g = t.symbol, y = [], w = n[g("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")] !== !1, _ = g("Promise"), R = g("then"), j = "__creationTrace__";
      t.onUnhandledError = (f) => {
        if (t.showUncaughtError()) {
          const l = f && f.rejection;
          l ? console.error("Unhandled Promise rejection:", l instanceof Error ? l.message : l, "; Zone:", f.zone.name, "; Task:", f.task && f.task.source, "; Value:", l, l instanceof Error ? l.stack : void 0) : console.error(f);
        }
      }, t.microtaskDrainDone = () => {
        for (; y.length; ) {
          const f = y.shift();
          try {
            f.zone.runGuarded(() => {
              throw f.throwOriginal ? f.rejection : f;
            });
          } catch (l) {
            X(l);
          }
        }
      };
      const x = g("unhandledPromiseRejectionHandler");
      function X(f) {
        t.onUnhandledError(f);
        try {
          const l = c[x];
          typeof l == "function" && l.call(this, f);
        } catch {
        }
      }
      function ne(f) {
        return f && typeof f.then == "function";
      }
      function re(f) {
        return f;
      }
      function K(f) {
        return N.reject(f);
      }
      const v = g("state"), p = g("value"), A = g("finally"), G = g("parentPromiseValue"), J = g("parentPromiseState"), $ = "Promise.then", k = null, B = !0, O = !1, D = 0;
      function E(f, l) {
        return (o) => {
          try {
            L(f, l, o);
          } catch (h) {
            L(f, !1, h);
          }
        };
      }
      const S = function() {
        let f = !1;
        return function(l) {
          return function() {
            f || (f = !0, l.apply(null, arguments));
          };
        };
      }, oe = "Promise resolved with itself", Y = g("currentTaskTrace");
      function L(f, l, o) {
        const h = S();
        if (f === o)
          throw new TypeError(oe);
        if (f[v] === k) {
          let b = null;
          try {
            (typeof o == "object" || typeof o == "function") && (b = o && o.then);
          } catch (Z) {
            return h(() => {
              L(f, !1, Z);
            })(), f;
          }
          if (l !== O && o instanceof N && o.hasOwnProperty(v) && o.hasOwnProperty(p) && o[v] !== k)
            s(o), L(f, o[v], o[p]);
          else if (l !== O && typeof b == "function")
            try {
              b.call(o, h(E(f, l)), h(E(f, !1)));
            } catch (Z) {
              h(() => {
                L(f, !1, Z);
              })();
            }
          else {
            f[v] = l;
            const Z = f[p];
            if (f[p] = o, f[A] === A && l === B && (f[v] = f[J], f[p] = f[G]), l === O && o instanceof Error) {
              const m = c.currentTask && c.currentTask.data && c.currentTask.data[j];
              m && u(o, Y, {
                configurable: !0,
                enumerable: !1,
                writable: !0,
                value: m
              });
            }
            for (let m = 0; m < Z.length; )
              r(f, Z[m++], Z[m++], Z[m++], Z[m++]);
            if (Z.length == 0 && l == O) {
              f[v] = D;
              let m = o;
              try {
                throw new Error("Uncaught (in promise): " + d(o) + (o && o.stack ? `
` + o.stack : ""));
              } catch (z) {
                m = z;
              }
              w && (m.throwOriginal = !0), m.rejection = o, m.promise = f, m.zone = c.current, m.task = c.currentTask, y.push(m), t.scheduleMicroTask();
            }
          }
        }
        return f;
      }
      const a = g("rejectionHandledHandler");
      function s(f) {
        if (f[v] === D) {
          try {
            const l = c[a];
            l && typeof l == "function" && l.call(this, { rejection: f[p], promise: f });
          } catch {
          }
          f[v] = O;
          for (let l = 0; l < y.length; l++)
            f === y[l].promise && y.splice(l, 1);
        }
      }
      function r(f, l, o, h, b) {
        s(f);
        const Z = f[v], m = Z ? typeof h == "function" ? h : re : typeof b == "function" ? b : K;
        l.scheduleMicroTask($, () => {
          try {
            const z = f[p], M = !!o && A === o[A];
            M && (o[G] = z, o[J] = Z);
            const P = l.run(m, void 0, M && m !== K && m !== re ? [] : [z]);
            L(o, !0, P);
          } catch (z) {
            L(o, !1, z);
          }
        }, o);
      }
      const T = "function ZoneAwarePromise() { [native code] }", U = function() {
      }, ie = n.AggregateError;
      class N {
        static toString() {
          return T;
        }
        static resolve(l) {
          return l instanceof N ? l : L(new this(null), B, l);
        }
        static reject(l) {
          return L(new this(null), O, l);
        }
        static withResolvers() {
          const l = {};
          return l.promise = new N((o, h) => {
            l.resolve = o, l.reject = h;
          }), l;
        }
        static any(l) {
          if (!l || typeof l[Symbol.iterator] != "function")
            return Promise.reject(new ie([], "All promises were rejected"));
          const o = [];
          let h = 0;
          try {
            for (let m of l)
              h++, o.push(N.resolve(m));
          } catch {
            return Promise.reject(new ie([], "All promises were rejected"));
          }
          if (h === 0)
            return Promise.reject(new ie([], "All promises were rejected"));
          let b = !1;
          const Z = [];
          return new N((m, z) => {
            for (let M = 0; M < o.length; M++)
              o[M].then((P) => {
                b || (b = !0, m(P));
              }, (P) => {
                Z.push(P), h--, h === 0 && (b = !0, z(new ie(Z, "All promises were rejected")));
              });
          });
        }
        static race(l) {
          let o, h, b = new this((z, M) => {
            o = z, h = M;
          });
          function Z(z) {
            o(z);
          }
          function m(z) {
            h(z);
          }
          for (let z of l)
            ne(z) || (z = this.resolve(z)), z.then(Z, m);
          return b;
        }
        static all(l) {
          return N.allWithCallback(l);
        }
        static allSettled(l) {
          return (this && this.prototype instanceof N ? this : N).allWithCallback(l, {
            thenCallback: (o) => ({ status: "fulfilled", value: o }),
            errorCallback: (o) => ({ status: "rejected", reason: o })
          });
        }
        static allWithCallback(l, o) {
          let h, b, Z = new this((P, W) => {
            h = P, b = W;
          }), m = 2, z = 0;
          const M = [];
          for (let P of l) {
            ne(P) || (P = this.resolve(P));
            const W = z;
            try {
              P.then((q) => {
                M[W] = o ? o.thenCallback(q) : q, m--, m === 0 && h(M);
              }, (q) => {
                o ? (M[W] = o.errorCallback(q), m--, m === 0 && h(M)) : b(q);
              });
            } catch (q) {
              b(q);
            }
            m++, z++;
          }
          return m -= 2, m === 0 && h(M), Z;
        }
        constructor(l) {
          const o = this;
          if (!(o instanceof N))
            throw new Error("Must be an instanceof Promise.");
          o[v] = k, o[p] = [];
          try {
            const h = S();
            l && l(h(E(o, B)), h(E(o, O)));
          } catch (h) {
            L(o, !1, h);
          }
        }
        get [Symbol.toStringTag]() {
          return "Promise";
        }
        get [Symbol.species]() {
          return N;
        }
        then(l, o) {
          let h = this.constructor?.[Symbol.species];
          (!h || typeof h != "function") && (h = this.constructor || N);
          const b = new h(U), Z = c.current;
          return this[v] == k ? this[p].push(Z, b, l, o) : r(this, Z, b, l, o), b;
        }
        catch(l) {
          return this.then(null, l);
        }
        finally(l) {
          let o = this.constructor?.[Symbol.species];
          (!o || typeof o != "function") && (o = N);
          const h = new o(U);
          h[A] = A;
          const b = c.current;
          return this[v] == k ? this[p].push(b, h, l, l) : r(this, b, h, l, l), h;
        }
      }
      N.resolve = N.resolve, N.reject = N.reject, N.race = N.race, N.all = N.all;
      const me = n[_] = n.Promise;
      n.Promise = N;
      const ve = g("thenPatched");
      function se(f) {
        const l = f.prototype, o = i(l, "then");
        if (o && (o.writable === !1 || !o.configurable))
          return;
        const h = l.then;
        l[R] = h, f.prototype.then = function(b, Z) {
          return new N((m, z) => {
            h.call(this, m, z);
          }).then(b, Z);
        }, f[ve] = !0;
      }
      t.patchThen = se;
      function we(f) {
        return function(l, o) {
          let h = f.apply(l, o);
          if (h instanceof N)
            return h;
          let b = h.constructor;
          return b[ve] || se(b), h;
        };
      }
      return me && (se(me), de(n, "fetch", (f) => we(f))), Promise[c.__symbol__("uncaughtPromiseErrors")] = y, N;
    });
  }
  function Lt(e) {
    e.__load_patch("toString", (n) => {
      const c = Function.prototype.toString, t = F("OriginalDelegate"), i = F("Promise"), u = F("Error"), d = function() {
        if (typeof this == "function") {
          const w = this[t];
          if (w)
            return typeof w == "function" ? c.call(w) : Object.prototype.toString.call(w);
          if (this === Promise) {
            const _ = n[i];
            if (_)
              return c.call(_);
          }
          if (this === Error) {
            const _ = n[u];
            if (_)
              return c.call(_);
          }
        }
        return c.call(this);
      };
      d[t] = c, Function.prototype.toString = d;
      const g = Object.prototype.toString, y = "[object Promise]";
      Object.prototype.toString = function() {
        return typeof Promise == "function" && this instanceof Promise ? y : g.call(this);
      };
    });
  }
  function Mt(e, n, c, t, i) {
    const u = Zone.__symbol__(t);
    if (n[u])
      return;
    const d = n[u] = n[t];
    n[t] = function(g, y, w) {
      return y && y.prototype && i.forEach(function(_) {
        const R = `${c}.${t}::` + _, j = y.prototype;
        try {
          if (j.hasOwnProperty(_)) {
            const x = e.ObjectGetOwnPropertyDescriptor(j, _);
            x && x.value ? (x.value = e.wrapWithCurrentZone(x.value, R), e._redefineProperty(y.prototype, _, x)) : j[_] && (j[_] = e.wrapWithCurrentZone(j[_], R));
          } else j[_] && (j[_] = e.wrapWithCurrentZone(j[_], R));
        } catch {
        }
      }), d.call(n, g, y, w);
    }, e.attachOriginToPatched(n[t], d);
  }
  function Nt(e) {
    e.__load_patch("util", (n, c, t) => {
      const i = We(n);
      t.patchOnProperties = Qe, t.patchMethod = de, t.bindArguments = He, t.patchMacroTask = bt;
      const u = c.__symbol__("BLACK_LISTED_EVENTS"), d = c.__symbol__("UNPATCHED_EVENTS");
      n[d] && (n[u] = n[d]), n[u] && (c[u] = c[d] = n[u]), t.patchEventPrototype = Dt, t.patchEventTarget = Zt, t.isIEOrEdge = Et, t.ObjectDefineProperty = te, t.ObjectGetOwnPropertyDescriptor = ee, t.ObjectCreate = he, t.ArraySlice = Te, t.patchClass = Oe, t.wrapWithCurrentZone = Ae, t.filterProperties = ct, t.attachOriginToPatched = ke, t._redefineProperty = Object.defineProperty, t.patchCallbacks = Mt, t.getGlobalObjects = () => ({
        globalSources: rt,
        zoneSymbolEventNames: ce,
        eventNames: i,
        isBrowser: Ge,
        isMix: Ye,
        isNode: Re,
        TRUE_STR: _e,
        FALSE_STR: ge,
        ZONE_SYMBOL_PREFIX: Se,
        ADD_EVENT_LISTENER_STR: be,
        REMOVE_EVENT_LISTENER_STR: Ne
      });
    });
  }
  function It(e) {
    jt(e), Lt(e), Nt(e);
  }
  const ut = H();
  return It(ut), Rt(ut), kt;
}
xt();
export {
  Gt as ZoneContextManager
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtMXNHZUYtUzgtIX57MDBkfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFEgYXMgUWkgfSBmcm9tICcuL2luZGV4LSF+ezAwN31+LmpzJztcblxuZnVuY3Rpb24geHQoaikge1xuICByZXR1cm4gaiA9PT0gdm9pZCAwICYmIChqID0ge30pLCB0eXBlb2Ygai5hZGRFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygai5yZW1vdmVFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIjtcbn1cbnZhciBFdCA9IFwiT1RfWk9ORV9DT05URVhUXCIsIHp0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBqKCkge1xuICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlLCB0aGlzLl96b25lQ291bnRlciA9IDA7XG4gICAgfVxuICAgIHJldHVybiBqLnByb3RvdHlwZS5fYWN0aXZlQ29udGV4dEZyb21ab25lID0gZnVuY3Rpb24oUykge1xuICAgICAgcmV0dXJuIFMgJiYgUy5nZXQoRXQpIHx8IFFpO1xuICAgIH0sIGoucHJvdG90eXBlLl9iaW5kRnVuY3Rpb24gPSBmdW5jdGlvbihTLCBCKSB7XG4gICAgICB2YXIgeiA9IHRoaXMsIGVlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAodmFyIHRlID0gdGhpcywgaWUgPSBbXSwgZmUgPSAwOyBmZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGZlKyspXG4gICAgICAgICAgaWVbZmVdID0gYXJndW1lbnRzW2ZlXTtcbiAgICAgICAgcmV0dXJuIHoud2l0aChTLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gQi5hcHBseSh0ZSwgaWUpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLCBcImxlbmd0aFwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IEIubGVuZ3RoXG4gICAgICB9KSwgZWU7XG4gICAgfSwgai5wcm90b3R5cGUuX2JpbmRMaXN0ZW5lciA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHZhciB6ID0gQjtcbiAgICAgIHJldHVybiB6Ll9fb3RfbGlzdGVuZXJzICE9PSB2b2lkIDAgfHwgKHouX19vdF9saXN0ZW5lcnMgPSB7fSwgdHlwZW9mIHouYWRkRXZlbnRMaXN0ZW5lciA9PSBcImZ1bmN0aW9uXCIgJiYgKHouYWRkRXZlbnRMaXN0ZW5lciA9IHRoaXMuX3BhdGNoQWRkRXZlbnRMaXN0ZW5lcih6LCB6LmFkZEV2ZW50TGlzdGVuZXIsIFMpKSwgdHlwZW9mIHoucmVtb3ZlRXZlbnRMaXN0ZW5lciA9PSBcImZ1bmN0aW9uXCIgJiYgKHoucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IHRoaXMuX3BhdGNoUmVtb3ZlRXZlbnRMaXN0ZW5lcih6LCB6LnJlbW92ZUV2ZW50TGlzdGVuZXIpKSksIEI7XG4gICAgfSwgai5wcm90b3R5cGUuX2NyZWF0ZVpvbmVOYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl96b25lQ291bnRlcisrO1xuICAgICAgdmFyIFMgPSBNYXRoLnJhbmRvbSgpO1xuICAgICAgcmV0dXJuIHRoaXMuX3pvbmVDb3VudGVyICsgXCItXCIgKyBTO1xuICAgIH0sIGoucHJvdG90eXBlLl9jcmVhdGVab25lID0gZnVuY3Rpb24oUywgQikge1xuICAgICAgdmFyIHo7XG4gICAgICByZXR1cm4gWm9uZS5jdXJyZW50LmZvcmsoe1xuICAgICAgICBuYW1lOiBTLFxuICAgICAgICBwcm9wZXJ0aWVzOiAoeiA9IHt9LCB6W0V0XSA9IEIsIHopXG4gICAgICB9KTtcbiAgICB9LCBqLnByb3RvdHlwZS5fZ2V0QWN0aXZlWm9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFpvbmUuY3VycmVudDtcbiAgICB9LCBqLnByb3RvdHlwZS5fcGF0Y2hBZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oUywgQiwgeikge1xuICAgICAgdmFyIGVlID0gdGhpcztcbiAgICAgIHJldHVybiBmdW5jdGlvbih0ZSwgaWUsIGZlKSB7XG4gICAgICAgIFMuX19vdF9saXN0ZW5lcnMgPT09IHZvaWQgMCAmJiAoUy5fX290X2xpc3RlbmVycyA9IHt9KTtcbiAgICAgICAgdmFyIGtlID0gUy5fX290X2xpc3RlbmVyc1t0ZV07XG4gICAgICAgIGtlID09PSB2b2lkIDAgJiYgKGtlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIFMuX19vdF9saXN0ZW5lcnNbdGVdID0ga2UpO1xuICAgICAgICB2YXIgdmUgPSBlZS5iaW5kKHosIGllKTtcbiAgICAgICAgcmV0dXJuIGtlLnNldChpZSwgdmUpLCBCLmNhbGwodGhpcywgdGUsIHZlLCBmZSk7XG4gICAgICB9O1xuICAgIH0sIGoucHJvdG90eXBlLl9wYXRjaFJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihTLCBCKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oeiwgZWUpIHtcbiAgICAgICAgaWYgKFMuX19vdF9saXN0ZW5lcnMgPT09IHZvaWQgMCB8fCBTLl9fb3RfbGlzdGVuZXJzW3pdID09PSB2b2lkIDApXG4gICAgICAgICAgcmV0dXJuIEIuY2FsbCh0aGlzLCB6LCBlZSk7XG4gICAgICAgIHZhciB0ZSA9IFMuX19vdF9saXN0ZW5lcnNbel0sIGllID0gdGUuZ2V0KGVlKTtcbiAgICAgICAgcmV0dXJuIHRlLmRlbGV0ZShlZSksIEIuY2FsbCh0aGlzLCB6LCBpZSB8fCBlZSk7XG4gICAgICB9O1xuICAgIH0sIGoucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCF0aGlzLl9lbmFibGVkKVxuICAgICAgICByZXR1cm4gUWk7XG4gICAgICB2YXIgUyA9IHRoaXMuX2dldEFjdGl2ZVpvbmUoKSwgQiA9IHRoaXMuX2FjdGl2ZUNvbnRleHRGcm9tWm9uZShTKTtcbiAgICAgIHJldHVybiBCIHx8IFFpO1xuICAgIH0sIGoucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihTLCBCKSB7XG4gICAgICByZXR1cm4gUyA9PT0gdm9pZCAwICYmIChTID0gdGhpcy5hY3RpdmUoKSksIHR5cGVvZiBCID09IFwiZnVuY3Rpb25cIiA/IHRoaXMuX2JpbmRGdW5jdGlvbihTLCBCKSA6ICh4dChCKSAmJiB0aGlzLl9iaW5kTGlzdGVuZXIoUywgQiksIEIpO1xuICAgIH0sIGoucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkID0gZmFsc2UsIHRoaXM7XG4gICAgfSwgai5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZCA9IHRydWUsIHRoaXM7XG4gICAgfSwgai5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKFMsIEIsIHopIHtcbiAgICAgIGZvciAodmFyIGVlID0gW10sIHRlID0gMzsgdGUgPCBhcmd1bWVudHMubGVuZ3RoOyB0ZSsrKVxuICAgICAgICBlZVt0ZSAtIDNdID0gYXJndW1lbnRzW3RlXTtcbiAgICAgIHZhciBpZSA9IHRoaXMuX2NyZWF0ZVpvbmVOYW1lKCksIGZlID0gdGhpcy5fY3JlYXRlWm9uZShpZSwgUyk7XG4gICAgICByZXR1cm4gZmUucnVuKEIsIHosIGVlKTtcbiAgICB9LCBqO1xuICB9KSgpXG4pLCBwdCA9IHt9LCBndDtcbmZ1bmN0aW9uIEZ0KCkge1xuICBpZiAoZ3QpIHJldHVybiBwdDtcbiAgZ3QgPSAxO1xuICAvKipcbiAgICogQGxpY2Vuc2UgQW5ndWxhciB2PHVua25vd24+XG4gICAqIChjKSAyMDEwLTIwMjUgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvL1xuICAgKiBMaWNlbnNlOiBNSVRcbiAgICovXG4gIGNvbnN0IGogPSBnbG9iYWxUaGlzO1xuICBmdW5jdGlvbiBTKHQpIHtcbiAgICByZXR1cm4gKGouX19ab25lX3N5bWJvbF9wcmVmaXggfHwgXCJfX3pvbmVfc3ltYm9sX19cIikgKyB0O1xuICB9XG4gIGZ1bmN0aW9uIEIoKSB7XG4gICAgY29uc3QgdCA9IGoucGVyZm9ybWFuY2U7XG4gICAgZnVuY3Rpb24gbihJKSB7XG4gICAgICB0ICYmIHQubWFyayAmJiB0Lm1hcmsoSSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGEoSSwgcykge1xuICAgICAgdCAmJiB0Lm1lYXN1cmUgJiYgdC5tZWFzdXJlKEksIHMpO1xuICAgIH1cbiAgICBuKFwiWm9uZVwiKTtcbiAgICBjbGFzcyBlIHtcbiAgICAgIHN0YXRpYyBfX3N5bWJvbF9fID0gUztcbiAgICAgIHN0YXRpYyBhc3NlcnRab25lUGF0Y2hlZCgpIHtcbiAgICAgICAgaWYgKGouUHJvbWlzZSAhPT0gTy5ab25lQXdhcmVQcm9taXNlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxcbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLilcIik7XG4gICAgICB9XG4gICAgICBzdGF0aWMgZ2V0IHJvb3QoKSB7XG4gICAgICAgIGxldCBzID0gZS5jdXJyZW50O1xuICAgICAgICBmb3IgKDsgcy5wYXJlbnQ7IClcbiAgICAgICAgICBzID0gcy5wYXJlbnQ7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuICAgICAgc3RhdGljIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gYi56b25lO1xuICAgICAgfVxuICAgICAgc3RhdGljIGdldCBjdXJyZW50VGFzaygpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgICB9XG4gICAgICBzdGF0aWMgX19sb2FkX3BhdGNoKHMsIGksIHIgPSBmYWxzZSkge1xuICAgICAgICBpZiAoTy5oYXNPd25Qcm9wZXJ0eShzKSkge1xuICAgICAgICAgIGNvbnN0IEUgPSBqW1MoXCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVja1wiKV0gPT09IHRydWU7XG4gICAgICAgICAgaWYgKCFyICYmIEUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkFscmVhZHkgbG9hZGVkIHBhdGNoOiBcIiArIHMpO1xuICAgICAgICB9IGVsc2UgaWYgKCFqW1wiX19ab25lX2Rpc2FibGVfXCIgKyBzXSkge1xuICAgICAgICAgIGNvbnN0IEUgPSBcIlpvbmU6XCIgKyBzO1xuICAgICAgICAgIG4oRSksIE9bc10gPSBpKGosIGUsIFApLCBhKEUsIEUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXQgcGFyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICAgICAgfVxuICAgICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgICAgfVxuICAgICAgX3BhcmVudDtcbiAgICAgIF9uYW1lO1xuICAgICAgX3Byb3BlcnRpZXM7XG4gICAgICBfem9uZURlbGVnYXRlO1xuICAgICAgY29uc3RydWN0b3IocywgaSkge1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBzLCB0aGlzLl9uYW1lID0gaSA/IGkubmFtZSB8fCBcInVubmFtZWRcIiA6IFwiPHJvb3Q+XCIsIHRoaXMuX3Byb3BlcnRpZXMgPSBpICYmIGkucHJvcGVydGllcyB8fCB7fSwgdGhpcy5fem9uZURlbGVnYXRlID0gbmV3IGYodGhpcywgdGhpcy5fcGFyZW50ICYmIHRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLCBpKTtcbiAgICAgIH1cbiAgICAgIGdldChzKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmdldFpvbmVXaXRoKHMpO1xuICAgICAgICBpZiAoaSlcbiAgICAgICAgICByZXR1cm4gaS5fcHJvcGVydGllc1tzXTtcbiAgICAgIH1cbiAgICAgIGdldFpvbmVXaXRoKHMpIHtcbiAgICAgICAgbGV0IGkgPSB0aGlzO1xuICAgICAgICBmb3IgKDsgaTsgKSB7XG4gICAgICAgICAgaWYgKGkuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocykpXG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICBpID0gaS5fcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZm9yayhzKSB7XG4gICAgICAgIGlmICghcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lU3BlYyByZXF1aXJlZCFcIik7XG4gICAgICAgIHJldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLCBzKTtcbiAgICAgIH1cbiAgICAgIHdyYXAocywgaSkge1xuICAgICAgICBpZiAodHlwZW9mIHMgIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6IFwiICsgcyk7XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLl96b25lRGVsZWdhdGUuaW50ZXJjZXB0KHRoaXMsIHMsIGkpLCBFID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBFLnJ1bkd1YXJkZWQociwgdGhpcywgYXJndW1lbnRzLCBpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJ1bihzLCBpLCByLCBFKSB7XG4gICAgICAgIGIgPSB7IHBhcmVudDogYiwgem9uZTogdGhpcyB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsIHMsIGksIHIsIEUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGIgPSBiLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcnVuR3VhcmRlZChzLCBpID0gbnVsbCwgciwgRSkge1xuICAgICAgICBiID0geyBwYXJlbnQ6IGIsIHpvbmU6IHRoaXMgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcywgcywgaSwgciwgRSk7XG4gICAgICAgICAgfSBjYXRjaCAoRykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLCBHKSlcbiAgICAgICAgICAgICAgdGhyb3cgRztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYiA9IGIucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBydW5UYXNrKHMsIGksIHIpIHtcbiAgICAgICAgaWYgKHMuem9uZSAhPSB0aGlzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogXCIgKyAocy56b25lIHx8IHJlKS5uYW1lICsgXCI7IEV4ZWN1dGlvbjogXCIgKyB0aGlzLm5hbWUgKyBcIilcIik7XG4gICAgICAgIGNvbnN0IEUgPSBzLCB7IHR5cGU6IEcsIGRhdGE6IHsgaXNQZXJpb2RpYzogY2UgPSBmYWxzZSwgaXNSZWZyZXNoYWJsZTogQSA9IGZhbHNlIH0gPSB7fSB9ID0gcztcbiAgICAgICAgaWYgKHMuc3RhdGUgPT09IEogJiYgKEcgPT09IFkgfHwgRyA9PT0gZykpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBnZSA9IHMuc3RhdGUgIT0geDtcbiAgICAgICAgZ2UgJiYgRS5fdHJhbnNpdGlvblRvKHgsIGQpO1xuICAgICAgICBjb25zdCB5ZSA9IEQ7XG4gICAgICAgIEQgPSBFLCBiID0geyBwYXJlbnQ6IGIsIHpvbmU6IHRoaXMgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBHID09IGcgJiYgcy5kYXRhICYmICFjZSAmJiAhQSAmJiAocy5jYW5jZWxGbiA9IHZvaWQgMCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLCBFLCBpLCByKTtcbiAgICAgICAgICB9IGNhdGNoIChzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLCBzZSkpXG4gICAgICAgICAgICAgIHRocm93IHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjb25zdCBzZSA9IHMuc3RhdGU7XG4gICAgICAgICAgaWYgKHNlICE9PSBKICYmIHNlICE9PSBLKVxuICAgICAgICAgICAgaWYgKEcgPT0gWSB8fCBjZSB8fCBBICYmIHNlID09PSBrKVxuICAgICAgICAgICAgICBnZSAmJiBFLl90cmFuc2l0aW9uVG8oZCwgeCwgayk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgQ2UgPSBFLl96b25lRGVsZWdhdGVzO1xuICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUYXNrQ291bnQoRSwgLTEpLCBnZSAmJiBFLl90cmFuc2l0aW9uVG8oSiwgeCwgSiksIEEgJiYgKEUuX3pvbmVEZWxlZ2F0ZXMgPSBDZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgYiA9IGIucGFyZW50LCBEID0geWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlVGFzayhzKSB7XG4gICAgICAgIGlmIChzLnpvbmUgJiYgcy56b25lICE9PSB0aGlzKSB7XG4gICAgICAgICAgbGV0IHIgPSB0aGlzO1xuICAgICAgICAgIGZvciAoOyByOyApIHtcbiAgICAgICAgICAgIGlmIChyID09PSBzLnpvbmUpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKGBjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAke3RoaXMubmFtZX0gd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgJHtzLnpvbmUubmFtZX1gKTtcbiAgICAgICAgICAgIHIgPSByLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcy5fdHJhbnNpdGlvblRvKGssIEopO1xuICAgICAgICBjb25zdCBpID0gW107XG4gICAgICAgIHMuX3pvbmVEZWxlZ2F0ZXMgPSBpLCBzLl96b25lID0gdGhpcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzID0gdGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLCBzKTtcbiAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgIHRocm93IHMuX3RyYW5zaXRpb25UbyhLLCBrLCBKKSwgdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsIHIpLCByO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzLl96b25lRGVsZWdhdGVzID09PSBpICYmIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChzLCAxKSwgcy5zdGF0ZSA9PSBrICYmIHMuX3RyYW5zaXRpb25UbyhkLCBrKSwgcztcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlTWljcm9UYXNrKHMsIGksIHIsIEUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKFUsIHMsIGksIHIsIEUsIHZvaWQgMCkpO1xuICAgICAgfVxuICAgICAgc2NoZWR1bGVNYWNyb1Rhc2socywgaSwgciwgRSwgRykge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoZywgcywgaSwgciwgRSwgRykpO1xuICAgICAgfVxuICAgICAgc2NoZWR1bGVFdmVudFRhc2socywgaSwgciwgRSwgRykge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoWSwgcywgaSwgciwgRSwgRykpO1xuICAgICAgfVxuICAgICAgY2FuY2VsVGFzayhzKSB7XG4gICAgICAgIGlmIChzLnpvbmUgIT0gdGhpcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246IFwiICsgKHMuem9uZSB8fCByZSkubmFtZSArIFwiOyBFeGVjdXRpb246IFwiICsgdGhpcy5uYW1lICsgXCIpXCIpO1xuICAgICAgICBpZiAoIShzLnN0YXRlICE9PSBkICYmIHMuc3RhdGUgIT09IHgpKSB7XG4gICAgICAgICAgcy5fdHJhbnNpdGlvblRvKFYsIGQsIHgpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl96b25lRGVsZWdhdGUuY2FuY2VsVGFzayh0aGlzLCBzKTtcbiAgICAgICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgICAgICB0aHJvdyBzLl90cmFuc2l0aW9uVG8oSywgViksIHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLCBpKSwgaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChzLCAtMSksIHMuX3RyYW5zaXRpb25UbyhKLCBWKSwgcy5ydW5Db3VudCA9IC0xLCBzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdXBkYXRlVGFza0NvdW50KHMsIGkpIHtcbiAgICAgICAgY29uc3QgciA9IHMuX3pvbmVEZWxlZ2F0ZXM7XG4gICAgICAgIGkgPT0gLTEgJiYgKHMuX3pvbmVEZWxlZ2F0ZXMgPSBudWxsKTtcbiAgICAgICAgZm9yIChsZXQgRSA9IDA7IEUgPCByLmxlbmd0aDsgRSsrKVxuICAgICAgICAgIHJbRV0uX3VwZGF0ZVRhc2tDb3VudChzLnR5cGUsIGkpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjID0ge1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIG9uSGFzVGFzazogKEksIHMsIGksIHIpID0+IEkuaGFzVGFzayhpLCByKSxcbiAgICAgIG9uU2NoZWR1bGVUYXNrOiAoSSwgcywgaSwgcikgPT4gSS5zY2hlZHVsZVRhc2soaSwgciksXG4gICAgICBvbkludm9rZVRhc2s6IChJLCBzLCBpLCByLCBFLCBHKSA9PiBJLmludm9rZVRhc2soaSwgciwgRSwgRyksXG4gICAgICBvbkNhbmNlbFRhc2s6IChJLCBzLCBpLCByKSA9PiBJLmNhbmNlbFRhc2soaSwgcilcbiAgICB9O1xuICAgIGNsYXNzIGYge1xuICAgICAgZ2V0IHpvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl96b25lO1xuICAgICAgfVxuICAgICAgX3pvbmU7XG4gICAgICBfdGFza0NvdW50cyA9IHtcbiAgICAgICAgbWljcm9UYXNrOiAwLFxuICAgICAgICBtYWNyb1Rhc2s6IDAsXG4gICAgICAgIGV2ZW50VGFzazogMFxuICAgICAgfTtcbiAgICAgIF9wYXJlbnREZWxlZ2F0ZTtcbiAgICAgIF9mb3JrRGxndDtcbiAgICAgIF9mb3JrWlM7XG4gICAgICBfZm9ya0N1cnJab25lO1xuICAgICAgX2ludGVyY2VwdERsZ3Q7XG4gICAgICBfaW50ZXJjZXB0WlM7XG4gICAgICBfaW50ZXJjZXB0Q3VyclpvbmU7XG4gICAgICBfaW52b2tlRGxndDtcbiAgICAgIF9pbnZva2VaUztcbiAgICAgIF9pbnZva2VDdXJyWm9uZTtcbiAgICAgIF9oYW5kbGVFcnJvckRsZ3Q7XG4gICAgICBfaGFuZGxlRXJyb3JaUztcbiAgICAgIF9oYW5kbGVFcnJvckN1cnJab25lO1xuICAgICAgX3NjaGVkdWxlVGFza0RsZ3Q7XG4gICAgICBfc2NoZWR1bGVUYXNrWlM7XG4gICAgICBfc2NoZWR1bGVUYXNrQ3VyclpvbmU7XG4gICAgICBfaW52b2tlVGFza0RsZ3Q7XG4gICAgICBfaW52b2tlVGFza1pTO1xuICAgICAgX2ludm9rZVRhc2tDdXJyWm9uZTtcbiAgICAgIF9jYW5jZWxUYXNrRGxndDtcbiAgICAgIF9jYW5jZWxUYXNrWlM7XG4gICAgICBfY2FuY2VsVGFza0N1cnJab25lO1xuICAgICAgX2hhc1Rhc2tEbGd0O1xuICAgICAgX2hhc1Rhc2tEbGd0T3duZXI7XG4gICAgICBfaGFzVGFza1pTO1xuICAgICAgX2hhc1Rhc2tDdXJyWm9uZTtcbiAgICAgIGNvbnN0cnVjdG9yKHMsIGksIHIpIHtcbiAgICAgICAgdGhpcy5fem9uZSA9IHMsIHRoaXMuX3BhcmVudERlbGVnYXRlID0gaSwgdGhpcy5fZm9ya1pTID0gciAmJiAociAmJiByLm9uRm9yayA/IHIgOiBpLl9mb3JrWlMpLCB0aGlzLl9mb3JrRGxndCA9IHIgJiYgKHIub25Gb3JrID8gaSA6IGkuX2ZvcmtEbGd0KSwgdGhpcy5fZm9ya0N1cnJab25lID0gciAmJiAoci5vbkZvcmsgPyB0aGlzLl96b25lIDogaS5fZm9ya0N1cnJab25lKSwgdGhpcy5faW50ZXJjZXB0WlMgPSByICYmIChyLm9uSW50ZXJjZXB0ID8gciA6IGkuX2ludGVyY2VwdFpTKSwgdGhpcy5faW50ZXJjZXB0RGxndCA9IHIgJiYgKHIub25JbnRlcmNlcHQgPyBpIDogaS5faW50ZXJjZXB0RGxndCksIHRoaXMuX2ludGVyY2VwdEN1cnJab25lID0gciAmJiAoci5vbkludGVyY2VwdCA/IHRoaXMuX3pvbmUgOiBpLl9pbnRlcmNlcHRDdXJyWm9uZSksIHRoaXMuX2ludm9rZVpTID0gciAmJiAoci5vbkludm9rZSA/IHIgOiBpLl9pbnZva2VaUyksIHRoaXMuX2ludm9rZURsZ3QgPSByICYmIChyLm9uSW52b2tlID8gaSA6IGkuX2ludm9rZURsZ3QpLCB0aGlzLl9pbnZva2VDdXJyWm9uZSA9IHIgJiYgKHIub25JbnZva2UgPyB0aGlzLl96b25lIDogaS5faW52b2tlQ3VyclpvbmUpLCB0aGlzLl9oYW5kbGVFcnJvclpTID0gciAmJiAoci5vbkhhbmRsZUVycm9yID8gciA6IGkuX2hhbmRsZUVycm9yWlMpLCB0aGlzLl9oYW5kbGVFcnJvckRsZ3QgPSByICYmIChyLm9uSGFuZGxlRXJyb3IgPyBpIDogaS5faGFuZGxlRXJyb3JEbGd0KSwgdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSA9IHIgJiYgKHIub25IYW5kbGVFcnJvciA/IHRoaXMuX3pvbmUgOiBpLl9oYW5kbGVFcnJvckN1cnJab25lKSwgdGhpcy5fc2NoZWR1bGVUYXNrWlMgPSByICYmIChyLm9uU2NoZWR1bGVUYXNrID8gciA6IGkuX3NjaGVkdWxlVGFza1pTKSwgdGhpcy5fc2NoZWR1bGVUYXNrRGxndCA9IHIgJiYgKHIub25TY2hlZHVsZVRhc2sgPyBpIDogaS5fc2NoZWR1bGVUYXNrRGxndCksIHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lID0gciAmJiAoci5vblNjaGVkdWxlVGFzayA/IHRoaXMuX3pvbmUgOiBpLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSksIHRoaXMuX2ludm9rZVRhc2taUyA9IHIgJiYgKHIub25JbnZva2VUYXNrID8gciA6IGkuX2ludm9rZVRhc2taUyksIHRoaXMuX2ludm9rZVRhc2tEbGd0ID0gciAmJiAoci5vbkludm9rZVRhc2sgPyBpIDogaS5faW52b2tlVGFza0RsZ3QpLCB0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUgPSByICYmIChyLm9uSW52b2tlVGFzayA/IHRoaXMuX3pvbmUgOiBpLl9pbnZva2VUYXNrQ3VyclpvbmUpLCB0aGlzLl9jYW5jZWxUYXNrWlMgPSByICYmIChyLm9uQ2FuY2VsVGFzayA/IHIgOiBpLl9jYW5jZWxUYXNrWlMpLCB0aGlzLl9jYW5jZWxUYXNrRGxndCA9IHIgJiYgKHIub25DYW5jZWxUYXNrID8gaSA6IGkuX2NhbmNlbFRhc2tEbGd0KSwgdGhpcy5fY2FuY2VsVGFza0N1cnJab25lID0gciAmJiAoci5vbkNhbmNlbFRhc2sgPyB0aGlzLl96b25lIDogaS5fY2FuY2VsVGFza0N1cnJab25lKSwgdGhpcy5faGFzVGFza1pTID0gbnVsbCwgdGhpcy5faGFzVGFza0RsZ3QgPSBudWxsLCB0aGlzLl9oYXNUYXNrRGxndE93bmVyID0gbnVsbCwgdGhpcy5faGFzVGFza0N1cnJab25lID0gbnVsbDtcbiAgICAgICAgY29uc3QgRSA9IHIgJiYgci5vbkhhc1Rhc2ssIEcgPSBpICYmIGkuX2hhc1Rhc2taUztcbiAgICAgICAgKEUgfHwgRykgJiYgKHRoaXMuX2hhc1Rhc2taUyA9IEUgPyByIDogYywgdGhpcy5faGFzVGFza0RsZ3QgPSBpLCB0aGlzLl9oYXNUYXNrRGxndE93bmVyID0gdGhpcywgdGhpcy5faGFzVGFza0N1cnJab25lID0gdGhpcy5fem9uZSwgci5vblNjaGVkdWxlVGFzayB8fCAodGhpcy5fc2NoZWR1bGVUYXNrWlMgPSBjLCB0aGlzLl9zY2hlZHVsZVRhc2tEbGd0ID0gaSwgdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUgPSB0aGlzLl96b25lKSwgci5vbkludm9rZVRhc2sgfHwgKHRoaXMuX2ludm9rZVRhc2taUyA9IGMsIHRoaXMuX2ludm9rZVRhc2tEbGd0ID0gaSwgdGhpcy5faW52b2tlVGFza0N1cnJab25lID0gdGhpcy5fem9uZSksIHIub25DYW5jZWxUYXNrIHx8ICh0aGlzLl9jYW5jZWxUYXNrWlMgPSBjLCB0aGlzLl9jYW5jZWxUYXNrRGxndCA9IGksIHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSA9IHRoaXMuX3pvbmUpKTtcbiAgICAgIH1cbiAgICAgIGZvcmsocywgaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ya1pTID8gdGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCwgdGhpcy56b25lLCBzLCBpKSA6IG5ldyBlKHMsIGkpO1xuICAgICAgfVxuICAgICAgaW50ZXJjZXB0KHMsIGksIHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTID8gdGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCwgdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsIHMsIGksIHIpIDogaTtcbiAgICAgIH1cbiAgICAgIGludm9rZShzLCBpLCByLCBFLCBHKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2VaUyA/IHRoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsIHRoaXMuX2ludm9rZUN1cnJab25lLCBzLCBpLCByLCBFLCBHKSA6IGkuYXBwbHkociwgRSk7XG4gICAgICB9XG4gICAgICBoYW5kbGVFcnJvcihzLCBpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVFcnJvclpTID8gdGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCwgdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSwgcywgaSkgOiB0cnVlO1xuICAgICAgfVxuICAgICAgc2NoZWR1bGVUYXNrKHMsIGkpIHtcbiAgICAgICAgbGV0IHIgPSBpO1xuICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVUYXNrWlMpXG4gICAgICAgICAgdGhpcy5faGFzVGFza1pTICYmIHIuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwgciA9IHRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsIHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLCBzLCBpKSwgciB8fCAociA9IGkpO1xuICAgICAgICBlbHNlIGlmIChpLnNjaGVkdWxlRm4pXG4gICAgICAgICAgaS5zY2hlZHVsZUZuKGkpO1xuICAgICAgICBlbHNlIGlmIChpLnR5cGUgPT0gVSlcbiAgICAgICAgICBYKGkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uXCIpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICAgIGludm9rZVRhc2socywgaSwgciwgRSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlVGFza1pTID8gdGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCwgdGhpcy5faW52b2tlVGFza0N1cnJab25lLCBzLCBpLCByLCBFKSA6IGkuY2FsbGJhY2suYXBwbHkociwgRSk7XG4gICAgICB9XG4gICAgICBjYW5jZWxUYXNrKHMsIGkpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGlmICh0aGlzLl9jYW5jZWxUYXNrWlMpXG4gICAgICAgICAgciA9IHRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsIHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSwgcywgaSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICghaS5jYW5jZWxGbilcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGFzayBpcyBub3QgY2FuY2VsYWJsZVwiKTtcbiAgICAgICAgICByID0gaS5jYW5jZWxGbihpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICAgIGhhc1Rhc2socywgaSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX2hhc1Rhc2taUyAmJiB0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LCB0aGlzLl9oYXNUYXNrQ3VyclpvbmUsIHMsIGkpO1xuICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihzLCByKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3VwZGF0ZVRhc2tDb3VudChzLCBpKSB7XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLl90YXNrQ291bnRzLCBFID0gcltzXSwgRyA9IHJbc10gPSBFICsgaTtcbiAgICAgICAgaWYgKEcgPCAwKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC5cIik7XG4gICAgICAgIGlmIChFID09IDAgfHwgRyA9PSAwKSB7XG4gICAgICAgICAgY29uc3QgY2UgPSB7XG4gICAgICAgICAgICBtaWNyb1Rhc2s6IHIubWljcm9UYXNrID4gMCxcbiAgICAgICAgICAgIG1hY3JvVGFzazogci5tYWNyb1Rhc2sgPiAwLFxuICAgICAgICAgICAgZXZlbnRUYXNrOiByLmV2ZW50VGFzayA+IDAsXG4gICAgICAgICAgICBjaGFuZ2U6IHNcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuaGFzVGFzayh0aGlzLl96b25lLCBjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgcCB7XG4gICAgICB0eXBlO1xuICAgICAgc291cmNlO1xuICAgICAgaW52b2tlO1xuICAgICAgY2FsbGJhY2s7XG4gICAgICBkYXRhO1xuICAgICAgc2NoZWR1bGVGbjtcbiAgICAgIGNhbmNlbEZuO1xuICAgICAgX3pvbmUgPSBudWxsO1xuICAgICAgcnVuQ291bnQgPSAwO1xuICAgICAgX3pvbmVEZWxlZ2F0ZXMgPSBudWxsO1xuICAgICAgX3N0YXRlID0gXCJub3RTY2hlZHVsZWRcIjtcbiAgICAgIGNvbnN0cnVjdG9yKHMsIGksIHIsIEUsIEcsIGNlKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPSBzLCB0aGlzLnNvdXJjZSA9IGksIHRoaXMuZGF0YSA9IEUsIHRoaXMuc2NoZWR1bGVGbiA9IEcsIHRoaXMuY2FuY2VsRm4gPSBjZSwgIXIpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGRlZmluZWRcIik7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSByO1xuICAgICAgICBjb25zdCBBID0gdGhpcztcbiAgICAgICAgcyA9PT0gWSAmJiBFICYmIEUudXNlRyA/IHRoaXMuaW52b2tlID0gcC5pbnZva2VUYXNrIDogdGhpcy5pbnZva2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gcC5pbnZva2VUYXNrLmNhbGwoaiwgQSwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBpbnZva2VUYXNrKHMsIGksIHIpIHtcbiAgICAgICAgcyB8fCAocyA9IHRoaXMpLCBvZSsrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBzLnJ1bkNvdW50KyssIHMuem9uZS5ydW5UYXNrKHMsIGksIHIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIG9lID09IDEgJiYgbmUoKSwgb2UtLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0IHpvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl96b25lO1xuICAgICAgfVxuICAgICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgICB9XG4gICAgICBjYW5jZWxTY2hlZHVsZVJlcXVlc3QoKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UbyhKLCBrKTtcbiAgICAgIH1cbiAgICAgIF90cmFuc2l0aW9uVG8ocywgaSwgcikge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IGkgfHwgdGhpcy5fc3RhdGUgPT09IHIpXG4gICAgICAgICAgdGhpcy5fc3RhdGUgPSBzLCBzID09IEogJiYgKHRoaXMuX3pvbmVEZWxlZ2F0ZXMgPSBudWxsKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnR5cGV9ICcke3RoaXMuc291cmNlfSc6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnJHtzfScsIGV4cGVjdGluZyBzdGF0ZSAnJHtpfScke3IgPyBcIiBvciAnXCIgKyByICsgXCInXCIgOiBcIlwifSwgd2FzICcke3RoaXMuX3N0YXRlfScuYCk7XG4gICAgICB9XG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSAmJiB0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkIDwgXCJ1XCIgPyB0aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKSA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCB0b0pTT04gbWV0aG9kIHRvIHByZXZlbnQgY3ljbGljIGVycm9yIHdoZW5cbiAgICAgIC8vIGNhbGwgSlNPTi5zdHJpbmdpZnkoem9uZVRhc2spXG4gICAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgem9uZTogdGhpcy56b25lLm5hbWUsXG4gICAgICAgICAgcnVuQ291bnQ6IHRoaXMucnVuQ291bnRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgVCA9IFMoXCJzZXRUaW1lb3V0XCIpLCB5ID0gUyhcIlByb21pc2VcIiksIHcgPSBTKFwidGhlblwiKTtcbiAgICBsZXQgXyA9IFtdLCBDID0gZmFsc2UsIE07XG4gICAgZnVuY3Rpb24gRihJKSB7XG4gICAgICBpZiAoTSB8fCBqW3ldICYmIChNID0galt5XS5yZXNvbHZlKDApKSwgTSkge1xuICAgICAgICBsZXQgcyA9IE1bd107XG4gICAgICAgIHMgfHwgKHMgPSBNLnRoZW4pLCBzLmNhbGwoTSwgSSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgaltUXShJLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gWChJKSB7XG4gICAgICBvZSA9PT0gMCAmJiBfLmxlbmd0aCA9PT0gMCAmJiBGKG5lKSwgSSAmJiBfLnB1c2goSSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5lKCkge1xuICAgICAgaWYgKCFDKSB7XG4gICAgICAgIGZvciAoQyA9IHRydWU7IF8ubGVuZ3RoOyApIHtcbiAgICAgICAgICBjb25zdCBJID0gXztcbiAgICAgICAgICBfID0gW107XG4gICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBJLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gSVtzXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGkuem9uZS5ydW5UYXNrKGksIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgICAgICBQLm9uVW5oYW5kbGVkRXJyb3Iocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFAubWljcm90YXNrRHJhaW5Eb25lKCksIEMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmUgPSB7IG5hbWU6IFwiTk8gWk9ORVwiIH0sIEogPSBcIm5vdFNjaGVkdWxlZFwiLCBrID0gXCJzY2hlZHVsaW5nXCIsIGQgPSBcInNjaGVkdWxlZFwiLCB4ID0gXCJydW5uaW5nXCIsIFYgPSBcImNhbmNlbGluZ1wiLCBLID0gXCJ1bmtub3duXCIsIFUgPSBcIm1pY3JvVGFza1wiLCBnID0gXCJtYWNyb1Rhc2tcIiwgWSA9IFwiZXZlbnRUYXNrXCIsIE8gPSB7fSwgUCA9IHtcbiAgICAgIHN5bWJvbDogUyxcbiAgICAgIGN1cnJlbnRab25lRnJhbWU6ICgpID0+IGIsXG4gICAgICBvblVuaGFuZGxlZEVycm9yOiAkLFxuICAgICAgbWljcm90YXNrRHJhaW5Eb25lOiAkLFxuICAgICAgc2NoZWR1bGVNaWNyb1Rhc2s6IFgsXG4gICAgICBzaG93VW5jYXVnaHRFcnJvcjogKCkgPT4gIWVbUyhcImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3JcIildLFxuICAgICAgcGF0Y2hFdmVudFRhcmdldDogKCkgPT4gW10sXG4gICAgICBwYXRjaE9uUHJvcGVydGllczogJCxcbiAgICAgIHBhdGNoTWV0aG9kOiAoKSA9PiAkLFxuICAgICAgYmluZEFyZ3VtZW50czogKCkgPT4gW10sXG4gICAgICBwYXRjaFRoZW46ICgpID0+ICQsXG4gICAgICBwYXRjaE1hY3JvVGFzazogKCkgPT4gJCxcbiAgICAgIHBhdGNoRXZlbnRQcm90b3R5cGU6ICgpID0+ICQsXG4gICAgICBpc0lFT3JFZGdlOiAoKSA9PiBmYWxzZSxcbiAgICAgIGdldEdsb2JhbE9iamVjdHM6ICgpID0+IHtcbiAgICAgIH0sXG4gICAgICBPYmplY3REZWZpbmVQcm9wZXJ0eTogKCkgPT4gJCxcbiAgICAgIE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKCkgPT4ge1xuICAgICAgfSxcbiAgICAgIE9iamVjdENyZWF0ZTogKCkgPT4ge1xuICAgICAgfSxcbiAgICAgIEFycmF5U2xpY2U6ICgpID0+IFtdLFxuICAgICAgcGF0Y2hDbGFzczogKCkgPT4gJCxcbiAgICAgIHdyYXBXaXRoQ3VycmVudFpvbmU6ICgpID0+ICQsXG4gICAgICBmaWx0ZXJQcm9wZXJ0aWVzOiAoKSA9PiBbXSxcbiAgICAgIGF0dGFjaE9yaWdpblRvUGF0Y2hlZDogKCkgPT4gJCxcbiAgICAgIF9yZWRlZmluZVByb3BlcnR5OiAoKSA9PiAkLFxuICAgICAgcGF0Y2hDYWxsYmFja3M6ICgpID0+ICQsXG4gICAgICBuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazogRlxuICAgIH07XG4gICAgbGV0IGIgPSB7IHBhcmVudDogbnVsbCwgem9uZTogbmV3IGUobnVsbCwgbnVsbCkgfSwgRCA9IG51bGwsIG9lID0gMDtcbiAgICBmdW5jdGlvbiAkKCkge1xuICAgIH1cbiAgICByZXR1cm4gYShcIlpvbmVcIiwgXCJab25lXCIpLCBlO1xuICB9XG4gIGZ1bmN0aW9uIHooKSB7XG4gICAgY29uc3QgdCA9IGdsb2JhbFRoaXMsIG4gPSB0W1MoXCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVja1wiKV0gPT09IHRydWU7XG4gICAgaWYgKHQuWm9uZSAmJiAobiB8fCB0eXBlb2YgdC5ab25lLl9fc3ltYm9sX18gIT0gXCJmdW5jdGlvblwiKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlpvbmUgYWxyZWFkeSBsb2FkZWQuXCIpO1xuICAgIHJldHVybiB0LlpvbmUgPz89IEIoKSwgdC5ab25lO1xuICB9XG4gIGNvbnN0IGVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgdGUgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIGllID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBmZSA9IE9iamVjdC5jcmVhdGUsIGtlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLCB2ZSA9IFwiYWRkRXZlbnRMaXN0ZW5lclwiLCBBZSA9IFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiLCBqZSA9IFModmUpLCBIZSA9IFMoQWUpLCBfZSA9IFwidHJ1ZVwiLCBUZSA9IFwiZmFsc2VcIiwgd2UgPSBTKFwiXCIpO1xuICBmdW5jdGlvbiB4ZSh0LCBuKSB7XG4gICAgcmV0dXJuIFpvbmUuY3VycmVudC53cmFwKHQsIG4pO1xuICB9XG4gIGZ1bmN0aW9uIEZlKHQsIG4sIGEsIGUsIGMpIHtcbiAgICByZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKHQsIG4sIGEsIGUsIGMpO1xuICB9XG4gIGNvbnN0IEggPSBTLCBOZSA9IHR5cGVvZiB3aW5kb3cgPCBcInVcIiwgRGUgPSBOZSA/IHdpbmRvdyA6IHZvaWQgMCwgUSA9IE5lICYmIERlIHx8IGdsb2JhbFRoaXMsIG10ID0gXCJyZW1vdmVBdHRyaWJ1dGVcIjtcbiAgZnVuY3Rpb24gVmUodCwgbikge1xuICAgIGZvciAobGV0IGEgPSB0Lmxlbmd0aCAtIDE7IGEgPj0gMDsgYS0tKVxuICAgICAgdHlwZW9mIHRbYV0gPT0gXCJmdW5jdGlvblwiICYmICh0W2FdID0geGUodFthXSwgbiArIFwiX1wiICsgYSkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIGZ1bmN0aW9uIHl0KHQsIG4pIHtcbiAgICBjb25zdCBhID0gdC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGZvciAobGV0IGUgPSAwOyBlIDwgbi5sZW5ndGg7IGUrKykge1xuICAgICAgY29uc3QgYyA9IG5bZV0sIGYgPSB0W2NdO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgY29uc3QgcCA9IGVlKHQsIGMpO1xuICAgICAgICBpZiAoIVhlKHApKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB0W2NdID0gKChUKSA9PiB7XG4gICAgICAgICAgY29uc3QgeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFQuYXBwbHkodGhpcywgVmUoYXJndW1lbnRzLCBhICsgXCIuXCIgKyBjKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gcGUoeSwgVCksIHk7XG4gICAgICAgIH0pKGYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBYZSh0KSB7XG4gICAgcmV0dXJuIHQgPyB0LndyaXRhYmxlID09PSBmYWxzZSA/IGZhbHNlIDogISh0eXBlb2YgdC5nZXQgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiB0LnNldCA+IFwidVwiKSA6IHRydWU7XG4gIH1cbiAgY29uc3QgWWUgPSB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgPCBcInVcIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsIFplID0gIShcIm53XCIgaW4gUSkgJiYgdHlwZW9mIFEucHJvY2VzcyA8IFwidVwiICYmIFEucHJvY2Vzcy50b1N0cmluZygpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIiwgemUgPSAhWmUgJiYgIVllICYmICEhKE5lICYmIERlLkhUTUxFbGVtZW50KSwgJGUgPSB0eXBlb2YgUS5wcm9jZXNzIDwgXCJ1XCIgJiYgUS5wcm9jZXNzLnRvU3RyaW5nKCkgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiICYmICFZZSAmJiAhIShOZSAmJiBEZS5IVE1MRWxlbWVudCksIExlID0ge30sIGt0ID0gSChcImVuYWJsZV9iZWZvcmV1bmxvYWRcIiksIEplID0gZnVuY3Rpb24odCkge1xuICAgIGlmICh0ID0gdCB8fCBRLmV2ZW50LCAhdClcbiAgICAgIHJldHVybjtcbiAgICBsZXQgbiA9IExlW3QudHlwZV07XG4gICAgbiB8fCAobiA9IExlW3QudHlwZV0gPSBIKFwiT05fUFJPUEVSVFlcIiArIHQudHlwZSkpO1xuICAgIGNvbnN0IGEgPSB0aGlzIHx8IHQudGFyZ2V0IHx8IFEsIGUgPSBhW25dO1xuICAgIGxldCBjO1xuICAgIGlmICh6ZSAmJiBhID09PSBEZSAmJiB0LnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgY29uc3QgZiA9IHQ7XG4gICAgICBjID0gZSAmJiBlLmNhbGwodGhpcywgZi5tZXNzYWdlLCBmLmZpbGVuYW1lLCBmLmxpbmVubywgZi5jb2xubywgZi5lcnJvciksIGMgPT09IHRydWUgJiYgdC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZVxuICAgICAgYyA9IGUgJiYgZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy80NzU3OVxuICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtaHRtbDUtMjAxMTA1MjUvaGlzdG9yeS5odG1sI2JlZm9yZXVubG9hZGV2ZW50XG4gICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHNwZWNpZmljIGNhc2Ugd2Ugc2hvdWxkIGNoZWNrIGZvci4gVGhlIHNwZWMgZGVmaW5lcyB0aGF0IHRoZVxuICAgICAgLy8gYHJldHVyblZhbHVlYCBhdHRyaWJ1dGUgcmVwcmVzZW50cyB0aGUgbWVzc2FnZSB0byBzaG93IHRoZSB1c2VyLiBXaGVuIHRoZSBldmVudFxuICAgICAgLy8gaXMgY3JlYXRlZCwgdGhpcyBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHQudHlwZSA9PT0gXCJiZWZvcmV1bmxvYWRcIiAmJiAvLyBUbyBwcmV2ZW50IGFueSBicmVha2luZyBjaGFuZ2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlLCBnaXZlbiB0aGF0XG4gICAgICAvLyBpdCB3YXMgYWxyZWFkeSBjYXVzaW5nIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZhaWx1cmVzIGluIEczLCB3ZSBoYXZlIGhpZGRlblxuICAgICAgLy8gdGhhdCBiZWhhdmlvciBiZWhpbmQgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBmbGFnLiBDb25zdW1lcnMgY2FuIGVuYWJsZSB0aGlzXG4gICAgICAvLyBmbGFnIGV4cGxpY2l0bHkgaWYgdGhleSB3YW50IHRoZSBgYmVmb3JldW5sb2FkYCBldmVudCB0byBiZSBoYW5kbGVkIGFzIGRlZmluZWRcbiAgICAgIC8vIGluIHRoZSBzcGVjaWZpY2F0aW9uLlxuICAgICAgUVtrdF0gJiYgLy8gVGhlIElETCBldmVudCBkZWZpbml0aW9uIGlzIGBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJldHVyblZhbHVlYCwgc28gd2UgY2hlY2sgd2hldGhlclxuICAgICAgLy8gYHR5cGVvZiByZXN1bHRgIGlzIGEgc3RyaW5nLlxuICAgICAgdHlwZW9mIGMgPT0gXCJzdHJpbmdcIiA/IHQucmV0dXJuVmFsdWUgPSBjIDogYyAhPSBudWxsICYmICFjICYmIHQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gYztcbiAgfTtcbiAgZnVuY3Rpb24gS2UodCwgbiwgYSkge1xuICAgIGxldCBlID0gZWUodCwgbik7XG4gICAgaWYgKCFlICYmIGEgJiYgZWUoYSwgbikgJiYgKGUgPSB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KSwgIWUgfHwgIWUuY29uZmlndXJhYmxlKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGMgPSBIKFwib25cIiArIG4gKyBcInBhdGNoZWRcIik7XG4gICAgaWYgKHQuaGFzT3duUHJvcGVydHkoYykgJiYgdFtjXSlcbiAgICAgIHJldHVybjtcbiAgICBkZWxldGUgZS53cml0YWJsZSwgZGVsZXRlIGUudmFsdWU7XG4gICAgY29uc3QgZiA9IGUuZ2V0LCBwID0gZS5zZXQsIFQgPSBuLnNsaWNlKDIpO1xuICAgIGxldCB5ID0gTGVbVF07XG4gICAgeSB8fCAoeSA9IExlW1RdID0gSChcIk9OX1BST1BFUlRZXCIgKyBUKSksIGUuc2V0ID0gZnVuY3Rpb24odykge1xuICAgICAgbGV0IF8gPSB0aGlzO1xuICAgICAgaWYgKCFfICYmIHQgPT09IFEgJiYgKF8gPSBRKSwgIV8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIHR5cGVvZiBfW3ldID09IFwiZnVuY3Rpb25cIiAmJiBfLnJlbW92ZUV2ZW50TGlzdGVuZXIoVCwgSmUpLCBwPy5jYWxsKF8sIG51bGwpLCBfW3ldID0gdywgdHlwZW9mIHcgPT0gXCJmdW5jdGlvblwiICYmIF8uYWRkRXZlbnRMaXN0ZW5lcihULCBKZSwgZmFsc2UpO1xuICAgIH0sIGUuZ2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgdyA9IHRoaXM7XG4gICAgICBpZiAoIXcgJiYgdCA9PT0gUSAmJiAodyA9IFEpLCAhdylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBfID0gd1t5XTtcbiAgICAgIGlmIChfKVxuICAgICAgICByZXR1cm4gXztcbiAgICAgIGlmIChmKSB7XG4gICAgICAgIGxldCBDID0gZi5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoQylcbiAgICAgICAgICByZXR1cm4gZS5zZXQuY2FsbCh0aGlzLCBDKSwgdHlwZW9mIHdbbXRdID09IFwiZnVuY3Rpb25cIiAmJiB3LnJlbW92ZUF0dHJpYnV0ZShuKSwgQztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sIHRlKHQsIG4sIGUpLCB0W2NdID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBRZSh0LCBuLCBhKSB7XG4gICAgaWYgKG4pXG4gICAgICBmb3IgKGxldCBlID0gMDsgZSA8IG4ubGVuZ3RoOyBlKyspXG4gICAgICAgIEtlKHQsIFwib25cIiArIG5bZV0sIGEpO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjIGluIHQpXG4gICAgICAgIGMuc2xpY2UoMCwgMikgPT0gXCJvblwiICYmIGUucHVzaChjKTtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgZS5sZW5ndGg7IGMrKylcbiAgICAgICAgS2UodCwgZVtjXSwgYSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxlID0gSChcIm9yaWdpbmFsSW5zdGFuY2VcIik7XG4gIGZ1bmN0aW9uIFNlKHQpIHtcbiAgICBjb25zdCBuID0gUVt0XTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm47XG4gICAgUVtIKHQpXSA9IG4sIFFbdF0gPSBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGMgPSBWZShhcmd1bWVudHMsIHQpO1xuICAgICAgc3dpdGNoIChjLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgdGhpc1tsZV0gPSBuZXcgbigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdGhpc1tsZV0gPSBuZXcgbihjWzBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oY1swXSwgY1sxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzW2xlXSA9IG5ldyBuKGNbMF0sIGNbMV0sIGNbMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpc1tsZV0gPSBuZXcgbihjWzBdLCBjWzFdLCBjWzJdLCBjWzNdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcmcgbGlzdCB0b28gbG9uZy5cIik7XG4gICAgICB9XG4gICAgfSwgcGUoUVt0XSwgbik7XG4gICAgY29uc3QgYSA9IG5ldyBuKGZ1bmN0aW9uKCkge1xuICAgIH0pO1xuICAgIGxldCBlO1xuICAgIGZvciAoZSBpbiBhKVxuICAgICAgdCA9PT0gXCJYTUxIdHRwUmVxdWVzdFwiICYmIGUgPT09IFwicmVzcG9uc2VCbG9iXCIgfHwgKGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdHlwZW9mIGFbY10gPT0gXCJmdW5jdGlvblwiID8gUVt0XS5wcm90b3R5cGVbY10gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpc1tsZV1bY10uYXBwbHkodGhpc1tsZV0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gOiB0ZShRW3RdLnByb3RvdHlwZSwgYywge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24oZikge1xuICAgICAgICAgICAgdHlwZW9mIGYgPT0gXCJmdW5jdGlvblwiID8gKHRoaXNbbGVdW2NdID0geGUoZiwgdCArIFwiLlwiICsgYyksIHBlKHRoaXNbbGVdW2NdLCBmKSkgOiB0aGlzW2xlXVtjXSA9IGY7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbbGVdW2NdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KShlKTtcbiAgICBmb3IgKGUgaW4gbilcbiAgICAgIGUgIT09IFwicHJvdG90eXBlXCIgJiYgbi5oYXNPd25Qcm9wZXJ0eShlKSAmJiAoUVt0XVtlXSA9IG5bZV0pO1xuICB9XG4gIGZ1bmN0aW9uIEVlKHQsIG4sIGEpIHtcbiAgICBsZXQgZSA9IHQ7XG4gICAgZm9yICg7IGUgJiYgIWUuaGFzT3duUHJvcGVydHkobik7IClcbiAgICAgIGUgPSBpZShlKTtcbiAgICAhZSAmJiB0W25dICYmIChlID0gdCk7XG4gICAgY29uc3QgYyA9IEgobik7XG4gICAgbGV0IGYgPSBudWxsO1xuICAgIGlmIChlICYmICghKGYgPSBlW2NdKSB8fCAhZS5oYXNPd25Qcm9wZXJ0eShjKSkpIHtcbiAgICAgIGYgPSBlW2NdID0gZVtuXTtcbiAgICAgIGNvbnN0IHAgPSBlICYmIGVlKGUsIG4pO1xuICAgICAgaWYgKFhlKHApKSB7XG4gICAgICAgIGNvbnN0IFQgPSBhKGYsIGMsIG4pO1xuICAgICAgICBlW25dID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIFQodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgcGUoZVtuXSwgZik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmO1xuICB9XG4gIGZ1bmN0aW9uIHZ0KHQsIG4sIGEpIHtcbiAgICBsZXQgZSA9IG51bGw7XG4gICAgZnVuY3Rpb24gYyhmKSB7XG4gICAgICBjb25zdCBwID0gZi5kYXRhO1xuICAgICAgcmV0dXJuIHAuYXJnc1twLmNiSWR4XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmLmludm9rZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSwgZS5hcHBseShwLnRhcmdldCwgcC5hcmdzKSwgZjtcbiAgICB9XG4gICAgZSA9IEVlKHQsIG4sIChmKSA9PiBmdW5jdGlvbihwLCBUKSB7XG4gICAgICBjb25zdCB5ID0gYShwLCBUKTtcbiAgICAgIHJldHVybiB5LmNiSWR4ID49IDAgJiYgdHlwZW9mIFRbeS5jYklkeF0gPT0gXCJmdW5jdGlvblwiID8gRmUoeS5uYW1lLCBUW3kuY2JJZHhdLCB5LCBjKSA6IGYuYXBwbHkocCwgVCk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gcGUodCwgbikge1xuICAgIHRbSChcIk9yaWdpbmFsRGVsZWdhdGVcIildID0gbjtcbiAgfVxuICBsZXQgZXQgPSBmYWxzZSwgR2UgPSBmYWxzZTtcbiAgZnVuY3Rpb24gYnQoKSB7XG4gICAgaWYgKGV0KVxuICAgICAgcmV0dXJuIEdlO1xuICAgIGV0ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdCA9IERlLm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgICAodC5pbmRleE9mKFwiTVNJRSBcIikgIT09IC0xIHx8IHQuaW5kZXhPZihcIlRyaWRlbnQvXCIpICE9PSAtMSB8fCB0LmluZGV4T2YoXCJFZGdlL1wiKSAhPT0gLTEpICYmIChHZSA9ICEwKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gICAgcmV0dXJuIEdlO1xuICB9XG4gIGZ1bmN0aW9uIHR0KHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xuICB9XG4gIGZ1bmN0aW9uIG50KHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHQgPT0gXCJudW1iZXJcIjtcbiAgfVxuICBjb25zdCBDdCA9IHtcbiAgICB1c2VHOiB0cnVlXG4gIH0sIGFlID0ge30sIHJ0ID0ge30sIG90ID0gbmV3IFJlZ0V4cChcIl5cIiArIHdlICsgXCIoXFxcXHcrKSh0cnVlfGZhbHNlKSRcIiksIHN0ID0gSChcInByb3BhZ2F0aW9uU3RvcHBlZFwiKTtcbiAgZnVuY3Rpb24gaXQodCwgbikge1xuICAgIGNvbnN0IGEgPSAobiA/IG4odCkgOiB0KSArIFRlLCBlID0gKG4gPyBuKHQpIDogdCkgKyBfZSwgYyA9IHdlICsgYSwgZiA9IHdlICsgZTtcbiAgICBhZVt0XSA9IHt9LCBhZVt0XVtUZV0gPSBjLCBhZVt0XVtfZV0gPSBmO1xuICB9XG4gIGZ1bmN0aW9uIFB0KHQsIG4sIGEsIGUpIHtcbiAgICBjb25zdCBjID0gZSAmJiBlLmFkZCB8fCB2ZSwgZiA9IGUgJiYgZS5ybSB8fCBBZSwgcCA9IGUgJiYgZS5saXN0ZW5lcnMgfHwgXCJldmVudExpc3RlbmVyc1wiLCBUID0gZSAmJiBlLnJtQWxsIHx8IFwicmVtb3ZlQWxsTGlzdGVuZXJzXCIsIHkgPSBIKGMpLCB3ID0gXCIuXCIgKyBjICsgXCI6XCIsIF8gPSBcInByZXBlbmRMaXN0ZW5lclwiLCBDID0gXCIuXCIgKyBfICsgXCI6XCIsIE0gPSBmdW5jdGlvbihrLCBkLCB4KSB7XG4gICAgICBpZiAoay5pc1JlbW92ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IFYgPSBrLmNhbGxiYWNrO1xuICAgICAgdHlwZW9mIFYgPT0gXCJvYmplY3RcIiAmJiBWLmhhbmRsZUV2ZW50ICYmIChrLmNhbGxiYWNrID0gKGcpID0+IFYuaGFuZGxlRXZlbnQoZyksIGsub3JpZ2luYWxEZWxlZ2F0ZSA9IFYpO1xuICAgICAgbGV0IEs7XG4gICAgICB0cnkge1xuICAgICAgICBrLmludm9rZShrLCBkLCBbeF0pO1xuICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICBLID0gZztcbiAgICAgIH1cbiAgICAgIGNvbnN0IFUgPSBrLm9wdGlvbnM7XG4gICAgICBpZiAoVSAmJiB0eXBlb2YgVSA9PSBcIm9iamVjdFwiICYmIFUub25jZSkge1xuICAgICAgICBjb25zdCBnID0gay5vcmlnaW5hbERlbGVnYXRlID8gay5vcmlnaW5hbERlbGVnYXRlIDogay5jYWxsYmFjaztcbiAgICAgICAgZFtmXS5jYWxsKGQsIHgudHlwZSwgZywgVSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gSztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIEYoaywgZCwgeCkge1xuICAgICAgaWYgKGQgPSBkIHx8IHQuZXZlbnQsICFkKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBWID0gayB8fCBkLnRhcmdldCB8fCB0LCBLID0gVlthZVtkLnR5cGVdW3ggPyBfZSA6IFRlXV07XG4gICAgICBpZiAoSykge1xuICAgICAgICBjb25zdCBVID0gW107XG4gICAgICAgIGlmIChLLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGcgPSBNKEtbMF0sIFYsIGQpO1xuICAgICAgICAgIGcgJiYgVS5wdXNoKGcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGcgPSBLLnNsaWNlKCk7XG4gICAgICAgICAgZm9yIChsZXQgWSA9IDA7IFkgPCBnLmxlbmd0aCAmJiAhKGQgJiYgZFtzdF0gPT09IHRydWUpOyBZKyspIHtcbiAgICAgICAgICAgIGNvbnN0IE8gPSBNKGdbWV0sIFYsIGQpO1xuICAgICAgICAgICAgTyAmJiBVLnB1c2goTyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChVLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICB0aHJvdyBVWzBdO1xuICAgICAgICBmb3IgKGxldCBnID0gMDsgZyA8IFUubGVuZ3RoOyBnKyspIHtcbiAgICAgICAgICBjb25zdCBZID0gVVtnXTtcbiAgICAgICAgICBuLm5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrKCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IFk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgWCA9IGZ1bmN0aW9uKGspIHtcbiAgICAgIHJldHVybiBGKHRoaXMsIGssIGZhbHNlKTtcbiAgICB9LCBuZSA9IGZ1bmN0aW9uKGspIHtcbiAgICAgIHJldHVybiBGKHRoaXMsIGssIHRydWUpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcmUoaywgZCkge1xuICAgICAgaWYgKCFrKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBsZXQgeCA9IHRydWU7XG4gICAgICBkICYmIGQudXNlRyAhPT0gdm9pZCAwICYmICh4ID0gZC51c2VHKTtcbiAgICAgIGNvbnN0IFYgPSBkICYmIGQudmg7XG4gICAgICBsZXQgSyA9IHRydWU7XG4gICAgICBkICYmIGQuY2hrRHVwICE9PSB2b2lkIDAgJiYgKEsgPSBkLmNoa0R1cCk7XG4gICAgICBsZXQgVSA9IGZhbHNlO1xuICAgICAgZCAmJiBkLnJ0ICE9PSB2b2lkIDAgJiYgKFUgPSBkLnJ0KTtcbiAgICAgIGxldCBnID0gaztcbiAgICAgIGZvciAoOyBnICYmICFnLmhhc093blByb3BlcnR5KGMpOyApXG4gICAgICAgIGcgPSBpZShnKTtcbiAgICAgIGlmICghZyAmJiBrW2NdICYmIChnID0gayksICFnIHx8IGdbeV0pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IFkgPSBkICYmIGQuZXZlbnROYW1lVG9TdHJpbmcsIE8gPSB7fSwgUCA9IGdbeV0gPSBnW2NdLCBiID0gZ1tIKGYpXSA9IGdbZl0sIEQgPSBnW0gocCldID0gZ1twXSwgb2UgPSBnW0goVCldID0gZ1tUXTtcbiAgICAgIGxldCAkO1xuICAgICAgZCAmJiBkLnByZXBlbmQgJiYgKCQgPSBnW0goZC5wcmVwZW5kKV0gPSBnW2QucHJlcGVuZF0pO1xuICAgICAgZnVuY3Rpb24gSShvLCB1KSB7XG4gICAgICAgIHJldHVybiB1ID8gdHlwZW9mIG8gPT0gXCJib29sZWFuXCIgPyB7IGNhcHR1cmU6IG8sIHBhc3NpdmU6IHRydWUgfSA6IG8gPyB0eXBlb2YgbyA9PSBcIm9iamVjdFwiICYmIG8ucGFzc2l2ZSAhPT0gZmFsc2UgPyB7IC4uLm8sIHBhc3NpdmU6IHRydWUgfSA6IG8gOiB7IHBhc3NpdmU6IHRydWUgfSA6IG87XG4gICAgICB9XG4gICAgICBjb25zdCBzID0gZnVuY3Rpb24obykge1xuICAgICAgICBpZiAoIU8uaXNFeGlzdGluZylcbiAgICAgICAgICByZXR1cm4gUC5jYWxsKE8udGFyZ2V0LCBPLmV2ZW50TmFtZSwgTy5jYXB0dXJlID8gbmUgOiBYLCBPLm9wdGlvbnMpO1xuICAgICAgfSwgaSA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgaWYgKCFvLmlzUmVtb3ZlZCkge1xuICAgICAgICAgIGNvbnN0IHUgPSBhZVtvLmV2ZW50TmFtZV07XG4gICAgICAgICAgbGV0IHY7XG4gICAgICAgICAgdSAmJiAodiA9IHVbby5jYXB0dXJlID8gX2UgOiBUZV0pO1xuICAgICAgICAgIGNvbnN0IFIgPSB2ICYmIG8udGFyZ2V0W3ZdO1xuICAgICAgICAgIGlmIChSKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IFIubGVuZ3RoOyBtKyspXG4gICAgICAgICAgICAgIGlmIChSW21dID09PSBvKSB7XG4gICAgICAgICAgICAgICAgUi5zcGxpY2UobSwgMSksIG8uaXNSZW1vdmVkID0gdHJ1ZSwgby5yZW1vdmVBYm9ydExpc3RlbmVyICYmIChvLnJlbW92ZUFib3J0TGlzdGVuZXIoKSwgby5yZW1vdmVBYm9ydExpc3RlbmVyID0gbnVsbCksIFIubGVuZ3RoID09PSAwICYmIChvLmFsbFJlbW92ZWQgPSB0cnVlLCBvLnRhcmdldFt2XSA9IG51bGwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvLmFsbFJlbW92ZWQpXG4gICAgICAgICAgcmV0dXJuIGIuY2FsbChvLnRhcmdldCwgby5ldmVudE5hbWUsIG8uY2FwdHVyZSA/IG5lIDogWCwgby5vcHRpb25zKTtcbiAgICAgIH0sIHIgPSBmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiBQLmNhbGwoTy50YXJnZXQsIE8uZXZlbnROYW1lLCBvLmludm9rZSwgTy5vcHRpb25zKTtcbiAgICAgIH0sIEUgPSBmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiAkLmNhbGwoTy50YXJnZXQsIE8uZXZlbnROYW1lLCBvLmludm9rZSwgTy5vcHRpb25zKTtcbiAgICAgIH0sIEcgPSBmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiBiLmNhbGwoby50YXJnZXQsIG8uZXZlbnROYW1lLCBvLmludm9rZSwgby5vcHRpb25zKTtcbiAgICAgIH0sIGNlID0geCA/IHMgOiByLCBBID0geCA/IGkgOiBHLCBnZSA9IGZ1bmN0aW9uKG8sIHUpIHtcbiAgICAgICAgY29uc3QgdiA9IHR5cGVvZiB1O1xuICAgICAgICByZXR1cm4gdiA9PT0gXCJmdW5jdGlvblwiICYmIG8uY2FsbGJhY2sgPT09IHUgfHwgdiA9PT0gXCJvYmplY3RcIiAmJiBvLm9yaWdpbmFsRGVsZWdhdGUgPT09IHU7XG4gICAgICB9LCB5ZSA9IGQ/LmRpZmYgfHwgZ2UsIHNlID0gWm9uZVtIKFwiVU5QQVRDSEVEX0VWRU5UU1wiKV0sIENlID0gdFtIKFwiUEFTU0lWRV9FVkVOVFNcIildO1xuICAgICAgZnVuY3Rpb24gaChvKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiICYmIG8gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB1ID0geyAuLi5vIH07XG4gICAgICAgICAgcmV0dXJuIG8uc2lnbmFsICYmICh1LnNpZ25hbCA9IG8uc2lnbmFsKSwgdTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGwgPSBmdW5jdGlvbihvLCB1LCB2LCBSLCBtID0gZmFsc2UsIE4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY29uc3QgWiA9IHRoaXMgfHwgdDtcbiAgICAgICAgICBsZXQgTCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICBkICYmIGQudHJhbnNmZXJFdmVudE5hbWUgJiYgKEwgPSBkLnRyYW5zZmVyRXZlbnROYW1lKEwpKTtcbiAgICAgICAgICBsZXQgVyA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgICBpZiAoIVcpXG4gICAgICAgICAgICByZXR1cm4gby5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIGlmIChaZSAmJiBMID09PSBcInVuY2F1Z2h0RXhjZXB0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gby5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIGxldCBxID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBXICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKCFXLmhhbmRsZUV2ZW50KVxuICAgICAgICAgICAgICByZXR1cm4gby5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgcSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChWICYmICFWKG8sIFcsIFosIGFyZ3VtZW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY29uc3QgbWUgPSAhIUNlICYmIENlLmluZGV4T2YoTCkgIT09IC0xLCBoZSA9IGgoSShhcmd1bWVudHNbMl0sIG1lKSksIFBlID0gaGU/LnNpZ25hbDtcbiAgICAgICAgICBpZiAoUGU/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaWYgKHNlKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkZSA9IDA7IGRlIDwgc2UubGVuZ3RoOyBkZSsrKVxuICAgICAgICAgICAgICBpZiAoTCA9PT0gc2VbZGVdKVxuICAgICAgICAgICAgICAgIHJldHVybiBtZSA/IG8uY2FsbChaLCBMLCBXLCBoZSkgOiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFVlID0gaGUgPyB0eXBlb2YgaGUgPT0gXCJib29sZWFuXCIgPyB0cnVlIDogaGUuY2FwdHVyZSA6IGZhbHNlLCBmdCA9IGhlICYmIHR5cGVvZiBoZSA9PSBcIm9iamVjdFwiID8gaGUub25jZSA6IGZhbHNlLCBIdCA9IFpvbmUuY3VycmVudDtcbiAgICAgICAgICBsZXQgV2UgPSBhZVtMXTtcbiAgICAgICAgICBXZSB8fCAoaXQoTCwgWSksIFdlID0gYWVbTF0pO1xuICAgICAgICAgIGNvbnN0IGh0ID0gV2VbVWUgPyBfZSA6IFRlXTtcbiAgICAgICAgICBsZXQgUmUgPSBaW2h0XSwgZHQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoUmUpIHtcbiAgICAgICAgICAgIGlmIChkdCA9IHRydWUsIEspIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgZGUgPSAwOyBkZSA8IFJlLmxlbmd0aDsgZGUrKylcbiAgICAgICAgICAgICAgICBpZiAoeWUoUmVbZGVdLCBXKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIFJlID0gWltodF0gPSBbXTtcbiAgICAgICAgICBsZXQgSWU7XG4gICAgICAgICAgY29uc3QgX3QgPSBaLmNvbnN0cnVjdG9yLm5hbWUsIFR0ID0gcnRbX3RdO1xuICAgICAgICAgIFR0ICYmIChJZSA9IFR0W0xdKSwgSWUgfHwgKEllID0gX3QgKyB1ICsgKFkgPyBZKEwpIDogTCkpLCBPLm9wdGlvbnMgPSBoZSwgZnQgJiYgKE8ub3B0aW9ucy5vbmNlID0gZmFsc2UpLCBPLnRhcmdldCA9IFosIE8uY2FwdHVyZSA9IFVlLCBPLmV2ZW50TmFtZSA9IEwsIE8uaXNFeGlzdGluZyA9IGR0O1xuICAgICAgICAgIGNvbnN0IE9lID0geCA/IEN0IDogdm9pZCAwO1xuICAgICAgICAgIE9lICYmIChPZS50YXNrRGF0YSA9IE8pLCBQZSAmJiAoTy5vcHRpb25zLnNpZ25hbCA9IHZvaWQgMCk7XG4gICAgICAgICAgY29uc3QgdWUgPSBIdC5zY2hlZHVsZUV2ZW50VGFzayhJZSwgVywgT2UsIHYsIFIpO1xuICAgICAgICAgIGlmIChQZSkge1xuICAgICAgICAgICAgTy5vcHRpb25zLnNpZ25hbCA9IFBlO1xuICAgICAgICAgICAgY29uc3QgZGUgPSAoKSA9PiB1ZS56b25lLmNhbmNlbFRhc2sodWUpO1xuICAgICAgICAgICAgby5jYWxsKFBlLCBcImFib3J0XCIsIGRlLCB7IG9uY2U6IHRydWUgfSksIHVlLnJlbW92ZUFib3J0TGlzdGVuZXIgPSAoKSA9PiBQZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoTy50YXJnZXQgPSBudWxsLCBPZSAmJiAoT2UudGFza0RhdGEgPSBudWxsKSwgZnQgJiYgKE8ub3B0aW9ucy5vbmNlID0gdHJ1ZSksIHR5cGVvZiB1ZS5vcHRpb25zICE9IFwiYm9vbGVhblwiICYmICh1ZS5vcHRpb25zID0gaGUpLCB1ZS50YXJnZXQgPSBaLCB1ZS5jYXB0dXJlID0gVWUsIHVlLmV2ZW50TmFtZSA9IEwsIHEgJiYgKHVlLm9yaWdpbmFsRGVsZWdhdGUgPSBXKSwgTiA/IFJlLnVuc2hpZnQodWUpIDogUmUucHVzaCh1ZSksIG0pXG4gICAgICAgICAgICByZXR1cm4gWjtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZ1tjXSA9IGwoUCwgdywgY2UsIEEsIFUpLCAkICYmIChnW19dID0gbCgkLCBDLCBFLCBBLCBVLCB0cnVlKSksIGdbZl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgbyA9IHRoaXMgfHwgdDtcbiAgICAgICAgbGV0IHUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIGQgJiYgZC50cmFuc2ZlckV2ZW50TmFtZSAmJiAodSA9IGQudHJhbnNmZXJFdmVudE5hbWUodSkpO1xuICAgICAgICBjb25zdCB2ID0gYXJndW1lbnRzWzJdLCBSID0gdiA/IHR5cGVvZiB2ID09IFwiYm9vbGVhblwiID8gdHJ1ZSA6IHYuY2FwdHVyZSA6IGZhbHNlLCBtID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoIW0pXG4gICAgICAgICAgcmV0dXJuIGIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKFYgJiYgIVYoYiwgbSwgbywgYXJndW1lbnRzKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IE4gPSBhZVt1XTtcbiAgICAgICAgbGV0IFo7XG4gICAgICAgIE4gJiYgKFogPSBOW1IgPyBfZSA6IFRlXSk7XG4gICAgICAgIGNvbnN0IEwgPSBaICYmIG9bWl07XG4gICAgICAgIGlmIChMKVxuICAgICAgICAgIGZvciAobGV0IFcgPSAwOyBXIDwgTC5sZW5ndGg7IFcrKykge1xuICAgICAgICAgICAgY29uc3QgcSA9IExbV107XG4gICAgICAgICAgICBpZiAoeWUocSwgbSkpIHtcbiAgICAgICAgICAgICAgaWYgKEwuc3BsaWNlKFcsIDEpLCBxLmlzUmVtb3ZlZCA9IHRydWUsIEwubGVuZ3RoID09PSAwICYmIChxLmFsbFJlbW92ZWQgPSB0cnVlLCBvW1pdID0gbnVsbCwgIVIgJiYgdHlwZW9mIHUgPT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZSA9IHdlICsgXCJPTl9QUk9QRVJUWVwiICsgdTtcbiAgICAgICAgICAgICAgICBvW21lXSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHEuem9uZS5jYW5jZWxUYXNrKHEpLCBVID8gbyA6IHZvaWQgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LCBnW3BdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IG8gPSB0aGlzIHx8IHQ7XG4gICAgICAgIGxldCB1ID0gYXJndW1lbnRzWzBdO1xuICAgICAgICBkICYmIGQudHJhbnNmZXJFdmVudE5hbWUgJiYgKHUgPSBkLnRyYW5zZmVyRXZlbnROYW1lKHUpKTtcbiAgICAgICAgY29uc3QgdiA9IFtdLCBSID0gY3QobywgWSA/IFkodSkgOiB1KTtcbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBSLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgY29uc3QgTiA9IFJbbV07XG4gICAgICAgICAgbGV0IFogPSBOLm9yaWdpbmFsRGVsZWdhdGUgPyBOLm9yaWdpbmFsRGVsZWdhdGUgOiBOLmNhbGxiYWNrO1xuICAgICAgICAgIHYucHVzaChaKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0sIGdbVF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgbyA9IHRoaXMgfHwgdDtcbiAgICAgICAgbGV0IHUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgZCAmJiBkLnRyYW5zZmVyRXZlbnROYW1lICYmICh1ID0gZC50cmFuc2ZlckV2ZW50TmFtZSh1KSk7XG4gICAgICAgICAgY29uc3QgdiA9IGFlW3VdO1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBjb25zdCBSID0gdltUZV0sIG0gPSB2W19lXSwgTiA9IG9bUl0sIFogPSBvW21dO1xuICAgICAgICAgICAgaWYgKE4pIHtcbiAgICAgICAgICAgICAgY29uc3QgTCA9IE4uc2xpY2UoKTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgVyA9IDA7IFcgPCBMLmxlbmd0aDsgVysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcSA9IExbV107XG4gICAgICAgICAgICAgICAgbGV0IG1lID0gcS5vcmlnaW5hbERlbGVnYXRlID8gcS5vcmlnaW5hbERlbGVnYXRlIDogcS5jYWxsYmFjaztcbiAgICAgICAgICAgICAgICB0aGlzW2ZdLmNhbGwodGhpcywgdSwgbWUsIHEub3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChaKSB7XG4gICAgICAgICAgICAgIGNvbnN0IEwgPSBaLnNsaWNlKCk7XG4gICAgICAgICAgICAgIGZvciAobGV0IFcgPSAwOyBXIDwgTC5sZW5ndGg7IFcrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHEgPSBMW1ddO1xuICAgICAgICAgICAgICAgIGxldCBtZSA9IHEub3JpZ2luYWxEZWxlZ2F0ZSA/IHEub3JpZ2luYWxEZWxlZ2F0ZSA6IHEuY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgdGhpc1tmXS5jYWxsKHRoaXMsIHUsIG1lLCBxLm9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHYgPSBPYmplY3Qua2V5cyhvKTtcbiAgICAgICAgICBmb3IgKGxldCBSID0gMDsgUiA8IHYubGVuZ3RoOyBSKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB2W1JdLCBOID0gb3QuZXhlYyhtKTtcbiAgICAgICAgICAgIGxldCBaID0gTiAmJiBOWzFdO1xuICAgICAgICAgICAgWiAmJiBaICE9PSBcInJlbW92ZUxpc3RlbmVyXCIgJiYgdGhpc1tUXS5jYWxsKHRoaXMsIFopO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzW1RdLmNhbGwodGhpcywgXCJyZW1vdmVMaXN0ZW5lclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVSlcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIHBlKGdbY10sIFApLCBwZShnW2ZdLCBiKSwgb2UgJiYgcGUoZ1tUXSwgb2UpLCBEICYmIHBlKGdbcF0sIEQpLCB0cnVlO1xuICAgIH1cbiAgICBsZXQgSiA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYS5sZW5ndGg7IGsrKylcbiAgICAgIEpba10gPSByZShhW2tdLCBlKTtcbiAgICByZXR1cm4gSjtcbiAgfVxuICBmdW5jdGlvbiBjdCh0LCBuKSB7XG4gICAgaWYgKCFuKSB7XG4gICAgICBjb25zdCBmID0gW107XG4gICAgICBmb3IgKGxldCBwIGluIHQpIHtcbiAgICAgICAgY29uc3QgVCA9IG90LmV4ZWMocCk7XG4gICAgICAgIGxldCB5ID0gVCAmJiBUWzFdO1xuICAgICAgICBpZiAoeSAmJiAoIW4gfHwgeSA9PT0gbikpIHtcbiAgICAgICAgICBjb25zdCB3ID0gdFtwXTtcbiAgICAgICAgICBpZiAodylcbiAgICAgICAgICAgIGZvciAobGV0IF8gPSAwOyBfIDwgdy5sZW5ndGg7IF8rKylcbiAgICAgICAgICAgICAgZi5wdXNoKHdbX10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZjtcbiAgICB9XG4gICAgbGV0IGEgPSBhZVtuXTtcbiAgICBhIHx8IChpdChuKSwgYSA9IGFlW25dKTtcbiAgICBjb25zdCBlID0gdFthW1RlXV0sIGMgPSB0W2FbX2VdXTtcbiAgICByZXR1cm4gZSA/IGMgPyBlLmNvbmNhdChjKSA6IGUuc2xpY2UoKSA6IGMgPyBjLnNsaWNlKCkgOiBbXTtcbiAgfVxuICBmdW5jdGlvbiBSdCh0LCBuKSB7XG4gICAgY29uc3QgYSA9IHQuRXZlbnQ7XG4gICAgYSAmJiBhLnByb3RvdHlwZSAmJiBuLnBhdGNoTWV0aG9kKGEucHJvdG90eXBlLCBcInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvblwiLCAoZSkgPT4gZnVuY3Rpb24oYywgZikge1xuICAgICAgY1tzdF0gPSB0cnVlLCBlICYmIGUuYXBwbHkoYywgZik7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gd3QodCwgbikge1xuICAgIG4ucGF0Y2hNZXRob2QodCwgXCJxdWV1ZU1pY3JvdGFza1wiLCAoYSkgPT4gZnVuY3Rpb24oZSwgYykge1xuICAgICAgWm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKFwicXVldWVNaWNyb3Rhc2tcIiwgY1swXSk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgTWUgPSBIKFwiem9uZVRhc2tcIik7XG4gIGZ1bmN0aW9uIGJlKHQsIG4sIGEsIGUpIHtcbiAgICBsZXQgYyA9IG51bGwsIGYgPSBudWxsO1xuICAgIG4gKz0gZSwgYSArPSBlO1xuICAgIGNvbnN0IHAgPSB7fTtcbiAgICBmdW5jdGlvbiBUKHcpIHtcbiAgICAgIGNvbnN0IF8gPSB3LmRhdGE7XG4gICAgICBfLmFyZ3NbMF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHcuaW52b2tlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgQyA9IGMuYXBwbHkodCwgXy5hcmdzKTtcbiAgICAgIHJldHVybiBudChDKSA/IF8uaGFuZGxlSWQgPSBDIDogKF8uaGFuZGxlID0gQywgXy5pc1JlZnJlc2hhYmxlID0gdHQoQy5yZWZyZXNoKSksIHc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHkodykge1xuICAgICAgY29uc3QgeyBoYW5kbGU6IF8sIGhhbmRsZUlkOiBDIH0gPSB3LmRhdGE7XG4gICAgICByZXR1cm4gZi5jYWxsKHQsIF8gPz8gQyk7XG4gICAgfVxuICAgIGMgPSBFZSh0LCBuLCAodykgPT4gZnVuY3Rpb24oXywgQykge1xuICAgICAgaWYgKHR0KENbMF0pKSB7XG4gICAgICAgIGNvbnN0IE0gPSB7XG4gICAgICAgICAgaXNSZWZyZXNoYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNQZXJpb2RpYzogZSA9PT0gXCJJbnRlcnZhbFwiLFxuICAgICAgICAgIGRlbGF5OiBlID09PSBcIlRpbWVvdXRcIiB8fCBlID09PSBcIkludGVydmFsXCIgPyBDWzFdIHx8IDAgOiB2b2lkIDAsXG4gICAgICAgICAgYXJnczogQ1xuICAgICAgICB9LCBGID0gQ1swXTtcbiAgICAgICAgQ1swXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gRi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjb25zdCB7IGhhbmRsZTogeCwgaGFuZGxlSWQ6IFYsIGlzUGVyaW9kaWM6IEssIGlzUmVmcmVzaGFibGU6IFUgfSA9IE07XG4gICAgICAgICAgICAhSyAmJiAhVSAmJiAoViA/IGRlbGV0ZSBwW1ZdIDogeCAmJiAoeFtNZV0gPSBudWxsKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBYID0gRmUobiwgQ1swXSwgTSwgVCwgeSk7XG4gICAgICAgIGlmICghWClcbiAgICAgICAgICByZXR1cm4gWDtcbiAgICAgICAgY29uc3QgeyBoYW5kbGVJZDogbmUsIGhhbmRsZTogcmUsIGlzUmVmcmVzaGFibGU6IEosIGlzUGVyaW9kaWM6IGsgfSA9IFguZGF0YTtcbiAgICAgICAgaWYgKG5lKVxuICAgICAgICAgIHBbbmVdID0gWDtcbiAgICAgICAgZWxzZSBpZiAocmUgJiYgKHJlW01lXSA9IFgsIEogJiYgIWspKSB7XG4gICAgICAgICAgY29uc3QgZCA9IHJlLnJlZnJlc2g7XG4gICAgICAgICAgcmUucmVmcmVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3QgeyB6b25lOiB4LCBzdGF0ZTogViB9ID0gWDtcbiAgICAgICAgICAgIHJldHVybiBWID09PSBcIm5vdFNjaGVkdWxlZFwiID8gKFguX3N0YXRlID0gXCJzY2hlZHVsZWRcIiwgeC5fdXBkYXRlVGFza0NvdW50KFgsIDEpKSA6IFYgPT09IFwicnVubmluZ1wiICYmIChYLl9zdGF0ZSA9IFwic2NoZWR1bGluZ1wiKSwgZC5jYWxsKHRoaXMpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlID8/IG5lID8/IFg7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIHcuYXBwbHkodCwgQyk7XG4gICAgfSksIGYgPSBFZSh0LCBhLCAodykgPT4gZnVuY3Rpb24oXywgQykge1xuICAgICAgY29uc3QgTSA9IENbMF07XG4gICAgICBsZXQgRjtcbiAgICAgIG50KE0pID8gKEYgPSBwW01dLCBkZWxldGUgcFtNXSkgOiAoRiA9IE0/LltNZV0sIEYgPyBNW01lXSA9IG51bGwgOiBGID0gTSksIEY/LnR5cGUgPyBGLmNhbmNlbEZuICYmIEYuem9uZS5jYW5jZWxUYXNrKEYpIDogdy5hcHBseSh0LCBDKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBEdCh0LCBuKSB7XG4gICAgY29uc3QgeyBpc0Jyb3dzZXI6IGEsIGlzTWl4OiBlIH0gPSBuLmdldEdsb2JhbE9iamVjdHMoKTtcbiAgICBpZiAoIWEgJiYgIWUgfHwgIXQuY3VzdG9tRWxlbWVudHMgfHwgIShcImN1c3RvbUVsZW1lbnRzXCIgaW4gdCkpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgYyA9IFtcbiAgICAgIFwiY29ubmVjdGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiZGlzY29ubmVjdGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiYWRvcHRlZENhbGxiYWNrXCIsXG4gICAgICBcImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja1wiLFxuICAgICAgXCJmb3JtQXNzb2NpYXRlZENhbGxiYWNrXCIsXG4gICAgICBcImZvcm1EaXNhYmxlZENhbGxiYWNrXCIsXG4gICAgICBcImZvcm1SZXNldENhbGxiYWNrXCIsXG4gICAgICBcImZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFja1wiXG4gICAgXTtcbiAgICBuLnBhdGNoQ2FsbGJhY2tzKG4sIHQuY3VzdG9tRWxlbWVudHMsIFwiY3VzdG9tRWxlbWVudHNcIiwgXCJkZWZpbmVcIiwgYyk7XG4gIH1cbiAgZnVuY3Rpb24gU3QodCwgbikge1xuICAgIGlmIChab25lW24uc3ltYm9sKFwicGF0Y2hFdmVudFRhcmdldFwiKV0pXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgeyBldmVudE5hbWVzOiBhLCB6b25lU3ltYm9sRXZlbnROYW1lczogZSwgVFJVRV9TVFI6IGMsIEZBTFNFX1NUUjogZiwgWk9ORV9TWU1CT0xfUFJFRklYOiBwIH0gPSBuLmdldEdsb2JhbE9iamVjdHMoKTtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGEubGVuZ3RoOyB5KyspIHtcbiAgICAgIGNvbnN0IHcgPSBhW3ldLCBfID0gdyArIGYsIEMgPSB3ICsgYywgTSA9IHAgKyBfLCBGID0gcCArIEM7XG4gICAgICBlW3ddID0ge30sIGVbd11bZl0gPSBNLCBlW3ddW2NdID0gRjtcbiAgICB9XG4gICAgY29uc3QgVCA9IHQuRXZlbnRUYXJnZXQ7XG4gICAgaWYgKCEoIVQgfHwgIVQucHJvdG90eXBlKSlcbiAgICAgIHJldHVybiBuLnBhdGNoRXZlbnRUYXJnZXQodCwgbiwgW1QgJiYgVC5wcm90b3R5cGVdKSwgdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBPdCh0LCBuKSB7XG4gICAgbi5wYXRjaEV2ZW50UHJvdG90eXBlKHQsIG4pO1xuICB9XG4gIGZ1bmN0aW9uIGF0KHQsIG4sIGEpIHtcbiAgICBpZiAoIWEgfHwgYS5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gbjtcbiAgICBjb25zdCBlID0gYS5maWx0ZXIoKGYpID0+IGYudGFyZ2V0ID09PSB0KTtcbiAgICBpZiAoZS5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gbjtcbiAgICBjb25zdCBjID0gZVswXS5pZ25vcmVQcm9wZXJ0aWVzO1xuICAgIHJldHVybiBuLmZpbHRlcigoZikgPT4gYy5pbmRleE9mKGYpID09PSAtMSk7XG4gIH1cbiAgZnVuY3Rpb24gbHQodCwgbiwgYSwgZSkge1xuICAgIGlmICghdClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjID0gYXQodCwgbiwgYSk7XG4gICAgUWUodCwgYywgZSk7XG4gIH1cbiAgZnVuY3Rpb24gQmUodCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5maWx0ZXIoKG4pID0+IG4uc3RhcnRzV2l0aChcIm9uXCIpICYmIG4ubGVuZ3RoID4gMikubWFwKChuKSA9PiBuLnN1YnN0cmluZygyKSk7XG4gIH1cbiAgZnVuY3Rpb24gTnQodCwgbikge1xuICAgIGlmIChaZSAmJiAhJGUgfHwgWm9uZVt0LnN5bWJvbChcInBhdGNoRXZlbnRzXCIpXSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBhID0gbi5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXM7XG4gICAgbGV0IGUgPSBbXTtcbiAgICBpZiAoemUpIHtcbiAgICAgIGNvbnN0IGMgPSB3aW5kb3c7XG4gICAgICBlID0gZS5jb25jYXQoW1xuICAgICAgICBcIkRvY3VtZW50XCIsXG4gICAgICAgIFwiU1ZHRWxlbWVudFwiLFxuICAgICAgICBcIkVsZW1lbnRcIixcbiAgICAgICAgXCJIVE1MRWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxCb2R5RWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxNZWRpYUVsZW1lbnRcIixcbiAgICAgICAgXCJIVE1MRnJhbWVTZXRFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTEZyYW1lRWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxJRnJhbWVFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTE1hcnF1ZWVFbGVtZW50XCIsXG4gICAgICAgIFwiV29ya2VyXCJcbiAgICAgIF0pO1xuICAgICAgY29uc3QgZiA9IFtdO1xuICAgICAgbHQoYywgQmUoYyksIGEgJiYgYS5jb25jYXQoZiksIGllKGMpKTtcbiAgICB9XG4gICAgZSA9IGUuY29uY2F0KFtcbiAgICAgIFwiWE1MSHR0cFJlcXVlc3RcIixcbiAgICAgIFwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldFwiLFxuICAgICAgXCJJREJJbmRleFwiLFxuICAgICAgXCJJREJSZXF1ZXN0XCIsXG4gICAgICBcIklEQk9wZW5EQlJlcXVlc3RcIixcbiAgICAgIFwiSURCRGF0YWJhc2VcIixcbiAgICAgIFwiSURCVHJhbnNhY3Rpb25cIixcbiAgICAgIFwiSURCQ3Vyc29yXCIsXG4gICAgICBcIldlYlNvY2tldFwiXG4gICAgXSk7XG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBlLmxlbmd0aDsgYysrKSB7XG4gICAgICBjb25zdCBmID0gbltlW2NdXTtcbiAgICAgIGY/LnByb3RvdHlwZSAmJiBsdChmLnByb3RvdHlwZSwgQmUoZi5wcm90b3R5cGUpLCBhKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gWnQodCkge1xuICAgIHQuX19sb2FkX3BhdGNoKFwibGVnYWN5XCIsIChuKSA9PiB7XG4gICAgICBjb25zdCBhID0gblt0Ll9fc3ltYm9sX18oXCJsZWdhY3lQYXRjaFwiKV07XG4gICAgICBhICYmIGEoKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJ0aW1lcnNcIiwgKG4pID0+IHtcbiAgICAgIGNvbnN0IGUgPSBcImNsZWFyXCI7XG4gICAgICBiZShuLCBcInNldFwiLCBlLCBcIlRpbWVvdXRcIiksIGJlKG4sIFwic2V0XCIsIGUsIFwiSW50ZXJ2YWxcIiksIGJlKG4sIFwic2V0XCIsIGUsIFwiSW1tZWRpYXRlXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiLCAobikgPT4ge1xuICAgICAgYmUobiwgXCJyZXF1ZXN0XCIsIFwiY2FuY2VsXCIsIFwiQW5pbWF0aW9uRnJhbWVcIiksIGJlKG4sIFwibW96UmVxdWVzdFwiLCBcIm1vekNhbmNlbFwiLCBcIkFuaW1hdGlvbkZyYW1lXCIpLCBiZShuLCBcIndlYmtpdFJlcXVlc3RcIiwgXCJ3ZWJraXRDYW5jZWxcIiwgXCJBbmltYXRpb25GcmFtZVwiKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJibG9ja2luZ1wiLCAobiwgYSkgPT4ge1xuICAgICAgY29uc3QgZSA9IFtcImFsZXJ0XCIsIFwicHJvbXB0XCIsIFwiY29uZmlybVwiXTtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgZS5sZW5ndGg7IGMrKykge1xuICAgICAgICBjb25zdCBmID0gZVtjXTtcbiAgICAgICAgRWUobiwgZiwgKHAsIFQsIHkpID0+IGZ1bmN0aW9uKHcsIF8pIHtcbiAgICAgICAgICByZXR1cm4gYS5jdXJyZW50LnJ1bihwLCBuLCBfLCB5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwiRXZlbnRUYXJnZXRcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIE90KG4sIGUpLCBTdChuLCBlKTtcbiAgICAgIGNvbnN0IGMgPSBuLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7XG4gICAgICBjICYmIGMucHJvdG90eXBlICYmIGUucGF0Y2hFdmVudFRhcmdldChuLCBlLCBbYy5wcm90b3R5cGVdKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJNdXRhdGlvbk9ic2VydmVyXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBTZShcIk11dGF0aW9uT2JzZXJ2ZXJcIiksIFNlKFwiV2ViS2l0TXV0YXRpb25PYnNlcnZlclwiKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgU2UoXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJGaWxlUmVhZGVyXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBTZShcIkZpbGVSZWFkZXJcIik7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwib25fcHJvcGVydHlcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIE50KGUsIG4pO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcImN1c3RvbUVsZW1lbnRzXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBEdChuLCBlKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJYSFJcIiwgKG4sIGEpID0+IHtcbiAgICAgIHcobik7XG4gICAgICBjb25zdCBlID0gSChcInhoclRhc2tcIiksIGMgPSBIKFwieGhyU3luY1wiKSwgZiA9IEgoXCJ4aHJMaXN0ZW5lclwiKSwgcCA9IEgoXCJ4aHJTY2hlZHVsZWRcIiksIFQgPSBIKFwieGhyVVJMXCIpLCB5ID0gSChcInhockVycm9yQmVmb3JlU2NoZWR1bGVkXCIpO1xuICAgICAgZnVuY3Rpb24gdyhfKSB7XG4gICAgICAgIGNvbnN0IEMgPSBfLlhNTEh0dHBSZXF1ZXN0O1xuICAgICAgICBpZiAoIUMpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBNID0gQy5wcm90b3R5cGU7XG4gICAgICAgIGZ1bmN0aW9uIEYoUCkge1xuICAgICAgICAgIHJldHVybiBQW2VdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBYID0gTVtqZV0sIG5lID0gTVtIZV07XG4gICAgICAgIGlmICghWCkge1xuICAgICAgICAgIGNvbnN0IFAgPSBfLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7XG4gICAgICAgICAgaWYgKFApIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBQLnByb3RvdHlwZTtcbiAgICAgICAgICAgIFggPSBiW2plXSwgbmUgPSBiW0hlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBcInJlYWR5c3RhdGVjaGFuZ2VcIiwgSiA9IFwic2NoZWR1bGVkXCI7XG4gICAgICAgIGZ1bmN0aW9uIGsoUCkge1xuICAgICAgICAgIGNvbnN0IGIgPSBQLmRhdGEsIEQgPSBiLnRhcmdldDtcbiAgICAgICAgICBEW3BdID0gZmFsc2UsIERbeV0gPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBvZSA9IERbZl07XG4gICAgICAgICAgWCB8fCAoWCA9IERbamVdLCBuZSA9IERbSGVdKSwgb2UgJiYgbmUuY2FsbChELCByZSwgb2UpO1xuICAgICAgICAgIGNvbnN0ICQgPSBEW2ZdID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKEQucmVhZHlTdGF0ZSA9PT0gRC5ET05FKVxuICAgICAgICAgICAgICBpZiAoIWIuYWJvcnRlZCAmJiBEW3BdICYmIFAuc3RhdGUgPT09IEopIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gRFthLl9fc3ltYm9sX18oXCJsb2FkZmFsc2VcIildO1xuICAgICAgICAgICAgICAgIGlmIChELnN0YXR1cyAhPT0gMCAmJiBzICYmIHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IFAuaW52b2tlO1xuICAgICAgICAgICAgICAgICAgUC5pbnZva2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IERbYS5fX3N5bWJvbF9fKFwibG9hZGZhbHNlXCIpXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgRSA9IDA7IEUgPCByLmxlbmd0aDsgRSsrKVxuICAgICAgICAgICAgICAgICAgICAgIHJbRV0gPT09IFAgJiYgci5zcGxpY2UoRSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICFiLmFib3J0ZWQgJiYgUC5zdGF0ZSA9PT0gSiAmJiBpLmNhbGwoUCk7XG4gICAgICAgICAgICAgICAgICB9LCBzLnB1c2goUCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBQLmludm9rZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgIWIuYWJvcnRlZCAmJiBEW3BdID09PSBmYWxzZSAmJiAoRFt5XSA9IHRydWUpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIFguY2FsbChELCByZSwgJCksIERbZV0gfHwgKERbZV0gPSBQKSwgWS5hcHBseShELCBiLmFyZ3MpLCBEW3BdID0gdHJ1ZSwgUDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkKCkge1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHgoUCkge1xuICAgICAgICAgIGNvbnN0IGIgPSBQLmRhdGE7XG4gICAgICAgICAgcmV0dXJuIGIuYWJvcnRlZCA9IHRydWUsIE8uYXBwbHkoYi50YXJnZXQsIGIuYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgViA9IEVlKE0sIFwib3BlblwiLCAoKSA9PiBmdW5jdGlvbihQLCBiKSB7XG4gICAgICAgICAgcmV0dXJuIFBbY10gPSBiWzJdID09IGZhbHNlLCBQW1RdID0gYlsxXSwgVi5hcHBseShQLCBiKTtcbiAgICAgICAgfSksIEsgPSBcIlhNTEh0dHBSZXF1ZXN0LnNlbmRcIiwgVSA9IEgoXCJmZXRjaFRhc2tBYm9ydGluZ1wiKSwgZyA9IEgoXCJmZXRjaFRhc2tTY2hlZHVsaW5nXCIpLCBZID0gRWUoTSwgXCJzZW5kXCIsICgpID0+IGZ1bmN0aW9uKFAsIGIpIHtcbiAgICAgICAgICBpZiAoYS5jdXJyZW50W2ddID09PSB0cnVlIHx8IFBbY10pXG4gICAgICAgICAgICByZXR1cm4gWS5hcHBseShQLCBiKTtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBEID0ge1xuICAgICAgICAgICAgICB0YXJnZXQ6IFAsXG4gICAgICAgICAgICAgIHVybDogUFtUXSxcbiAgICAgICAgICAgICAgaXNQZXJpb2RpYzogZmFsc2UsXG4gICAgICAgICAgICAgIGFyZ3M6IGIsXG4gICAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlXG4gICAgICAgICAgICB9LCBvZSA9IEZlKEssIGQsIEQsIGssIHgpO1xuICAgICAgICAgICAgUCAmJiBQW3ldID09PSB0cnVlICYmICFELmFib3J0ZWQgJiYgb2Uuc3RhdGUgPT09IEogJiYgb2UuaW52b2tlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgTyA9IEVlKE0sIFwiYWJvcnRcIiwgKCkgPT4gZnVuY3Rpb24oUCwgYikge1xuICAgICAgICAgIGNvbnN0IEQgPSBGKFApO1xuICAgICAgICAgIGlmIChEICYmIHR5cGVvZiBELnR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKEQuY2FuY2VsRm4gPT0gbnVsbCB8fCBELmRhdGEgJiYgRC5kYXRhLmFib3J0ZWQpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIEQuem9uZS5jYW5jZWxUYXNrKEQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5jdXJyZW50W1VdID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIE8uYXBwbHkoUCwgYik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcImdlb2xvY2F0aW9uXCIsIChuKSA9PiB7XG4gICAgICBuLm5hdmlnYXRvciAmJiBuLm5hdmlnYXRvci5nZW9sb2NhdGlvbiAmJiB5dChuLm5hdmlnYXRvci5nZW9sb2NhdGlvbiwgW1wiZ2V0Q3VycmVudFBvc2l0aW9uXCIsIFwid2F0Y2hQb3NpdGlvblwiXSk7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwiUHJvbWlzZVJlamVjdGlvbkV2ZW50XCIsIChuLCBhKSA9PiB7XG4gICAgICBmdW5jdGlvbiBlKGMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICBjdChuLCBjKS5mb3JFYWNoKChUKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB5ID0gbi5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7XG4gICAgICAgICAgICBpZiAoeSkge1xuICAgICAgICAgICAgICBjb25zdCB3ID0gbmV3IHkoYywge1xuICAgICAgICAgICAgICAgIHByb21pc2U6IGYucHJvbWlzZSxcbiAgICAgICAgICAgICAgICByZWFzb246IGYucmVqZWN0aW9uXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBULmludm9rZSh3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG4uUHJvbWlzZVJlamVjdGlvbkV2ZW50ICYmIChhW0goXCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlclwiKV0gPSBlKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIpLCBhW0goXCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlclwiKV0gPSBlKFwicmVqZWN0aW9uaGFuZGxlZFwiKSk7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwicXVldWVNaWNyb3Rhc2tcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIHd0KG4sIGUpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEx0KHQpIHtcbiAgICB0Ll9fbG9hZF9wYXRjaChcIlpvbmVBd2FyZVByb21pc2VcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIGNvbnN0IGMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBmID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuICAgICAgZnVuY3Rpb24gcChoKSB7XG4gICAgICAgIGlmIChoICYmIGgudG9TdHJpbmcgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpIHtcbiAgICAgICAgICBjb25zdCBsID0gaC5jb25zdHJ1Y3RvciAmJiBoLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgcmV0dXJuIChsIHx8IFwiXCIpICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGggPyBoLnRvU3RyaW5nKCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaCk7XG4gICAgICB9XG4gICAgICBjb25zdCBUID0gZS5zeW1ib2wsIHkgPSBbXSwgdyA9IG5bVChcIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT05cIildICE9PSBmYWxzZSwgXyA9IFQoXCJQcm9taXNlXCIpLCBDID0gVChcInRoZW5cIiksIE0gPSBcIl9fY3JlYXRpb25UcmFjZV9fXCI7XG4gICAgICBlLm9uVW5oYW5kbGVkRXJyb3IgPSAoaCkgPT4ge1xuICAgICAgICBpZiAoZS5zaG93VW5jYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgY29uc3QgbCA9IGggJiYgaC5yZWplY3Rpb247XG4gICAgICAgICAgbCA/IGNvbnNvbGUuZXJyb3IoXCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246XCIsIGwgaW5zdGFuY2VvZiBFcnJvciA/IGwubWVzc2FnZSA6IGwsIFwiOyBab25lOlwiLCBoLnpvbmUubmFtZSwgXCI7IFRhc2s6XCIsIGgudGFzayAmJiBoLnRhc2suc291cmNlLCBcIjsgVmFsdWU6XCIsIGwsIGwgaW5zdGFuY2VvZiBFcnJvciA/IGwuc3RhY2sgOiB2b2lkIDApIDogY29uc29sZS5lcnJvcihoKTtcbiAgICAgICAgfVxuICAgICAgfSwgZS5taWNyb3Rhc2tEcmFpbkRvbmUgPSAoKSA9PiB7XG4gICAgICAgIGZvciAoOyB5Lmxlbmd0aDsgKSB7XG4gICAgICAgICAgY29uc3QgaCA9IHkuc2hpZnQoKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaC56b25lLnJ1bkd1YXJkZWQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBoLnRocm93T3JpZ2luYWwgPyBoLnJlamVjdGlvbiA6IGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBYKGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IEYgPSBUKFwidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXJcIik7XG4gICAgICBmdW5jdGlvbiBYKGgpIHtcbiAgICAgICAgZS5vblVuaGFuZGxlZEVycm9yKGgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGwgPSBhW0ZdO1xuICAgICAgICAgIHR5cGVvZiBsID09IFwiZnVuY3Rpb25cIiAmJiBsLmNhbGwodGhpcywgaCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBuZShoKSB7XG4gICAgICAgIHJldHVybiBoICYmIHR5cGVvZiBoLnRoZW4gPT0gXCJmdW5jdGlvblwiO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmUoaCkge1xuICAgICAgICByZXR1cm4gaDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEooaCkge1xuICAgICAgICByZXR1cm4gQS5yZWplY3QoaCk7XG4gICAgICB9XG4gICAgICBjb25zdCBrID0gVChcInN0YXRlXCIpLCBkID0gVChcInZhbHVlXCIpLCB4ID0gVChcImZpbmFsbHlcIiksIFYgPSBUKFwicGFyZW50UHJvbWlzZVZhbHVlXCIpLCBLID0gVChcInBhcmVudFByb21pc2VTdGF0ZVwiKSwgVSA9IFwiUHJvbWlzZS50aGVuXCIsIGcgPSBudWxsLCBZID0gdHJ1ZSwgTyA9IGZhbHNlLCBQID0gMDtcbiAgICAgIGZ1bmN0aW9uIGIoaCwgbCkge1xuICAgICAgICByZXR1cm4gKG8pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgSShoLCBsLCBvKTtcbiAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICBJKGgsIGZhbHNlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBEID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBoID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaCB8fCAoaCA9IHRydWUsIG8uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0sIG9lID0gXCJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmXCIsICQgPSBUKFwiY3VycmVudFRhc2tUcmFjZVwiKTtcbiAgICAgIGZ1bmN0aW9uIEkoaCwgbCwgbykge1xuICAgICAgICBjb25zdCB1ID0gRCgpO1xuICAgICAgICBpZiAoaCA9PT0gbylcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKG9lKTtcbiAgICAgICAgaWYgKGhba10gPT09IGcpIHtcbiAgICAgICAgICBsZXQgdiA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvID09IFwiZnVuY3Rpb25cIikgJiYgKHYgPSBvICYmIG8udGhlbik7XG4gICAgICAgICAgfSBjYXRjaCAoUikge1xuICAgICAgICAgICAgcmV0dXJuIHUoKCkgPT4ge1xuICAgICAgICAgICAgICBJKGgsIGZhbHNlLCBSKTtcbiAgICAgICAgICAgIH0pKCksIGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsICE9PSBPICYmIG8gaW5zdGFuY2VvZiBBICYmIG8uaGFzT3duUHJvcGVydHkoaykgJiYgby5oYXNPd25Qcm9wZXJ0eShkKSAmJiBvW2tdICE9PSBnKVxuICAgICAgICAgICAgaShvKSwgSShoLCBvW2tdLCBvW2RdKTtcbiAgICAgICAgICBlbHNlIGlmIChsICE9PSBPICYmIHR5cGVvZiB2ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHYuY2FsbChvLCB1KGIoaCwgbCkpLCB1KGIoaCwgITEpKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChSKSB7XG4gICAgICAgICAgICAgIHUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIEkoaCwgZmFsc2UsIFIpO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaFtrXSA9IGw7XG4gICAgICAgICAgICBjb25zdCBSID0gaFtkXTtcbiAgICAgICAgICAgIGlmIChoW2RdID0gbywgaFt4XSA9PT0geCAmJiBsID09PSBZICYmIChoW2tdID0gaFtLXSwgaFtkXSA9IGhbVl0pLCBsID09PSBPICYmIG8gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICBjb25zdCBtID0gYS5jdXJyZW50VGFzayAmJiBhLmN1cnJlbnRUYXNrLmRhdGEgJiYgYS5jdXJyZW50VGFzay5kYXRhW01dO1xuICAgICAgICAgICAgICBtICYmIGYobywgJCwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgUi5sZW5ndGg7IClcbiAgICAgICAgICAgICAgcihoLCBSW20rK10sIFJbbSsrXSwgUlttKytdLCBSW20rK10pO1xuICAgICAgICAgICAgaWYgKFIubGVuZ3RoID09IDAgJiYgbCA9PSBPKSB7XG4gICAgICAgICAgICAgIGhba10gPSBQO1xuICAgICAgICAgICAgICBsZXQgbSA9IG87XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5jYXVnaHQgKGluIHByb21pc2UpOiBcIiArIHAobykgKyAobyAmJiBvLnN0YWNrID8gYFxuYCArIG8uc3RhY2sgOiBcIlwiKSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKE4pIHtcbiAgICAgICAgICAgICAgICBtID0gTjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3ICYmIChtLnRocm93T3JpZ2luYWwgPSB0cnVlKSwgbS5yZWplY3Rpb24gPSBvLCBtLnByb21pc2UgPSBoLCBtLnpvbmUgPSBhLmN1cnJlbnQsIG0udGFzayA9IGEuY3VycmVudFRhc2ssIHkucHVzaChtKSwgZS5zY2hlZHVsZU1pY3JvVGFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHMgPSBUKFwicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXJcIik7XG4gICAgICBmdW5jdGlvbiBpKGgpIHtcbiAgICAgICAgaWYgKGhba10gPT09IFApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbCA9IGFbc107XG4gICAgICAgICAgICBsICYmIHR5cGVvZiBsID09IFwiZnVuY3Rpb25cIiAmJiBsLmNhbGwodGhpcywgeyByZWplY3Rpb246IGhbZF0sIHByb21pc2U6IGggfSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhba10gPSBPO1xuICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgeS5sZW5ndGg7IGwrKylcbiAgICAgICAgICAgIGggPT09IHlbbF0ucHJvbWlzZSAmJiB5LnNwbGljZShsLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcihoLCBsLCBvLCB1LCB2KSB7XG4gICAgICAgIGkoaCk7XG4gICAgICAgIGNvbnN0IFIgPSBoW2tdLCBtID0gUiA/IHR5cGVvZiB1ID09IFwiZnVuY3Rpb25cIiA/IHUgOiByZSA6IHR5cGVvZiB2ID09IFwiZnVuY3Rpb25cIiA/IHYgOiBKO1xuICAgICAgICBsLnNjaGVkdWxlTWljcm9UYXNrKFUsICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgTiA9IGhbZF0sIFogPSAhIW8gJiYgeCA9PT0gb1t4XTtcbiAgICAgICAgICAgIFogJiYgKG9bVl0gPSBOLCBvW0tdID0gUik7XG4gICAgICAgICAgICBjb25zdCBMID0gbC5ydW4obSwgdm9pZCAwLCBaICYmIG0gIT09IEogJiYgbSAhPT0gcmUgPyBbXSA6IFtOXSk7XG4gICAgICAgICAgICBJKG8sICEwLCBMKTtcbiAgICAgICAgICB9IGNhdGNoIChOKSB7XG4gICAgICAgICAgICBJKG8sIGZhbHNlLCBOKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIG8pO1xuICAgICAgfVxuICAgICAgY29uc3QgRSA9IFwiZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsgW25hdGl2ZSBjb2RlXSB9XCIsIEcgPSBmdW5jdGlvbigpIHtcbiAgICAgIH0sIGNlID0gbi5BZ2dyZWdhdGVFcnJvcjtcbiAgICAgIGNsYXNzIEEge1xuICAgICAgICBzdGF0aWMgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgcmV0dXJuIEU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHJlc29sdmUobCkge1xuICAgICAgICAgIHJldHVybiBsIGluc3RhbmNlb2YgQSA/IGwgOiBJKG5ldyB0aGlzKG51bGwpLCBZLCBsKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgcmVqZWN0KGwpIHtcbiAgICAgICAgICByZXR1cm4gSShuZXcgdGhpcyhudWxsKSwgTywgbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgICAgICAgY29uc3QgbCA9IHt9O1xuICAgICAgICAgIHJldHVybiBsLnByb21pc2UgPSBuZXcgQSgobywgdSkgPT4ge1xuICAgICAgICAgICAgbC5yZXNvbHZlID0gbywgbC5yZWplY3QgPSB1O1xuICAgICAgICAgIH0pLCBsO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhbnkobCkge1xuICAgICAgICAgIGlmICghbCB8fCB0eXBlb2YgbFtTeW1ib2wuaXRlcmF0b3JdICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgY2UoW10sIFwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWRcIikpO1xuICAgICAgICAgIGNvbnN0IG8gPSBbXTtcbiAgICAgICAgICBsZXQgdSA9IDA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gb2YgbClcbiAgICAgICAgICAgICAgdSsrLCBvLnB1c2goQS5yZXNvbHZlKG0pKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgY2UoW10sIFwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWRcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodSA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgY2UoW10sIFwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWRcIikpO1xuICAgICAgICAgIGxldCB2ID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgUiA9IFtdO1xuICAgICAgICAgIHJldHVybiBuZXcgQSgobSwgTikgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgWiA9IDA7IFogPCBvLmxlbmd0aDsgWisrKVxuICAgICAgICAgICAgICBvW1pdLnRoZW4oKEwpID0+IHtcbiAgICAgICAgICAgICAgICB2IHx8ICh2ID0gdHJ1ZSwgbShMKSk7XG4gICAgICAgICAgICAgIH0sIChMKSA9PiB7XG4gICAgICAgICAgICAgICAgUi5wdXNoKEwpLCB1LS0sIHUgPT09IDAgJiYgKHYgPSB0cnVlLCBOKG5ldyBjZShSLCBcIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkXCIpKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyByYWNlKGwpIHtcbiAgICAgICAgICBsZXQgbywgdSwgdiA9IG5ldyB0aGlzKChOLCBaKSA9PiB7XG4gICAgICAgICAgICBvID0gTiwgdSA9IFo7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZnVuY3Rpb24gUihOKSB7XG4gICAgICAgICAgICBvKE4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBtKE4pIHtcbiAgICAgICAgICAgIHUoTik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IE4gb2YgbClcbiAgICAgICAgICAgIG5lKE4pIHx8IChOID0gdGhpcy5yZXNvbHZlKE4pKSwgTi50aGVuKFIsIG0pO1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhbGwobCkge1xuICAgICAgICAgIHJldHVybiBBLmFsbFdpdGhDYWxsYmFjayhsKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYWxsU2V0dGxlZChsKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzICYmIHRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgQSA/IHRoaXMgOiBBKS5hbGxXaXRoQ2FsbGJhY2sobCwge1xuICAgICAgICAgICAgdGhlbkNhbGxiYWNrOiAodSkgPT4gKHsgc3RhdHVzOiBcImZ1bGZpbGxlZFwiLCB2YWx1ZTogdSB9KSxcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2s6ICh1KSA9PiAoeyBzdGF0dXM6IFwicmVqZWN0ZWRcIiwgcmVhc29uOiB1IH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFsbFdpdGhDYWxsYmFjayhsLCBvKSB7XG4gICAgICAgICAgbGV0IHUsIHYsIFIgPSBuZXcgdGhpcygoTCwgVykgPT4ge1xuICAgICAgICAgICAgdSA9IEwsIHYgPSBXO1xuICAgICAgICAgIH0pLCBtID0gMiwgTiA9IDA7XG4gICAgICAgICAgY29uc3QgWiA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IEwgb2YgbCkge1xuICAgICAgICAgICAgbmUoTCkgfHwgKEwgPSB0aGlzLnJlc29sdmUoTCkpO1xuICAgICAgICAgICAgY29uc3QgVyA9IE47XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBMLnRoZW4oKHEpID0+IHtcbiAgICAgICAgICAgICAgICBaW1ddID0gbyA/IG8udGhlbkNhbGxiYWNrKHEpIDogcSwgbS0tLCBtID09PSAwICYmIHUoWik7XG4gICAgICAgICAgICAgIH0sIChxKSA9PiB7XG4gICAgICAgICAgICAgICAgbyA/IChaW1ddID0gby5lcnJvckNhbGxiYWNrKHEpLCBtLS0sIG0gPT09IDAgJiYgdShaKSkgOiB2KHEpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgdihxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG0rKywgTisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbSAtPSAyLCBtID09PSAwICYmIHUoWiksIFI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IobCkge1xuICAgICAgICAgIGNvbnN0IG8gPSB0aGlzO1xuICAgICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBBKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLlwiKTtcbiAgICAgICAgICBvW2tdID0gZywgb1tkXSA9IFtdO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gRCgpO1xuICAgICAgICAgICAgbCAmJiBsKHUoYihvLCBZKSksIHUoYihvLCBPKSkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgIEkobywgZmFsc2UsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgcmV0dXJuIFwiUHJvbWlzZVwiO1xuICAgICAgICB9XG4gICAgICAgIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xuICAgICAgICAgIHJldHVybiBBO1xuICAgICAgICB9XG4gICAgICAgIHRoZW4obCwgbykge1xuICAgICAgICAgIGxldCB1ID0gdGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTtcbiAgICAgICAgICAoIXUgfHwgdHlwZW9mIHUgIT0gXCJmdW5jdGlvblwiKSAmJiAodSA9IHRoaXMuY29uc3RydWN0b3IgfHwgQSk7XG4gICAgICAgICAgY29uc3QgdiA9IG5ldyB1KEcpLCBSID0gYS5jdXJyZW50O1xuICAgICAgICAgIHJldHVybiB0aGlzW2tdID09IGcgPyB0aGlzW2RdLnB1c2goUiwgdiwgbCwgbykgOiByKHRoaXMsIFIsIHYsIGwsIG8pLCB2O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIGwpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkobCkge1xuICAgICAgICAgIGxldCBvID0gdGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTtcbiAgICAgICAgICAoIW8gfHwgdHlwZW9mIG8gIT0gXCJmdW5jdGlvblwiKSAmJiAobyA9IEEpO1xuICAgICAgICAgIGNvbnN0IHUgPSBuZXcgbyhHKTtcbiAgICAgICAgICB1W3hdID0geDtcbiAgICAgICAgICBjb25zdCB2ID0gYS5jdXJyZW50O1xuICAgICAgICAgIHJldHVybiB0aGlzW2tdID09IGcgPyB0aGlzW2RdLnB1c2godiwgdSwgbCwgbCkgOiByKHRoaXMsIHYsIHUsIGwsIGwpLCB1O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnJlc29sdmUgPSBBLnJlc29sdmUsIEEucmVqZWN0ID0gQS5yZWplY3QsIEEucmFjZSA9IEEucmFjZSwgQS5hbGwgPSBBLmFsbDtcbiAgICAgIGNvbnN0IGdlID0gbltfXSA9IG4uUHJvbWlzZTtcbiAgICAgIG4uUHJvbWlzZSA9IEE7XG4gICAgICBjb25zdCB5ZSA9IFQoXCJ0aGVuUGF0Y2hlZFwiKTtcbiAgICAgIGZ1bmN0aW9uIHNlKGgpIHtcbiAgICAgICAgY29uc3QgbCA9IGgucHJvdG90eXBlLCBvID0gYyhsLCBcInRoZW5cIik7XG4gICAgICAgIGlmIChvICYmIChvLndyaXRhYmxlID09PSBmYWxzZSB8fCAhby5jb25maWd1cmFibGUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdSA9IGwudGhlbjtcbiAgICAgICAgbFtDXSA9IHUsIGgucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbih2LCBSKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBBKChOLCBaKSA9PiB7XG4gICAgICAgICAgICB1LmNhbGwodGhpcywgTiwgWik7XG4gICAgICAgICAgfSkudGhlbih2LCBSKTtcbiAgICAgICAgfSwgaFt5ZV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgZS5wYXRjaFRoZW4gPSBzZTtcbiAgICAgIGZ1bmN0aW9uIENlKGgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGwsIG8pIHtcbiAgICAgICAgICBsZXQgdSA9IGguYXBwbHkobCwgbyk7XG4gICAgICAgICAgaWYgKHUgaW5zdGFuY2VvZiBBKVxuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgbGV0IHYgPSB1LmNvbnN0cnVjdG9yO1xuICAgICAgICAgIHJldHVybiB2W3llXSB8fCBzZSh2KSwgdTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZSAmJiAoc2UoZ2UpLCBFZShuLCBcImZldGNoXCIsIChoKSA9PiBDZShoKSkpLCBQcm9taXNlW2EuX19zeW1ib2xfXyhcInVuY2F1Z2h0UHJvbWlzZUVycm9yc1wiKV0gPSB5LCBBO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIE10KHQpIHtcbiAgICB0Ll9fbG9hZF9wYXRjaChcInRvU3RyaW5nXCIsIChuKSA9PiB7XG4gICAgICBjb25zdCBhID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLCBlID0gSChcIk9yaWdpbmFsRGVsZWdhdGVcIiksIGMgPSBIKFwiUHJvbWlzZVwiKSwgZiA9IEgoXCJFcnJvclwiKSwgcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgY29uc3QgXyA9IHRoaXNbZV07XG4gICAgICAgICAgaWYgKF8pXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIF8gPT0gXCJmdW5jdGlvblwiID8gYS5jYWxsKF8pIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF8pO1xuICAgICAgICAgIGlmICh0aGlzID09PSBQcm9taXNlKSB7XG4gICAgICAgICAgICBjb25zdCBDID0gbltjXTtcbiAgICAgICAgICAgIGlmIChDKVxuICAgICAgICAgICAgICByZXR1cm4gYS5jYWxsKEMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcyA9PT0gRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IEMgPSBuW2ZdO1xuICAgICAgICAgICAgaWYgKEMpXG4gICAgICAgICAgICAgIHJldHVybiBhLmNhbGwoQyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmNhbGwodGhpcyk7XG4gICAgICB9O1xuICAgICAgcFtlXSA9IGEsIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IHA7XG4gICAgICBjb25zdCBUID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywgeSA9IFwiW29iamVjdCBQcm9taXNlXVwiO1xuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIFByb21pc2UgPT0gXCJmdW5jdGlvblwiICYmIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8geSA6IFQuY2FsbCh0aGlzKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gSXQodCwgbiwgYSwgZSwgYykge1xuICAgIGNvbnN0IGYgPSBab25lLl9fc3ltYm9sX18oZSk7XG4gICAgaWYgKG5bZl0pXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgcCA9IG5bZl0gPSBuW2VdO1xuICAgIG5bZV0gPSBmdW5jdGlvbihULCB5LCB3KSB7XG4gICAgICByZXR1cm4geSAmJiB5LnByb3RvdHlwZSAmJiBjLmZvckVhY2goZnVuY3Rpb24oXykge1xuICAgICAgICBjb25zdCBDID0gYCR7YX0uJHtlfTo6YCArIF8sIE0gPSB5LnByb3RvdHlwZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoTS5oYXNPd25Qcm9wZXJ0eShfKSkge1xuICAgICAgICAgICAgY29uc3QgRiA9IHQuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE0sIF8pO1xuICAgICAgICAgICAgRiAmJiBGLnZhbHVlID8gKEYudmFsdWUgPSB0LndyYXBXaXRoQ3VycmVudFpvbmUoRi52YWx1ZSwgQyksIHQuX3JlZGVmaW5lUHJvcGVydHkoeS5wcm90b3R5cGUsIF8sIEYpKSA6IE1bX10gJiYgKE1bX10gPSB0LndyYXBXaXRoQ3VycmVudFpvbmUoTVtfXSwgQykpO1xuICAgICAgICAgIH0gZWxzZSBNW19dICYmIChNW19dID0gdC53cmFwV2l0aEN1cnJlbnRab25lKE1bX10sIEMpKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgIH0pLCBwLmNhbGwobiwgVCwgeSwgdyk7XG4gICAgfSwgdC5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQobltlXSwgcCk7XG4gIH1cbiAgZnVuY3Rpb24gQXQodCkge1xuICAgIHQuX19sb2FkX3BhdGNoKFwidXRpbFwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgY29uc3QgYyA9IEJlKG4pO1xuICAgICAgZS5wYXRjaE9uUHJvcGVydGllcyA9IFFlLCBlLnBhdGNoTWV0aG9kID0gRWUsIGUuYmluZEFyZ3VtZW50cyA9IFZlLCBlLnBhdGNoTWFjcm9UYXNrID0gdnQ7XG4gICAgICBjb25zdCBmID0gYS5fX3N5bWJvbF9fKFwiQkxBQ0tfTElTVEVEX0VWRU5UU1wiKSwgcCA9IGEuX19zeW1ib2xfXyhcIlVOUEFUQ0hFRF9FVkVOVFNcIik7XG4gICAgICBuW3BdICYmIChuW2ZdID0gbltwXSksIG5bZl0gJiYgKGFbZl0gPSBhW3BdID0gbltmXSksIGUucGF0Y2hFdmVudFByb3RvdHlwZSA9IFJ0LCBlLnBhdGNoRXZlbnRUYXJnZXQgPSBQdCwgZS5pc0lFT3JFZGdlID0gYnQsIGUuT2JqZWN0RGVmaW5lUHJvcGVydHkgPSB0ZSwgZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBlZSwgZS5PYmplY3RDcmVhdGUgPSBmZSwgZS5BcnJheVNsaWNlID0ga2UsIGUucGF0Y2hDbGFzcyA9IFNlLCBlLndyYXBXaXRoQ3VycmVudFpvbmUgPSB4ZSwgZS5maWx0ZXJQcm9wZXJ0aWVzID0gYXQsIGUuYXR0YWNoT3JpZ2luVG9QYXRjaGVkID0gcGUsIGUuX3JlZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIGUucGF0Y2hDYWxsYmFja3MgPSBJdCwgZS5nZXRHbG9iYWxPYmplY3RzID0gKCkgPT4gKHtcbiAgICAgICAgZ2xvYmFsU291cmNlczogcnQsXG4gICAgICAgIHpvbmVTeW1ib2xFdmVudE5hbWVzOiBhZSxcbiAgICAgICAgZXZlbnROYW1lczogYyxcbiAgICAgICAgaXNCcm93c2VyOiB6ZSxcbiAgICAgICAgaXNNaXg6ICRlLFxuICAgICAgICBpc05vZGU6IFplLFxuICAgICAgICBUUlVFX1NUUjogX2UsXG4gICAgICAgIEZBTFNFX1NUUjogVGUsXG4gICAgICAgIFpPTkVfU1lNQk9MX1BSRUZJWDogd2UsXG4gICAgICAgIEFERF9FVkVOVF9MSVNURU5FUl9TVFI6IHZlLFxuICAgICAgICBSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOiBBZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24ganQodCkge1xuICAgIEx0KHQpLCBNdCh0KSwgQXQodCk7XG4gIH1cbiAgY29uc3QgdXQgPSB6KCk7XG4gIHJldHVybiBqdCh1dCksIFp0KHV0KSwgcHQ7XG59XG5GdCgpO1xuXG5leHBvcnQgeyB6dCBhcyBab25lQ29udGV4dE1hbmFnZXIgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUtBLFVBQVU7QUFFeEIsU0FBU0MsR0FBR0MsR0FBRztBQUNiLFNBQU9BLE1BQU0sV0FBV0EsSUFBSSxDQUFDLElBQUksT0FBT0EsRUFBRSxvQkFBb0IsY0FBYyxPQUFPQSxFQUFFLHVCQUF1QjtBQUM5RztBQUNBLElBQUlDLEtBQUssbUJBQW1CQztBQUFBO0FBQUEsR0FFekIsV0FBVztBQUNWLGFBQVNGLElBQUk7QUFDWCxXQUFLLFdBQVcsSUFBTyxLQUFLLGVBQWU7QUFBQSxJQUM3QztBQUNBLFdBQU9BLEVBQUUsVUFBVSx5QkFBeUIsU0FBU0csR0FBRztBQUN0RCxhQUFPQSxLQUFLQSxFQUFFLElBQUlGLEVBQUUsS0FBS0g7QUFBQSxJQUMzQixHQUFHRSxFQUFFLFVBQVUsZ0JBQWdCLFNBQVNHLEdBQUdDLEdBQUc7QUFDNUMsVUFBSUMsSUFBSSxNQUFNLEtBQUssV0FBVztBQUM1QixpQkFBUyxLQUFLLE1BQU1DLEtBQUssQ0FBQyxHQUFHQyxLQUFLLEdB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LG9CQUFvQixPQUFPLGdCQUFnQkEsRUFBRSxpQkFBaUJxRyxJQUFJckcsRUFBRSxtQkFBbUIsT0FBTztBQUFBLFFBQzdhLGVBQWU7QUFBQSxRQUNmLHNCQUFzQjBEO0FBQUEsUUFDdEIsWUFBWW5DO0FBQUEsUUFDWixXQUFXdUI7QUFBQSxRQUNYLE9BQU9DO0FBQUEsUUFDUCxRQUFRRjtBQUFBLFFBQ1IsVUFBVTtBQUFBLFFBQ1YsV0FBV2I7QUFBQSxRQUNYLG9CQUFvQkM7QUFBQSxRQUNwQix3QkFBd0J6QztBQUFBLFFBQ3hCLDJCQUEyQnFDO0FBQUEsTUFDN0I7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQ0EsV0FBUzBFLEdBQUczRyxHQUFHO0FBQ2IsSUFBQXFHLEdBQUdyRyxDQUFDLEdBQUd1RyxHQUFHdkcsQ0FBQyxHQUFHMEcsR0FBRzFHLENBQUM7QUFBQSxFQUNwQjtBQUNBLFFBQU0sS0FBS1IsRUFBRTtBQUNiLFNBQU9tSCxHQUFHLEVBQUUsR0FBR1YsR0FBRyxFQUFFLEdBQUdwRztBQUN6QjtBQUNBRSxHQUFHOyIsCiAgIm5hbWVzIjogWyJRaSIsICJ4dCIsICJqIiwgIkV0IiwgInp0IiwgIlMiLCAiQiIsICJ6IiwgImllIiwgImZlIiwgImtlIiwgInZlIiwgInB0IiwgImd0IiwgIkZ0IiwgInQiLCAiSSIsICJhIiwgInMiLCAiZSIsICJiIiwgIkQiLCAiaSIsICJFIiwgIlAiLCAiZiIsICJHIiwgImNlIiwgIkEiLCAiSiIsICJZIiwgImciLCAiZ2UiLCAieCIsICJkIiwgInllIiwgIksiLCAiayIsICJDZSIsICJwIiwgIlUiLCAiViIsICJjIiwgIlQiLCAiQyIsICJNIiwgIkYiLCAiJCIsICJBZSIsICJqZSIsICJIZSIsICJUZSIsICJ3ZSIsICJ4ZSIsICJGZSIsICJIIiwgIk5lIiwgIkRlIiwgIm10IiwgIlZlIiwgInl0IiwgIlhlIiwgInBlIiwgIlllIiwgIlplIiwgInplIiwgIiRlIiwgIkxlIiwgImt0IiwgIkplIiwgIktlIiwgIlNlIiwgIkVlIiwgInZ0IiwgIkdlIiwgImJ0IiwgIkN0IiwgImFlIiwgIml0IiwgIlB0IiwgInUiLCAidiIsICJSIiwgImgiLCAiTiIsICJaIiwgIkwiLCAibWUiLCAiaGUiLCAiUGUiLCAiZGUiLCAiVWUiLCAiZnQiLCAiSHQiLCAiV2UiLCAiaHQiLCAiUmUiLCAiZHQiLCAiSWUiLCAiVHQiLCAiT2UiLCAiY3QiLCAiUnQiLCAid3QiLCAiTWUiLCAiYmUiLCAiRHQiLCAiU3QiLCAiT3QiLCAiYXQiLCAiQmUiLCAiTnQiLCAiWnQiLCAiciIsICJ5IiwgInciLCAiTHQiLCAibyIsICJNdCIsICJfIiwgIkl0IiwgIkF0IiwgImp0Il0KfQo=