@getopenpay/openpay-js-react 0.5.14 → 0.5.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{ExportResult-B-YLKMaU-DKI4wi_s.js → ExportResult-BacsqwKA-wgTHEn_9.js} +1 -1
  3. package/dist/Resource-C_JyOUi0-DCzIGxs8.js +176 -0
  4. package/dist/SimpleSpanProcessor-DsaymkqA-CtD-GEtk.js +910 -0
  5. package/dist/_commonjsHelpers-CdLE1o9f-ChUIkuR8.js +30 -0
  6. package/dist/detect-resources-WIF4Hgfd-BW23wWaP.js +862 -0
  7. package/dist/diag-api-DbLQG6Cy-7Q64bfX9.js +6 -0
  8. package/dist/index-0_SuCli2-B5_tBBpx.js +430 -0
  9. package/dist/index-3-QFb-PY-DJRVxNSq.js +127 -0
  10. package/dist/index-B2hBQXxN-CgWoAORq.js +6 -0
  11. package/dist/index-BJ3-FtuX-DlTusXVc.js +28 -0
  12. package/dist/index-CDEhufnp-CDtO0j1l.js +18 -0
  13. package/dist/index-CV8wT6Y2-Bh-lYVds.js +6718 -0
  14. package/dist/index-DIoaqP4_-Cs74t_lP.js +1012 -0
  15. package/dist/index-DJhVQsLX-BiIZL-r4.js +147 -0
  16. package/dist/index-Din5I5pT-Be1fPmsi.js +1613 -0
  17. package/dist/index-nPWqtn7T.js +9357 -0
  18. package/dist/index.d.ts +24 -0
  19. package/dist/index.js +8 -8
  20. package/dist/lifecycle-D1BdEbZs-BvuQx__u.js +119 -0
  21. package/dist/{metrics-api-kGWvPyP1-D3Nmj2Ml.js → metrics-api-B_K2nQRV-Be59r2AI.js} +13 -13
  22. package/dist/sdk-info-ChuKu8zW-BkU0NT3O.js +285 -0
  23. package/dist/suppress-tracing-i166ZvAf-D2QqEK4Q.js +17 -0
  24. package/dist/url-D2-xNTDs-BLiqCwPG.js +798 -0
  25. package/dist/utils-BFjwGsZE-dHVj8huE.js +101 -0
  26. package/dist/utils-Blz-BInC-461m4Gx4.js +270 -0
  27. package/dist/utils-De78ey-v-ChjePi4C.js +12 -0
  28. package/package.json +5 -5
  29. package/dist/Resource-CWcxyqCu-BpY8XBEt.js +0 -176
  30. package/dist/SimpleSpanProcessor-C1qhGgiR-BsuHTDv6.js +0 -957
  31. package/dist/_commonjsHelpers-f76XedMs-N1iNS-iQ.js +0 -25
  32. package/dist/detect-resources-Dn5v7ndj-Cjz2K7Ne.js +0 -854
  33. package/dist/diag-api-CsQOTGkN-xb6cqTYK.js +0 -6
  34. package/dist/index-B0WqhX79-DcfF1_Rw.js +0 -6685
  35. package/dist/index-BBW4S5yj-CLc9aNqW.js +0 -150
  36. package/dist/index-BikTboCM-CuVpQZbQ.js +0 -1593
  37. package/dist/index-CTgGlkZ9-_jFlsPe_.js +0 -431
  38. package/dist/index-CWofBZiq-C1KAGcbi.js +0 -52
  39. package/dist/index-Cc1XQnJP-Cj99cshF.js +0 -130
  40. package/dist/index-CyljyZDC-CHsQ1lEf.js +0 -330
  41. package/dist/index-D-CzF5e8-BeCsZ_lY.js +0 -19
  42. package/dist/index-DXlPRASH.js +0 -9420
  43. package/dist/index-Dj77MBTj-Zoe1kwBN.js +0 -830
  44. package/dist/lifecycle-BjQ-7GLm-BmSFW2aE.js +0 -119
  45. package/dist/sdk-info-DDU3_0Kq-B_Ptfv97.js +0 -484
  46. package/dist/url-4OFtf8y3-Cudf4p-r.js +0 -797
  47. package/dist/utils-B8mlyr-p-D5QT4FOw.js +0 -142
  48. package/dist/utils-CX5YT7yI-BbTNmH0Z.js +0 -14
  49. package/dist/utils-DvAb8FQJ-4qBn4nnT.js +0 -381
@@ -0,0 +1,1613 @@
1
+ import { Q as Xe } from "./index-nPWqtn7T.js";
2
+ function At(I) {
3
+ return I === void 0 && (I = {}), typeof I.addEventListener == "function" && typeof I.removeEventListener == "function";
4
+ }
5
+ var dt = "OT_ZONE_CONTEXT", Gt = (
6
+ /** @class */
7
+ function() {
8
+ function I() {
9
+ this._enabled = !1, this._zoneCounter = 0;
10
+ }
11
+ return I.prototype._activeContextFromZone = function(C) {
12
+ return C && C.get(dt) || Xe;
13
+ }, I.prototype._bindFunction = function(C, V) {
14
+ var H = this, ee = function() {
15
+ for (var te = this, ae = [], he = 0; he < arguments.length; he++)
16
+ ae[he] = arguments[he];
17
+ return H.with(C, function() {
18
+ return V.apply(te, ae);
19
+ });
20
+ };
21
+ return Object.defineProperty(ee, "length", {
22
+ enumerable: !1,
23
+ configurable: !0,
24
+ writable: !1,
25
+ value: V.length
26
+ }), ee;
27
+ }, I.prototype._bindListener = function(C, V) {
28
+ var H = V;
29
+ 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;
30
+ }, I.prototype._createZoneName = function() {
31
+ this._zoneCounter++;
32
+ var C = Math.random();
33
+ return this._zoneCounter + "-" + C;
34
+ }, I.prototype._createZone = function(C, V) {
35
+ var H;
36
+ return Zone.current.fork({
37
+ name: C,
38
+ properties: (H = {}, H[dt] = V, H)
39
+ });
40
+ }, I.prototype._getActiveZone = function() {
41
+ return Zone.current;
42
+ }, I.prototype._patchAddEventListener = function(C, V, H) {
43
+ var ee = this;
44
+ return function(te, ae, he) {
45
+ C.__ot_listeners === void 0 && (C.__ot_listeners = {});
46
+ var Te = C.__ot_listeners[te];
47
+ Te === void 0 && (Te = /* @__PURE__ */ new WeakMap(), C.__ot_listeners[te] = Te);
48
+ var be = ee.bind(H, ae);
49
+ return Te.set(ae, be), V.call(this, te, be, he);
50
+ };
51
+ }, I.prototype._patchRemoveEventListener = function(C, V) {
52
+ return function(H, ee) {
53
+ if (C.__ot_listeners === void 0 || C.__ot_listeners[H] === void 0)
54
+ return V.call(this, H, ee);
55
+ var te = C.__ot_listeners[H], ae = te.get(ee);
56
+ return te.delete(ee), V.call(this, H, ae || ee);
57
+ };
58
+ }, I.prototype.active = function() {
59
+ if (!this._enabled)
60
+ return Xe;
61
+ var C = this._getActiveZone(), V = this._activeContextFromZone(C);
62
+ return V || Xe;
63
+ }, I.prototype.bind = function(C, V) {
64
+ return C === void 0 && (C = this.active()), typeof V == "function" ? this._bindFunction(C, V) : (At(V) && this._bindListener(C, V), V);
65
+ }, I.prototype.disable = function() {
66
+ return this._enabled = !1, this;
67
+ }, I.prototype.enable = function() {
68
+ return this._enabled = !0, this;
69
+ }, I.prototype.with = function(C, V, H) {
70
+ for (var ee = [], te = 3; te < arguments.length; te++)
71
+ ee[te - 3] = arguments[te];
72
+ var ae = this._createZoneName(), he = this._createZone(ae, C);
73
+ return he.run(V, H, ee);
74
+ }, I;
75
+ }()
76
+ ), kt = {}, mt;
77
+ function xt() {
78
+ if (mt) return kt;
79
+ mt = 1;
80
+ /**
81
+ * @license Angular v<unknown>
82
+ * (c) 2010-2025 Google LLC. https://angular.io/
83
+ * License: MIT
84
+ */
85
+ const I = globalThis;
86
+ function C(e) {
87
+ return (I.__Zone_symbol_prefix || "__zone_symbol__") + e;
88
+ }
89
+ function V() {
90
+ const e = I.performance;
91
+ function n(L) {
92
+ e && e.mark && e.mark(L);
93
+ }
94
+ function c(L, a) {
95
+ e && e.measure && e.measure(L, a);
96
+ }
97
+ n("Zone");
98
+ class t {
99
+ static __symbol__ = C;
100
+ static assertZonePatched() {
101
+ if (I.Promise !== O.ZoneAwarePromise)
102
+ 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.)");
103
+ }
104
+ static get root() {
105
+ let a = t.current;
106
+ for (; a.parent; )
107
+ a = a.parent;
108
+ return a;
109
+ }
110
+ static get current() {
111
+ return E.zone;
112
+ }
113
+ static get currentTask() {
114
+ return S;
115
+ }
116
+ static __load_patch(a, s, r = !1) {
117
+ if (O.hasOwnProperty(a)) {
118
+ const T = I[C("forceDuplicateZoneCheck")] === !0;
119
+ if (!r && T)
120
+ throw Error("Already loaded patch: " + a);
121
+ } else if (!I["__Zone_disable_" + a]) {
122
+ const T = "Zone:" + a;
123
+ n(T), O[a] = s(I, t, D), c(T, T);
124
+ }
125
+ }
126
+ get parent() {
127
+ return this._parent;
128
+ }
129
+ get name() {
130
+ return this._name;
131
+ }
132
+ _parent;
133
+ _name;
134
+ _properties;
135
+ _zoneDelegate;
136
+ constructor(a, s) {
137
+ 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);
138
+ }
139
+ get(a) {
140
+ const s = this.getZoneWith(a);
141
+ if (s)
142
+ return s._properties[a];
143
+ }
144
+ getZoneWith(a) {
145
+ let s = this;
146
+ for (; s; ) {
147
+ if (s._properties.hasOwnProperty(a))
148
+ return s;
149
+ s = s._parent;
150
+ }
151
+ return null;
152
+ }
153
+ fork(a) {
154
+ if (!a)
155
+ throw new Error("ZoneSpec required!");
156
+ return this._zoneDelegate.fork(this, a);
157
+ }
158
+ wrap(a, s) {
159
+ if (typeof a != "function")
160
+ throw new Error("Expecting function got: " + a);
161
+ const r = this._zoneDelegate.intercept(this, a, s), T = this;
162
+ return function() {
163
+ return T.runGuarded(r, this, arguments, s);
164
+ };
165
+ }
166
+ run(a, s, r, T) {
167
+ E = { parent: E, zone: this };
168
+ try {
169
+ return this._zoneDelegate.invoke(this, a, s, r, T);
170
+ } finally {
171
+ E = E.parent;
172
+ }
173
+ }
174
+ runGuarded(a, s = null, r, T) {
175
+ E = { parent: E, zone: this };
176
+ try {
177
+ try {
178
+ return this._zoneDelegate.invoke(this, a, s, r, T);
179
+ } catch (U) {
180
+ if (this._zoneDelegate.handleError(this, U))
181
+ throw U;
182
+ }
183
+ } finally {
184
+ E = E.parent;
185
+ }
186
+ }
187
+ runTask(a, s, r) {
188
+ if (a.zone != this)
189
+ throw new Error("A task can only be run in the zone of creation! (Creation: " + (a.zone || re).name + "; Execution: " + this.name + ")");
190
+ const T = a, { type: U, data: { isPeriodic: ie = !1, isRefreshable: N = !1 } = {} } = a;
191
+ if (a.state === K && (U === B || U === k))
192
+ return;
193
+ const me = a.state != A;
194
+ me && T._transitionTo(A, p);
195
+ const ve = S;
196
+ S = T, E = { parent: E, zone: this };
197
+ try {
198
+ U == k && a.data && !ie && !N && (a.cancelFn = void 0);
199
+ try {
200
+ return this._zoneDelegate.invokeTask(this, T, s, r);
201
+ } catch (se) {
202
+ if (this._zoneDelegate.handleError(this, se))
203
+ throw se;
204
+ }
205
+ } finally {
206
+ const se = a.state;
207
+ if (se !== K && se !== J)
208
+ if (U == B || ie || N && se === v)
209
+ me && T._transitionTo(p, A, v);
210
+ else {
211
+ const we = T._zoneDelegates;
212
+ this._updateTaskCount(T, -1), me && T._transitionTo(K, A, K), N && (T._zoneDelegates = we);
213
+ }
214
+ E = E.parent, S = ve;
215
+ }
216
+ }
217
+ scheduleTask(a) {
218
+ if (a.zone && a.zone !== this) {
219
+ let r = this;
220
+ for (; r; ) {
221
+ if (r === a.zone)
222
+ throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${a.zone.name}`);
223
+ r = r.parent;
224
+ }
225
+ }
226
+ a._transitionTo(v, K);
227
+ const s = [];
228
+ a._zoneDelegates = s, a._zone = this;
229
+ try {
230
+ a = this._zoneDelegate.scheduleTask(this, a);
231
+ } catch (r) {
232
+ throw a._transitionTo(J, v, K), this._zoneDelegate.handleError(this, r), r;
233
+ }
234
+ return a._zoneDelegates === s && this._updateTaskCount(a, 1), a.state == v && a._transitionTo(p, v), a;
235
+ }
236
+ scheduleMicroTask(a, s, r, T) {
237
+ return this.scheduleTask(new d($, a, s, r, T, void 0));
238
+ }
239
+ scheduleMacroTask(a, s, r, T, U) {
240
+ return this.scheduleTask(new d(k, a, s, r, T, U));
241
+ }
242
+ scheduleEventTask(a, s, r, T, U) {
243
+ return this.scheduleTask(new d(B, a, s, r, T, U));
244
+ }
245
+ cancelTask(a) {
246
+ if (a.zone != this)
247
+ throw new Error("A task can only be cancelled in the zone of creation! (Creation: " + (a.zone || re).name + "; Execution: " + this.name + ")");
248
+ if (!(a.state !== p && a.state !== A)) {
249
+ a._transitionTo(G, p, A);
250
+ try {
251
+ this._zoneDelegate.cancelTask(this, a);
252
+ } catch (s) {
253
+ throw a._transitionTo(J, G), this._zoneDelegate.handleError(this, s), s;
254
+ }
255
+ return this._updateTaskCount(a, -1), a._transitionTo(K, G), a.runCount = -1, a;
256
+ }
257
+ }
258
+ _updateTaskCount(a, s) {
259
+ const r = a._zoneDelegates;
260
+ s == -1 && (a._zoneDelegates = null);
261
+ for (let T = 0; T < r.length; T++)
262
+ r[T]._updateTaskCount(a.type, s);
263
+ }
264
+ }
265
+ const i = {
266
+ name: "",
267
+ onHasTask: (L, a, s, r) => L.hasTask(s, r),
268
+ onScheduleTask: (L, a, s, r) => L.scheduleTask(s, r),
269
+ onInvokeTask: (L, a, s, r, T, U) => L.invokeTask(s, r, T, U),
270
+ onCancelTask: (L, a, s, r) => L.cancelTask(s, r)
271
+ };
272
+ class u {
273
+ get zone() {
274
+ return this._zone;
275
+ }
276
+ _zone;
277
+ _taskCounts = {
278
+ microTask: 0,
279
+ macroTask: 0,
280
+ eventTask: 0
281
+ };
282
+ _parentDelegate;
283
+ _forkDlgt;
284
+ _forkZS;
285
+ _forkCurrZone;
286
+ _interceptDlgt;
287
+ _interceptZS;
288
+ _interceptCurrZone;
289
+ _invokeDlgt;
290
+ _invokeZS;
291
+ _invokeCurrZone;
292
+ _handleErrorDlgt;
293
+ _handleErrorZS;
294
+ _handleErrorCurrZone;
295
+ _scheduleTaskDlgt;
296
+ _scheduleTaskZS;
297
+ _scheduleTaskCurrZone;
298
+ _invokeTaskDlgt;
299
+ _invokeTaskZS;
300
+ _invokeTaskCurrZone;
301
+ _cancelTaskDlgt;
302
+ _cancelTaskZS;
303
+ _cancelTaskCurrZone;
304
+ _hasTaskDlgt;
305
+ _hasTaskDlgtOwner;
306
+ _hasTaskZS;
307
+ _hasTaskCurrZone;
308
+ constructor(a, s, r) {
309
+ 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;
310
+ const T = r && r.onHasTask, U = s && s._hasTaskZS;
311
+ (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));
312
+ }
313
+ fork(a, s) {
314
+ return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, a, s) : new t(a, s);
315
+ }
316
+ intercept(a, s, r) {
317
+ return this._interceptZS ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, a, s, r) : s;
318
+ }
319
+ invoke(a, s, r, T, U) {
320
+ return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, a, s, r, T, U) : s.apply(r, T);
321
+ }
322
+ handleError(a, s) {
323
+ return this._handleErrorZS ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, a, s) : !0;
324
+ }
325
+ scheduleTask(a, s) {
326
+ let r = s;
327
+ if (this._scheduleTaskZS)
328
+ this._hasTaskZS && r._zoneDelegates.push(this._hasTaskDlgtOwner), r = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, a, s), r || (r = s);
329
+ else if (s.scheduleFn)
330
+ s.scheduleFn(s);
331
+ else if (s.type == $)
332
+ X(s);
333
+ else
334
+ throw new Error("Task is missing scheduleFn.");
335
+ return r;
336
+ }
337
+ invokeTask(a, s, r, T) {
338
+ return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, a, s, r, T) : s.callback.apply(r, T);
339
+ }
340
+ cancelTask(a, s) {
341
+ let r;
342
+ if (this._cancelTaskZS)
343
+ r = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, a, s);
344
+ else {
345
+ if (!s.cancelFn)
346
+ throw Error("Task is not cancelable");
347
+ r = s.cancelFn(s);
348
+ }
349
+ return r;
350
+ }
351
+ hasTask(a, s) {
352
+ try {
353
+ this._hasTaskZS && this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, a, s);
354
+ } catch (r) {
355
+ this.handleError(a, r);
356
+ }
357
+ }
358
+ _updateTaskCount(a, s) {
359
+ const r = this._taskCounts, T = r[a], U = r[a] = T + s;
360
+ if (U < 0)
361
+ throw new Error("More tasks executed then were scheduled.");
362
+ if (T == 0 || U == 0) {
363
+ const ie = {
364
+ microTask: r.microTask > 0,
365
+ macroTask: r.macroTask > 0,
366
+ eventTask: r.eventTask > 0,
367
+ change: a
368
+ };
369
+ this.hasTask(this._zone, ie);
370
+ }
371
+ }
372
+ }
373
+ class d {
374
+ type;
375
+ source;
376
+ invoke;
377
+ callback;
378
+ data;
379
+ scheduleFn;
380
+ cancelFn;
381
+ _zone = null;
382
+ runCount = 0;
383
+ _zoneDelegates = null;
384
+ _state = "notScheduled";
385
+ constructor(a, s, r, T, U, ie) {
386
+ if (this.type = a, this.source = s, this.data = T, this.scheduleFn = U, this.cancelFn = ie, !r)
387
+ throw new Error("callback is not defined");
388
+ this.callback = r;
389
+ const N = this;
390
+ a === B && T && T.useG ? this.invoke = d.invokeTask : this.invoke = function() {
391
+ return d.invokeTask.call(I, N, this, arguments);
392
+ };
393
+ }
394
+ static invokeTask(a, s, r) {
395
+ a || (a = this), oe++;
396
+ try {
397
+ return a.runCount++, a.zone.runTask(a, s, r);
398
+ } finally {
399
+ oe == 1 && ne(), oe--;
400
+ }
401
+ }
402
+ get zone() {
403
+ return this._zone;
404
+ }
405
+ get state() {
406
+ return this._state;
407
+ }
408
+ cancelScheduleRequest() {
409
+ this._transitionTo(K, v);
410
+ }
411
+ _transitionTo(a, s, r) {
412
+ if (this._state === s || this._state === r)
413
+ this._state = a, a == K && (this._zoneDelegates = null);
414
+ else
415
+ throw new Error(`${this.type} '${this.source}': can not transition to '${a}', expecting state '${s}'${r ? " or '" + r + "'" : ""}, was '${this._state}'.`);
416
+ }
417
+ toString() {
418
+ return this.data && typeof this.data.handleId < "u" ? this.data.handleId.toString() : Object.prototype.toString.call(this);
419
+ }
420
+ // add toJSON method to prevent cyclic error when
421
+ // call JSON.stringify(zoneTask)
422
+ toJSON() {
423
+ return {
424
+ type: this.type,
425
+ state: this.state,
426
+ source: this.source,
427
+ zone: this.zone.name,
428
+ runCount: this.runCount
429
+ };
430
+ }
431
+ }
432
+ const g = C("setTimeout"), y = C("Promise"), w = C("then");
433
+ let _ = [], R = !1, j;
434
+ function x(L) {
435
+ if (j || I[y] && (j = I[y].resolve(0)), j) {
436
+ let a = j[w];
437
+ a || (a = j.then), a.call(j, L);
438
+ } else
439
+ I[g](L, 0);
440
+ }
441
+ function X(L) {
442
+ oe === 0 && _.length === 0 && x(ne), L && _.push(L);
443
+ }
444
+ function ne() {
445
+ if (!R) {
446
+ for (R = !0; _.length; ) {
447
+ const L = _;
448
+ _ = [];
449
+ for (let a = 0; a < L.length; a++) {
450
+ const s = L[a];
451
+ try {
452
+ s.zone.runTask(s, null, null);
453
+ } catch (r) {
454
+ D.onUnhandledError(r);
455
+ }
456
+ }
457
+ }
458
+ D.microtaskDrainDone(), R = !1;
459
+ }
460
+ }
461
+ const re = { name: "NO ZONE" }, K = "notScheduled", v = "scheduling", p = "scheduled", A = "running", G = "canceling", J = "unknown", $ = "microTask", k = "macroTask", B = "eventTask", O = {}, D = {
462
+ symbol: C,
463
+ currentZoneFrame: () => E,
464
+ onUnhandledError: Y,
465
+ microtaskDrainDone: Y,
466
+ scheduleMicroTask: X,
467
+ showUncaughtError: () => !t[C("ignoreConsoleErrorUncaughtError")],
468
+ patchEventTarget: () => [],
469
+ patchOnProperties: Y,
470
+ patchMethod: () => Y,
471
+ bindArguments: () => [],
472
+ patchThen: () => Y,
473
+ patchMacroTask: () => Y,
474
+ patchEventPrototype: () => Y,
475
+ isIEOrEdge: () => !1,
476
+ getGlobalObjects: () => {
477
+ },
478
+ ObjectDefineProperty: () => Y,
479
+ ObjectGetOwnPropertyDescriptor: () => {
480
+ },
481
+ ObjectCreate: () => {
482
+ },
483
+ ArraySlice: () => [],
484
+ patchClass: () => Y,
485
+ wrapWithCurrentZone: () => Y,
486
+ filterProperties: () => [],
487
+ attachOriginToPatched: () => Y,
488
+ _redefineProperty: () => Y,
489
+ patchCallbacks: () => Y,
490
+ nativeScheduleMicroTask: x
491
+ };
492
+ let E = { parent: null, zone: new t(null, null) }, S = null, oe = 0;
493
+ function Y() {
494
+ }
495
+ return c("Zone", "Zone"), t;
496
+ }
497
+ function H() {
498
+ const e = globalThis, n = e[C("forceDuplicateZoneCheck")] === !0;
499
+ if (e.Zone && (n || typeof e.Zone.__symbol__ != "function"))
500
+ throw new Error("Zone already loaded.");
501
+ return e.Zone ??= V(), e.Zone;
502
+ }
503
+ 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("");
504
+ function Ae(e, n) {
505
+ return Zone.current.wrap(e, n);
506
+ }
507
+ function xe(e, n, c, t, i) {
508
+ return Zone.current.scheduleMacroTask(e, n, c, t, i);
509
+ }
510
+ const F = C, Pe = typeof window < "u", Ce = Pe ? window : void 0, Q = Pe && Ce || globalThis, yt = "removeAttribute";
511
+ function He(e, n) {
512
+ for (let c = e.length - 1; c >= 0; c--)
513
+ typeof e[c] == "function" && (e[c] = Ae(e[c], n + "_" + c));
514
+ return e;
515
+ }
516
+ function vt(e, n) {
517
+ const c = e.constructor.name;
518
+ for (let t = 0; t < n.length; t++) {
519
+ const i = n[t], u = e[i];
520
+ if (u) {
521
+ const d = ee(e, i);
522
+ if (!$e(d))
523
+ continue;
524
+ e[i] = ((g) => {
525
+ const y = function() {
526
+ return g.apply(this, He(arguments, c + "." + i));
527
+ };
528
+ return ke(y, g), y;
529
+ })(u);
530
+ }
531
+ }
532
+ }
533
+ function $e(e) {
534
+ return e ? e.writable === !1 ? !1 : !(typeof e.get == "function" && typeof e.set > "u") : !0;
535
+ }
536
+ 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) {
537
+ if (e = e || Q.event, !e)
538
+ return;
539
+ let n = je[e.type];
540
+ n || (n = je[e.type] = F("ON_PROPERTY" + e.type));
541
+ const c = this || e.target || Q, t = c[n];
542
+ let i;
543
+ if (Ge && c === Ce && e.type === "error") {
544
+ const u = e;
545
+ i = t && t.call(this, u.message, u.filename, u.lineno, u.colno, u.error), i === !0 && e.preventDefault();
546
+ } else
547
+ i = t && t.apply(this, arguments), // https://github.com/angular/angular/issues/47579
548
+ // https://www.w3.org/TR/2011/WD-html5-20110525/history.html#beforeunloadevent
549
+ // This is the only specific case we should check for. The spec defines that the
550
+ // `returnValue` attribute represents the message to show the user. When the event
551
+ // is created, this attribute must be set to the empty string.
552
+ e.type === "beforeunload" && // To prevent any breaking changes resulting from this change, given that
553
+ // it was already causing a significant number of failures in G3, we have hidden
554
+ // that behavior behind a global configuration flag. Consumers can enable this
555
+ // flag explicitly if they want the `beforeunload` event to be handled as defined
556
+ // in the specification.
557
+ Q[Tt] && // The IDL event definition is `attribute DOMString returnValue`, so we check whether
558
+ // `typeof result` is a string.
559
+ typeof i == "string" ? e.returnValue = i : i != null && !i && e.preventDefault();
560
+ return i;
561
+ };
562
+ function Je(e, n, c) {
563
+ let t = ee(e, n);
564
+ if (!t && c && ee(c, n) && (t = { enumerable: !0, configurable: !0 }), !t || !t.configurable)
565
+ return;
566
+ const i = F("on" + n + "patched");
567
+ if (e.hasOwnProperty(i) && e[i])
568
+ return;
569
+ delete t.writable, delete t.value;
570
+ const u = t.get, d = t.set, g = n.slice(2);
571
+ let y = je[g];
572
+ y || (y = je[g] = F("ON_PROPERTY" + g)), t.set = function(w) {
573
+ let _ = this;
574
+ !_ && e === Q && (_ = Q), _ && (typeof _[y] == "function" && _.removeEventListener(g, Ke), d?.call(_, null), _[y] = w, typeof w == "function" && _.addEventListener(g, Ke, !1));
575
+ }, t.get = function() {
576
+ let w = this;
577
+ if (!w && e === Q && (w = Q), !w)
578
+ return null;
579
+ const _ = w[y];
580
+ if (_)
581
+ return _;
582
+ if (u) {
583
+ let R = u.call(this);
584
+ if (R)
585
+ return t.set.call(this, R), typeof w[yt] == "function" && w.removeAttribute(n), R;
586
+ }
587
+ return null;
588
+ }, te(e, n, t), e[i] = !0;
589
+ }
590
+ function Qe(e, n, c) {
591
+ if (n)
592
+ for (let t = 0; t < n.length; t++)
593
+ Je(e, "on" + n[t], c);
594
+ else {
595
+ const t = [];
596
+ for (const i in e)
597
+ i.slice(0, 2) == "on" && t.push(i);
598
+ for (let i = 0; i < t.length; i++)
599
+ Je(e, t[i], c);
600
+ }
601
+ }
602
+ const le = F("originalInstance");
603
+ function Oe(e) {
604
+ const n = Q[e];
605
+ if (!n)
606
+ return;
607
+ Q[F(e)] = n, Q[e] = function() {
608
+ const i = He(arguments, e);
609
+ switch (i.length) {
610
+ case 0:
611
+ this[le] = new n();
612
+ break;
613
+ case 1:
614
+ this[le] = new n(i[0]);
615
+ break;
616
+ case 2:
617
+ this[le] = new n(i[0], i[1]);
618
+ break;
619
+ case 3:
620
+ this[le] = new n(i[0], i[1], i[2]);
621
+ break;
622
+ case 4:
623
+ this[le] = new n(i[0], i[1], i[2], i[3]);
624
+ break;
625
+ default:
626
+ throw new Error("Arg list too long.");
627
+ }
628
+ }, ke(Q[e], n);
629
+ const c = new n(function() {
630
+ });
631
+ let t;
632
+ for (t in c)
633
+ e === "XMLHttpRequest" && t === "responseBlob" || function(i) {
634
+ typeof c[i] == "function" ? Q[e].prototype[i] = function() {
635
+ return this[le][i].apply(this[le], arguments);
636
+ } : te(Q[e].prototype, i, {
637
+ set: function(u) {
638
+ typeof u == "function" ? (this[le][i] = Ae(u, e + "." + i), ke(this[le][i], u)) : this[le][i] = u;
639
+ },
640
+ get: function() {
641
+ return this[le][i];
642
+ }
643
+ });
644
+ }(t);
645
+ for (t in n)
646
+ t !== "prototype" && n.hasOwnProperty(t) && (Q[e][t] = n[t]);
647
+ }
648
+ function de(e, n, c) {
649
+ let t = e;
650
+ for (; t && !t.hasOwnProperty(n); )
651
+ t = ae(t);
652
+ !t && e[n] && (t = e);
653
+ const i = F(n);
654
+ let u = null;
655
+ if (t && (!(u = t[i]) || !t.hasOwnProperty(i))) {
656
+ u = t[i] = t[n];
657
+ const d = t && ee(t, n);
658
+ if ($e(d)) {
659
+ const g = c(u, i, n);
660
+ t[n] = function() {
661
+ return g(this, arguments);
662
+ }, ke(t[n], u);
663
+ }
664
+ }
665
+ return u;
666
+ }
667
+ function bt(e, n, c) {
668
+ let t = null;
669
+ function i(u) {
670
+ const d = u.data;
671
+ return d.args[d.cbIdx] = function() {
672
+ u.invoke.apply(this, arguments);
673
+ }, t.apply(d.target, d.args), u;
674
+ }
675
+ t = de(e, n, (u) => function(d, g) {
676
+ const y = c(d, g);
677
+ return y.cbIdx >= 0 && typeof g[y.cbIdx] == "function" ? xe(y.name, g[y.cbIdx], y, i) : u.apply(d, g);
678
+ });
679
+ }
680
+ function ke(e, n) {
681
+ e[F("OriginalDelegate")] = n;
682
+ }
683
+ let et = !1, Ue = !1;
684
+ function Et() {
685
+ if (et)
686
+ return Ue;
687
+ et = !0;
688
+ try {
689
+ const e = Ce.navigator.userAgent;
690
+ (e.indexOf("MSIE ") !== -1 || e.indexOf("Trident/") !== -1 || e.indexOf("Edge/") !== -1) && (Ue = !0);
691
+ } catch {
692
+ }
693
+ return Ue;
694
+ }
695
+ function tt(e) {
696
+ return typeof e == "function";
697
+ }
698
+ function nt(e) {
699
+ return typeof e == "number";
700
+ }
701
+ const wt = {
702
+ useG: !0
703
+ }, ce = {}, rt = {}, ot = new RegExp("^" + Se + "(\\w+)(true|false)$"), st = F("propagationStopped");
704
+ function at(e, n) {
705
+ const c = (n ? n(e) : e) + ge, t = (n ? n(e) : e) + _e, i = Se + c, u = Se + t;
706
+ ce[e] = {}, ce[e][ge] = i, ce[e][_e] = u;
707
+ }
708
+ function Zt(e, n, c, t) {
709
+ 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) {
710
+ if (v.isRemoved)
711
+ return;
712
+ const G = v.callback;
713
+ typeof G == "object" && G.handleEvent && (v.callback = (k) => G.handleEvent(k), v.originalDelegate = G);
714
+ let J;
715
+ try {
716
+ v.invoke(v, p, [A]);
717
+ } catch (k) {
718
+ J = k;
719
+ }
720
+ const $ = v.options;
721
+ if ($ && typeof $ == "object" && $.once) {
722
+ const k = v.originalDelegate ? v.originalDelegate : v.callback;
723
+ p[u].call(p, A.type, k, $);
724
+ }
725
+ return J;
726
+ };
727
+ function x(v, p, A) {
728
+ if (p = p || e.event, !p)
729
+ return;
730
+ const G = v || p.target || e, J = G[ce[p.type][A ? _e : ge]];
731
+ if (J) {
732
+ const $ = [];
733
+ if (J.length === 1) {
734
+ const k = j(J[0], G, p);
735
+ k && $.push(k);
736
+ } else {
737
+ const k = J.slice();
738
+ for (let B = 0; B < k.length && !(p && p[st] === !0); B++) {
739
+ const O = j(k[B], G, p);
740
+ O && $.push(O);
741
+ }
742
+ }
743
+ if ($.length === 1)
744
+ throw $[0];
745
+ for (let k = 0; k < $.length; k++) {
746
+ const B = $[k];
747
+ n.nativeScheduleMicroTask(() => {
748
+ throw B;
749
+ });
750
+ }
751
+ }
752
+ }
753
+ const X = function(v) {
754
+ return x(this, v, !1);
755
+ }, ne = function(v) {
756
+ return x(this, v, !0);
757
+ };
758
+ function re(v, p) {
759
+ if (!v)
760
+ return !1;
761
+ let A = !0;
762
+ p && p.useG !== void 0 && (A = p.useG);
763
+ const G = p && p.vh;
764
+ let J = !0;
765
+ p && p.chkDup !== void 0 && (J = p.chkDup);
766
+ let $ = !1;
767
+ p && p.rt !== void 0 && ($ = p.rt);
768
+ let k = v;
769
+ for (; k && !k.hasOwnProperty(i); )
770
+ k = ae(k);
771
+ if (!k && v[i] && (k = v), !k || k[y])
772
+ return !1;
773
+ 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];
774
+ let Y;
775
+ p && p.prepend && (Y = k[F(p.prepend)] = k[p.prepend]);
776
+ function L(o, h) {
777
+ return h ? typeof o == "boolean" ? { capture: o, passive: !0 } : o ? typeof o == "object" && o.passive !== !1 ? { ...o, passive: !0 } : o : { passive: !0 } : o;
778
+ }
779
+ const a = function(o) {
780
+ if (!O.isExisting)
781
+ return D.call(O.target, O.eventName, O.capture ? ne : X, O.options);
782
+ }, s = function(o) {
783
+ if (!o.isRemoved) {
784
+ const h = ce[o.eventName];
785
+ let b;
786
+ h && (b = h[o.capture ? _e : ge]);
787
+ const Z = b && o.target[b];
788
+ if (Z) {
789
+ for (let m = 0; m < Z.length; m++)
790
+ if (Z[m] === o) {
791
+ Z.splice(m, 1), o.isRemoved = !0, o.removeAbortListener && (o.removeAbortListener(), o.removeAbortListener = null), Z.length === 0 && (o.allRemoved = !0, o.target[b] = null);
792
+ break;
793
+ }
794
+ }
795
+ }
796
+ if (o.allRemoved)
797
+ return E.call(o.target, o.eventName, o.capture ? ne : X, o.options);
798
+ }, r = function(o) {
799
+ return D.call(O.target, O.eventName, o.invoke, O.options);
800
+ }, T = function(o) {
801
+ return Y.call(O.target, O.eventName, o.invoke, O.options);
802
+ }, U = function(o) {
803
+ return E.call(o.target, o.eventName, o.invoke, o.options);
804
+ }, ie = A ? a : r, N = A ? s : U, me = function(o, h) {
805
+ const b = typeof h;
806
+ return b === "function" && o.callback === h || b === "object" && o.originalDelegate === h;
807
+ }, ve = p?.diff || me, se = Zone[F("UNPATCHED_EVENTS")], we = e[F("PASSIVE_EVENTS")];
808
+ function f(o) {
809
+ if (typeof o == "object" && o !== null) {
810
+ const h = { ...o };
811
+ return o.signal && (h.signal = o.signal), h;
812
+ }
813
+ return o;
814
+ }
815
+ const l = function(o, h, b, Z, m = !1, z = !1) {
816
+ return function() {
817
+ const M = this || e;
818
+ let P = arguments[0];
819
+ p && p.transferEventName && (P = p.transferEventName(P));
820
+ let W = arguments[1];
821
+ if (!W)
822
+ return o.apply(this, arguments);
823
+ if (Re && P === "uncaughtException")
824
+ return o.apply(this, arguments);
825
+ let q = !1;
826
+ if (typeof W != "function") {
827
+ if (!W.handleEvent)
828
+ return o.apply(this, arguments);
829
+ q = !0;
830
+ }
831
+ if (G && !G(o, W, M, arguments))
832
+ return;
833
+ const ye = !!we && we.indexOf(P) !== -1, fe = f(L(arguments[2], ye)), Ze = fe?.signal;
834
+ if (Ze?.aborted)
835
+ return;
836
+ if (se) {
837
+ for (let pe = 0; pe < se.length; pe++)
838
+ if (P === se[pe])
839
+ return ye ? o.call(M, P, W, fe) : o.apply(this, arguments);
840
+ }
841
+ const qe = fe ? typeof fe == "boolean" ? !0 : fe.capture : !1, ht = fe && typeof fe == "object" ? fe.once : !1, Ft = Zone.current;
842
+ let Ve = ce[P];
843
+ Ve || (at(P, B), Ve = ce[P]);
844
+ const ft = Ve[qe ? _e : ge];
845
+ let De = M[ft], pt = !1;
846
+ if (De) {
847
+ if (pt = !0, J) {
848
+ for (let pe = 0; pe < De.length; pe++)
849
+ if (ve(De[pe], W))
850
+ return;
851
+ }
852
+ } else
853
+ De = M[ft] = [];
854
+ let Me;
855
+ const _t = M.constructor.name, gt = rt[_t];
856
+ 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;
857
+ const ze = A ? wt : void 0;
858
+ ze && (ze.taskData = O), Ze && (O.options.signal = void 0);
859
+ const ue = Ft.scheduleEventTask(Me, W, ze, b, Z);
860
+ if (Ze) {
861
+ O.options.signal = Ze;
862
+ const pe = () => ue.zone.cancelTask(ue);
863
+ o.call(Ze, "abort", pe, { once: !0 }), ue.removeAbortListener = () => Ze.removeEventListener("abort", pe);
864
+ }
865
+ 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)
866
+ return M;
867
+ };
868
+ };
869
+ return k[i] = l(D, w, ie, N, $), Y && (k[_] = l(Y, R, T, N, $, !0)), k[u] = function() {
870
+ const o = this || e;
871
+ let h = arguments[0];
872
+ p && p.transferEventName && (h = p.transferEventName(h));
873
+ const b = arguments[2], Z = b ? typeof b == "boolean" ? !0 : b.capture : !1, m = arguments[1];
874
+ if (!m)
875
+ return E.apply(this, arguments);
876
+ if (G && !G(E, m, o, arguments))
877
+ return;
878
+ const z = ce[h];
879
+ let M;
880
+ z && (M = z[Z ? _e : ge]);
881
+ const P = M && o[M];
882
+ if (P)
883
+ for (let W = 0; W < P.length; W++) {
884
+ const q = P[W];
885
+ if (ve(q, m)) {
886
+ if (P.splice(W, 1), q.isRemoved = !0, P.length === 0 && (q.allRemoved = !0, o[M] = null, !Z && typeof h == "string")) {
887
+ const ye = Se + "ON_PROPERTY" + h;
888
+ o[ye] = null;
889
+ }
890
+ return q.zone.cancelTask(q), $ ? o : void 0;
891
+ }
892
+ }
893
+ return E.apply(this, arguments);
894
+ }, k[d] = function() {
895
+ const o = this || e;
896
+ let h = arguments[0];
897
+ p && p.transferEventName && (h = p.transferEventName(h));
898
+ const b = [], Z = it(o, B ? B(h) : h);
899
+ for (let m = 0; m < Z.length; m++) {
900
+ const z = Z[m];
901
+ let M = z.originalDelegate ? z.originalDelegate : z.callback;
902
+ b.push(M);
903
+ }
904
+ return b;
905
+ }, k[g] = function() {
906
+ const o = this || e;
907
+ let h = arguments[0];
908
+ if (h) {
909
+ p && p.transferEventName && (h = p.transferEventName(h));
910
+ const b = ce[h];
911
+ if (b) {
912
+ const Z = b[ge], m = b[_e], z = o[Z], M = o[m];
913
+ if (z) {
914
+ const P = z.slice();
915
+ for (let W = 0; W < P.length; W++) {
916
+ const q = P[W];
917
+ let ye = q.originalDelegate ? q.originalDelegate : q.callback;
918
+ this[u].call(this, h, ye, q.options);
919
+ }
920
+ }
921
+ if (M) {
922
+ const P = M.slice();
923
+ for (let W = 0; W < P.length; W++) {
924
+ const q = P[W];
925
+ let ye = q.originalDelegate ? q.originalDelegate : q.callback;
926
+ this[u].call(this, h, ye, q.options);
927
+ }
928
+ }
929
+ }
930
+ } else {
931
+ const b = Object.keys(o);
932
+ for (let Z = 0; Z < b.length; Z++) {
933
+ const m = b[Z], z = ot.exec(m);
934
+ let M = z && z[1];
935
+ M && M !== "removeListener" && this[g].call(this, M);
936
+ }
937
+ this[g].call(this, "removeListener");
938
+ }
939
+ if ($)
940
+ return this;
941
+ }, ke(k[i], D), ke(k[u], E), oe && ke(k[g], oe), S && ke(k[d], S), !0;
942
+ }
943
+ let K = [];
944
+ for (let v = 0; v < c.length; v++)
945
+ K[v] = re(c[v], t);
946
+ return K;
947
+ }
948
+ function it(e, n) {
949
+ if (!n) {
950
+ const u = [];
951
+ for (let d in e) {
952
+ const g = ot.exec(d);
953
+ let y = g && g[1];
954
+ if (y && (!n || y === n)) {
955
+ const w = e[d];
956
+ if (w)
957
+ for (let _ = 0; _ < w.length; _++)
958
+ u.push(w[_]);
959
+ }
960
+ }
961
+ return u;
962
+ }
963
+ let c = ce[n];
964
+ c || (at(n), c = ce[n]);
965
+ const t = e[c[ge]], i = e[c[_e]];
966
+ return t ? i ? t.concat(i) : t.slice() : i ? i.slice() : [];
967
+ }
968
+ function Dt(e, n) {
969
+ const c = e.Event;
970
+ c && c.prototype && n.patchMethod(c.prototype, "stopImmediatePropagation", (t) => function(i, u) {
971
+ i[st] = !0, t && t.apply(i, u);
972
+ });
973
+ }
974
+ function St(e, n) {
975
+ n.patchMethod(e, "queueMicrotask", (c) => function(t, i) {
976
+ Zone.current.scheduleMicroTask("queueMicrotask", i[0]);
977
+ });
978
+ }
979
+ const Le = F("zoneTask");
980
+ function Ee(e, n, c, t) {
981
+ let i = null, u = null;
982
+ n += t, c += t;
983
+ const d = {};
984
+ function g(w) {
985
+ const _ = w.data;
986
+ _.args[0] = function() {
987
+ return w.invoke.apply(this, arguments);
988
+ };
989
+ const R = i.apply(e, _.args);
990
+ return nt(R) ? _.handleId = R : (_.handle = R, _.isRefreshable = tt(R.refresh)), w;
991
+ }
992
+ function y(w) {
993
+ const { handle: _, handleId: R } = w.data;
994
+ return u.call(e, _ ?? R);
995
+ }
996
+ i = de(e, n, (w) => function(_, R) {
997
+ if (tt(R[0])) {
998
+ const j = {
999
+ isRefreshable: !1,
1000
+ isPeriodic: t === "Interval",
1001
+ delay: t === "Timeout" || t === "Interval" ? R[1] || 0 : void 0,
1002
+ args: R
1003
+ }, x = R[0];
1004
+ R[0] = function() {
1005
+ try {
1006
+ return x.apply(this, arguments);
1007
+ } finally {
1008
+ const { handle: p, handleId: A, isPeriodic: G, isRefreshable: J } = j;
1009
+ !G && !J && (A ? delete d[A] : p && (p[Le] = null));
1010
+ }
1011
+ };
1012
+ const X = xe(n, R[0], j, g, y);
1013
+ if (!X)
1014
+ return X;
1015
+ const { handleId: ne, handle: re, isRefreshable: K, isPeriodic: v } = X.data;
1016
+ if (ne)
1017
+ d[ne] = X;
1018
+ else if (re && (re[Le] = X, K && !v)) {
1019
+ const p = re.refresh;
1020
+ re.refresh = function() {
1021
+ const { zone: A, state: G } = X;
1022
+ return G === "notScheduled" ? (X._state = "scheduled", A._updateTaskCount(X, 1)) : G === "running" && (X._state = "scheduling"), p.call(this);
1023
+ };
1024
+ }
1025
+ return re ?? ne ?? X;
1026
+ } else
1027
+ return w.apply(e, R);
1028
+ }), u = de(e, c, (w) => function(_, R) {
1029
+ const j = R[0];
1030
+ let x;
1031
+ 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);
1032
+ });
1033
+ }
1034
+ function Ct(e, n) {
1035
+ const { isBrowser: c, isMix: t } = n.getGlobalObjects();
1036
+ if (!c && !t || !e.customElements || !("customElements" in e))
1037
+ return;
1038
+ const i = [
1039
+ "connectedCallback",
1040
+ "disconnectedCallback",
1041
+ "adoptedCallback",
1042
+ "attributeChangedCallback",
1043
+ "formAssociatedCallback",
1044
+ "formDisabledCallback",
1045
+ "formResetCallback",
1046
+ "formStateRestoreCallback"
1047
+ ];
1048
+ n.patchCallbacks(n, e.customElements, "customElements", "define", i);
1049
+ }
1050
+ function Ot(e, n) {
1051
+ if (Zone[n.symbol("patchEventTarget")])
1052
+ return;
1053
+ const { eventNames: c, zoneSymbolEventNames: t, TRUE_STR: i, FALSE_STR: u, ZONE_SYMBOL_PREFIX: d } = n.getGlobalObjects();
1054
+ for (let y = 0; y < c.length; y++) {
1055
+ const w = c[y], _ = w + u, R = w + i, j = d + _, x = d + R;
1056
+ t[w] = {}, t[w][u] = j, t[w][i] = x;
1057
+ }
1058
+ const g = e.EventTarget;
1059
+ if (!(!g || !g.prototype))
1060
+ return n.patchEventTarget(e, n, [g && g.prototype]), !0;
1061
+ }
1062
+ function zt(e, n) {
1063
+ n.patchEventPrototype(e, n);
1064
+ }
1065
+ function ct(e, n, c) {
1066
+ if (!c || c.length === 0)
1067
+ return n;
1068
+ const t = c.filter((u) => u.target === e);
1069
+ if (t.length === 0)
1070
+ return n;
1071
+ const i = t[0].ignoreProperties;
1072
+ return n.filter((u) => i.indexOf(u) === -1);
1073
+ }
1074
+ function lt(e, n, c, t) {
1075
+ if (!e)
1076
+ return;
1077
+ const i = ct(e, n, c);
1078
+ Qe(e, i, t);
1079
+ }
1080
+ function We(e) {
1081
+ return Object.getOwnPropertyNames(e).filter((n) => n.startsWith("on") && n.length > 2).map((n) => n.substring(2));
1082
+ }
1083
+ function Pt(e, n) {
1084
+ if (Re && !Ye || Zone[e.symbol("patchEvents")])
1085
+ return;
1086
+ const c = n.__Zone_ignore_on_properties;
1087
+ let t = [];
1088
+ if (Ge) {
1089
+ const i = window;
1090
+ t = t.concat([
1091
+ "Document",
1092
+ "SVGElement",
1093
+ "Element",
1094
+ "HTMLElement",
1095
+ "HTMLBodyElement",
1096
+ "HTMLMediaElement",
1097
+ "HTMLFrameSetElement",
1098
+ "HTMLFrameElement",
1099
+ "HTMLIFrameElement",
1100
+ "HTMLMarqueeElement",
1101
+ "Worker"
1102
+ ]);
1103
+ const u = [];
1104
+ lt(i, We(i), c && c.concat(u), ae(i));
1105
+ }
1106
+ t = t.concat([
1107
+ "XMLHttpRequest",
1108
+ "XMLHttpRequestEventTarget",
1109
+ "IDBIndex",
1110
+ "IDBRequest",
1111
+ "IDBOpenDBRequest",
1112
+ "IDBDatabase",
1113
+ "IDBTransaction",
1114
+ "IDBCursor",
1115
+ "WebSocket"
1116
+ ]);
1117
+ for (let i = 0; i < t.length; i++) {
1118
+ const u = n[t[i]];
1119
+ u?.prototype && lt(u.prototype, We(u.prototype), c);
1120
+ }
1121
+ }
1122
+ function Rt(e) {
1123
+ e.__load_patch("legacy", (n) => {
1124
+ const c = n[e.__symbol__("legacyPatch")];
1125
+ c && c();
1126
+ }), e.__load_patch("timers", (n) => {
1127
+ const c = "clear";
1128
+ Ee(n, "set", c, "Timeout"), Ee(n, "set", c, "Interval"), Ee(n, "set", c, "Immediate");
1129
+ }), e.__load_patch("requestAnimationFrame", (n) => {
1130
+ Ee(n, "request", "cancel", "AnimationFrame"), Ee(n, "mozRequest", "mozCancel", "AnimationFrame"), Ee(n, "webkitRequest", "webkitCancel", "AnimationFrame");
1131
+ }), e.__load_patch("blocking", (n, c) => {
1132
+ const t = ["alert", "prompt", "confirm"];
1133
+ for (let i = 0; i < t.length; i++) {
1134
+ const u = t[i];
1135
+ de(n, u, (d, g, y) => function(w, _) {
1136
+ return c.current.run(d, n, _, y);
1137
+ });
1138
+ }
1139
+ }), e.__load_patch("EventTarget", (n, c, t) => {
1140
+ zt(n, t), Ot(n, t);
1141
+ const i = n.XMLHttpRequestEventTarget;
1142
+ i && i.prototype && t.patchEventTarget(n, t, [i.prototype]);
1143
+ }), e.__load_patch("MutationObserver", (n, c, t) => {
1144
+ Oe("MutationObserver"), Oe("WebKitMutationObserver");
1145
+ }), e.__load_patch("IntersectionObserver", (n, c, t) => {
1146
+ Oe("IntersectionObserver");
1147
+ }), e.__load_patch("FileReader", (n, c, t) => {
1148
+ Oe("FileReader");
1149
+ }), e.__load_patch("on_property", (n, c, t) => {
1150
+ Pt(t, n);
1151
+ }), e.__load_patch("customElements", (n, c, t) => {
1152
+ Ct(n, t);
1153
+ }), e.__load_patch("XHR", (n, c) => {
1154
+ w(n);
1155
+ const t = F("xhrTask"), i = F("xhrSync"), u = F("xhrListener"), d = F("xhrScheduled"), g = F("xhrURL"), y = F("xhrErrorBeforeScheduled");
1156
+ function w(_) {
1157
+ const R = _.XMLHttpRequest;
1158
+ if (!R)
1159
+ return;
1160
+ const j = R.prototype;
1161
+ function x(D) {
1162
+ return D[t];
1163
+ }
1164
+ let X = j[Ie], ne = j[Fe];
1165
+ if (!X) {
1166
+ const D = _.XMLHttpRequestEventTarget;
1167
+ if (D) {
1168
+ const E = D.prototype;
1169
+ X = E[Ie], ne = E[Fe];
1170
+ }
1171
+ }
1172
+ const re = "readystatechange", K = "scheduled";
1173
+ function v(D) {
1174
+ const E = D.data, S = E.target;
1175
+ S[d] = !1, S[y] = !1;
1176
+ const oe = S[u];
1177
+ X || (X = S[Ie], ne = S[Fe]), oe && ne.call(S, re, oe);
1178
+ const Y = S[u] = () => {
1179
+ if (S.readyState === S.DONE)
1180
+ if (!E.aborted && S[d] && D.state === K) {
1181
+ const L = S[c.__symbol__("loadfalse")];
1182
+ if (S.status !== 0 && L && L.length > 0) {
1183
+ const a = D.invoke;
1184
+ D.invoke = function() {
1185
+ const s = S[c.__symbol__("loadfalse")];
1186
+ for (let r = 0; r < s.length; r++)
1187
+ s[r] === D && s.splice(r, 1);
1188
+ !E.aborted && D.state === K && a.call(D);
1189
+ }, L.push(D);
1190
+ } else
1191
+ D.invoke();
1192
+ } else !E.aborted && S[d] === !1 && (S[y] = !0);
1193
+ };
1194
+ return X.call(S, re, Y), S[t] || (S[t] = D), B.apply(S, E.args), S[d] = !0, D;
1195
+ }
1196
+ function p() {
1197
+ }
1198
+ function A(D) {
1199
+ const E = D.data;
1200
+ return E.aborted = !0, O.apply(E.target, E.args);
1201
+ }
1202
+ const G = de(j, "open", () => function(D, E) {
1203
+ return D[i] = E[2] == !1, D[g] = E[1], G.apply(D, E);
1204
+ }), J = "XMLHttpRequest.send", $ = F("fetchTaskAborting"), k = F("fetchTaskScheduling"), B = de(j, "send", () => function(D, E) {
1205
+ if (c.current[k] === !0 || D[i])
1206
+ return B.apply(D, E);
1207
+ {
1208
+ const S = {
1209
+ target: D,
1210
+ url: D[g],
1211
+ isPeriodic: !1,
1212
+ args: E,
1213
+ aborted: !1
1214
+ }, oe = xe(J, p, S, v, A);
1215
+ D && D[y] === !0 && !S.aborted && oe.state === K && oe.invoke();
1216
+ }
1217
+ }), O = de(j, "abort", () => function(D, E) {
1218
+ const S = x(D);
1219
+ if (S && typeof S.type == "string") {
1220
+ if (S.cancelFn == null || S.data && S.data.aborted)
1221
+ return;
1222
+ S.zone.cancelTask(S);
1223
+ } else if (c.current[$] === !0)
1224
+ return O.apply(D, E);
1225
+ });
1226
+ }
1227
+ }), e.__load_patch("geolocation", (n) => {
1228
+ n.navigator && n.navigator.geolocation && vt(n.navigator.geolocation, ["getCurrentPosition", "watchPosition"]);
1229
+ }), e.__load_patch("PromiseRejectionEvent", (n, c) => {
1230
+ function t(i) {
1231
+ return function(u) {
1232
+ it(n, i).forEach((d) => {
1233
+ const g = n.PromiseRejectionEvent;
1234
+ if (g) {
1235
+ const y = new g(i, {
1236
+ promise: u.promise,
1237
+ reason: u.rejection
1238
+ });
1239
+ d.invoke(y);
1240
+ }
1241
+ });
1242
+ };
1243
+ }
1244
+ n.PromiseRejectionEvent && (c[F("unhandledPromiseRejectionHandler")] = t("unhandledrejection"), c[F("rejectionHandledHandler")] = t("rejectionhandled"));
1245
+ }), e.__load_patch("queueMicrotask", (n, c, t) => {
1246
+ St(n, t);
1247
+ });
1248
+ }
1249
+ function jt(e) {
1250
+ e.__load_patch("ZoneAwarePromise", (n, c, t) => {
1251
+ const i = Object.getOwnPropertyDescriptor, u = Object.defineProperty;
1252
+ function d(f) {
1253
+ return f && f.toString === Object.prototype.toString ? (f.constructor && f.constructor.name || "") + ": " + JSON.stringify(f) : f ? f.toString() : Object.prototype.toString.call(f);
1254
+ }
1255
+ const g = t.symbol, y = [], w = n[g("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")] !== !1, _ = g("Promise"), R = g("then"), j = "__creationTrace__";
1256
+ t.onUnhandledError = (f) => {
1257
+ if (t.showUncaughtError()) {
1258
+ const l = f && f.rejection;
1259
+ 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);
1260
+ }
1261
+ }, t.microtaskDrainDone = () => {
1262
+ for (; y.length; ) {
1263
+ const f = y.shift();
1264
+ try {
1265
+ f.zone.runGuarded(() => {
1266
+ throw f.throwOriginal ? f.rejection : f;
1267
+ });
1268
+ } catch (l) {
1269
+ X(l);
1270
+ }
1271
+ }
1272
+ };
1273
+ const x = g("unhandledPromiseRejectionHandler");
1274
+ function X(f) {
1275
+ t.onUnhandledError(f);
1276
+ try {
1277
+ const l = c[x];
1278
+ typeof l == "function" && l.call(this, f);
1279
+ } catch {
1280
+ }
1281
+ }
1282
+ function ne(f) {
1283
+ return f && typeof f.then == "function";
1284
+ }
1285
+ function re(f) {
1286
+ return f;
1287
+ }
1288
+ function K(f) {
1289
+ return N.reject(f);
1290
+ }
1291
+ 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;
1292
+ function E(f, l) {
1293
+ return (o) => {
1294
+ try {
1295
+ L(f, l, o);
1296
+ } catch (h) {
1297
+ L(f, !1, h);
1298
+ }
1299
+ };
1300
+ }
1301
+ const S = function() {
1302
+ let f = !1;
1303
+ return function(l) {
1304
+ return function() {
1305
+ f || (f = !0, l.apply(null, arguments));
1306
+ };
1307
+ };
1308
+ }, oe = "Promise resolved with itself", Y = g("currentTaskTrace");
1309
+ function L(f, l, o) {
1310
+ const h = S();
1311
+ if (f === o)
1312
+ throw new TypeError(oe);
1313
+ if (f[v] === k) {
1314
+ let b = null;
1315
+ try {
1316
+ (typeof o == "object" || typeof o == "function") && (b = o && o.then);
1317
+ } catch (Z) {
1318
+ return h(() => {
1319
+ L(f, !1, Z);
1320
+ })(), f;
1321
+ }
1322
+ if (l !== O && o instanceof N && o.hasOwnProperty(v) && o.hasOwnProperty(p) && o[v] !== k)
1323
+ s(o), L(f, o[v], o[p]);
1324
+ else if (l !== O && typeof b == "function")
1325
+ try {
1326
+ b.call(o, h(E(f, l)), h(E(f, !1)));
1327
+ } catch (Z) {
1328
+ h(() => {
1329
+ L(f, !1, Z);
1330
+ })();
1331
+ }
1332
+ else {
1333
+ f[v] = l;
1334
+ const Z = f[p];
1335
+ if (f[p] = o, f[A] === A && l === B && (f[v] = f[J], f[p] = f[G]), l === O && o instanceof Error) {
1336
+ const m = c.currentTask && c.currentTask.data && c.currentTask.data[j];
1337
+ m && u(o, Y, {
1338
+ configurable: !0,
1339
+ enumerable: !1,
1340
+ writable: !0,
1341
+ value: m
1342
+ });
1343
+ }
1344
+ for (let m = 0; m < Z.length; )
1345
+ r(f, Z[m++], Z[m++], Z[m++], Z[m++]);
1346
+ if (Z.length == 0 && l == O) {
1347
+ f[v] = D;
1348
+ let m = o;
1349
+ try {
1350
+ throw new Error("Uncaught (in promise): " + d(o) + (o && o.stack ? `
1351
+ ` + o.stack : ""));
1352
+ } catch (z) {
1353
+ m = z;
1354
+ }
1355
+ w && (m.throwOriginal = !0), m.rejection = o, m.promise = f, m.zone = c.current, m.task = c.currentTask, y.push(m), t.scheduleMicroTask();
1356
+ }
1357
+ }
1358
+ }
1359
+ return f;
1360
+ }
1361
+ const a = g("rejectionHandledHandler");
1362
+ function s(f) {
1363
+ if (f[v] === D) {
1364
+ try {
1365
+ const l = c[a];
1366
+ l && typeof l == "function" && l.call(this, { rejection: f[p], promise: f });
1367
+ } catch {
1368
+ }
1369
+ f[v] = O;
1370
+ for (let l = 0; l < y.length; l++)
1371
+ f === y[l].promise && y.splice(l, 1);
1372
+ }
1373
+ }
1374
+ function r(f, l, o, h, b) {
1375
+ s(f);
1376
+ const Z = f[v], m = Z ? typeof h == "function" ? h : re : typeof b == "function" ? b : K;
1377
+ l.scheduleMicroTask($, () => {
1378
+ try {
1379
+ const z = f[p], M = !!o && A === o[A];
1380
+ M && (o[G] = z, o[J] = Z);
1381
+ const P = l.run(m, void 0, M && m !== K && m !== re ? [] : [z]);
1382
+ L(o, !0, P);
1383
+ } catch (z) {
1384
+ L(o, !1, z);
1385
+ }
1386
+ }, o);
1387
+ }
1388
+ const T = "function ZoneAwarePromise() { [native code] }", U = function() {
1389
+ }, ie = n.AggregateError;
1390
+ class N {
1391
+ static toString() {
1392
+ return T;
1393
+ }
1394
+ static resolve(l) {
1395
+ return l instanceof N ? l : L(new this(null), B, l);
1396
+ }
1397
+ static reject(l) {
1398
+ return L(new this(null), O, l);
1399
+ }
1400
+ static withResolvers() {
1401
+ const l = {};
1402
+ return l.promise = new N((o, h) => {
1403
+ l.resolve = o, l.reject = h;
1404
+ }), l;
1405
+ }
1406
+ static any(l) {
1407
+ if (!l || typeof l[Symbol.iterator] != "function")
1408
+ return Promise.reject(new ie([], "All promises were rejected"));
1409
+ const o = [];
1410
+ let h = 0;
1411
+ try {
1412
+ for (let m of l)
1413
+ h++, o.push(N.resolve(m));
1414
+ } catch {
1415
+ return Promise.reject(new ie([], "All promises were rejected"));
1416
+ }
1417
+ if (h === 0)
1418
+ return Promise.reject(new ie([], "All promises were rejected"));
1419
+ let b = !1;
1420
+ const Z = [];
1421
+ return new N((m, z) => {
1422
+ for (let M = 0; M < o.length; M++)
1423
+ o[M].then((P) => {
1424
+ b || (b = !0, m(P));
1425
+ }, (P) => {
1426
+ Z.push(P), h--, h === 0 && (b = !0, z(new ie(Z, "All promises were rejected")));
1427
+ });
1428
+ });
1429
+ }
1430
+ static race(l) {
1431
+ let o, h, b = new this((z, M) => {
1432
+ o = z, h = M;
1433
+ });
1434
+ function Z(z) {
1435
+ o(z);
1436
+ }
1437
+ function m(z) {
1438
+ h(z);
1439
+ }
1440
+ for (let z of l)
1441
+ ne(z) || (z = this.resolve(z)), z.then(Z, m);
1442
+ return b;
1443
+ }
1444
+ static all(l) {
1445
+ return N.allWithCallback(l);
1446
+ }
1447
+ static allSettled(l) {
1448
+ return (this && this.prototype instanceof N ? this : N).allWithCallback(l, {
1449
+ thenCallback: (o) => ({ status: "fulfilled", value: o }),
1450
+ errorCallback: (o) => ({ status: "rejected", reason: o })
1451
+ });
1452
+ }
1453
+ static allWithCallback(l, o) {
1454
+ let h, b, Z = new this((P, W) => {
1455
+ h = P, b = W;
1456
+ }), m = 2, z = 0;
1457
+ const M = [];
1458
+ for (let P of l) {
1459
+ ne(P) || (P = this.resolve(P));
1460
+ const W = z;
1461
+ try {
1462
+ P.then((q) => {
1463
+ M[W] = o ? o.thenCallback(q) : q, m--, m === 0 && h(M);
1464
+ }, (q) => {
1465
+ o ? (M[W] = o.errorCallback(q), m--, m === 0 && h(M)) : b(q);
1466
+ });
1467
+ } catch (q) {
1468
+ b(q);
1469
+ }
1470
+ m++, z++;
1471
+ }
1472
+ return m -= 2, m === 0 && h(M), Z;
1473
+ }
1474
+ constructor(l) {
1475
+ const o = this;
1476
+ if (!(o instanceof N))
1477
+ throw new Error("Must be an instanceof Promise.");
1478
+ o[v] = k, o[p] = [];
1479
+ try {
1480
+ const h = S();
1481
+ l && l(h(E(o, B)), h(E(o, O)));
1482
+ } catch (h) {
1483
+ L(o, !1, h);
1484
+ }
1485
+ }
1486
+ get [Symbol.toStringTag]() {
1487
+ return "Promise";
1488
+ }
1489
+ get [Symbol.species]() {
1490
+ return N;
1491
+ }
1492
+ then(l, o) {
1493
+ let h = this.constructor?.[Symbol.species];
1494
+ (!h || typeof h != "function") && (h = this.constructor || N);
1495
+ const b = new h(U), Z = c.current;
1496
+ return this[v] == k ? this[p].push(Z, b, l, o) : r(this, Z, b, l, o), b;
1497
+ }
1498
+ catch(l) {
1499
+ return this.then(null, l);
1500
+ }
1501
+ finally(l) {
1502
+ let o = this.constructor?.[Symbol.species];
1503
+ (!o || typeof o != "function") && (o = N);
1504
+ const h = new o(U);
1505
+ h[A] = A;
1506
+ const b = c.current;
1507
+ return this[v] == k ? this[p].push(b, h, l, l) : r(this, b, h, l, l), h;
1508
+ }
1509
+ }
1510
+ N.resolve = N.resolve, N.reject = N.reject, N.race = N.race, N.all = N.all;
1511
+ const me = n[_] = n.Promise;
1512
+ n.Promise = N;
1513
+ const ve = g("thenPatched");
1514
+ function se(f) {
1515
+ const l = f.prototype, o = i(l, "then");
1516
+ if (o && (o.writable === !1 || !o.configurable))
1517
+ return;
1518
+ const h = l.then;
1519
+ l[R] = h, f.prototype.then = function(b, Z) {
1520
+ return new N((m, z) => {
1521
+ h.call(this, m, z);
1522
+ }).then(b, Z);
1523
+ }, f[ve] = !0;
1524
+ }
1525
+ t.patchThen = se;
1526
+ function we(f) {
1527
+ return function(l, o) {
1528
+ let h = f.apply(l, o);
1529
+ if (h instanceof N)
1530
+ return h;
1531
+ let b = h.constructor;
1532
+ return b[ve] || se(b), h;
1533
+ };
1534
+ }
1535
+ return me && (se(me), de(n, "fetch", (f) => we(f))), Promise[c.__symbol__("uncaughtPromiseErrors")] = y, N;
1536
+ });
1537
+ }
1538
+ function Lt(e) {
1539
+ e.__load_patch("toString", (n) => {
1540
+ const c = Function.prototype.toString, t = F("OriginalDelegate"), i = F("Promise"), u = F("Error"), d = function() {
1541
+ if (typeof this == "function") {
1542
+ const w = this[t];
1543
+ if (w)
1544
+ return typeof w == "function" ? c.call(w) : Object.prototype.toString.call(w);
1545
+ if (this === Promise) {
1546
+ const _ = n[i];
1547
+ if (_)
1548
+ return c.call(_);
1549
+ }
1550
+ if (this === Error) {
1551
+ const _ = n[u];
1552
+ if (_)
1553
+ return c.call(_);
1554
+ }
1555
+ }
1556
+ return c.call(this);
1557
+ };
1558
+ d[t] = c, Function.prototype.toString = d;
1559
+ const g = Object.prototype.toString, y = "[object Promise]";
1560
+ Object.prototype.toString = function() {
1561
+ return typeof Promise == "function" && this instanceof Promise ? y : g.call(this);
1562
+ };
1563
+ });
1564
+ }
1565
+ function Mt(e, n, c, t, i) {
1566
+ const u = Zone.__symbol__(t);
1567
+ if (n[u])
1568
+ return;
1569
+ const d = n[u] = n[t];
1570
+ n[t] = function(g, y, w) {
1571
+ return y && y.prototype && i.forEach(function(_) {
1572
+ const R = `${c}.${t}::` + _, j = y.prototype;
1573
+ try {
1574
+ if (j.hasOwnProperty(_)) {
1575
+ const x = e.ObjectGetOwnPropertyDescriptor(j, _);
1576
+ x && x.value ? (x.value = e.wrapWithCurrentZone(x.value, R), e._redefineProperty(y.prototype, _, x)) : j[_] && (j[_] = e.wrapWithCurrentZone(j[_], R));
1577
+ } else j[_] && (j[_] = e.wrapWithCurrentZone(j[_], R));
1578
+ } catch {
1579
+ }
1580
+ }), d.call(n, g, y, w);
1581
+ }, e.attachOriginToPatched(n[t], d);
1582
+ }
1583
+ function Nt(e) {
1584
+ e.__load_patch("util", (n, c, t) => {
1585
+ const i = We(n);
1586
+ t.patchOnProperties = Qe, t.patchMethod = de, t.bindArguments = He, t.patchMacroTask = bt;
1587
+ const u = c.__symbol__("BLACK_LISTED_EVENTS"), d = c.__symbol__("UNPATCHED_EVENTS");
1588
+ 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 = () => ({
1589
+ globalSources: rt,
1590
+ zoneSymbolEventNames: ce,
1591
+ eventNames: i,
1592
+ isBrowser: Ge,
1593
+ isMix: Ye,
1594
+ isNode: Re,
1595
+ TRUE_STR: _e,
1596
+ FALSE_STR: ge,
1597
+ ZONE_SYMBOL_PREFIX: Se,
1598
+ ADD_EVENT_LISTENER_STR: be,
1599
+ REMOVE_EVENT_LISTENER_STR: Ne
1600
+ });
1601
+ });
1602
+ }
1603
+ function It(e) {
1604
+ jt(e), Lt(e), Nt(e);
1605
+ }
1606
+ const ut = H();
1607
+ return It(ut), Rt(ut), kt;
1608
+ }
1609
+ xt();
1610
+ export {
1611
+ Gt as ZoneContextManager
1612
+ };
1613
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtRGluNUk1cFQtIX57MDBkfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFEgYXMgUWkgfSBmcm9tICcuL2luZGV4LSF+ezAwN31+LmpzJztcblxuZnVuY3Rpb24geHQoaikge1xuICByZXR1cm4gaiA9PT0gdm9pZCAwICYmIChqID0ge30pLCB0eXBlb2Ygai5hZGRFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygai5yZW1vdmVFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIjtcbn1cbnZhciBFdCA9IFwiT1RfWk9ORV9DT05URVhUXCIsIHp0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGooKSB7XG4gICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2UsIHRoaXMuX3pvbmVDb3VudGVyID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGoucHJvdG90eXBlLl9hY3RpdmVDb250ZXh0RnJvbVpvbmUgPSBmdW5jdGlvbihTKSB7XG4gICAgICByZXR1cm4gUyAmJiBTLmdldChFdCkgfHwgUWk7XG4gICAgfSwgai5wcm90b3R5cGUuX2JpbmRGdW5jdGlvbiA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHZhciB6ID0gdGhpcywgZWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgdGUgPSB0aGlzLCBpZSA9IFtdLCBmZSA9IDA7IGZlIDwgYXJndW1lbnRzLmxlbmd0aDsgZmUrKylcbiAgICAgICAgICBpZVtmZV0gPSBhcmd1bWVudHNbZmVdO1xuICAgICAgICByZXR1cm4gei53aXRoKFMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBCLmFwcGx5KHRlLCBpZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsIFwibGVuZ3RoXCIsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogQi5sZW5ndGhcbiAgICAgIH0pLCBlZTtcbiAgICB9LCBqLnByb3RvdHlwZS5fYmluZExpc3RlbmVyID0gZnVuY3Rpb24oUywgQikge1xuICAgICAgdmFyIHogPSBCO1xuICAgICAgcmV0dXJuIHouX19vdF9saXN0ZW5lcnMgIT09IHZvaWQgMCB8fCAoei5fX290X2xpc3RlbmVycyA9IHt9LCB0eXBlb2Ygei5hZGRFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiAoei5hZGRFdmVudExpc3RlbmVyID0gdGhpcy5fcGF0Y2hBZGRFdmVudExpc3RlbmVyKHosIHouYWRkRXZlbnRMaXN0ZW5lciwgUykpLCB0eXBlb2Ygei5yZW1vdmVFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiAoei5yZW1vdmVFdmVudExpc3RlbmVyID0gdGhpcy5fcGF0Y2hSZW1vdmVFdmVudExpc3RlbmVyKHosIHoucmVtb3ZlRXZlbnRMaXN0ZW5lcikpKSwgQjtcbiAgICB9LCBqLnByb3RvdHlwZS5fY3JlYXRlWm9uZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3pvbmVDb3VudGVyKys7XG4gICAgICB2YXIgUyA9IE1hdGgucmFuZG9tKCk7XG4gICAgICByZXR1cm4gdGhpcy5fem9uZUNvdW50ZXIgKyBcIi1cIiArIFM7XG4gICAgfSwgai5wcm90b3R5cGUuX2NyZWF0ZVpvbmUgPSBmdW5jdGlvbihTLCBCKSB7XG4gICAgICB2YXIgejtcbiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuZm9yayh7XG4gICAgICAgIG5hbWU6IFMsXG4gICAgICAgIHByb3BlcnRpZXM6ICh6ID0ge30sIHpbRXRdID0gQiwgeilcbiAgICAgIH0pO1xuICAgIH0sIGoucHJvdG90eXBlLl9nZXRBY3RpdmVab25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gWm9uZS5jdXJyZW50O1xuICAgIH0sIGoucHJvdG90eXBlLl9wYXRjaEFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihTLCBCLCB6KSB7XG4gICAgICB2YXIgZWUgPSB0aGlzO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRlLCBpZSwgZmUpIHtcbiAgICAgICAgUy5fX290X2xpc3RlbmVycyA9PT0gdm9pZCAwICYmIChTLl9fb3RfbGlzdGVuZXJzID0ge30pO1xuICAgICAgICB2YXIga2UgPSBTLl9fb3RfbGlzdGVuZXJzW3RlXTtcbiAgICAgICAga2UgPT09IHZvaWQgMCAmJiAoa2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgUy5fX290X2xpc3RlbmVyc1t0ZV0gPSBrZSk7XG4gICAgICAgIHZhciB2ZSA9IGVlLmJpbmQoeiwgaWUpO1xuICAgICAgICByZXR1cm4ga2Uuc2V0KGllLCB2ZSksIEIuY2FsbCh0aGlzLCB0ZSwgdmUsIGZlKTtcbiAgICAgIH07XG4gICAgfSwgai5wcm90b3R5cGUuX3BhdGNoUmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih6LCBlZSkge1xuICAgICAgICBpZiAoUy5fX290X2xpc3RlbmVycyA9PT0gdm9pZCAwIHx8IFMuX19vdF9saXN0ZW5lcnNbel0gPT09IHZvaWQgMClcbiAgICAgICAgICByZXR1cm4gQi5jYWxsKHRoaXMsIHosIGVlKTtcbiAgICAgICAgdmFyIHRlID0gUy5fX290X2xpc3RlbmVyc1t6XSwgaWUgPSB0ZS5nZXQoZWUpO1xuICAgICAgICByZXR1cm4gdGUuZGVsZXRlKGVlKSwgQi5jYWxsKHRoaXMsIHosIGllIHx8IGVlKTtcbiAgICAgIH07XG4gICAgfSwgai5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMuX2VuYWJsZWQpXG4gICAgICAgIHJldHVybiBRaTtcbiAgICAgIHZhciBTID0gdGhpcy5fZ2V0QWN0aXZlWm9uZSgpLCBCID0gdGhpcy5fYWN0aXZlQ29udGV4dEZyb21ab25lKFMpO1xuICAgICAgcmV0dXJuIEIgfHwgUWk7XG4gICAgfSwgai5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHJldHVybiBTID09PSB2b2lkIDAgJiYgKFMgPSB0aGlzLmFjdGl2ZSgpKSwgdHlwZW9mIEIgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5fYmluZEZ1bmN0aW9uKFMsIEIpIDogKHh0KEIpICYmIHRoaXMuX2JpbmRMaXN0ZW5lcihTLCBCKSwgQik7XG4gICAgfSwgai5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQgPSBmYWxzZSwgdGhpcztcbiAgICB9LCBqLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkID0gdHJ1ZSwgdGhpcztcbiAgICB9LCBqLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24oUywgQiwgeikge1xuICAgICAgZm9yICh2YXIgZWUgPSBbXSwgdGUgPSAzOyB0ZSA8IGFyZ3VtZW50cy5sZW5ndGg7IHRlKyspXG4gICAgICAgIGVlW3RlIC0gM10gPSBhcmd1bWVudHNbdGVdO1xuICAgICAgdmFyIGllID0gdGhpcy5fY3JlYXRlWm9uZU5hbWUoKSwgZmUgPSB0aGlzLl9jcmVhdGVab25lKGllLCBTKTtcbiAgICAgIHJldHVybiBmZS5ydW4oQiwgeiwgZWUpO1xuICAgIH0sIGo7XG4gIH0oKVxuKSwgcHQgPSB7fSwgZ3Q7XG5mdW5jdGlvbiBGdCgpIHtcbiAgaWYgKGd0KSByZXR1cm4gcHQ7XG4gIGd0ID0gMTtcbiAgLyoqXG4gICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjx1bmtub3duPlxuICAgKiAoYykgMjAxMC0yMDI1IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby9cbiAgICogTGljZW5zZTogTUlUXG4gICAqL1xuICBjb25zdCBqID0gZ2xvYmFsVGhpcztcbiAgZnVuY3Rpb24gUyh0KSB7XG4gICAgcmV0dXJuIChqLl9fWm9uZV9zeW1ib2xfcHJlZml4IHx8IFwiX196b25lX3N5bWJvbF9fXCIpICsgdDtcbiAgfVxuICBmdW5jdGlvbiBCKCkge1xuICAgIGNvbnN0IHQgPSBqLnBlcmZvcm1hbmNlO1xuICAgIGZ1bmN0aW9uIG4oSSkge1xuICAgICAgdCAmJiB0Lm1hcmsgJiYgdC5tYXJrKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhKEksIHMpIHtcbiAgICAgIHQgJiYgdC5tZWFzdXJlICYmIHQubWVhc3VyZShJLCBzKTtcbiAgICB9XG4gICAgbihcIlpvbmVcIik7XG4gICAgY2xhc3MgZSB7XG4gICAgICBzdGF0aWMgX19zeW1ib2xfXyA9IFM7XG4gICAgICBzdGF0aWMgYXNzZXJ0Wm9uZVBhdGNoZWQoKSB7XG4gICAgICAgIGlmIChqLlByb21pc2UgIT09IE8uWm9uZUF3YXJlUHJvbWlzZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4pXCIpO1xuICAgICAgfVxuICAgICAgc3RhdGljIGdldCByb290KCkge1xuICAgICAgICBsZXQgcyA9IGUuY3VycmVudDtcbiAgICAgICAgZm9yICg7IHMucGFyZW50OyApXG4gICAgICAgICAgcyA9IHMucGFyZW50O1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIGIuem9uZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBnZXQgY3VycmVudFRhc2soKSB7XG4gICAgICAgIHJldHVybiBEO1xuICAgICAgfVxuICAgICAgc3RhdGljIF9fbG9hZF9wYXRjaChzLCBpLCByID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKE8uaGFzT3duUHJvcGVydHkocykpIHtcbiAgICAgICAgICBjb25zdCBFID0galtTKFwiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2tcIildID09PSB0cnVlO1xuICAgICAgICAgIGlmICghciAmJiBFKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogXCIgKyBzKTtcbiAgICAgICAgfSBlbHNlIGlmICghaltcIl9fWm9uZV9kaXNhYmxlX1wiICsgc10pIHtcbiAgICAgICAgICBjb25zdCBFID0gXCJab25lOlwiICsgcztcbiAgICAgICAgICBuKEUpLCBPW3NdID0gaShqLCBlLCBQKSwgYShFLCBFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICAgIH1cbiAgICAgIF9wYXJlbnQ7XG4gICAgICBfbmFtZTtcbiAgICAgIF9wcm9wZXJ0aWVzO1xuICAgICAgX3pvbmVEZWxlZ2F0ZTtcbiAgICAgIGNvbnN0cnVjdG9yKHMsIGkpIHtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcywgdGhpcy5fbmFtZSA9IGkgPyBpLm5hbWUgfHwgXCJ1bm5hbWVkXCIgOiBcIjxyb290PlwiLCB0aGlzLl9wcm9wZXJ0aWVzID0gaSAmJiBpLnByb3BlcnRpZXMgfHwge30sIHRoaXMuX3pvbmVEZWxlZ2F0ZSA9IG5ldyBmKHRoaXMsIHRoaXMuX3BhcmVudCAmJiB0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSwgaSk7XG4gICAgICB9XG4gICAgICBnZXQocykge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5nZXRab25lV2l0aChzKTtcbiAgICAgICAgaWYgKGkpXG4gICAgICAgICAgcmV0dXJuIGkuX3Byb3BlcnRpZXNbc107XG4gICAgICB9XG4gICAgICBnZXRab25lV2l0aChzKSB7XG4gICAgICAgIGxldCBpID0gdGhpcztcbiAgICAgICAgZm9yICg7IGk7ICkge1xuICAgICAgICAgIGlmIChpLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHMpKVxuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgaSA9IGkuX3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZvcmsocykge1xuICAgICAgICBpZiAoIXMpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWm9uZVNwZWMgcmVxdWlyZWQhXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcywgcyk7XG4gICAgICB9XG4gICAgICB3cmFwKHMsIGkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiBcIiArIHMpO1xuICAgICAgICBjb25zdCByID0gdGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLCBzLCBpKSwgRSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gRS5ydW5HdWFyZGVkKHIsIHRoaXMsIGFyZ3VtZW50cywgaSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBydW4ocywgaSwgciwgRSkge1xuICAgICAgICBiID0geyBwYXJlbnQ6IGIsIHpvbmU6IHRoaXMgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLCBzLCBpLCByLCBFKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBiID0gYi5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJ1bkd1YXJkZWQocywgaSA9IG51bGwsIHIsIEUpIHtcbiAgICAgICAgYiA9IHsgcGFyZW50OiBiLCB6b25lOiB0aGlzIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsIHMsIGksIHIsIEUpO1xuICAgICAgICAgIH0gY2F0Y2ggKEcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgRykpXG4gICAgICAgICAgICAgIHRocm93IEc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGIgPSBiLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcnVuVGFzayhzLCBpLCByKSB7XG4gICAgICAgIGlmIChzLnpvbmUgIT0gdGhpcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246IFwiICsgKHMuem9uZSB8fCByZSkubmFtZSArIFwiOyBFeGVjdXRpb246IFwiICsgdGhpcy5uYW1lICsgXCIpXCIpO1xuICAgICAgICBjb25zdCBFID0gcywgeyB0eXBlOiBHLCBkYXRhOiB7IGlzUGVyaW9kaWM6IGNlID0gZmFsc2UsIGlzUmVmcmVzaGFibGU6IEEgPSBmYWxzZSB9ID0ge30gfSA9IHM7XG4gICAgICAgIGlmIChzLnN0YXRlID09PSBKICYmIChHID09PSBZIHx8IEcgPT09IGcpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2UgPSBzLnN0YXRlICE9IHg7XG4gICAgICAgIGdlICYmIEUuX3RyYW5zaXRpb25Ubyh4LCBkKTtcbiAgICAgICAgY29uc3QgeWUgPSBEO1xuICAgICAgICBEID0gRSwgYiA9IHsgcGFyZW50OiBiLCB6b25lOiB0aGlzIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRyA9PSBnICYmIHMuZGF0YSAmJiAhY2UgJiYgIUEgJiYgKHMuY2FuY2VsRm4gPSB2b2lkIDApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZVRhc2sodGhpcywgRSwgaSwgcik7XG4gICAgICAgICAgfSBjYXRjaCAoc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgc2UpKVxuICAgICAgICAgICAgICB0aHJvdyBzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY29uc3Qgc2UgPSBzLnN0YXRlO1xuICAgICAgICAgIGlmIChzZSAhPT0gSiAmJiBzZSAhPT0gSylcbiAgICAgICAgICAgIGlmIChHID09IFkgfHwgY2UgfHwgQSAmJiBzZSA9PT0gaylcbiAgICAgICAgICAgICAgZ2UgJiYgRS5fdHJhbnNpdGlvblRvKGQsIHgsIGspO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IENlID0gRS5fem9uZURlbGVnYXRlcztcbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGFza0NvdW50KEUsIC0xKSwgZ2UgJiYgRS5fdHJhbnNpdGlvblRvKEosIHgsIEopLCBBICYmIChFLl96b25lRGVsZWdhdGVzID0gQ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGIgPSBiLnBhcmVudCwgRCA9IHllO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzY2hlZHVsZVRhc2socykge1xuICAgICAgICBpZiAocy56b25lICYmIHMuem9uZSAhPT0gdGhpcykge1xuICAgICAgICAgIGxldCByID0gdGhpcztcbiAgICAgICAgICBmb3IgKDsgcjsgKSB7XG4gICAgICAgICAgICBpZiAociA9PT0gcy56b25lKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gJHt0aGlzLm5hbWV9IHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICR7cy56b25lLm5hbWV9YCk7XG4gICAgICAgICAgICByID0gci5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHMuX3RyYW5zaXRpb25UbyhrLCBKKTtcbiAgICAgICAgY29uc3QgaSA9IFtdO1xuICAgICAgICBzLl96b25lRGVsZWdhdGVzID0gaSwgcy5fem9uZSA9IHRoaXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcyA9IHRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcywgcyk7XG4gICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICB0aHJvdyBzLl90cmFuc2l0aW9uVG8oSywgaywgSiksIHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLCByKSwgcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcy5fem9uZURlbGVnYXRlcyA9PT0gaSAmJiB0aGlzLl91cGRhdGVUYXNrQ291bnQocywgMSksIHMuc3RhdGUgPT0gayAmJiBzLl90cmFuc2l0aW9uVG8oZCwgayksIHM7XG4gICAgICB9XG4gICAgICBzY2hlZHVsZU1pY3JvVGFzayhzLCBpLCByLCBFKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgcChVLCBzLCBpLCByLCBFLCB2b2lkIDApKTtcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlTWFjcm9UYXNrKHMsIGksIHIsIEUsIEcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKGcsIHMsIGksIHIsIEUsIEcpKTtcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlRXZlbnRUYXNrKHMsIGksIHIsIEUsIEcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKFksIHMsIGksIHIsIEUsIEcpKTtcbiAgICAgIH1cbiAgICAgIGNhbmNlbFRhc2socykge1xuICAgICAgICBpZiAocy56b25lICE9IHRoaXMpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiBcIiArIChzLnpvbmUgfHwgcmUpLm5hbWUgKyBcIjsgRXhlY3V0aW9uOiBcIiArIHRoaXMubmFtZSArIFwiKVwiKTtcbiAgICAgICAgaWYgKCEocy5zdGF0ZSAhPT0gZCAmJiBzLnN0YXRlICE9PSB4KSkge1xuICAgICAgICAgIHMuX3RyYW5zaXRpb25UbyhWLCBkLCB4KTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcywgcyk7XG4gICAgICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICAgICAgdGhyb3cgcy5fdHJhbnNpdGlvblRvKEssIFYpLCB0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgaSksIGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQocywgLTEpLCBzLl90cmFuc2l0aW9uVG8oSiwgViksIHMucnVuQ291bnQgPSAtMSwgcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3VwZGF0ZVRhc2tDb3VudChzLCBpKSB7XG4gICAgICAgIGNvbnN0IHIgPSBzLl96b25lRGVsZWdhdGVzO1xuICAgICAgICBpID09IC0xICYmIChzLl96b25lRGVsZWdhdGVzID0gbnVsbCk7XG4gICAgICAgIGZvciAobGV0IEUgPSAwOyBFIDwgci5sZW5ndGg7IEUrKylcbiAgICAgICAgICByW0VdLl91cGRhdGVUYXNrQ291bnQocy50eXBlLCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICBvbkhhc1Rhc2s6IChJLCBzLCBpLCByKSA9PiBJLmhhc1Rhc2soaSwgciksXG4gICAgICBvblNjaGVkdWxlVGFzazogKEksIHMsIGksIHIpID0+IEkuc2NoZWR1bGVUYXNrKGksIHIpLFxuICAgICAgb25JbnZva2VUYXNrOiAoSSwgcywgaSwgciwgRSwgRykgPT4gSS5pbnZva2VUYXNrKGksIHIsIEUsIEcpLFxuICAgICAgb25DYW5jZWxUYXNrOiAoSSwgcywgaSwgcikgPT4gSS5jYW5jZWxUYXNrKGksIHIpXG4gICAgfTtcbiAgICBjbGFzcyBmIHtcbiAgICAgIGdldCB6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgICAgIH1cbiAgICAgIF96b25lO1xuICAgICAgX3Rhc2tDb3VudHMgPSB7XG4gICAgICAgIG1pY3JvVGFzazogMCxcbiAgICAgICAgbWFjcm9UYXNrOiAwLFxuICAgICAgICBldmVudFRhc2s6IDBcbiAgICAgIH07XG4gICAgICBfcGFyZW50RGVsZWdhdGU7XG4gICAgICBfZm9ya0RsZ3Q7XG4gICAgICBfZm9ya1pTO1xuICAgICAgX2ZvcmtDdXJyWm9uZTtcbiAgICAgIF9pbnRlcmNlcHREbGd0O1xuICAgICAgX2ludGVyY2VwdFpTO1xuICAgICAgX2ludGVyY2VwdEN1cnJab25lO1xuICAgICAgX2ludm9rZURsZ3Q7XG4gICAgICBfaW52b2tlWlM7XG4gICAgICBfaW52b2tlQ3VyclpvbmU7XG4gICAgICBfaGFuZGxlRXJyb3JEbGd0O1xuICAgICAgX2hhbmRsZUVycm9yWlM7XG4gICAgICBfaGFuZGxlRXJyb3JDdXJyWm9uZTtcbiAgICAgIF9zY2hlZHVsZVRhc2tEbGd0O1xuICAgICAgX3NjaGVkdWxlVGFza1pTO1xuICAgICAgX3NjaGVkdWxlVGFza0N1cnJab25lO1xuICAgICAgX2ludm9rZVRhc2tEbGd0O1xuICAgICAgX2ludm9rZVRhc2taUztcbiAgICAgIF9pbnZva2VUYXNrQ3VyclpvbmU7XG4gICAgICBfY2FuY2VsVGFza0RsZ3Q7XG4gICAgICBfY2FuY2VsVGFza1pTO1xuICAgICAgX2NhbmNlbFRhc2tDdXJyWm9uZTtcbiAgICAgIF9oYXNUYXNrRGxndDtcbiAgICAgIF9oYXNUYXNrRGxndE93bmVyO1xuICAgICAgX2hhc1Rhc2taUztcbiAgICAgIF9oYXNUYXNrQ3VyclpvbmU7XG4gICAgICBjb25zdHJ1Y3RvcihzLCBpLCByKSB7XG4gICAgICAgIHRoaXMuX3pvbmUgPSBzLCB0aGlzLl9wYXJlbnREZWxlZ2F0ZSA9IGksIHRoaXMuX2ZvcmtaUyA9IHIgJiYgKHIgJiYgci5vbkZvcmsgPyByIDogaS5fZm9ya1pTKSwgdGhpcy5fZm9ya0RsZ3QgPSByICYmIChyLm9uRm9yayA/IGkgOiBpLl9mb3JrRGxndCksIHRoaXMuX2ZvcmtDdXJyWm9uZSA9IHIgJiYgKHIub25Gb3JrID8gdGhpcy5fem9uZSA6IGkuX2ZvcmtDdXJyWm9uZSksIHRoaXMuX2ludGVyY2VwdFpTID0gciAmJiAoci5vbkludGVyY2VwdCA/IHIgOiBpLl9pbnRlcmNlcHRaUyksIHRoaXMuX2ludGVyY2VwdERsZ3QgPSByICYmIChyLm9uSW50ZXJjZXB0ID8gaSA6IGkuX2ludGVyY2VwdERsZ3QpLCB0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSA9IHIgJiYgKHIub25JbnRlcmNlcHQgPyB0aGlzLl96b25lIDogaS5faW50ZXJjZXB0Q3VyclpvbmUpLCB0aGlzLl9pbnZva2VaUyA9IHIgJiYgKHIub25JbnZva2UgPyByIDogaS5faW52b2tlWlMpLCB0aGlzLl9pbnZva2VEbGd0ID0gciAmJiAoci5vbkludm9rZSA/IGkgOiBpLl9pbnZva2VEbGd0KSwgdGhpcy5faW52b2tlQ3VyclpvbmUgPSByICYmIChyLm9uSW52b2tlID8gdGhpcy5fem9uZSA6IGkuX2ludm9rZUN1cnJab25lKSwgdGhpcy5faGFuZGxlRXJyb3JaUyA9IHIgJiYgKHIub25IYW5kbGVFcnJvciA/IHIgOiBpLl9oYW5kbGVFcnJvclpTKSwgdGhpcy5faGFuZGxlRXJyb3JEbGd0ID0gciAmJiAoci5vbkhhbmRsZUVycm9yID8gaSA6IGkuX2hhbmRsZUVycm9yRGxndCksIHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUgPSByICYmIChyLm9uSGFuZGxlRXJyb3IgPyB0aGlzLl96b25lIDogaS5faGFuZGxlRXJyb3JDdXJyWm9uZSksIHRoaXMuX3NjaGVkdWxlVGFza1pTID0gciAmJiAoci5vblNjaGVkdWxlVGFzayA/IHIgOiBpLl9zY2hlZHVsZVRhc2taUyksIHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QgPSByICYmIChyLm9uU2NoZWR1bGVUYXNrID8gaSA6IGkuX3NjaGVkdWxlVGFza0RsZ3QpLCB0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSA9IHIgJiYgKHIub25TY2hlZHVsZVRhc2sgPyB0aGlzLl96b25lIDogaS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLCB0aGlzLl9pbnZva2VUYXNrWlMgPSByICYmIChyLm9uSW52b2tlVGFzayA/IHIgOiBpLl9pbnZva2VUYXNrWlMpLCB0aGlzLl9pbnZva2VUYXNrRGxndCA9IHIgJiYgKHIub25JbnZva2VUYXNrID8gaSA6IGkuX2ludm9rZVRhc2tEbGd0KSwgdGhpcy5faW52b2tlVGFza0N1cnJab25lID0gciAmJiAoci5vbkludm9rZVRhc2sgPyB0aGlzLl96b25lIDogaS5faW52b2tlVGFza0N1cnJab25lKSwgdGhpcy5fY2FuY2VsVGFza1pTID0gciAmJiAoci5vbkNhbmNlbFRhc2sgPyByIDogaS5fY2FuY2VsVGFza1pTKSwgdGhpcy5fY2FuY2VsVGFza0RsZ3QgPSByICYmIChyLm9uQ2FuY2VsVGFzayA/IGkgOiBpLl9jYW5jZWxUYXNrRGxndCksIHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSA9IHIgJiYgKHIub25DYW5jZWxUYXNrID8gdGhpcy5fem9uZSA6IGkuX2NhbmNlbFRhc2tDdXJyWm9uZSksIHRoaXMuX2hhc1Rhc2taUyA9IG51bGwsIHRoaXMuX2hhc1Rhc2tEbGd0ID0gbnVsbCwgdGhpcy5faGFzVGFza0RsZ3RPd25lciA9IG51bGwsIHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSA9IG51bGw7XG4gICAgICAgIGNvbnN0IEUgPSByICYmIHIub25IYXNUYXNrLCBHID0gaSAmJiBpLl9oYXNUYXNrWlM7XG4gICAgICAgIChFIHx8IEcpICYmICh0aGlzLl9oYXNUYXNrWlMgPSBFID8gciA6IGMsIHRoaXMuX2hhc1Rhc2tEbGd0ID0gaSwgdGhpcy5faGFzVGFza0RsZ3RPd25lciA9IHRoaXMsIHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSA9IHRoaXMuX3pvbmUsIHIub25TY2hlZHVsZVRhc2sgfHwgKHRoaXMuX3NjaGVkdWxlVGFza1pTID0gYywgdGhpcy5fc2NoZWR1bGVUYXNrRGxndCA9IGksIHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lID0gdGhpcy5fem9uZSksIHIub25JbnZva2VUYXNrIHx8ICh0aGlzLl9pbnZva2VUYXNrWlMgPSBjLCB0aGlzLl9pbnZva2VUYXNrRGxndCA9IGksIHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSA9IHRoaXMuX3pvbmUpLCByLm9uQ2FuY2VsVGFzayB8fCAodGhpcy5fY2FuY2VsVGFza1pTID0gYywgdGhpcy5fY2FuY2VsVGFza0RsZ3QgPSBpLCB0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUgPSB0aGlzLl96b25lKSk7XG4gICAgICB9XG4gICAgICBmb3JrKHMsIGkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmtaUyA/IHRoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsIHRoaXMuem9uZSwgcywgaSkgOiBuZXcgZShzLCBpKTtcbiAgICAgIH1cbiAgICAgIGludGVyY2VwdChzLCBpLCByKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRlcmNlcHRaUyA/IHRoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsIHRoaXMuX2ludGVyY2VwdEN1cnJab25lLCBzLCBpLCByKSA6IGk7XG4gICAgICB9XG4gICAgICBpbnZva2UocywgaSwgciwgRSwgRykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlWlMgPyB0aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LCB0aGlzLl9pbnZva2VDdXJyWm9uZSwgcywgaSwgciwgRSwgRykgOiBpLmFwcGx5KHIsIEUpO1xuICAgICAgfVxuICAgICAgaGFuZGxlRXJyb3IocywgaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRXJyb3JaUyA/IHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsIHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsIHMsIGkpIDogdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlVGFzayhzLCBpKSB7XG4gICAgICAgIGxldCByID0gaTtcbiAgICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlVGFza1pTKVxuICAgICAgICAgIHRoaXMuX2hhc1Rhc2taUyAmJiByLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksIHIgPSB0aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LCB0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSwgcywgaSksIHIgfHwgKHIgPSBpKTtcbiAgICAgICAgZWxzZSBpZiAoaS5zY2hlZHVsZUZuKVxuICAgICAgICAgIGkuc2NoZWR1bGVGbihpKTtcbiAgICAgICAgZWxzZSBpZiAoaS50eXBlID09IFUpXG4gICAgICAgICAgWChpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLlwiKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICBpbnZva2VUYXNrKHMsIGksIHIsIEUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUyA/IHRoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsIHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSwgcywgaSwgciwgRSkgOiBpLmNhbGxiYWNrLmFwcGx5KHIsIEUpO1xuICAgICAgfVxuICAgICAgY2FuY2VsVGFzayhzLCBpKSB7XG4gICAgICAgIGxldCByO1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsVGFza1pTKVxuICAgICAgICAgIHIgPSB0aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LCB0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsIHMsIGkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoIWkuY2FuY2VsRm4pXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRhc2sgaXMgbm90IGNhbmNlbGFibGVcIik7XG4gICAgICAgICAgciA9IGkuY2FuY2VsRm4oaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICBoYXNUYXNrKHMsIGkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9oYXNUYXNrWlMgJiYgdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCwgdGhpcy5faGFzVGFza0N1cnJab25lLCBzLCBpKTtcbiAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3Iocywgcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF91cGRhdGVUYXNrQ291bnQocywgaSkge1xuICAgICAgICBjb25zdCByID0gdGhpcy5fdGFza0NvdW50cywgRSA9IHJbc10sIEcgPSByW3NdID0gRSArIGk7XG4gICAgICAgIGlmIChHIDwgMClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuXCIpO1xuICAgICAgICBpZiAoRSA9PSAwIHx8IEcgPT0gMCkge1xuICAgICAgICAgIGNvbnN0IGNlID0ge1xuICAgICAgICAgICAgbWljcm9UYXNrOiByLm1pY3JvVGFzayA+IDAsXG4gICAgICAgICAgICBtYWNyb1Rhc2s6IHIubWFjcm9UYXNrID4gMCxcbiAgICAgICAgICAgIGV2ZW50VGFzazogci5ldmVudFRhc2sgPiAwLFxuICAgICAgICAgICAgY2hhbmdlOiBzXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSwgY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNsYXNzIHAge1xuICAgICAgdHlwZTtcbiAgICAgIHNvdXJjZTtcbiAgICAgIGludm9rZTtcbiAgICAgIGNhbGxiYWNrO1xuICAgICAgZGF0YTtcbiAgICAgIHNjaGVkdWxlRm47XG4gICAgICBjYW5jZWxGbjtcbiAgICAgIF96b25lID0gbnVsbDtcbiAgICAgIHJ1bkNvdW50ID0gMDtcbiAgICAgIF96b25lRGVsZWdhdGVzID0gbnVsbDtcbiAgICAgIF9zdGF0ZSA9IFwibm90U2NoZWR1bGVkXCI7XG4gICAgICBjb25zdHJ1Y3RvcihzLCBpLCByLCBFLCBHLCBjZSkge1xuICAgICAgICBpZiAodGhpcy50eXBlID0gcywgdGhpcy5zb3VyY2UgPSBpLCB0aGlzLmRhdGEgPSBFLCB0aGlzLnNjaGVkdWxlRm4gPSBHLCB0aGlzLmNhbmNlbEZuID0gY2UsICFyKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gcjtcbiAgICAgICAgY29uc3QgQSA9IHRoaXM7XG4gICAgICAgIHMgPT09IFkgJiYgRSAmJiBFLnVzZUcgPyB0aGlzLmludm9rZSA9IHAuaW52b2tlVGFzayA6IHRoaXMuaW52b2tlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHAuaW52b2tlVGFzay5jYWxsKGosIEEsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzdGF0aWMgaW52b2tlVGFzayhzLCBpLCByKSB7XG4gICAgICAgIHMgfHwgKHMgPSB0aGlzKSwgb2UrKztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcy5ydW5Db3VudCsrLCBzLnpvbmUucnVuVGFzayhzLCBpLCByKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBvZSA9PSAxICYmIG5lKCksIG9lLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGdldCB6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgICAgIH1cbiAgICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgICAgfVxuICAgICAgY2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCkge1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVG8oSiwgayk7XG4gICAgICB9XG4gICAgICBfdHJhbnNpdGlvblRvKHMsIGksIHIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBpIHx8IHRoaXMuX3N0YXRlID09PSByKVxuICAgICAgICAgIHRoaXMuX3N0YXRlID0gcywgcyA9PSBKICYmICh0aGlzLl96b25lRGVsZWdhdGVzID0gbnVsbCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50eXBlfSAnJHt0aGlzLnNvdXJjZX0nOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyR7c30nLCBleHBlY3Rpbmcgc3RhdGUgJyR7aX0nJHtyID8gXCIgb3IgJ1wiICsgciArIFwiJ1wiIDogXCJcIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0nLmApO1xuICAgICAgfVxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgJiYgdHlwZW9mIHRoaXMuZGF0YS5oYW5kbGVJZCA8IFwidVwiID8gdGhpcy5kYXRhLmhhbmRsZUlkLnRvU3RyaW5nKCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgICAvLyBhZGQgdG9KU09OIG1ldGhvZCB0byBwcmV2ZW50IGN5Y2xpYyBlcnJvciB3aGVuXG4gICAgICAvLyBjYWxsIEpTT04uc3RyaW5naWZ5KHpvbmVUYXNrKVxuICAgICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICAgIHpvbmU6IHRoaXMuem9uZS5uYW1lLFxuICAgICAgICAgIHJ1bkNvdW50OiB0aGlzLnJ1bkNvdW50XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFQgPSBTKFwic2V0VGltZW91dFwiKSwgeSA9IFMoXCJQcm9taXNlXCIpLCB3ID0gUyhcInRoZW5cIik7XG4gICAgbGV0IF8gPSBbXSwgQyA9IGZhbHNlLCBNO1xuICAgIGZ1bmN0aW9uIEYoSSkge1xuICAgICAgaWYgKE0gfHwgalt5XSAmJiAoTSA9IGpbeV0ucmVzb2x2ZSgwKSksIE0pIHtcbiAgICAgICAgbGV0IHMgPSBNW3ddO1xuICAgICAgICBzIHx8IChzID0gTS50aGVuKSwgcy5jYWxsKE0sIEkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGpbVF0oSSwgMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFgoSSkge1xuICAgICAgb2UgPT09IDAgJiYgXy5sZW5ndGggPT09IDAgJiYgRihuZSksIEkgJiYgXy5wdXNoKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBuZSgpIHtcbiAgICAgIGlmICghQykge1xuICAgICAgICBmb3IgKEMgPSB0cnVlOyBfLmxlbmd0aDsgKSB7XG4gICAgICAgICAgY29uc3QgSSA9IF87XG4gICAgICAgICAgXyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgSS5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgY29uc3QgaSA9IElbc107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpLnpvbmUucnVuVGFzayhpLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICAgICAgUC5vblVuaGFuZGxlZEVycm9yKHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBQLm1pY3JvdGFza0RyYWluRG9uZSgpLCBDID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlID0geyBuYW1lOiBcIk5PIFpPTkVcIiB9LCBKID0gXCJub3RTY2hlZHVsZWRcIiwgayA9IFwic2NoZWR1bGluZ1wiLCBkID0gXCJzY2hlZHVsZWRcIiwgeCA9IFwicnVubmluZ1wiLCBWID0gXCJjYW5jZWxpbmdcIiwgSyA9IFwidW5rbm93blwiLCBVID0gXCJtaWNyb1Rhc2tcIiwgZyA9IFwibWFjcm9UYXNrXCIsIFkgPSBcImV2ZW50VGFza1wiLCBPID0ge30sIFAgPSB7XG4gICAgICBzeW1ib2w6IFMsXG4gICAgICBjdXJyZW50Wm9uZUZyYW1lOiAoKSA9PiBiLFxuICAgICAgb25VbmhhbmRsZWRFcnJvcjogJCxcbiAgICAgIG1pY3JvdGFza0RyYWluRG9uZTogJCxcbiAgICAgIHNjaGVkdWxlTWljcm9UYXNrOiBYLFxuICAgICAgc2hvd1VuY2F1Z2h0RXJyb3I6ICgpID0+ICFlW1MoXCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yXCIpXSxcbiAgICAgIHBhdGNoRXZlbnRUYXJnZXQ6ICgpID0+IFtdLFxuICAgICAgcGF0Y2hPblByb3BlcnRpZXM6ICQsXG4gICAgICBwYXRjaE1ldGhvZDogKCkgPT4gJCxcbiAgICAgIGJpbmRBcmd1bWVudHM6ICgpID0+IFtdLFxuICAgICAgcGF0Y2hUaGVuOiAoKSA9PiAkLFxuICAgICAgcGF0Y2hNYWNyb1Rhc2s6ICgpID0+ICQsXG4gICAgICBwYXRjaEV2ZW50UHJvdG90eXBlOiAoKSA9PiAkLFxuICAgICAgaXNJRU9yRWRnZTogKCkgPT4gZmFsc2UsXG4gICAgICBnZXRHbG9iYWxPYmplY3RzOiAoKSA9PiB7XG4gICAgICB9LFxuICAgICAgT2JqZWN0RGVmaW5lUHJvcGVydHk6ICgpID0+ICQsXG4gICAgICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICgpID0+IHtcbiAgICAgIH0sXG4gICAgICBPYmplY3RDcmVhdGU6ICgpID0+IHtcbiAgICAgIH0sXG4gICAgICBBcnJheVNsaWNlOiAoKSA9PiBbXSxcbiAgICAgIHBhdGNoQ2xhc3M6ICgpID0+ICQsXG4gICAgICB3cmFwV2l0aEN1cnJlbnRab25lOiAoKSA9PiAkLFxuICAgICAgZmlsdGVyUHJvcGVydGllczogKCkgPT4gW10sXG4gICAgICBhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ICgpID0+ICQsXG4gICAgICBfcmVkZWZpbmVQcm9wZXJ0eTogKCkgPT4gJCxcbiAgICAgIHBhdGNoQ2FsbGJhY2tzOiAoKSA9PiAkLFxuICAgICAgbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6IEZcbiAgICB9O1xuICAgIGxldCBiID0geyBwYXJlbnQ6IG51bGwsIHpvbmU6IG5ldyBlKG51bGwsIG51bGwpIH0sIEQgPSBudWxsLCBvZSA9IDA7XG4gICAgZnVuY3Rpb24gJCgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGEoXCJab25lXCIsIFwiWm9uZVwiKSwgZTtcbiAgfVxuICBmdW5jdGlvbiB6KCkge1xuICAgIGNvbnN0IHQgPSBnbG9iYWxUaGlzLCBuID0gdFtTKFwiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2tcIildID09PSB0cnVlO1xuICAgIGlmICh0LlpvbmUgJiYgKG4gfHwgdHlwZW9mIHQuWm9uZS5fX3N5bWJvbF9fICE9IFwiZnVuY3Rpb25cIikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lIGFscmVhZHkgbG9hZGVkLlwiKTtcbiAgICByZXR1cm4gdC5ab25lID8/PSBCKCksIHQuWm9uZTtcbiAgfVxuICBjb25zdCBlZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIHRlID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBpZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiwgZmUgPSBPYmplY3QuY3JlYXRlLCBrZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwgdmUgPSBcImFkZEV2ZW50TGlzdGVuZXJcIiwgQWUgPSBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIiwgamUgPSBTKHZlKSwgSGUgPSBTKEFlKSwgX2UgPSBcInRydWVcIiwgVGUgPSBcImZhbHNlXCIsIHdlID0gUyhcIlwiKTtcbiAgZnVuY3Rpb24geGUodCwgbikge1xuICAgIHJldHVybiBab25lLmN1cnJlbnQud3JhcCh0LCBuKTtcbiAgfVxuICBmdW5jdGlvbiBGZSh0LCBuLCBhLCBlLCBjKSB7XG4gICAgcmV0dXJuIFpvbmUuY3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayh0LCBuLCBhLCBlLCBjKTtcbiAgfVxuICBjb25zdCBIID0gUywgTmUgPSB0eXBlb2Ygd2luZG93IDwgXCJ1XCIsIERlID0gTmUgPyB3aW5kb3cgOiB2b2lkIDAsIFEgPSBOZSAmJiBEZSB8fCBnbG9iYWxUaGlzLCBtdCA9IFwicmVtb3ZlQXR0cmlidXRlXCI7XG4gIGZ1bmN0aW9uIFZlKHQsIG4pIHtcbiAgICBmb3IgKGxldCBhID0gdC5sZW5ndGggLSAxOyBhID49IDA7IGEtLSlcbiAgICAgIHR5cGVvZiB0W2FdID09IFwiZnVuY3Rpb25cIiAmJiAodFthXSA9IHhlKHRbYV0sIG4gKyBcIl9cIiArIGEpKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBmdW5jdGlvbiB5dCh0LCBuKSB7XG4gICAgY29uc3QgYSA9IHQuY29uc3RydWN0b3IubmFtZTtcbiAgICBmb3IgKGxldCBlID0gMDsgZSA8IG4ubGVuZ3RoOyBlKyspIHtcbiAgICAgIGNvbnN0IGMgPSBuW2VdLCBmID0gdFtjXTtcbiAgICAgIGlmIChmKSB7XG4gICAgICAgIGNvbnN0IHAgPSBlZSh0LCBjKTtcbiAgICAgICAgaWYgKCFYZShwKSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdFtjXSA9ICgoVCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBULmFwcGx5KHRoaXMsIFZlKGFyZ3VtZW50cywgYSArIFwiLlwiICsgYykpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHBlKHksIFQpLCB5O1xuICAgICAgICB9KShmKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gWGUodCkge1xuICAgIHJldHVybiB0ID8gdC53cml0YWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6ICEodHlwZW9mIHQuZ2V0ID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdC5zZXQgPiBcInVcIikgOiB0cnVlO1xuICB9XG4gIGNvbnN0IFllID0gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLCBaZSA9ICEoXCJud1wiIGluIFEpICYmIHR5cGVvZiBRLnByb2Nlc3MgPCBcInVcIiAmJiBRLnByb2Nlc3MudG9TdHJpbmcoKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIsIHplID0gIVplICYmICFZZSAmJiAhIShOZSAmJiBEZS5IVE1MRWxlbWVudCksICRlID0gdHlwZW9mIFEucHJvY2VzcyA8IFwidVwiICYmIFEucHJvY2Vzcy50b1N0cmluZygpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIiAmJiAhWWUgJiYgISEoTmUgJiYgRGUuSFRNTEVsZW1lbnQpLCBMZSA9IHt9LCBrdCA9IEgoXCJlbmFibGVfYmVmb3JldW5sb2FkXCIpLCBKZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9IHQgfHwgUS5ldmVudCwgIXQpXG4gICAgICByZXR1cm47XG4gICAgbGV0IG4gPSBMZVt0LnR5cGVdO1xuICAgIG4gfHwgKG4gPSBMZVt0LnR5cGVdID0gSChcIk9OX1BST1BFUlRZXCIgKyB0LnR5cGUpKTtcbiAgICBjb25zdCBhID0gdGhpcyB8fCB0LnRhcmdldCB8fCBRLCBlID0gYVtuXTtcbiAgICBsZXQgYztcbiAgICBpZiAoemUgJiYgYSA9PT0gRGUgJiYgdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgIGNvbnN0IGYgPSB0O1xuICAgICAgYyA9IGUgJiYgZS5jYWxsKHRoaXMsIGYubWVzc2FnZSwgZi5maWxlbmFtZSwgZi5saW5lbm8sIGYuY29sbm8sIGYuZXJyb3IpLCBjID09PSB0cnVlICYmIHQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2VcbiAgICAgIGMgPSBlICYmIGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNDc1NzlcbiAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwNTI1L2hpc3RvcnkuaHRtbCNiZWZvcmV1bmxvYWRldmVudFxuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBzcGVjaWZpYyBjYXNlIHdlIHNob3VsZCBjaGVjayBmb3IuIFRoZSBzcGVjIGRlZmluZXMgdGhhdCB0aGVcbiAgICAgIC8vIGByZXR1cm5WYWx1ZWAgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIG1lc3NhZ2UgdG8gc2hvdyB0aGUgdXNlci4gV2hlbiB0aGUgZXZlbnRcbiAgICAgIC8vIGlzIGNyZWF0ZWQsIHRoaXMgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICB0LnR5cGUgPT09IFwiYmVmb3JldW5sb2FkXCIgJiYgLy8gVG8gcHJldmVudCBhbnkgYnJlYWtpbmcgY2hhbmdlcyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSwgZ2l2ZW4gdGhhdFxuICAgICAgLy8gaXQgd2FzIGFscmVhZHkgY2F1c2luZyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmYWlsdXJlcyBpbiBHMywgd2UgaGF2ZSBoaWRkZW5cbiAgICAgIC8vIHRoYXQgYmVoYXZpb3IgYmVoaW5kIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmxhZy4gQ29uc3VtZXJzIGNhbiBlbmFibGUgdGhpc1xuICAgICAgLy8gZmxhZyBleHBsaWNpdGx5IGlmIHRoZXkgd2FudCB0aGUgYGJlZm9yZXVubG9hZGAgZXZlbnQgdG8gYmUgaGFuZGxlZCBhcyBkZWZpbmVkXG4gICAgICAvLyBpbiB0aGUgc3BlY2lmaWNhdGlvbi5cbiAgICAgIFFba3RdICYmIC8vIFRoZSBJREwgZXZlbnQgZGVmaW5pdGlvbiBpcyBgYXR0cmlidXRlIERPTVN0cmluZyByZXR1cm5WYWx1ZWAsIHNvIHdlIGNoZWNrIHdoZXRoZXJcbiAgICAgIC8vIGB0eXBlb2YgcmVzdWx0YCBpcyBhIHN0cmluZy5cbiAgICAgIHR5cGVvZiBjID09IFwic3RyaW5nXCIgPyB0LnJldHVyblZhbHVlID0gYyA6IGMgIT0gbnVsbCAmJiAhYyAmJiB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG4gIGZ1bmN0aW9uIEtlKHQsIG4sIGEpIHtcbiAgICBsZXQgZSA9IGVlKHQsIG4pO1xuICAgIGlmICghZSAmJiBhICYmIGVlKGEsIG4pICYmIChlID0geyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSksICFlIHx8ICFlLmNvbmZpZ3VyYWJsZSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjID0gSChcIm9uXCIgKyBuICsgXCJwYXRjaGVkXCIpO1xuICAgIGlmICh0Lmhhc093blByb3BlcnR5KGMpICYmIHRbY10pXG4gICAgICByZXR1cm47XG4gICAgZGVsZXRlIGUud3JpdGFibGUsIGRlbGV0ZSBlLnZhbHVlO1xuICAgIGNvbnN0IGYgPSBlLmdldCwgcCA9IGUuc2V0LCBUID0gbi5zbGljZSgyKTtcbiAgICBsZXQgeSA9IExlW1RdO1xuICAgIHkgfHwgKHkgPSBMZVtUXSA9IEgoXCJPTl9QUk9QRVJUWVwiICsgVCkpLCBlLnNldCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgIGxldCBfID0gdGhpcztcbiAgICAgIGlmICghXyAmJiB0ID09PSBRICYmIChfID0gUSksICFfKVxuICAgICAgICByZXR1cm47XG4gICAgICB0eXBlb2YgX1t5XSA9PSBcImZ1bmN0aW9uXCIgJiYgXy5yZW1vdmVFdmVudExpc3RlbmVyKFQsIEplKSwgcD8uY2FsbChfLCBudWxsKSwgX1t5XSA9IHcsIHR5cGVvZiB3ID09IFwiZnVuY3Rpb25cIiAmJiBfLmFkZEV2ZW50TGlzdGVuZXIoVCwgSmUsIGZhbHNlKTtcbiAgICB9LCBlLmdldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgbGV0IHcgPSB0aGlzO1xuICAgICAgaWYgKCF3ICYmIHQgPT09IFEgJiYgKHcgPSBRKSwgIXcpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgXyA9IHdbeV07XG4gICAgICBpZiAoXylcbiAgICAgICAgcmV0dXJuIF87XG4gICAgICBpZiAoZikge1xuICAgICAgICBsZXQgQyA9IGYuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKEMpXG4gICAgICAgICAgcmV0dXJuIGUuc2V0LmNhbGwodGhpcywgQyksIHR5cGVvZiB3W210XSA9PSBcImZ1bmN0aW9uXCIgJiYgdy5yZW1vdmVBdHRyaWJ1dGUobiksIEM7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LCB0ZSh0LCBuLCBlKSwgdFtjXSA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gUWUodCwgbiwgYSkge1xuICAgIGlmIChuKVxuICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBuLmxlbmd0aDsgZSsrKVxuICAgICAgICBLZSh0LCBcIm9uXCIgKyBuW2VdLCBhKTtcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGUgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYyBpbiB0KVxuICAgICAgICBjLnNsaWNlKDAsIDIpID09IFwib25cIiAmJiBlLnB1c2goYyk7XG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGUubGVuZ3RoOyBjKyspXG4gICAgICAgIEtlKHQsIGVbY10sIGEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsZSA9IEgoXCJvcmlnaW5hbEluc3RhbmNlXCIpO1xuICBmdW5jdGlvbiBTZSh0KSB7XG4gICAgY29uc3QgbiA9IFFbdF07XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuO1xuICAgIFFbSCh0KV0gPSBuLCBRW3RdID0gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBjID0gVmUoYXJndW1lbnRzLCB0KTtcbiAgICAgIHN3aXRjaCAoYy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oY1swXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzW2xlXSA9IG5ldyBuKGNbMF0sIGNbMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpc1tsZV0gPSBuZXcgbihjWzBdLCBjWzFdLCBjWzJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oY1swXSwgY1sxXSwgY1syXSwgY1szXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJnIGxpc3QgdG9vIGxvbmcuXCIpO1xuICAgICAgfVxuICAgIH0sIHBlKFFbdF0sIG4pO1xuICAgIGNvbnN0IGEgPSBuZXcgbihmdW5jdGlvbigpIHtcbiAgICB9KTtcbiAgICBsZXQgZTtcbiAgICBmb3IgKGUgaW4gYSlcbiAgICAgIHQgPT09IFwiWE1MSHR0cFJlcXVlc3RcIiAmJiBlID09PSBcInJlc3BvbnNlQmxvYlwiIHx8IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdHlwZW9mIGFbY10gPT0gXCJmdW5jdGlvblwiID8gUVt0XS5wcm90b3R5cGVbY10gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpc1tsZV1bY10uYXBwbHkodGhpc1tsZV0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gOiB0ZShRW3RdLnByb3RvdHlwZSwgYywge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24oZikge1xuICAgICAgICAgICAgdHlwZW9mIGYgPT0gXCJmdW5jdGlvblwiID8gKHRoaXNbbGVdW2NdID0geGUoZiwgdCArIFwiLlwiICsgYyksIHBlKHRoaXNbbGVdW2NdLCBmKSkgOiB0aGlzW2xlXVtjXSA9IGY7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbbGVdW2NdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KGUpO1xuICAgIGZvciAoZSBpbiBuKVxuICAgICAgZSAhPT0gXCJwcm90b3R5cGVcIiAmJiBuLmhhc093blByb3BlcnR5KGUpICYmIChRW3RdW2VdID0gbltlXSk7XG4gIH1cbiAgZnVuY3Rpb24gRWUodCwgbiwgYSkge1xuICAgIGxldCBlID0gdDtcbiAgICBmb3IgKDsgZSAmJiAhZS5oYXNPd25Qcm9wZXJ0eShuKTsgKVxuICAgICAgZSA9IGllKGUpO1xuICAgICFlICYmIHRbbl0gJiYgKGUgPSB0KTtcbiAgICBjb25zdCBjID0gSChuKTtcbiAgICBsZXQgZiA9IG51bGw7XG4gICAgaWYgKGUgJiYgKCEoZiA9IGVbY10pIHx8ICFlLmhhc093blByb3BlcnR5KGMpKSkge1xuICAgICAgZiA9IGVbY10gPSBlW25dO1xuICAgICAgY29uc3QgcCA9IGUgJiYgZWUoZSwgbik7XG4gICAgICBpZiAoWGUocCkpIHtcbiAgICAgICAgY29uc3QgVCA9IGEoZiwgYywgbik7XG4gICAgICAgIGVbbl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gVCh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBwZShlW25dLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGY7XG4gIH1cbiAgZnVuY3Rpb24gdnQodCwgbiwgYSkge1xuICAgIGxldCBlID0gbnVsbDtcbiAgICBmdW5jdGlvbiBjKGYpIHtcbiAgICAgIGNvbnN0IHAgPSBmLmRhdGE7XG4gICAgICByZXR1cm4gcC5hcmdzW3AuY2JJZHhdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGYuaW52b2tlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LCBlLmFwcGx5KHAudGFyZ2V0LCBwLmFyZ3MpLCBmO1xuICAgIH1cbiAgICBlID0gRWUodCwgbiwgKGYpID0+IGZ1bmN0aW9uKHAsIFQpIHtcbiAgICAgIGNvbnN0IHkgPSBhKHAsIFQpO1xuICAgICAgcmV0dXJuIHkuY2JJZHggPj0gMCAmJiB0eXBlb2YgVFt5LmNiSWR4XSA9PSBcImZ1bmN0aW9uXCIgPyBGZSh5Lm5hbWUsIFRbeS5jYklkeF0sIHksIGMpIDogZi5hcHBseShwLCBUKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBwZSh0LCBuKSB7XG4gICAgdFtIKFwiT3JpZ2luYWxEZWxlZ2F0ZVwiKV0gPSBuO1xuICB9XG4gIGxldCBldCA9IGZhbHNlLCBHZSA9IGZhbHNlO1xuICBmdW5jdGlvbiBidCgpIHtcbiAgICBpZiAoZXQpXG4gICAgICByZXR1cm4gR2U7XG4gICAgZXQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ID0gRGUubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICh0LmluZGV4T2YoXCJNU0lFIFwiKSAhPT0gLTEgfHwgdC5pbmRleE9mKFwiVHJpZGVudC9cIikgIT09IC0xIHx8IHQuaW5kZXhPZihcIkVkZ2UvXCIpICE9PSAtMSkgJiYgKEdlID0gITApO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgICByZXR1cm4gR2U7XG4gIH1cbiAgZnVuY3Rpb24gdHQodCkge1xuICAgIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG4gIH1cbiAgZnVuY3Rpb24gbnQodCkge1xuICAgIHJldHVybiB0eXBlb2YgdCA9PSBcIm51bWJlclwiO1xuICB9XG4gIGNvbnN0IEN0ID0ge1xuICAgIHVzZUc6IHRydWVcbiAgfSwgYWUgPSB7fSwgcnQgPSB7fSwgb3QgPSBuZXcgUmVnRXhwKFwiXlwiICsgd2UgKyBcIihcXFxcdyspKHRydWV8ZmFsc2UpJFwiKSwgc3QgPSBIKFwicHJvcGFnYXRpb25TdG9wcGVkXCIpO1xuICBmdW5jdGlvbiBpdCh0LCBuKSB7XG4gICAgY29uc3QgYSA9IChuID8gbih0KSA6IHQpICsgVGUsIGUgPSAobiA/IG4odCkgOiB0KSArIF9lLCBjID0gd2UgKyBhLCBmID0gd2UgKyBlO1xuICAgIGFlW3RdID0ge30sIGFlW3RdW1RlXSA9IGMsIGFlW3RdW19lXSA9IGY7XG4gIH1cbiAgZnVuY3Rpb24gUHQodCwgbiwgYSwgZSkge1xuICAgIGNvbnN0IGMgPSBlICYmIGUuYWRkIHx8IHZlLCBmID0gZSAmJiBlLnJtIHx8IEFlLCBwID0gZSAmJiBlLmxpc3RlbmVycyB8fCBcImV2ZW50TGlzdGVuZXJzXCIsIFQgPSBlICYmIGUucm1BbGwgfHwgXCJyZW1vdmVBbGxMaXN0ZW5lcnNcIiwgeSA9IEgoYyksIHcgPSBcIi5cIiArIGMgKyBcIjpcIiwgXyA9IFwicHJlcGVuZExpc3RlbmVyXCIsIEMgPSBcIi5cIiArIF8gKyBcIjpcIiwgTSA9IGZ1bmN0aW9uKGssIGQsIHgpIHtcbiAgICAgIGlmIChrLmlzUmVtb3ZlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgViA9IGsuY2FsbGJhY2s7XG4gICAgICB0eXBlb2YgViA9PSBcIm9iamVjdFwiICYmIFYuaGFuZGxlRXZlbnQgJiYgKGsuY2FsbGJhY2sgPSAoZykgPT4gVi5oYW5kbGVFdmVudChnKSwgay5vcmlnaW5hbERlbGVnYXRlID0gVik7XG4gICAgICBsZXQgSztcbiAgICAgIHRyeSB7XG4gICAgICAgIGsuaW52b2tlKGssIGQsIFt4XSk7XG4gICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgIEsgPSBnO1xuICAgICAgfVxuICAgICAgY29uc3QgVSA9IGsub3B0aW9ucztcbiAgICAgIGlmIChVICYmIHR5cGVvZiBVID09IFwib2JqZWN0XCIgJiYgVS5vbmNlKSB7XG4gICAgICAgIGNvbnN0IGcgPSBrLm9yaWdpbmFsRGVsZWdhdGUgPyBrLm9yaWdpbmFsRGVsZWdhdGUgOiBrLmNhbGxiYWNrO1xuICAgICAgICBkW2ZdLmNhbGwoZCwgeC50eXBlLCBnLCBVKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBLO1xuICAgIH07XG4gICAgZnVuY3Rpb24gRihrLCBkLCB4KSB7XG4gICAgICBpZiAoZCA9IGQgfHwgdC5ldmVudCwgIWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IFYgPSBrIHx8IGQudGFyZ2V0IHx8IHQsIEsgPSBWW2FlW2QudHlwZV1beCA/IF9lIDogVGVdXTtcbiAgICAgIGlmIChLKSB7XG4gICAgICAgIGNvbnN0IFUgPSBbXTtcbiAgICAgICAgaWYgKEsubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29uc3QgZyA9IE0oS1swXSwgViwgZCk7XG4gICAgICAgICAgZyAmJiBVLnB1c2goZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZyA9IEsuc2xpY2UoKTtcbiAgICAgICAgICBmb3IgKGxldCBZID0gMDsgWSA8IGcubGVuZ3RoICYmICEoZCAmJiBkW3N0XSA9PT0gdHJ1ZSk7IFkrKykge1xuICAgICAgICAgICAgY29uc3QgTyA9IE0oZ1tZXSwgViwgZCk7XG4gICAgICAgICAgICBPICYmIFUucHVzaChPKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFUubGVuZ3RoID09PSAxKVxuICAgICAgICAgIHRocm93IFVbMF07XG4gICAgICAgIGZvciAobGV0IGcgPSAwOyBnIDwgVS5sZW5ndGg7IGcrKykge1xuICAgICAgICAgIGNvbnN0IFkgPSBVW2ddO1xuICAgICAgICAgIG4ubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgWTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBYID0gZnVuY3Rpb24oaykge1xuICAgICAgcmV0dXJuIEYodGhpcywgaywgZmFsc2UpO1xuICAgIH0sIG5lID0gZnVuY3Rpb24oaykge1xuICAgICAgcmV0dXJuIEYodGhpcywgaywgdHJ1ZSk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiByZShrLCBkKSB7XG4gICAgICBpZiAoIWspXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGxldCB4ID0gdHJ1ZTtcbiAgICAgIGQgJiYgZC51c2VHICE9PSB2b2lkIDAgJiYgKHggPSBkLnVzZUcpO1xuICAgICAgY29uc3QgViA9IGQgJiYgZC52aDtcbiAgICAgIGxldCBLID0gdHJ1ZTtcbiAgICAgIGQgJiYgZC5jaGtEdXAgIT09IHZvaWQgMCAmJiAoSyA9IGQuY2hrRHVwKTtcbiAgICAgIGxldCBVID0gZmFsc2U7XG4gICAgICBkICYmIGQucnQgIT09IHZvaWQgMCAmJiAoVSA9IGQucnQpO1xuICAgICAgbGV0IGcgPSBrO1xuICAgICAgZm9yICg7IGcgJiYgIWcuaGFzT3duUHJvcGVydHkoYyk7IClcbiAgICAgICAgZyA9IGllKGcpO1xuICAgICAgaWYgKCFnICYmIGtbY10gJiYgKGcgPSBrKSwgIWcgfHwgZ1t5XSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgWSA9IGQgJiYgZC5ldmVudE5hbWVUb1N0cmluZywgTyA9IHt9LCBQID0gZ1t5XSA9IGdbY10sIGIgPSBnW0goZildID0gZ1tmXSwgRCA9IGdbSChwKV0gPSBnW3BdLCBvZSA9IGdbSChUKV0gPSBnW1RdO1xuICAgICAgbGV0ICQ7XG4gICAgICBkICYmIGQucHJlcGVuZCAmJiAoJCA9IGdbSChkLnByZXBlbmQpXSA9IGdbZC5wcmVwZW5kXSk7XG4gICAgICBmdW5jdGlvbiBJKG8sIHUpIHtcbiAgICAgICAgcmV0dXJuIHUgPyB0eXBlb2YgbyA9PSBcImJvb2xlYW5cIiA/IHsgY2FwdHVyZTogbywgcGFzc2l2ZTogdHJ1ZSB9IDogbyA/IHR5cGVvZiBvID09IFwib2JqZWN0XCIgJiYgby5wYXNzaXZlICE9PSBmYWxzZSA/IHsgLi4ubywgcGFzc2l2ZTogdHJ1ZSB9IDogbyA6IHsgcGFzc2l2ZTogdHJ1ZSB9IDogbztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHMgPSBmdW5jdGlvbihvKSB7XG4gICAgICAgIGlmICghTy5pc0V4aXN0aW5nKVxuICAgICAgICAgIHJldHVybiBQLmNhbGwoTy50YXJnZXQsIE8uZXZlbnROYW1lLCBPLmNhcHR1cmUgPyBuZSA6IFgsIE8ub3B0aW9ucyk7XG4gICAgICB9LCBpID0gZnVuY3Rpb24obykge1xuICAgICAgICBpZiAoIW8uaXNSZW1vdmVkKSB7XG4gICAgICAgICAgY29uc3QgdSA9IGFlW28uZXZlbnROYW1lXTtcbiAgICAgICAgICBsZXQgdjtcbiAgICAgICAgICB1ICYmICh2ID0gdVtvLmNhcHR1cmUgPyBfZSA6IFRlXSk7XG4gICAgICAgICAgY29uc3QgUiA9IHYgJiYgby50YXJnZXRbdl07XG4gICAgICAgICAgaWYgKFIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgUi5sZW5ndGg7IG0rKylcbiAgICAgICAgICAgICAgaWYgKFJbbV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICBSLnNwbGljZShtLCAxKSwgby5pc1JlbW92ZWQgPSB0cnVlLCBvLnJlbW92ZUFib3J0TGlzdGVuZXIgJiYgKG8ucmVtb3ZlQWJvcnRMaXN0ZW5lcigpLCBvLnJlbW92ZUFib3J0TGlzdGVuZXIgPSBudWxsKSwgUi5sZW5ndGggPT09IDAgJiYgKG8uYWxsUmVtb3ZlZCA9IHRydWUsIG8udGFyZ2V0W3ZdID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG8uYWxsUmVtb3ZlZClcbiAgICAgICAgICByZXR1cm4gYi5jYWxsKG8udGFyZ2V0LCBvLmV2ZW50TmFtZSwgby5jYXB0dXJlID8gbmUgOiBYLCBvLm9wdGlvbnMpO1xuICAgICAgfSwgciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIFAuY2FsbChPLnRhcmdldCwgTy5ldmVudE5hbWUsIG8uaW52b2tlLCBPLm9wdGlvbnMpO1xuICAgICAgfSwgRSA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuICQuY2FsbChPLnRhcmdldCwgTy5ldmVudE5hbWUsIG8uaW52b2tlLCBPLm9wdGlvbnMpO1xuICAgICAgfSwgRyA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIGIuY2FsbChvLnRhcmdldCwgby5ldmVudE5hbWUsIG8uaW52b2tlLCBvLm9wdGlvbnMpO1xuICAgICAgfSwgY2UgPSB4ID8gcyA6IHIsIEEgPSB4ID8gaSA6IEcsIGdlID0gZnVuY3Rpb24obywgdSkge1xuICAgICAgICBjb25zdCB2ID0gdHlwZW9mIHU7XG4gICAgICAgIHJldHVybiB2ID09PSBcImZ1bmN0aW9uXCIgJiYgby5jYWxsYmFjayA9PT0gdSB8fCB2ID09PSBcIm9iamVjdFwiICYmIG8ub3JpZ2luYWxEZWxlZ2F0ZSA9PT0gdTtcbiAgICAgIH0sIHllID0gZD8uZGlmZiB8fCBnZSwgc2UgPSBab25lW0goXCJVTlBBVENIRURfRVZFTlRTXCIpXSwgQ2UgPSB0W0goXCJQQVNTSVZFX0VWRU5UU1wiKV07XG4gICAgICBmdW5jdGlvbiBoKG8pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvID09IFwib2JqZWN0XCIgJiYgbyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHUgPSB7IC4uLm8gfTtcbiAgICAgICAgICByZXR1cm4gby5zaWduYWwgJiYgKHUuc2lnbmFsID0gby5zaWduYWwpLCB1O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfVxuICAgICAgY29uc3QgbCA9IGZ1bmN0aW9uKG8sIHUsIHYsIFIsIG0gPSBmYWxzZSwgTiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjb25zdCBaID0gdGhpcyB8fCB0O1xuICAgICAgICAgIGxldCBMID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgIGQgJiYgZC50cmFuc2ZlckV2ZW50TmFtZSAmJiAoTCA9IGQudHJhbnNmZXJFdmVudE5hbWUoTCkpO1xuICAgICAgICAgIGxldCBXID0gYXJndW1lbnRzWzFdO1xuICAgICAgICAgIGlmICghVylcbiAgICAgICAgICAgIHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgaWYgKFplICYmIEwgPT09IFwidW5jYXVnaHRFeGNlcHRpb25cIilcbiAgICAgICAgICAgIHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgbGV0IHEgPSBmYWxzZTtcbiAgICAgICAgICBpZiAodHlwZW9mIFcgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoIVcuaGFuZGxlRXZlbnQpXG4gICAgICAgICAgICAgIHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBxID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFYgJiYgIVYobywgVywgWiwgYXJndW1lbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjb25zdCBtZSA9ICEhQ2UgJiYgQ2UuaW5kZXhPZihMKSAhPT0gLTEsIGhlID0gaChJKGFyZ3VtZW50c1syXSwgbWUpKSwgUGUgPSBoZT8uc2lnbmFsO1xuICAgICAgICAgIGlmIChQZT8uYWJvcnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBpZiAoc2UpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGRlID0gMDsgZGUgPCBzZS5sZW5ndGg7IGRlKyspXG4gICAgICAgICAgICAgIGlmIChMID09PSBzZVtkZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lID8gby5jYWxsKFosIEwsIFcsIGhlKSA6IG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgVWUgPSBoZSA/IHR5cGVvZiBoZSA9PSBcImJvb2xlYW5cIiA/IHRydWUgOiBoZS5jYXB0dXJlIDogZmFsc2UsIGZ0ID0gaGUgJiYgdHlwZW9mIGhlID09IFwib2JqZWN0XCIgPyBoZS5vbmNlIDogZmFsc2UsIEh0ID0gWm9uZS5jdXJyZW50O1xuICAgICAgICAgIGxldCBXZSA9IGFlW0xdO1xuICAgICAgICAgIFdlIHx8IChpdChMLCBZKSwgV2UgPSBhZVtMXSk7XG4gICAgICAgICAgY29uc3QgaHQgPSBXZVtVZSA/IF9lIDogVGVdO1xuICAgICAgICAgIGxldCBSZSA9IFpbaHRdLCBkdCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChSZSkge1xuICAgICAgICAgICAgaWYgKGR0ID0gdHJ1ZSwgSykge1xuICAgICAgICAgICAgICBmb3IgKGxldCBkZSA9IDA7IGRlIDwgUmUubGVuZ3RoOyBkZSsrKVxuICAgICAgICAgICAgICAgIGlmICh5ZShSZVtkZV0sIFcpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgUmUgPSBaW2h0XSA9IFtdO1xuICAgICAgICAgIGxldCBJZTtcbiAgICAgICAgICBjb25zdCBfdCA9IFouY29uc3RydWN0b3IubmFtZSwgVHQgPSBydFtfdF07XG4gICAgICAgICAgVHQgJiYgKEllID0gVHRbTF0pLCBJZSB8fCAoSWUgPSBfdCArIHUgKyAoWSA/IFkoTCkgOiBMKSksIE8ub3B0aW9ucyA9IGhlLCBmdCAmJiAoTy5vcHRpb25zLm9uY2UgPSBmYWxzZSksIE8udGFyZ2V0ID0gWiwgTy5jYXB0dXJlID0gVWUsIE8uZXZlbnROYW1lID0gTCwgTy5pc0V4aXN0aW5nID0gZHQ7XG4gICAgICAgICAgY29uc3QgT2UgPSB4ID8gQ3QgOiB2b2lkIDA7XG4gICAgICAgICAgT2UgJiYgKE9lLnRhc2tEYXRhID0gTyksIFBlICYmIChPLm9wdGlvbnMuc2lnbmFsID0gdm9pZCAwKTtcbiAgICAgICAgICBjb25zdCB1ZSA9IEh0LnNjaGVkdWxlRXZlbnRUYXNrKEllLCBXLCBPZSwgdiwgUik7XG4gICAgICAgICAgaWYgKFBlKSB7XG4gICAgICAgICAgICBPLm9wdGlvbnMuc2lnbmFsID0gUGU7XG4gICAgICAgICAgICBjb25zdCBkZSA9ICgpID0+IHVlLnpvbmUuY2FuY2VsVGFzayh1ZSk7XG4gICAgICAgICAgICBvLmNhbGwoUGUsIFwiYWJvcnRcIiwgZGUsIHsgb25jZTogdHJ1ZSB9KSwgdWUucmVtb3ZlQWJvcnRMaXN0ZW5lciA9ICgpID0+IFBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBkZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChPLnRhcmdldCA9IG51bGwsIE9lICYmIChPZS50YXNrRGF0YSA9IG51bGwpLCBmdCAmJiAoTy5vcHRpb25zLm9uY2UgPSB0cnVlKSwgdHlwZW9mIHVlLm9wdGlvbnMgIT0gXCJib29sZWFuXCIgJiYgKHVlLm9wdGlvbnMgPSBoZSksIHVlLnRhcmdldCA9IFosIHVlLmNhcHR1cmUgPSBVZSwgdWUuZXZlbnROYW1lID0gTCwgcSAmJiAodWUub3JpZ2luYWxEZWxlZ2F0ZSA9IFcpLCBOID8gUmUudW5zaGlmdCh1ZSkgOiBSZS5wdXNoKHVlKSwgbSlcbiAgICAgICAgICAgIHJldHVybiBaO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBnW2NdID0gbChQLCB3LCBjZSwgQSwgVSksICQgJiYgKGdbX10gPSBsKCQsIEMsIEUsIEEsIFUsIHRydWUpKSwgZ1tmXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBvID0gdGhpcyB8fCB0O1xuICAgICAgICBsZXQgdSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgZCAmJiBkLnRyYW5zZmVyRXZlbnROYW1lICYmICh1ID0gZC50cmFuc2ZlckV2ZW50TmFtZSh1KSk7XG4gICAgICAgIGNvbnN0IHYgPSBhcmd1bWVudHNbMl0sIFIgPSB2ID8gdHlwZW9mIHYgPT0gXCJib29sZWFuXCIgPyB0cnVlIDogdi5jYXB0dXJlIDogZmFsc2UsIG0gPSBhcmd1bWVudHNbMV07XG4gICAgICAgIGlmICghbSlcbiAgICAgICAgICByZXR1cm4gYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAoViAmJiAhVihiLCBtLCBvLCBhcmd1bWVudHMpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgTiA9IGFlW3VdO1xuICAgICAgICBsZXQgWjtcbiAgICAgICAgTiAmJiAoWiA9IE5bUiA/IF9lIDogVGVdKTtcbiAgICAgICAgY29uc3QgTCA9IFogJiYgb1taXTtcbiAgICAgICAgaWYgKEwpXG4gICAgICAgICAgZm9yIChsZXQgVyA9IDA7IFcgPCBMLmxlbmd0aDsgVysrKSB7XG4gICAgICAgICAgICBjb25zdCBxID0gTFtXXTtcbiAgICAgICAgICAgIGlmICh5ZShxLCBtKSkge1xuICAgICAgICAgICAgICBpZiAoTC5zcGxpY2UoVywgMSksIHEuaXNSZW1vdmVkID0gdHJ1ZSwgTC5sZW5ndGggPT09IDAgJiYgKHEuYWxsUmVtb3ZlZCA9IHRydWUsIG9bWl0gPSBudWxsLCAhUiAmJiB0eXBlb2YgdSA9PSBcInN0cmluZ1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lID0gd2UgKyBcIk9OX1BST1BFUlRZXCIgKyB1O1xuICAgICAgICAgICAgICAgIG9bbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcS56b25lLmNhbmNlbFRhc2socSksIFUgPyBvIDogdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0sIGdbcF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgbyA9IHRoaXMgfHwgdDtcbiAgICAgICAgbGV0IHUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIGQgJiYgZC50cmFuc2ZlckV2ZW50TmFtZSAmJiAodSA9IGQudHJhbnNmZXJFdmVudE5hbWUodSkpO1xuICAgICAgICBjb25zdCB2ID0gW10sIFIgPSBjdChvLCBZID8gWSh1KSA6IHUpO1xuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IFIubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgICBjb25zdCBOID0gUlttXTtcbiAgICAgICAgICBsZXQgWiA9IE4ub3JpZ2luYWxEZWxlZ2F0ZSA/IE4ub3JpZ2luYWxEZWxlZ2F0ZSA6IE4uY2FsbGJhY2s7XG4gICAgICAgICAgdi5wdXNoKFopO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSwgZ1tUXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBvID0gdGhpcyB8fCB0O1xuICAgICAgICBsZXQgdSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICBkICYmIGQudHJhbnNmZXJFdmVudE5hbWUgJiYgKHUgPSBkLnRyYW5zZmVyRXZlbnROYW1lKHUpKTtcbiAgICAgICAgICBjb25zdCB2ID0gYWVbdV07XG4gICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGNvbnN0IFIgPSB2W1RlXSwgbSA9IHZbX2VdLCBOID0gb1tSXSwgWiA9IG9bbV07XG4gICAgICAgICAgICBpZiAoTikge1xuICAgICAgICAgICAgICBjb25zdCBMID0gTi5zbGljZSgpO1xuICAgICAgICAgICAgICBmb3IgKGxldCBXID0gMDsgVyA8IEwubGVuZ3RoOyBXKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxID0gTFtXXTtcbiAgICAgICAgICAgICAgICBsZXQgbWUgPSBxLm9yaWdpbmFsRGVsZWdhdGUgPyBxLm9yaWdpbmFsRGVsZWdhdGUgOiBxLmNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIHRoaXNbZl0uY2FsbCh0aGlzLCB1LCBtZSwgcS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFopIHtcbiAgICAgICAgICAgICAgY29uc3QgTCA9IFouc2xpY2UoKTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgVyA9IDA7IFcgPCBMLmxlbmd0aDsgVysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcSA9IExbV107XG4gICAgICAgICAgICAgICAgbGV0IG1lID0gcS5vcmlnaW5hbERlbGVnYXRlID8gcS5vcmlnaW5hbERlbGVnYXRlIDogcS5jYWxsYmFjaztcbiAgICAgICAgICAgICAgICB0aGlzW2ZdLmNhbGwodGhpcywgdSwgbWUsIHEub3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdiA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICAgIGZvciAobGV0IFIgPSAwOyBSIDwgdi5sZW5ndGg7IFIrKykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHZbUl0sIE4gPSBvdC5leGVjKG0pO1xuICAgICAgICAgICAgbGV0IFogPSBOICYmIE5bMV07XG4gICAgICAgICAgICBaICYmIFogIT09IFwicmVtb3ZlTGlzdGVuZXJcIiAmJiB0aGlzW1RdLmNhbGwodGhpcywgWik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNbVF0uY2FsbCh0aGlzLCBcInJlbW92ZUxpc3RlbmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgcGUoZ1tjXSwgUCksIHBlKGdbZl0sIGIpLCBvZSAmJiBwZShnW1RdLCBvZSksIEQgJiYgcGUoZ1twXSwgRCksIHRydWU7XG4gICAgfVxuICAgIGxldCBKID0gW107XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBhLmxlbmd0aDsgaysrKVxuICAgICAgSltrXSA9IHJlKGFba10sIGUpO1xuICAgIHJldHVybiBKO1xuICB9XG4gIGZ1bmN0aW9uIGN0KHQsIG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgIGNvbnN0IGYgPSBbXTtcbiAgICAgIGZvciAobGV0IHAgaW4gdCkge1xuICAgICAgICBjb25zdCBUID0gb3QuZXhlYyhwKTtcbiAgICAgICAgbGV0IHkgPSBUICYmIFRbMV07XG4gICAgICAgIGlmICh5ICYmICghbiB8fCB5ID09PSBuKSkge1xuICAgICAgICAgIGNvbnN0IHcgPSB0W3BdO1xuICAgICAgICAgIGlmICh3KVxuICAgICAgICAgICAgZm9yIChsZXQgXyA9IDA7IF8gPCB3Lmxlbmd0aDsgXysrKVxuICAgICAgICAgICAgICBmLnB1c2god1tfXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmO1xuICAgIH1cbiAgICBsZXQgYSA9IGFlW25dO1xuICAgIGEgfHwgKGl0KG4pLCBhID0gYWVbbl0pO1xuICAgIGNvbnN0IGUgPSB0W2FbVGVdXSwgYyA9IHRbYVtfZV1dO1xuICAgIHJldHVybiBlID8gYyA/IGUuY29uY2F0KGMpIDogZS5zbGljZSgpIDogYyA/IGMuc2xpY2UoKSA6IFtdO1xuICB9XG4gIGZ1bmN0aW9uIFJ0KHQsIG4pIHtcbiAgICBjb25zdCBhID0gdC5FdmVudDtcbiAgICBhICYmIGEucHJvdG90eXBlICYmIG4ucGF0Y2hNZXRob2QoYS5wcm90b3R5cGUsIFwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uXCIsIChlKSA9PiBmdW5jdGlvbihjLCBmKSB7XG4gICAgICBjW3N0XSA9IHRydWUsIGUgJiYgZS5hcHBseShjLCBmKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiB3dCh0LCBuKSB7XG4gICAgbi5wYXRjaE1ldGhvZCh0LCBcInF1ZXVlTWljcm90YXNrXCIsIChhKSA9PiBmdW5jdGlvbihlLCBjKSB7XG4gICAgICBab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soXCJxdWV1ZU1pY3JvdGFza1wiLCBjWzBdKTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBNZSA9IEgoXCJ6b25lVGFza1wiKTtcbiAgZnVuY3Rpb24gYmUodCwgbiwgYSwgZSkge1xuICAgIGxldCBjID0gbnVsbCwgZiA9IG51bGw7XG4gICAgbiArPSBlLCBhICs9IGU7XG4gICAgY29uc3QgcCA9IHt9O1xuICAgIGZ1bmN0aW9uIFQodykge1xuICAgICAgY29uc3QgXyA9IHcuZGF0YTtcbiAgICAgIF8uYXJnc1swXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdy5pbnZva2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBDID0gYy5hcHBseSh0LCBfLmFyZ3MpO1xuICAgICAgcmV0dXJuIG50KEMpID8gXy5oYW5kbGVJZCA9IEMgOiAoXy5oYW5kbGUgPSBDLCBfLmlzUmVmcmVzaGFibGUgPSB0dChDLnJlZnJlc2gpKSwgdztcbiAgICB9XG4gICAgZnVuY3Rpb24geSh3KSB7XG4gICAgICBjb25zdCB7IGhhbmRsZTogXywgaGFuZGxlSWQ6IEMgfSA9IHcuZGF0YTtcbiAgICAgIHJldHVybiBmLmNhbGwodCwgXyA/PyBDKTtcbiAgICB9XG4gICAgYyA9IEVlKHQsIG4sICh3KSA9PiBmdW5jdGlvbihfLCBDKSB7XG4gICAgICBpZiAodHQoQ1swXSkpIHtcbiAgICAgICAgY29uc3QgTSA9IHtcbiAgICAgICAgICBpc1JlZnJlc2hhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc1BlcmlvZGljOiBlID09PSBcIkludGVydmFsXCIsXG4gICAgICAgICAgZGVsYXk6IGUgPT09IFwiVGltZW91dFwiIHx8IGUgPT09IFwiSW50ZXJ2YWxcIiA/IENbMV0gfHwgMCA6IHZvaWQgMCxcbiAgICAgICAgICBhcmdzOiBDXG4gICAgICAgIH0sIEYgPSBDWzBdO1xuICAgICAgICBDWzBdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBGLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaGFuZGxlOiB4LCBoYW5kbGVJZDogViwgaXNQZXJpb2RpYzogSywgaXNSZWZyZXNoYWJsZTogVSB9ID0gTTtcbiAgICAgICAgICAgICFLICYmICFVICYmIChWID8gZGVsZXRlIHBbVl0gOiB4ICYmICh4W01lXSA9IG51bGwpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IFggPSBGZShuLCBDWzBdLCBNLCBULCB5KTtcbiAgICAgICAgaWYgKCFYKVxuICAgICAgICAgIHJldHVybiBYO1xuICAgICAgICBjb25zdCB7IGhhbmRsZUlkOiBuZSwgaGFuZGxlOiByZSwgaXNSZWZyZXNoYWJsZTogSiwgaXNQZXJpb2RpYzogayB9ID0gWC5kYXRhO1xuICAgICAgICBpZiAobmUpXG4gICAgICAgICAgcFtuZV0gPSBYO1xuICAgICAgICBlbHNlIGlmIChyZSAmJiAocmVbTWVdID0gWCwgSiAmJiAhaykpIHtcbiAgICAgICAgICBjb25zdCBkID0gcmUucmVmcmVzaDtcbiAgICAgICAgICByZS5yZWZyZXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB7IHpvbmU6IHgsIHN0YXRlOiBWIH0gPSBYO1xuICAgICAgICAgICAgcmV0dXJuIFYgPT09IFwibm90U2NoZWR1bGVkXCIgPyAoWC5fc3RhdGUgPSBcInNjaGVkdWxlZFwiLCB4Ll91cGRhdGVUYXNrQ291bnQoWCwgMSkpIDogViA9PT0gXCJydW5uaW5nXCIgJiYgKFguX3N0YXRlID0gXCJzY2hlZHVsaW5nXCIpLCBkLmNhbGwodGhpcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmUgPz8gbmUgPz8gWDtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gdy5hcHBseSh0LCBDKTtcbiAgICB9KSwgZiA9IEVlKHQsIGEsICh3KSA9PiBmdW5jdGlvbihfLCBDKSB7XG4gICAgICBjb25zdCBNID0gQ1swXTtcbiAgICAgIGxldCBGO1xuICAgICAgbnQoTSkgPyAoRiA9IHBbTV0sIGRlbGV0ZSBwW01dKSA6IChGID0gTT8uW01lXSwgRiA/IE1bTWVdID0gbnVsbCA6IEYgPSBNKSwgRj8udHlwZSA/IEYuY2FuY2VsRm4gJiYgRi56b25lLmNhbmNlbFRhc2soRikgOiB3LmFwcGx5KHQsIEMpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIER0KHQsIG4pIHtcbiAgICBjb25zdCB7IGlzQnJvd3NlcjogYSwgaXNNaXg6IGUgfSA9IG4uZ2V0R2xvYmFsT2JqZWN0cygpO1xuICAgIGlmICghYSAmJiAhZSB8fCAhdC5jdXN0b21FbGVtZW50cyB8fCAhKFwiY3VzdG9tRWxlbWVudHNcIiBpbiB0KSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjID0gW1xuICAgICAgXCJjb25uZWN0ZWRDYWxsYmFja1wiLFxuICAgICAgXCJkaXNjb25uZWN0ZWRDYWxsYmFja1wiLFxuICAgICAgXCJhZG9wdGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrXCIsXG4gICAgICBcImZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiZm9ybURpc2FibGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiZm9ybVJlc2V0Q2FsbGJhY2tcIixcbiAgICAgIFwiZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrXCJcbiAgICBdO1xuICAgIG4ucGF0Y2hDYWxsYmFja3MobiwgdC5jdXN0b21FbGVtZW50cywgXCJjdXN0b21FbGVtZW50c1wiLCBcImRlZmluZVwiLCBjKTtcbiAgfVxuICBmdW5jdGlvbiBTdCh0LCBuKSB7XG4gICAgaWYgKFpvbmVbbi5zeW1ib2woXCJwYXRjaEV2ZW50VGFyZ2V0XCIpXSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB7IGV2ZW50TmFtZXM6IGEsIHpvbmVTeW1ib2xFdmVudE5hbWVzOiBlLCBUUlVFX1NUUjogYywgRkFMU0VfU1RSOiBmLCBaT05FX1NZTUJPTF9QUkVGSVg6IHAgfSA9IG4uZ2V0R2xvYmFsT2JqZWN0cygpO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgYS5sZW5ndGg7IHkrKykge1xuICAgICAgY29uc3QgdyA9IGFbeV0sIF8gPSB3ICsgZiwgQyA9IHcgKyBjLCBNID0gcCArIF8sIEYgPSBwICsgQztcbiAgICAgIGVbd10gPSB7fSwgZVt3XVtmXSA9IE0sIGVbd11bY10gPSBGO1xuICAgIH1cbiAgICBjb25zdCBUID0gdC5FdmVudFRhcmdldDtcbiAgICBpZiAoISghVCB8fCAhVC5wcm90b3R5cGUpKVxuICAgICAgcmV0dXJuIG4ucGF0Y2hFdmVudFRhcmdldCh0LCBuLCBbVCAmJiBULnByb3RvdHlwZV0pLCB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIE90KHQsIG4pIHtcbiAgICBuLnBhdGNoRXZlbnRQcm90b3R5cGUodCwgbik7XG4gIH1cbiAgZnVuY3Rpb24gYXQodCwgbiwgYSkge1xuICAgIGlmICghYSB8fCBhLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiBuO1xuICAgIGNvbnN0IGUgPSBhLmZpbHRlcigoZikgPT4gZi50YXJnZXQgPT09IHQpO1xuICAgIGlmIChlLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiBuO1xuICAgIGNvbnN0IGMgPSBlWzBdLmlnbm9yZVByb3BlcnRpZXM7XG4gICAgcmV0dXJuIG4uZmlsdGVyKChmKSA9PiBjLmluZGV4T2YoZikgPT09IC0xKTtcbiAgfVxuICBmdW5jdGlvbiBsdCh0LCBuLCBhLCBlKSB7XG4gICAgaWYgKCF0KVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGMgPSBhdCh0LCBuLCBhKTtcbiAgICBRZSh0LCBjLCBlKTtcbiAgfVxuICBmdW5jdGlvbiBCZSh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZpbHRlcigobikgPT4gbi5zdGFydHNXaXRoKFwib25cIikgJiYgbi5sZW5ndGggPiAyKS5tYXAoKG4pID0+IG4uc3Vic3RyaW5nKDIpKTtcbiAgfVxuICBmdW5jdGlvbiBOdCh0LCBuKSB7XG4gICAgaWYgKFplICYmICEkZSB8fCBab25lW3Quc3ltYm9sKFwicGF0Y2hFdmVudHNcIildKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGEgPSBuLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztcbiAgICBsZXQgZSA9IFtdO1xuICAgIGlmICh6ZSkge1xuICAgICAgY29uc3QgYyA9IHdpbmRvdztcbiAgICAgIGUgPSBlLmNvbmNhdChbXG4gICAgICAgIFwiRG9jdW1lbnRcIixcbiAgICAgICAgXCJTVkdFbGVtZW50XCIsXG4gICAgICAgIFwiRWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTEJvZHlFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTE1lZGlhRWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxGcmFtZVNldEVsZW1lbnRcIixcbiAgICAgICAgXCJIVE1MRnJhbWVFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTElGcmFtZUVsZW1lbnRcIixcbiAgICAgICAgXCJIVE1MTWFycXVlZUVsZW1lbnRcIixcbiAgICAgICAgXCJXb3JrZXJcIlxuICAgICAgXSk7XG4gICAgICBjb25zdCBmID0gW107XG4gICAgICBsdChjLCBCZShjKSwgYSAmJiBhLmNvbmNhdChmKSwgaWUoYykpO1xuICAgIH1cbiAgICBlID0gZS5jb25jYXQoW1xuICAgICAgXCJYTUxIdHRwUmVxdWVzdFwiLFxuICAgICAgXCJYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0XCIsXG4gICAgICBcIklEQkluZGV4XCIsXG4gICAgICBcIklEQlJlcXVlc3RcIixcbiAgICAgIFwiSURCT3BlbkRCUmVxdWVzdFwiLFxuICAgICAgXCJJREJEYXRhYmFzZVwiLFxuICAgICAgXCJJREJUcmFuc2FjdGlvblwiLFxuICAgICAgXCJJREJDdXJzb3JcIixcbiAgICAgIFwiV2ViU29ja2V0XCJcbiAgICBdKTtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGUubGVuZ3RoOyBjKyspIHtcbiAgICAgIGNvbnN0IGYgPSBuW2VbY11dO1xuICAgICAgZj8ucHJvdG90eXBlICYmIGx0KGYucHJvdG90eXBlLCBCZShmLnByb3RvdHlwZSksIGEpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBadCh0KSB7XG4gICAgdC5fX2xvYWRfcGF0Y2goXCJsZWdhY3lcIiwgKG4pID0+IHtcbiAgICAgIGNvbnN0IGEgPSBuW3QuX19zeW1ib2xfXyhcImxlZ2FjeVBhdGNoXCIpXTtcbiAgICAgIGEgJiYgYSgpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcInRpbWVyc1wiLCAobikgPT4ge1xuICAgICAgY29uc3QgZSA9IFwiY2xlYXJcIjtcbiAgICAgIGJlKG4sIFwic2V0XCIsIGUsIFwiVGltZW91dFwiKSwgYmUobiwgXCJzZXRcIiwgZSwgXCJJbnRlcnZhbFwiKSwgYmUobiwgXCJzZXRcIiwgZSwgXCJJbW1lZGlhdGVcIik7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIsIChuKSA9PiB7XG4gICAgICBiZShuLCBcInJlcXVlc3RcIiwgXCJjYW5jZWxcIiwgXCJBbmltYXRpb25GcmFtZVwiKSwgYmUobiwgXCJtb3pSZXF1ZXN0XCIsIFwibW96Q2FuY2VsXCIsIFwiQW5pbWF0aW9uRnJhbWVcIiksIGJlKG4sIFwid2Via2l0UmVxdWVzdFwiLCBcIndlYmtpdENhbmNlbFwiLCBcIkFuaW1hdGlvbkZyYW1lXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcImJsb2NraW5nXCIsIChuLCBhKSA9PiB7XG4gICAgICBjb25zdCBlID0gW1wiYWxlcnRcIiwgXCJwcm9tcHRcIiwgXCJjb25maXJtXCJdO1xuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBlLmxlbmd0aDsgYysrKSB7XG4gICAgICAgIGNvbnN0IGYgPSBlW2NdO1xuICAgICAgICBFZShuLCBmLCAocCwgVCwgeSkgPT4gZnVuY3Rpb24odywgXykge1xuICAgICAgICAgIHJldHVybiBhLmN1cnJlbnQucnVuKHAsIG4sIF8sIHkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJFdmVudFRhcmdldFwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgT3QobiwgZSksIFN0KG4sIGUpO1xuICAgICAgY29uc3QgYyA9IG4uWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcbiAgICAgIGMgJiYgYy5wcm90b3R5cGUgJiYgZS5wYXRjaEV2ZW50VGFyZ2V0KG4sIGUsIFtjLnByb3RvdHlwZV0pO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIk11dGF0aW9uT2JzZXJ2ZXJcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIFNlKFwiTXV0YXRpb25PYnNlcnZlclwiKSwgU2UoXCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBTZShcIkludGVyc2VjdGlvbk9ic2VydmVyXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIkZpbGVSZWFkZXJcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIFNlKFwiRmlsZVJlYWRlclwiKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJvbl9wcm9wZXJ0eVwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgTnQoZSwgbik7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwiY3VzdG9tRWxlbWVudHNcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIER0KG4sIGUpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIlhIUlwiLCAobiwgYSkgPT4ge1xuICAgICAgdyhuKTtcbiAgICAgIGNvbnN0IGUgPSBIKFwieGhyVGFza1wiKSwgYyA9IEgoXCJ4aHJTeW5jXCIpLCBmID0gSChcInhockxpc3RlbmVyXCIpLCBwID0gSChcInhoclNjaGVkdWxlZFwiKSwgVCA9IEgoXCJ4aHJVUkxcIiksIHkgPSBIKFwieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWRcIik7XG4gICAgICBmdW5jdGlvbiB3KF8pIHtcbiAgICAgICAgY29uc3QgQyA9IF8uWE1MSHR0cFJlcXVlc3Q7XG4gICAgICAgIGlmICghQylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IE0gPSBDLnByb3RvdHlwZTtcbiAgICAgICAgZnVuY3Rpb24gRihQKSB7XG4gICAgICAgICAgcmV0dXJuIFBbZV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IFggPSBNW2plXSwgbmUgPSBNW0hlXTtcbiAgICAgICAgaWYgKCFYKSB7XG4gICAgICAgICAgY29uc3QgUCA9IF8uWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcbiAgICAgICAgICBpZiAoUCkge1xuICAgICAgICAgICAgY29uc3QgYiA9IFAucHJvdG90eXBlO1xuICAgICAgICAgICAgWCA9IGJbamVdLCBuZSA9IGJbSGVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZSA9IFwicmVhZHlzdGF0ZWNoYW5nZVwiLCBKID0gXCJzY2hlZHVsZWRcIjtcbiAgICAgICAgZnVuY3Rpb24gayhQKSB7XG4gICAgICAgICAgY29uc3QgYiA9IFAuZGF0YSwgRCA9IGIudGFyZ2V0O1xuICAgICAgICAgIERbcF0gPSBmYWxzZSwgRFt5XSA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG9lID0gRFtmXTtcbiAgICAgICAgICBYIHx8IChYID0gRFtqZV0sIG5lID0gRFtIZV0pLCBvZSAmJiBuZS5jYWxsKEQsIHJlLCBvZSk7XG4gICAgICAgICAgY29uc3QgJCA9IERbZl0gPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoRC5yZWFkeVN0YXRlID09PSBELkRPTkUpXG4gICAgICAgICAgICAgIGlmICghYi5hYm9ydGVkICYmIERbcF0gJiYgUC5zdGF0ZSA9PT0gSikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBEW2EuX19zeW1ib2xfXyhcImxvYWRmYWxzZVwiKV07XG4gICAgICAgICAgICAgICAgaWYgKEQuc3RhdHVzICE9PSAwICYmIHMgJiYgcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpID0gUC5pbnZva2U7XG4gICAgICAgICAgICAgICAgICBQLmludm9rZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gRFthLl9fc3ltYm9sX18oXCJsb2FkZmFsc2VcIildO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBFID0gMDsgRSA8IHIubGVuZ3RoOyBFKyspXG4gICAgICAgICAgICAgICAgICAgICAgcltFXSA9PT0gUCAmJiByLnNwbGljZShFLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgIWIuYWJvcnRlZCAmJiBQLnN0YXRlID09PSBKICYmIGkuY2FsbChQKTtcbiAgICAgICAgICAgICAgICAgIH0sIHMucHVzaChQKTtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIFAuaW52b2tlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSAhYi5hYm9ydGVkICYmIERbcF0gPT09IGZhbHNlICYmIChEW3ldID0gdHJ1ZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gWC5jYWxsKEQsIHJlLCAkKSwgRFtlXSB8fCAoRFtlXSA9IFApLCBZLmFwcGx5KEQsIGIuYXJncyksIERbcF0gPSB0cnVlLCBQO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGQoKSB7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24geChQKSB7XG4gICAgICAgICAgY29uc3QgYiA9IFAuZGF0YTtcbiAgICAgICAgICByZXR1cm4gYi5hYm9ydGVkID0gdHJ1ZSwgTy5hcHBseShiLnRhcmdldCwgYi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBWID0gRWUoTSwgXCJvcGVuXCIsICgpID0+IGZ1bmN0aW9uKFAsIGIpIHtcbiAgICAgICAgICByZXR1cm4gUFtjXSA9IGJbMl0gPT0gZmFsc2UsIFBbVF0gPSBiWzFdLCBWLmFwcGx5KFAsIGIpO1xuICAgICAgICB9KSwgSyA9IFwiWE1MSHR0cFJlcXVlc3Quc2VuZFwiLCBVID0gSChcImZldGNoVGFza0Fib3J0aW5nXCIpLCBnID0gSChcImZldGNoVGFza1NjaGVkdWxpbmdcIiksIFkgPSBFZShNLCBcInNlbmRcIiwgKCkgPT4gZnVuY3Rpb24oUCwgYikge1xuICAgICAgICAgIGlmIChhLmN1cnJlbnRbZ10gPT09IHRydWUgfHwgUFtjXSlcbiAgICAgICAgICAgIHJldHVybiBZLmFwcGx5KFAsIGIpO1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IEQgPSB7XG4gICAgICAgICAgICAgIHRhcmdldDogUCxcbiAgICAgICAgICAgICAgdXJsOiBQW1RdLFxuICAgICAgICAgICAgICBpc1BlcmlvZGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXJnczogYixcbiAgICAgICAgICAgICAgYWJvcnRlZDogZmFsc2VcbiAgICAgICAgICAgIH0sIG9lID0gRmUoSywgZCwgRCwgaywgeCk7XG4gICAgICAgICAgICBQICYmIFBbeV0gPT09IHRydWUgJiYgIUQuYWJvcnRlZCAmJiBvZS5zdGF0ZSA9PT0gSiAmJiBvZS5pbnZva2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLCBPID0gRWUoTSwgXCJhYm9ydFwiLCAoKSA9PiBmdW5jdGlvbihQLCBiKSB7XG4gICAgICAgICAgY29uc3QgRCA9IEYoUCk7XG4gICAgICAgICAgaWYgKEQgJiYgdHlwZW9mIEQudHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoRC5jYW5jZWxGbiA9PSBudWxsIHx8IEQuZGF0YSAmJiBELmRhdGEuYWJvcnRlZClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgRC56b25lLmNhbmNlbFRhc2soRCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhLmN1cnJlbnRbVV0gPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gTy5hcHBseShQLCBiKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwiZ2VvbG9jYXRpb25cIiwgKG4pID0+IHtcbiAgICAgIG4ubmF2aWdhdG9yICYmIG4ubmF2aWdhdG9yLmdlb2xvY2F0aW9uICYmIHl0KG4ubmF2aWdhdG9yLmdlb2xvY2F0aW9uLCBbXCJnZXRDdXJyZW50UG9zaXRpb25cIiwgXCJ3YXRjaFBvc2l0aW9uXCJdKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJQcm9taXNlUmVqZWN0aW9uRXZlbnRcIiwgKG4sIGEpID0+IHtcbiAgICAgIGZ1bmN0aW9uIGUoYykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZikge1xuICAgICAgICAgIGN0KG4sIGMpLmZvckVhY2goKFQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBuLlByb21pc2VSZWplY3Rpb25FdmVudDtcbiAgICAgICAgICAgIGlmICh5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHcgPSBuZXcgeShjLCB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZTogZi5wcm9taXNlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZi5yZWplY3Rpb25cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIFQuaW52b2tlKHcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbi5Qcm9taXNlUmVqZWN0aW9uRXZlbnQgJiYgKGFbSChcInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyXCIpXSA9IGUoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiksIGFbSChcInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyXCIpXSA9IGUoXCJyZWplY3Rpb25oYW5kbGVkXCIpKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJxdWV1ZU1pY3JvdGFza1wiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgd3QobiwgZSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gTHQodCkge1xuICAgIHQuX19sb2FkX3BhdGNoKFwiWm9uZUF3YXJlUHJvbWlzZVwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgY29uc3QgYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIGYgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4gICAgICBmdW5jdGlvbiBwKGgpIHtcbiAgICAgICAgaWYgKGggJiYgaC50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuICAgICAgICAgIGNvbnN0IGwgPSBoLmNvbnN0cnVjdG9yICYmIGguY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICByZXR1cm4gKGwgfHwgXCJcIikgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaCA/IGgudG9TdHJpbmcoKSA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFQgPSBlLnN5bWJvbCwgeSA9IFtdLCB3ID0gbltUKFwiRElTQUJMRV9XUkFQUElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTlwiKV0gIT09IGZhbHNlLCBfID0gVChcIlByb21pc2VcIiksIEMgPSBUKFwidGhlblwiKSwgTSA9IFwiX19jcmVhdGlvblRyYWNlX19cIjtcbiAgICAgIGUub25VbmhhbmRsZWRFcnJvciA9IChoKSA9PiB7XG4gICAgICAgIGlmIChlLnNob3dVbmNhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBjb25zdCBsID0gaCAmJiBoLnJlamVjdGlvbjtcbiAgICAgICAgICBsID8gY29uc29sZS5lcnJvcihcIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjpcIiwgbCBpbnN0YW5jZW9mIEVycm9yID8gbC5tZXNzYWdlIDogbCwgXCI7IFpvbmU6XCIsIGguem9uZS5uYW1lLCBcIjsgVGFzazpcIiwgaC50YXNrICYmIGgudGFzay5zb3VyY2UsIFwiOyBWYWx1ZTpcIiwgbCwgbCBpbnN0YW5jZW9mIEVycm9yID8gbC5zdGFjayA6IHZvaWQgMCkgOiBjb25zb2xlLmVycm9yKGgpO1xuICAgICAgICB9XG4gICAgICB9LCBlLm1pY3JvdGFza0RyYWluRG9uZSA9ICgpID0+IHtcbiAgICAgICAgZm9yICg7IHkubGVuZ3RoOyApIHtcbiAgICAgICAgICBjb25zdCBoID0geS5zaGlmdCgpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoLnpvbmUucnVuR3VhcmRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IGgudGhyb3dPcmlnaW5hbCA/IGgucmVqZWN0aW9uIDogaDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIFgobCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgRiA9IFQoXCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlclwiKTtcbiAgICAgIGZ1bmN0aW9uIFgoaCkge1xuICAgICAgICBlLm9uVW5oYW5kbGVkRXJyb3IoaCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbCA9IGFbRl07XG4gICAgICAgICAgdHlwZW9mIGwgPT0gXCJmdW5jdGlvblwiICYmIGwuY2FsbCh0aGlzLCBoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5lKGgpIHtcbiAgICAgICAgcmV0dXJuIGggJiYgdHlwZW9mIGgudGhlbiA9PSBcImZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZShoKSB7XG4gICAgICAgIHJldHVybiBoO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSihoKSB7XG4gICAgICAgIHJldHVybiBBLnJlamVjdChoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGsgPSBUKFwic3RhdGVcIiksIGQgPSBUKFwidmFsdWVcIiksIHggPSBUKFwiZmluYWxseVwiKSwgViA9IFQoXCJwYXJlbnRQcm9taXNlVmFsdWVcIiksIEsgPSBUKFwicGFyZW50UHJvbWlzZVN0YXRlXCIpLCBVID0gXCJQcm9taXNlLnRoZW5cIiwgZyA9IG51bGwsIFkgPSB0cnVlLCBPID0gZmFsc2UsIFAgPSAwO1xuICAgICAgZnVuY3Rpb24gYihoLCBsKSB7XG4gICAgICAgIHJldHVybiAobykgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBJKGgsIGwsIG8pO1xuICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgIEkoaCwgZmFsc2UsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IEQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IGggPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBoIHx8IChoID0gdHJ1ZSwgby5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSwgb2UgPSBcIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGZcIiwgJCA9IFQoXCJjdXJyZW50VGFza1RyYWNlXCIpO1xuICAgICAgZnVuY3Rpb24gSShoLCBsLCBvKSB7XG4gICAgICAgIGNvbnN0IHUgPSBEKCk7XG4gICAgICAgIGlmIChoID09PSBvKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Iob2UpO1xuICAgICAgICBpZiAoaFtrXSA9PT0gZykge1xuICAgICAgICAgIGxldCB2ID0gbnVsbDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgKHR5cGVvZiBvID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiKSAmJiAodiA9IG8gJiYgby50aGVuKTtcbiAgICAgICAgICB9IGNhdGNoIChSKSB7XG4gICAgICAgICAgICByZXR1cm4gdSgoKSA9PiB7XG4gICAgICAgICAgICAgIEkoaCwgZmFsc2UsIFIpO1xuICAgICAgICAgICAgfSkoKSwgaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGwgIT09IE8gJiYgbyBpbnN0YW5jZW9mIEEgJiYgby5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvLmhhc093blByb3BlcnR5KGQpICYmIG9ba10gIT09IGcpXG4gICAgICAgICAgICBpKG8pLCBJKGgsIG9ba10sIG9bZF0pO1xuICAgICAgICAgIGVsc2UgaWYgKGwgIT09IE8gJiYgdHlwZW9mIHYgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdi5jYWxsKG8sIHUoYihoLCBsKSksIHUoYihoLCAhMSkpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKFIpIHtcbiAgICAgICAgICAgICAgdSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgSShoLCBmYWxzZSwgUik7XG4gICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoW2tdID0gbDtcbiAgICAgICAgICAgIGNvbnN0IFIgPSBoW2RdO1xuICAgICAgICAgICAgaWYgKGhbZF0gPSBvLCBoW3hdID09PSB4ICYmIGwgPT09IFkgJiYgKGhba10gPSBoW0tdLCBoW2RdID0gaFtWXSksIGwgPT09IE8gJiYgbyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG0gPSBhLmN1cnJlbnRUYXNrICYmIGEuY3VycmVudFRhc2suZGF0YSAmJiBhLmN1cnJlbnRUYXNrLmRhdGFbTV07XG4gICAgICAgICAgICAgIG0gJiYgZihvLCAkLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBSLmxlbmd0aDsgKVxuICAgICAgICAgICAgICByKGgsIFJbbSsrXSwgUlttKytdLCBSW20rK10sIFJbbSsrXSk7XG4gICAgICAgICAgICBpZiAoUi5sZW5ndGggPT0gMCAmJiBsID09IE8pIHtcbiAgICAgICAgICAgICAgaFtrXSA9IFA7XG4gICAgICAgICAgICAgIGxldCBtID0gbztcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6IFwiICsgcChvKSArIChvICYmIG8uc3RhY2sgPyBgXG5gICsgby5zdGFjayA6IFwiXCIpKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoTikge1xuICAgICAgICAgICAgICAgIG0gPSBOO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHcgJiYgKG0udGhyb3dPcmlnaW5hbCA9IHRydWUpLCBtLnJlamVjdGlvbiA9IG8sIG0ucHJvbWlzZSA9IGgsIG0uem9uZSA9IGEuY3VycmVudCwgbS50YXNrID0gYS5jdXJyZW50VGFzaywgeS5wdXNoKG0pLCBlLnNjaGVkdWxlTWljcm9UYXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoO1xuICAgICAgfVxuICAgICAgY29uc3QgcyA9IFQoXCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlclwiKTtcbiAgICAgIGZ1bmN0aW9uIGkoaCkge1xuICAgICAgICBpZiAoaFtrXSA9PT0gUCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBsID0gYVtzXTtcbiAgICAgICAgICAgIGwgJiYgdHlwZW9mIGwgPT0gXCJmdW5jdGlvblwiICYmIGwuY2FsbCh0aGlzLCB7IHJlamVjdGlvbjogaFtkXSwgcHJvbWlzZTogaCB9KTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB9XG4gICAgICAgICAgaFtrXSA9IE87XG4gICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCB5Lmxlbmd0aDsgbCsrKVxuICAgICAgICAgICAgaCA9PT0geVtsXS5wcm9taXNlICYmIHkuc3BsaWNlKGwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByKGgsIGwsIG8sIHUsIHYpIHtcbiAgICAgICAgaShoKTtcbiAgICAgICAgY29uc3QgUiA9IGhba10sIG0gPSBSID8gdHlwZW9mIHUgPT0gXCJmdW5jdGlvblwiID8gdSA6IHJlIDogdHlwZW9mIHYgPT0gXCJmdW5jdGlvblwiID8gdiA6IEo7XG4gICAgICAgIGwuc2NoZWR1bGVNaWNyb1Rhc2soVSwgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBOID0gaFtkXSwgWiA9ICEhbyAmJiB4ID09PSBvW3hdO1xuICAgICAgICAgICAgWiAmJiAob1tWXSA9IE4sIG9bS10gPSBSKTtcbiAgICAgICAgICAgIGNvbnN0IEwgPSBsLnJ1bihtLCB2b2lkIDAsIFogJiYgbSAhPT0gSiAmJiBtICE9PSByZSA/IFtdIDogW05dKTtcbiAgICAgICAgICAgIEkobywgITAsIEwpO1xuICAgICAgICAgIH0gY2F0Y2ggKE4pIHtcbiAgICAgICAgICAgIEkobywgZmFsc2UsIE4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgbyk7XG4gICAgICB9XG4gICAgICBjb25zdCBFID0gXCJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH1cIiwgRyA9IGZ1bmN0aW9uKCkge1xuICAgICAgfSwgY2UgPSBuLkFnZ3JlZ2F0ZUVycm9yO1xuICAgICAgY2xhc3MgQSB7XG4gICAgICAgIHN0YXRpYyB0b1N0cmluZygpIHtcbiAgICAgICAgICByZXR1cm4gRTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgcmVzb2x2ZShsKSB7XG4gICAgICAgICAgcmV0dXJuIGwgaW5zdGFuY2VvZiBBID8gbCA6IEkobmV3IHRoaXMobnVsbCksIFksIGwpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyByZWplY3QobCkge1xuICAgICAgICAgIHJldHVybiBJKG5ldyB0aGlzKG51bGwpLCBPLCBsKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgd2l0aFJlc29sdmVycygpIHtcbiAgICAgICAgICBjb25zdCBsID0ge307XG4gICAgICAgICAgcmV0dXJuIGwucHJvbWlzZSA9IG5ldyBBKChvLCB1KSA9PiB7XG4gICAgICAgICAgICBsLnJlc29sdmUgPSBvLCBsLnJlamVjdCA9IHU7XG4gICAgICAgICAgfSksIGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFueShsKSB7XG4gICAgICAgICAgaWYgKCFsIHx8IHR5cGVvZiBsW1N5bWJvbC5pdGVyYXRvcl0gIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjZShbXSwgXCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZFwiKSk7XG4gICAgICAgICAgY29uc3QgbyA9IFtdO1xuICAgICAgICAgIGxldCB1ID0gMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBsKVxuICAgICAgICAgICAgICB1KyssIG8ucHVzaChBLnJlc29sdmUobSkpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjZShbXSwgXCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZFwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjZShbXSwgXCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZFwiKSk7XG4gICAgICAgICAgbGV0IHYgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBSID0gW107XG4gICAgICAgICAgcmV0dXJuIG5ldyBBKChtLCBOKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBaID0gMDsgWiA8IG8ubGVuZ3RoOyBaKyspXG4gICAgICAgICAgICAgIG9bWl0udGhlbigoTCkgPT4ge1xuICAgICAgICAgICAgICAgIHYgfHwgKHYgPSB0cnVlLCBtKEwpKTtcbiAgICAgICAgICAgICAgfSwgKEwpID0+IHtcbiAgICAgICAgICAgICAgICBSLnB1c2goTCksIHUtLSwgdSA9PT0gMCAmJiAodiA9IHRydWUsIE4obmV3IGNlKFIsIFwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWRcIikpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHJhY2UobCkge1xuICAgICAgICAgIGxldCBvLCB1LCB2ID0gbmV3IHRoaXMoKE4sIFopID0+IHtcbiAgICAgICAgICAgIG8gPSBOLCB1ID0gWjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmdW5jdGlvbiBSKE4pIHtcbiAgICAgICAgICAgIG8oTik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG0oTikge1xuICAgICAgICAgICAgdShOKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgTiBvZiBsKVxuICAgICAgICAgICAgbmUoTikgfHwgKE4gPSB0aGlzLnJlc29sdmUoTikpLCBOLnRoZW4oUiwgbSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFsbChsKSB7XG4gICAgICAgICAgcmV0dXJuIEEuYWxsV2l0aENhbGxiYWNrKGwpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhbGxTZXR0bGVkKGwpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMgJiYgdGhpcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBID8gdGhpcyA6IEEpLmFsbFdpdGhDYWxsYmFjayhsLCB7XG4gICAgICAgICAgICB0aGVuQ2FsbGJhY2s6ICh1KSA9PiAoeyBzdGF0dXM6IFwiZnVsZmlsbGVkXCIsIHZhbHVlOiB1IH0pLFxuICAgICAgICAgICAgZXJyb3JDYWxsYmFjazogKHUpID0+ICh7IHN0YXR1czogXCJyZWplY3RlZFwiLCByZWFzb246IHUgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYWxsV2l0aENhbGxiYWNrKGwsIG8pIHtcbiAgICAgICAgICBsZXQgdSwgdiwgUiA9IG5ldyB0aGlzKChMLCBXKSA9PiB7XG4gICAgICAgICAgICB1ID0gTCwgdiA9IFc7XG4gICAgICAgICAgfSksIG0gPSAyLCBOID0gMDtcbiAgICAgICAgICBjb25zdCBaID0gW107XG4gICAgICAgICAgZm9yIChsZXQgTCBvZiBsKSB7XG4gICAgICAgICAgICBuZShMKSB8fCAoTCA9IHRoaXMucmVzb2x2ZShMKSk7XG4gICAgICAgICAgICBjb25zdCBXID0gTjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEwudGhlbigocSkgPT4ge1xuICAgICAgICAgICAgICAgIFpbV10gPSBvID8gby50aGVuQ2FsbGJhY2socSkgOiBxLCBtLS0sIG0gPT09IDAgJiYgdShaKTtcbiAgICAgICAgICAgICAgfSwgKHEpID0+IHtcbiAgICAgICAgICAgICAgICBvID8gKFpbV10gPSBvLmVycm9yQ2FsbGJhY2socSksIG0tLSwgbSA9PT0gMCAmJiB1KFopKSA6IHYocSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAocSkge1xuICAgICAgICAgICAgICB2KHEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbSsrLCBOKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtIC09IDIsIG0gPT09IDAgJiYgdShaKSwgUjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihsKSB7XG4gICAgICAgICAgY29uc3QgbyA9IHRoaXM7XG4gICAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIEEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuXCIpO1xuICAgICAgICAgIG9ba10gPSBnLCBvW2RdID0gW107XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBEKCk7XG4gICAgICAgICAgICBsICYmIGwodShiKG8sIFkpKSwgdShiKG8sIE8pKSk7XG4gICAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgICAgSShvLCBmYWxzZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgICByZXR1cm4gXCJQcm9taXNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XG4gICAgICAgICAgcmV0dXJuIEE7XG4gICAgICAgIH1cbiAgICAgICAgdGhlbihsLCBvKSB7XG4gICAgICAgICAgbGV0IHUgPSB0aGlzLmNvbnN0cnVjdG9yPy5bU3ltYm9sLnNwZWNpZXNdO1xuICAgICAgICAgICghdSB8fCB0eXBlb2YgdSAhPSBcImZ1bmN0aW9uXCIpICYmICh1ID0gdGhpcy5jb25zdHJ1Y3RvciB8fCBBKTtcbiAgICAgICAgICBjb25zdCB2ID0gbmV3IHUoRyksIFIgPSBhLmN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXNba10gPT0gZyA/IHRoaXNbZF0ucHVzaChSLCB2LCBsLCBvKSA6IHIodGhpcywgUiwgdiwgbCwgbyksIHY7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gobCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgbCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseShsKSB7XG4gICAgICAgICAgbGV0IG8gPSB0aGlzLmNvbnN0cnVjdG9yPy5bU3ltYm9sLnNwZWNpZXNdO1xuICAgICAgICAgICghbyB8fCB0eXBlb2YgbyAhPSBcImZ1bmN0aW9uXCIpICYmIChvID0gQSk7XG4gICAgICAgICAgY29uc3QgdSA9IG5ldyBvKEcpO1xuICAgICAgICAgIHVbeF0gPSB4O1xuICAgICAgICAgIGNvbnN0IHYgPSBhLmN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXNba10gPT0gZyA/IHRoaXNbZF0ucHVzaCh2LCB1LCBsLCBsKSA6IHIodGhpcywgdiwgdSwgbCwgbCksIHU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucmVzb2x2ZSA9IEEucmVzb2x2ZSwgQS5yZWplY3QgPSBBLnJlamVjdCwgQS5yYWNlID0gQS5yYWNlLCBBLmFsbCA9IEEuYWxsO1xuICAgICAgY29uc3QgZ2UgPSBuW19dID0gbi5Qcm9taXNlO1xuICAgICAgbi5Qcm9taXNlID0gQTtcbiAgICAgIGNvbnN0IHllID0gVChcInRoZW5QYXRjaGVkXCIpO1xuICAgICAgZnVuY3Rpb24gc2UoaCkge1xuICAgICAgICBjb25zdCBsID0gaC5wcm90b3R5cGUsIG8gPSBjKGwsIFwidGhlblwiKTtcbiAgICAgICAgaWYgKG8gJiYgKG8ud3JpdGFibGUgPT09IGZhbHNlIHx8ICFvLmNvbmZpZ3VyYWJsZSkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB1ID0gbC50aGVuO1xuICAgICAgICBsW0NdID0gdSwgaC5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uKHYsIFIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEEoKE4sIFopID0+IHtcbiAgICAgICAgICAgIHUuY2FsbCh0aGlzLCBOLCBaKTtcbiAgICAgICAgICB9KS50aGVuKHYsIFIpO1xuICAgICAgICB9LCBoW3llXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBlLnBhdGNoVGhlbiA9IHNlO1xuICAgICAgZnVuY3Rpb24gQ2UoaCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obCwgbykge1xuICAgICAgICAgIGxldCB1ID0gaC5hcHBseShsLCBvKTtcbiAgICAgICAgICBpZiAodSBpbnN0YW5jZW9mIEEpXG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICBsZXQgdiA9IHUuY29uc3RydWN0b3I7XG4gICAgICAgICAgcmV0dXJuIHZbeWVdIHx8IHNlKHYpLCB1O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdlICYmIChzZShnZSksIEVlKG4sIFwiZmV0Y2hcIiwgKGgpID0+IENlKGgpKSksIFByb21pc2VbYS5fX3N5bWJvbF9fKFwidW5jYXVnaHRQcm9taXNlRXJyb3JzXCIpXSA9IHksIEE7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gTXQodCkge1xuICAgIHQuX19sb2FkX3BhdGNoKFwidG9TdHJpbmdcIiwgKG4pID0+IHtcbiAgICAgIGNvbnN0IGEgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsIGUgPSBIKFwiT3JpZ2luYWxEZWxlZ2F0ZVwiKSwgYyA9IEgoXCJQcm9taXNlXCIpLCBmID0gSChcIkVycm9yXCIpLCBwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBjb25zdCBfID0gdGhpc1tlXTtcbiAgICAgICAgICBpZiAoXylcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgXyA9PSBcImZ1bmN0aW9uXCIgPyBhLmNhbGwoXykgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXyk7XG4gICAgICAgICAgaWYgKHRoaXMgPT09IFByb21pc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IEMgPSBuW2NdO1xuICAgICAgICAgICAgaWYgKEMpXG4gICAgICAgICAgICAgIHJldHVybiBhLmNhbGwoQyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzID09PSBFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgQyA9IG5bZl07XG4gICAgICAgICAgICBpZiAoQylcbiAgICAgICAgICAgICAgcmV0dXJuIGEuY2FsbChDKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEuY2FsbCh0aGlzKTtcbiAgICAgIH07XG4gICAgICBwW2VdID0gYSwgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gcDtcbiAgICAgIGNvbnN0IFQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLCB5ID0gXCJbb2JqZWN0IFByb21pc2VdXCI7XG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUHJvbWlzZSA9PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIFByb21pc2UgPyB5IDogVC5jYWxsKHRoaXMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBJdCh0LCBuLCBhLCBlLCBjKSB7XG4gICAgY29uc3QgZiA9IFpvbmUuX19zeW1ib2xfXyhlKTtcbiAgICBpZiAobltmXSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBwID0gbltmXSA9IG5bZV07XG4gICAgbltlXSA9IGZ1bmN0aW9uKFQsIHksIHcpIHtcbiAgICAgIHJldHVybiB5ICYmIHkucHJvdG90eXBlICYmIGMuZm9yRWFjaChmdW5jdGlvbihfKSB7XG4gICAgICAgIGNvbnN0IEMgPSBgJHthfS4ke2V9OjpgICsgXywgTSA9IHkucHJvdG90eXBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChNLmhhc093blByb3BlcnR5KF8pKSB7XG4gICAgICAgICAgICBjb25zdCBGID0gdC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTSwgXyk7XG4gICAgICAgICAgICBGICYmIEYudmFsdWUgPyAoRi52YWx1ZSA9IHQud3JhcFdpdGhDdXJyZW50Wm9uZShGLnZhbHVlLCBDKSwgdC5fcmVkZWZpbmVQcm9wZXJ0eSh5LnByb3RvdHlwZSwgXywgRikpIDogTVtfXSAmJiAoTVtfXSA9IHQud3JhcFdpdGhDdXJyZW50Wm9uZShNW19dLCBDKSk7XG4gICAgICAgICAgfSBlbHNlIE1bX10gJiYgKE1bX10gPSB0LndyYXBXaXRoQ3VycmVudFpvbmUoTVtfXSwgQykpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgfVxuICAgICAgfSksIHAuY2FsbChuLCBULCB5LCB3KTtcbiAgICB9LCB0LmF0dGFjaE9yaWdpblRvUGF0Y2hlZChuW2VdLCBwKTtcbiAgfVxuICBmdW5jdGlvbiBBdCh0KSB7XG4gICAgdC5fX2xvYWRfcGF0Y2goXCJ1dGlsXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBjb25zdCBjID0gQmUobik7XG4gICAgICBlLnBhdGNoT25Qcm9wZXJ0aWVzID0gUWUsIGUucGF0Y2hNZXRob2QgPSBFZSwgZS5iaW5kQXJndW1lbnRzID0gVmUsIGUucGF0Y2hNYWNyb1Rhc2sgPSB2dDtcbiAgICAgIGNvbnN0IGYgPSBhLl9fc3ltYm9sX18oXCJCTEFDS19MSVNURURfRVZFTlRTXCIpLCBwID0gYS5fX3N5bWJvbF9fKFwiVU5QQVRDSEVEX0VWRU5UU1wiKTtcbiAgICAgIG5bcF0gJiYgKG5bZl0gPSBuW3BdKSwgbltmXSAmJiAoYVtmXSA9IGFbcF0gPSBuW2ZdKSwgZS5wYXRjaEV2ZW50UHJvdG90eXBlID0gUnQsIGUucGF0Y2hFdmVudFRhcmdldCA9IFB0LCBlLmlzSUVPckVkZ2UgPSBidCwgZS5PYmplY3REZWZpbmVQcm9wZXJ0eSA9IHRlLCBlLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGVlLCBlLk9iamVjdENyZWF0ZSA9IGZlLCBlLkFycmF5U2xpY2UgPSBrZSwgZS5wYXRjaENsYXNzID0gU2UsIGUud3JhcFdpdGhDdXJyZW50Wm9uZSA9IHhlLCBlLmZpbHRlclByb3BlcnRpZXMgPSBhdCwgZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQgPSBwZSwgZS5fcmVkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgZS5wYXRjaENhbGxiYWNrcyA9IEl0LCBlLmdldEdsb2JhbE9iamVjdHMgPSAoKSA9PiAoe1xuICAgICAgICBnbG9iYWxTb3VyY2VzOiBydCxcbiAgICAgICAgem9uZVN5bWJvbEV2ZW50TmFtZXM6IGFlLFxuICAgICAgICBldmVudE5hbWVzOiBjLFxuICAgICAgICBpc0Jyb3dzZXI6IHplLFxuICAgICAgICBpc01peDogJGUsXG4gICAgICAgIGlzTm9kZTogWmUsXG4gICAgICAgIFRSVUVfU1RSOiBfZSxcbiAgICAgICAgRkFMU0VfU1RSOiBUZSxcbiAgICAgICAgWk9ORV9TWU1CT0xfUFJFRklYOiB3ZSxcbiAgICAgICAgQUREX0VWRU5UX0xJU1RFTkVSX1NUUjogdmUsXG4gICAgICAgIFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6IEFlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBqdCh0KSB7XG4gICAgTHQodCksIE10KHQpLCBBdCh0KTtcbiAgfVxuICBjb25zdCB1dCA9IHooKTtcbiAgcmV0dXJuIGp0KHV0KSwgWnQodXQpLCBwdDtcbn1cbkZ0KCk7XG5cbmV4cG9ydCB7IHp0IGFzIFpvbmVDb250ZXh0TWFuYWdlciB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsVUFBVTtBQUV4QixTQUFTQyxHQUFHQyxHQUFHO0FBQ2IsU0FBT0EsTUFBTSxXQUFXQSxJQUFJLENBQUMsSUFBSSxPQUFPQSxFQUFFLG9CQUFvQixjQUFjLE9BQU9BLEVBQUUsdUJBQXVCO0FBQzlHO0FBQ0EsSUFBSUMsS0FBSyxtQkFBbUJDO0FBQUE7QUFBQSxFQUUxQixXQUFXO0FBQ1QsYUFBU0YsSUFBSTtBQUNYLFdBQUssV0FBVyxJQUFPLEtBQUssZUFBZTtBQUFBLElBQzdDO0FBQ0EsV0FBT0EsRUFBRSxVQUFVLHlCQUF5QixTQUFTRyxHQUFHO0FBQ3RELGFBQU9BLEtBQUtBLEVBQUUsSUFBSUYsRUFBRSxLQUFLSDtBQUFBLElBQzNCLEdBQUdFLEVBQUUsVUFBVSxnQkFBZ0IsU0FBU0csR0FBR0MsR0FBRztBQUM1QyxVQUFJQyxJQUFJLE1BQU0sS0FBSyxXQUFXO0FBQzVCLGlCQUFTLEtBQUssTUFBTUMsS0FBSyxDQUFDLEdBQUdDLEtBQUssR0FBR0Es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QW9CLE9BQU8sZ0JBQWdCQSxFQUFFLGlCQUFpQnFHLElBQUlyRyxFQUFFLG1CQUFtQixPQUFPO0FBQUEsUUFDN2EsZUFBZTtBQUFBLFFBQ2Ysc0JBQXNCMEQ7QUFBQSxRQUN0QixZQUFZbkM7QUFBQSxRQUNaLFdBQVd1QjtBQUFBLFFBQ1gsT0FBT0M7QUFBQSxRQUNQLFFBQVFGO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixXQUFXYjtBQUFBLFFBQ1gsb0JBQW9CQztBQUFBLFFBQ3BCLHdCQUF3QnpDO0FBQUEsUUFDeEIsMkJBQTJCcUM7QUFBQSxNQUM3QjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDQSxXQUFTMEUsR0FBRzNHLEdBQUc7QUFDYixJQUFBcUcsR0FBR3JHLENBQUMsR0FBR3VHLEdBQUd2RyxDQUFDLEdBQUcwRyxHQUFHMUcsQ0FBQztBQUFBLEVBQ3BCO0FBQ0EsUUFBTSxLQUFLUixFQUFFO0FBQ2IsU0FBT21ILEdBQUcsRUFBRSxHQUFHVixHQUFHLEVBQUUsR0FBR3BHO0FBQ3pCO0FBQ0FFLEdBQUc7IiwKICAibmFtZXMiOiBbIlFpIiwgInh0IiwgImoiLCAiRXQiLCAienQiLCAiUyIsICJCIiwgInoiLCAiaWUiLCAiZmUiLCAia2UiLCAidmUiLCAicHQiLCAiZ3QiLCAiRnQiLCAidCIsICJJIiwgImEiLCAicyIsICJlIiwgImIiLCAiRCIsICJpIiwgIkUiLCAiUCIsICJmIiwgIkciLCAiY2UiLCAiQSIsICJKIiwgIlkiLCAiZyIsICJnZSIsICJ4IiwgImQiLCAieWUiLCAiSyIsICJrIiwgIkNlIiwgInAiLCAiVSIsICJWIiwgImMiLCAiVCIsICJDIiwgIk0iLCAiRiIsICIkIiwgIkFlIiwgImplIiwgIkhlIiwgIlRlIiwgIndlIiwgInhlIiwgIkZlIiwgIkgiLCAiTmUiLCAiRGUiLCAibXQiLCAiVmUiLCAieXQiLCAiWGUiLCAicGUiLCAiWWUiLCAiWmUiLCAiemUiLCAiJGUiLCAiTGUiLCAia3QiLCAiSmUiLCAiS2UiLCAiU2UiLCAiRWUiLCAidnQiLCAiR2UiLCAiYnQiLCAiQ3QiLCAiYWUiLCAiaXQiLCAiUHQiLCAidSIsICJ2IiwgIlIiLCAiaCIsICJOIiwgIloiLCAiTCIsICJtZSIsICJoZSIsICJQZSIsICJkZSIsICJVZSIsICJmdCIsICJIdCIsICJXZSIsICJodCIsICJSZSIsICJkdCIsICJJZSIsICJUdCIsICJPZSIsICJjdCIsICJSdCIsICJ3dCIsICJNZSIsICJiZSIsICJEdCIsICJTdCIsICJPdCIsICJhdCIsICJCZSIsICJOdCIsICJadCIsICJyIiwgInkiLCAidyIsICJMdCIsICJvIiwgIk10IiwgIl8iLCAiSXQiLCAiQXQiLCAianQiXQp9Cg==