@fest-lib/style-lib 0.1.8 → 0.1.9
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.
- package/dist/style-lib.js +1354 -952
- package/package.json +3 -2
package/dist/style-lib.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $avoidTrigger as
|
|
2
|
-
import { addToCallChain as
|
|
3
|
-
var
|
|
1
|
+
import { $avoidTrigger as cr, $getValue as rt, camelToKebab as ce, deref as nt, getOrInsertComputed as ur, hasValue as qe, isVal as fr, isValueUnit as dr, toRef as ot, tryStringAsNumber as At } from "@fest-lib/core";
|
|
2
|
+
import { addToCallChain as pr, affected as hr } from "@fest-lib/object";
|
|
3
|
+
var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap", () => /* @__PURE__ */ new WeakMap()), U = b("dom.ts@cacheMap", () => /* @__PURE__ */ new Map()), H = b("dom.ts@cacheContentMap", () => /* @__PURE__ */ new Map()), de = b("dom.ts@cacheBlobContentMap", () => /* @__PURE__ */ new WeakMap()), it = b("dom.ts@adoptedSelectorMap", () => /* @__PURE__ */ new Map()), st = b("dom.ts@adoptedShadowSelectorMap", () => /* @__PURE__ */ new WeakMap()), at = b("dom.ts@adoptedLayerMap", () => /* @__PURE__ */ new Map()), pe = b("dom.ts@adoptedShadowLayerMap", () => /* @__PURE__ */ new WeakMap()), T = b("dom.ts@adoptedMap", () => /* @__PURE__ */ new Map()), V = b("dom.ts@adoptedBlobMap", () => /* @__PURE__ */ new WeakMap()), D = b("dom.ts@adoptedAppliedText", () => /* @__PURE__ */ new WeakMap()), Rt = b("dom.ts@adoptedFilled", () => /* @__PURE__ */ new WeakSet()), ao = b("dom.ts@layerCounter", () => 0), Tt = b("dom.ts@styleTreeHooks", () => /* @__PURE__ */ new Set()), be = b("dom.ts@styleTreeObserved", () => /* @__PURE__ */ new WeakSet()), yr = b("dom.ts@styleTreeRoots", () => /* @__PURE__ */ new Set()), R = b("style-lib@bakedStyle", () => /* @__PURE__ */ new WeakMap()), I = b("style-lib@bakedLive", () => /* @__PURE__ */ new Set()), L = b("style-lib@bakedCache", () => /* @__PURE__ */ new Map()), Ue = b("style-lib@rebakeBatch", () => /* @__PURE__ */ new Set()), G = b("style-lib@bakedFollowers", () => /* @__PURE__ */ new WeakMap()), Be = b("lur.e@adoptedStyleSheetsCache", () => /* @__PURE__ */ new WeakMap()), mr = b("lur.e@styleCache", () => /* @__PURE__ */ new Map()), Sr = b("lur.e@styleElementCache", () => /* @__PURE__ */ new WeakMap()), Ee = b("style-lib@styleFlushPending", () => /* @__PURE__ */ new WeakSet()), lt = b("style-lib@registeredProperties", () => /* @__PURE__ */ new Set()), Ce = b("style.ts@animKeyframeRefs", () => /* @__PURE__ */ new Map()), vr = [
|
|
4
4
|
"%",
|
|
5
5
|
"px",
|
|
6
6
|
"cm",
|
|
@@ -64,13 +64,13 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
64
64
|
"dppx",
|
|
65
65
|
"x",
|
|
66
66
|
"fr"
|
|
67
|
-
],
|
|
67
|
+
], gr = new Set(vr), wr = {
|
|
68
68
|
"%": "percent",
|
|
69
69
|
q: "Q",
|
|
70
70
|
hz: "Hz",
|
|
71
71
|
khz: "kHz",
|
|
72
72
|
fr: "flex"
|
|
73
|
-
},
|
|
73
|
+
}, Lt = /^(%|[a-zA-Z]+)/, $t = [
|
|
74
74
|
"color",
|
|
75
75
|
"background-color",
|
|
76
76
|
"border-color",
|
|
@@ -88,7 +88,7 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
88
88
|
"flood-color",
|
|
89
89
|
"lighting-color",
|
|
90
90
|
"stop-color"
|
|
91
|
-
],
|
|
91
|
+
], br = [
|
|
92
92
|
"font-family",
|
|
93
93
|
"font-size",
|
|
94
94
|
"font-weight",
|
|
@@ -97,27 +97,27 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
97
97
|
"line-height",
|
|
98
98
|
"letter-spacing",
|
|
99
99
|
"word-spacing"
|
|
100
|
-
],
|
|
100
|
+
], Er = [
|
|
101
101
|
"transition-duration",
|
|
102
102
|
"transition-timing-function",
|
|
103
103
|
"animation-duration",
|
|
104
104
|
"animation-timing-function"
|
|
105
|
-
],
|
|
105
|
+
], Pt = [
|
|
106
106
|
"data-theme",
|
|
107
107
|
"data-explorer-color-scheme",
|
|
108
108
|
"data-color-scheme",
|
|
109
109
|
"theme",
|
|
110
110
|
"color-scheme"
|
|
111
|
-
],
|
|
112
|
-
...
|
|
111
|
+
], Cr = [
|
|
112
|
+
...Pt,
|
|
113
113
|
"style",
|
|
114
114
|
"class"
|
|
115
|
-
],
|
|
115
|
+
], lo = [
|
|
116
116
|
"tokens",
|
|
117
117
|
"colors",
|
|
118
118
|
"typography",
|
|
119
119
|
"motion"
|
|
120
|
-
],
|
|
120
|
+
], xr = [
|
|
121
121
|
"tokens",
|
|
122
122
|
"base",
|
|
123
123
|
"layout",
|
|
@@ -126,31 +126,31 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
126
126
|
"theme",
|
|
127
127
|
"overrides",
|
|
128
128
|
"print"
|
|
129
|
-
],
|
|
129
|
+
], kr = ["ux-preload", "ux-layer"], Mr = [
|
|
130
130
|
"rs-md-base",
|
|
131
131
|
"rs-md-system",
|
|
132
132
|
"rs-md-modules",
|
|
133
133
|
"rs-md-user",
|
|
134
134
|
"rs-md-print",
|
|
135
135
|
"rs-md-user-print"
|
|
136
|
-
],
|
|
136
|
+
], co = Mr, Ar = /^[a-zA-Z0-9_.-]+$/, Rr = /^@layer\s+([a-zA-Z0-9_.-]+)\s*\{/, uo = "DOM", ct = "data-glit-host-css", Ot = "ux-baked", Tr = ["colors", "tokens"], ze = 3e4, ue = "screen", Lr = [
|
|
137
137
|
"ui-window-frame",
|
|
138
138
|
"ui-modal",
|
|
139
139
|
"app-box",
|
|
140
140
|
".ui-modal-dialog",
|
|
141
141
|
".ui-modal-panel"
|
|
142
|
-
],
|
|
142
|
+
], It = [
|
|
143
143
|
".row.c2-surface",
|
|
144
144
|
".row.c2-surface[data-kind=directory]",
|
|
145
145
|
".row.c2-surface[data-kind=file]",
|
|
146
146
|
".row.c2-surface .c.name",
|
|
147
147
|
".fm-grid-header"
|
|
148
|
-
],
|
|
148
|
+
], Ut = [
|
|
149
149
|
".field",
|
|
150
150
|
".form-input",
|
|
151
151
|
".form-select",
|
|
152
152
|
".field-control"
|
|
153
|
-
],
|
|
153
|
+
], $r = [...It, ...Ut], Bt = /* @__PURE__ */ Symbol.for("fest.animatable"), fo = "ux-anim", N = "--fest-t", ge = typeof CSSStyleValue < "u" && typeof CSSUnitValue < "u", Pr = (e) => wr[e.toLowerCase()] ?? e.toLowerCase(), Or = (e) => e.toLowerCase() === "%" ? "percent" : e.toLowerCase(), po = (e) => Ar.test(e), Ir = (e) => `@layer ${e} {}`, Ur = (e) => {
|
|
154
154
|
let t = String(e || "").trim();
|
|
155
155
|
t = t.replace(/^(@charset\s+[^;]+;\s*)+/i, "");
|
|
156
156
|
for (let r = 0; r < 8; r++) {
|
|
@@ -159,34 +159,34 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
159
159
|
t = n.trim();
|
|
160
160
|
}
|
|
161
161
|
return t;
|
|
162
|
-
},
|
|
162
|
+
}, ut = (e) => typeof CSSLayerBlockRule < "u" && e instanceof CSSLayerBlockRule, z = () => typeof globalThis < "u" && typeof globalThis.CSSStyleSheet == "function", ft = (e) => typeof e == "string" && /@import\b/i.test(e), _t = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), Q = (e) => typeof ShadowRoot < "u" && e instanceof ShadowRoot, dt = (e) => typeof Document < "u" && e instanceof Document, Br = (e) => typeof Element < "u" && e instanceof Element, pt = (e) => typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : Array.from(e).map((t) => `\\${t.codePointAt(0).toString(16)} `).join(""), _r = 0, Nr = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `ux-${Date.now().toString(36)}-${(++_r).toString(36)}`, Vr = (e) => {
|
|
163
163
|
try {
|
|
164
164
|
return typeof URL < "u" && typeof URL.canParse == "function" && URL.canParse(e);
|
|
165
165
|
} catch {
|
|
166
166
|
return !1;
|
|
167
167
|
}
|
|
168
|
-
},
|
|
168
|
+
}, ho = async (e) => {
|
|
169
169
|
const t = await crypto?.subtle?.digest("SHA-256", typeof e == "string" ? new TextEncoder().encode(e) : e instanceof ArrayBuffer ? e : await e?.arrayBuffer?.());
|
|
170
170
|
return "sha256-" + btoa(String.fromCharCode.apply(null, new Uint8Array(t)));
|
|
171
|
-
},
|
|
171
|
+
}, ht = (e, t) => e.endsWith("%") ? parseFloat(e) / 100 * t() : parseFloat(e), Fr = (e, t) => {
|
|
172
172
|
const r = e.split(" ");
|
|
173
|
-
return new DOMPoint(
|
|
174
|
-
},
|
|
173
|
+
return new DOMPoint(ht(r[0], () => t.clientWidth), ht(r[1], () => t.clientHeight));
|
|
174
|
+
}, B = (e, t = 0) => {
|
|
175
175
|
if (typeof e == "number") return e;
|
|
176
176
|
if (!e) return t;
|
|
177
177
|
const r = String(e).trim();
|
|
178
178
|
return r.endsWith("ms") ? parseFloat(r) : r.endsWith("s") ? parseFloat(r) * 1e3 : parseFloat(r) || t;
|
|
179
|
-
},
|
|
179
|
+
}, Nt = (e) => e === void 0 ? 1 : e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, Math.floor(e)), Dr = (e) => e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, e ?? 1), X = (e) => e != null && typeof e == "object" && e.kind === "scroll", ne = (e) => e != null && typeof e == "object" && e.kind === "view", oe = (e) => !e || e.nodeType !== 1 ? !1 : !!(String(e.localName || "").includes("-") || e.shadowRoot || e.styles != null), Vt = (e) => {
|
|
180
180
|
try {
|
|
181
181
|
return e.cssRules.length;
|
|
182
182
|
} catch {
|
|
183
183
|
return null;
|
|
184
184
|
}
|
|
185
|
-
},
|
|
185
|
+
}, yo = (e) => {
|
|
186
186
|
if (!e) return !0;
|
|
187
|
-
const t =
|
|
187
|
+
const t = Vt(e);
|
|
188
188
|
return t === null ? !1 : t === 0;
|
|
189
|
-
},
|
|
189
|
+
}, jr = (e) => e === "--base-color" || e.startsWith("--color-") || e.endsWith("-color") || e.endsWith("-fg") || e.endsWith("-bg"), qr = (e) => {
|
|
190
190
|
if (!e.isConnected) return !1;
|
|
191
191
|
if (typeof e.getClientRects != "function") return !0;
|
|
192
192
|
try {
|
|
@@ -194,7 +194,7 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
194
194
|
} catch {
|
|
195
195
|
return !0;
|
|
196
196
|
}
|
|
197
|
-
},
|
|
197
|
+
}, zr = (e) => Array.isArray(e) && typeof e[0] == "function", Ft = (e) => {
|
|
198
198
|
const t = typeof e == "string" ? e.trim() : "";
|
|
199
199
|
if (!t) return !0;
|
|
200
200
|
for (const r of t.split(";")) {
|
|
@@ -204,17 +204,17 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
204
204
|
if (o < 0 || n.slice(o + 1).trim().length > 0) return !1;
|
|
205
205
|
}
|
|
206
206
|
return !0;
|
|
207
|
-
},
|
|
207
|
+
}, Wr = (e) => {
|
|
208
208
|
if (e == null) return;
|
|
209
209
|
const t = e.getAttribute("style");
|
|
210
|
-
t != null &&
|
|
211
|
-
},
|
|
212
|
-
if (
|
|
210
|
+
t != null && Ft(t) && (e.style.cssText = "", e.removeAttribute("style"));
|
|
211
|
+
}, Hr = (e, t) => {
|
|
212
|
+
if (Ft(t)) {
|
|
213
213
|
e.style.cssText = "", e.removeAttribute("style");
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
216
|
e.style.cssText = t;
|
|
217
|
-
},
|
|
217
|
+
}, $ = (e) => {
|
|
218
218
|
if (e == null || typeof e != "object") return !1;
|
|
219
219
|
try {
|
|
220
220
|
const t = globalThis.CSSStyleValue;
|
|
@@ -223,29 +223,29 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
223
223
|
} catch {
|
|
224
224
|
}
|
|
225
225
|
return !1;
|
|
226
|
-
},
|
|
227
|
-
if (e == null || typeof e != "object" ||
|
|
226
|
+
}, fe = (e) => {
|
|
227
|
+
if (e == null || typeof e != "object" || $(e)) return !1;
|
|
228
228
|
try {
|
|
229
229
|
return "value" in e;
|
|
230
230
|
} catch {
|
|
231
231
|
return !1;
|
|
232
232
|
}
|
|
233
|
-
},
|
|
234
|
-
const t =
|
|
233
|
+
}, yt = (e) => e == null || typeof e != "object" && typeof e != "function", ie = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), mt = (e, t) => new RegExp(`var\\(\\s*${ie(t)}\\s*\\)`).test(e), Kr = (e) => {
|
|
234
|
+
const t = Lt.exec(e);
|
|
235
235
|
if (!t) return null;
|
|
236
236
|
const r = t[0], n = r.toLowerCase();
|
|
237
|
-
return
|
|
237
|
+
return gr.has(n) ? {
|
|
238
238
|
authored: r,
|
|
239
239
|
normalized: n,
|
|
240
240
|
length: r.length
|
|
241
241
|
} : null;
|
|
242
|
-
},
|
|
243
|
-
const n = e?.CSS, o =
|
|
242
|
+
}, j = (e, t) => e?.[t] ?? globalThis?.[t], M = (e, t, r) => {
|
|
243
|
+
const n = e?.CSS, o = Pr(t), i = n?.[o];
|
|
244
244
|
if (typeof i == "function") return i.call(n, r);
|
|
245
|
-
const
|
|
246
|
-
if (typeof
|
|
247
|
-
return new
|
|
248
|
-
},
|
|
245
|
+
const a = j(e, "CSSUnitValue");
|
|
246
|
+
if (typeof a != "function") throw new TypeError(`Typed OM does not support CSS unit "${t}"`);
|
|
247
|
+
return new a(r, Or(t));
|
|
248
|
+
}, mo = (e) => ge && e instanceof CSSStyleValue, he = (e) => ge && e instanceof CSSUnitValue, Se = (e, t) => {
|
|
249
249
|
if (!e || !t) return null;
|
|
250
250
|
const n = ((o) => {
|
|
251
251
|
try {
|
|
@@ -257,61 +257,61 @@ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap",
|
|
|
257
257
|
})(e);
|
|
258
258
|
if (n) return n;
|
|
259
259
|
if (e instanceof Element && e.shadowRoot) {
|
|
260
|
-
const o =
|
|
260
|
+
const o = Se(e.shadowRoot, t);
|
|
261
261
|
if (o) return o;
|
|
262
262
|
}
|
|
263
263
|
if (typeof e.querySelectorAll != "function") return null;
|
|
264
264
|
for (const o of e.querySelectorAll("*")) {
|
|
265
265
|
if (!o.shadowRoot) continue;
|
|
266
|
-
const i =
|
|
266
|
+
const i = Se(o.shadowRoot, t);
|
|
267
267
|
if (i) return i;
|
|
268
268
|
}
|
|
269
269
|
return null;
|
|
270
|
-
},
|
|
270
|
+
}, We = (...e) => {
|
|
271
271
|
const t = /* @__PURE__ */ new Set(), r = [];
|
|
272
272
|
for (const n of e) {
|
|
273
273
|
if (n == null) continue;
|
|
274
274
|
const o = typeof n == "string" ? [n] : n;
|
|
275
275
|
for (const i of o) {
|
|
276
|
-
const
|
|
277
|
-
!
|
|
276
|
+
const a = String(i || "").trim();
|
|
277
|
+
!a || t.has(a) || (t.add(a), r.push(a));
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
return r.length ? `@layer ${r.join(", ")};` : "";
|
|
281
|
-
},
|
|
281
|
+
}, So = () => We(xr), vo = (e) => We(kr, e), He = (e, t) => {
|
|
282
282
|
const r = (t || "").trim();
|
|
283
283
|
return !e || !r ? "" : `@layer ${e} {
|
|
284
284
|
${r}
|
|
285
285
|
}`;
|
|
286
|
-
},
|
|
286
|
+
}, xe = (e, t) => t ? `@layer ${t} { ${e} }` : e, go = (e, t) => {
|
|
287
287
|
const r = (t || "").trim();
|
|
288
|
-
return r ? /^@layer\b/.test(r) ? r :
|
|
289
|
-
},
|
|
290
|
-
const r = e.match(
|
|
288
|
+
return r ? /^@layer\b/.test(r) ? r : He(e, r) : "";
|
|
289
|
+
}, Yr = (e, t) => {
|
|
290
|
+
const r = e.match(Rr);
|
|
291
291
|
if (!r || t && r[1] !== t) return null;
|
|
292
292
|
const n = r[0].lastIndexOf("{");
|
|
293
293
|
let o = 0;
|
|
294
294
|
for (let i = n; i < e.length; i++) {
|
|
295
|
-
const
|
|
296
|
-
if (
|
|
297
|
-
else if (
|
|
295
|
+
const a = e[i];
|
|
296
|
+
if (a === "{") o++;
|
|
297
|
+
else if (a === "}" && (o--, o === 0))
|
|
298
298
|
return e.slice(i + 1).trim() ? null : e.slice(n + 1, i).trim();
|
|
299
299
|
}
|
|
300
300
|
return null;
|
|
301
|
-
},
|
|
302
|
-
const r =
|
|
303
|
-
return
|
|
304
|
-
},
|
|
301
|
+
}, wo = (e, t) => {
|
|
302
|
+
const r = Ur(e);
|
|
303
|
+
return Yr(r, t) ?? r;
|
|
304
|
+
}, Zr = (e, t = "") => `@import url("${e}") ${t && typeof t == "string" ? `layer(${t})` : ""};`, bo = He("ux-preload", ":host { box-sizing: border-box; }"), Ke = (e, t) => {
|
|
305
305
|
if (!e || !t) return;
|
|
306
|
-
const r = Array.from(e.cssRules || []), n = r.find((o) =>
|
|
306
|
+
const r = Array.from(e.cssRules || []), n = r.find((o) => ut(o) && o.name === t);
|
|
307
307
|
if (n) return n;
|
|
308
308
|
try {
|
|
309
|
-
const o = e.insertRule(
|
|
310
|
-
return
|
|
309
|
+
const o = e.insertRule(Ir(t), r.length), i = e.cssRules?.[o];
|
|
310
|
+
return ut(i) ? i : void 0;
|
|
311
311
|
} catch {
|
|
312
312
|
return;
|
|
313
313
|
}
|
|
314
|
-
},
|
|
314
|
+
}, Gr = (e) => {
|
|
315
315
|
const t = [];
|
|
316
316
|
let r = 0;
|
|
317
317
|
for (; r < e.length; ) {
|
|
@@ -323,7 +323,7 @@ ${r}
|
|
|
323
323
|
const i = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
|
|
324
324
|
if (i) {
|
|
325
325
|
r += i[0].length;
|
|
326
|
-
const l =
|
|
326
|
+
const l = Lt.exec(e.slice(r)), c = l?.[0] ?? null;
|
|
327
327
|
l && (r += l[0].length), t.push({
|
|
328
328
|
kind: "number",
|
|
329
329
|
value: Number(i[0]),
|
|
@@ -331,15 +331,15 @@ ${r}
|
|
|
331
331
|
});
|
|
332
332
|
continue;
|
|
333
333
|
}
|
|
334
|
-
const
|
|
335
|
-
if (
|
|
334
|
+
const a = /^[a-zA-Z_][a-zA-Z0-9_-]*/.exec(n);
|
|
335
|
+
if (a) {
|
|
336
336
|
t.push({
|
|
337
337
|
kind: "identifier",
|
|
338
|
-
value:
|
|
339
|
-
}), r +=
|
|
338
|
+
value: a[0].toLowerCase()
|
|
339
|
+
}), r += a[0].length;
|
|
340
340
|
continue;
|
|
341
341
|
}
|
|
342
|
-
const
|
|
342
|
+
const s = n[0];
|
|
343
343
|
if ([
|
|
344
344
|
"+",
|
|
345
345
|
"-",
|
|
@@ -348,17 +348,17 @@ ${r}
|
|
|
348
348
|
"(",
|
|
349
349
|
")",
|
|
350
350
|
","
|
|
351
|
-
].includes(
|
|
351
|
+
].includes(s)) {
|
|
352
352
|
t.push({
|
|
353
353
|
kind: "symbol",
|
|
354
|
-
value:
|
|
354
|
+
value: s
|
|
355
355
|
}), r++;
|
|
356
356
|
continue;
|
|
357
357
|
}
|
|
358
358
|
throw new SyntaxError(`Unsupported token near "${n}"`);
|
|
359
359
|
}
|
|
360
360
|
return t;
|
|
361
|
-
},
|
|
361
|
+
}, Qr = class {
|
|
362
362
|
tokens;
|
|
363
363
|
win;
|
|
364
364
|
index = 0;
|
|
@@ -387,7 +387,7 @@ ${r}
|
|
|
387
387
|
return t?.kind === "symbol" && t.value === e;
|
|
388
388
|
}
|
|
389
389
|
createMath(e, ...t) {
|
|
390
|
-
const r =
|
|
390
|
+
const r = j(this.win, e);
|
|
391
391
|
if (typeof r != "function") throw new TypeError(`${e} is not supported`);
|
|
392
392
|
return new r(...t);
|
|
393
393
|
}
|
|
@@ -445,14 +445,14 @@ ${r}
|
|
|
445
445
|
}
|
|
446
446
|
throw new SyntaxError(`Unsupported function "${e}"`);
|
|
447
447
|
}
|
|
448
|
-
},
|
|
448
|
+
}, Xr = (e, t) => {
|
|
449
449
|
try {
|
|
450
|
-
const r =
|
|
451
|
-
return new
|
|
450
|
+
const r = Gr(e);
|
|
451
|
+
return new Qr(r, t).parse();
|
|
452
452
|
} catch {
|
|
453
453
|
return null;
|
|
454
454
|
}
|
|
455
|
-
},
|
|
455
|
+
}, O = (e, t, r, n = "") => {
|
|
456
456
|
if (!(!e || !t)) {
|
|
457
457
|
if (r == null) {
|
|
458
458
|
e.getPropertyValue(t) !== "" && e.removeProperty(t);
|
|
@@ -460,89 +460,89 @@ ${r}
|
|
|
460
460
|
}
|
|
461
461
|
e.getPropertyValue(t) !== r && e.setProperty(t, r, n);
|
|
462
462
|
}
|
|
463
|
-
},
|
|
463
|
+
}, Jr = (e, t, r, n = "") => {
|
|
464
464
|
if (!e || !t) return e;
|
|
465
|
-
const o =
|
|
466
|
-
if (!
|
|
467
|
-
const
|
|
468
|
-
let l =
|
|
465
|
+
const o = ce(t), i = e.style, a = e.attributeStyleMap ?? e.styleMap;
|
|
466
|
+
if (!ge || !a) return Dt(e, t, r, n);
|
|
467
|
+
const s = e.ownerDocument?.defaultView ?? globalThis;
|
|
468
|
+
let l = qe(r) && fe(r) ? r.value : r;
|
|
469
469
|
if (l == null)
|
|
470
|
-
return
|
|
471
|
-
if (
|
|
472
|
-
const c =
|
|
473
|
-
if (
|
|
470
|
+
return a.delete?.(o), i && O(i, o, null, n), e;
|
|
471
|
+
if ($(l)) {
|
|
472
|
+
const c = a.get(o);
|
|
473
|
+
if (he(l) && he(c)) {
|
|
474
474
|
if (c.value === l.value && c.unit === l.unit) return e;
|
|
475
475
|
} else if (c === l) return e;
|
|
476
|
-
return
|
|
476
|
+
return a.set(o, l), e;
|
|
477
477
|
}
|
|
478
478
|
if (typeof l == "number")
|
|
479
479
|
if (CSS?.number && !o.startsWith("--")) {
|
|
480
|
-
const c = CSS.number(l), u =
|
|
481
|
-
return
|
|
480
|
+
const c = CSS.number(l), u = a.get(o);
|
|
481
|
+
return he(u) && u.value === c.value && u.unit === c.unit || a.set(o, c), e;
|
|
482
482
|
} else
|
|
483
|
-
return
|
|
483
|
+
return O(i, o, String(l), n), e;
|
|
484
484
|
if (typeof l == "string") {
|
|
485
485
|
if (/\b(calc|min|max|clamp)\s*\(/.test(l)) {
|
|
486
|
-
const u =
|
|
486
|
+
const u = Xr(l, s);
|
|
487
487
|
if (u) try {
|
|
488
|
-
return
|
|
488
|
+
return a.set(o, u), e;
|
|
489
489
|
} catch {
|
|
490
490
|
}
|
|
491
491
|
}
|
|
492
|
-
const c =
|
|
492
|
+
const c = At(l);
|
|
493
493
|
if (typeof c == "number" && CSS?.number && !o.startsWith("--")) {
|
|
494
|
-
const u = CSS.number(c),
|
|
495
|
-
return
|
|
494
|
+
const u = CSS.number(c), f = a.get(o);
|
|
495
|
+
return he(f) && f.value === u.value && f.unit === u.unit || a.set(o, u), e;
|
|
496
496
|
}
|
|
497
|
-
return
|
|
497
|
+
return O(i, o, l, n), e;
|
|
498
498
|
}
|
|
499
|
-
return
|
|
500
|
-
},
|
|
499
|
+
return O(i, o, String(l), n), e;
|
|
500
|
+
}, Dt = (e, t, r, n = "") => {
|
|
501
501
|
if (!e || !t) return e;
|
|
502
|
-
const o =
|
|
502
|
+
const o = ce(t), i = e.style;
|
|
503
503
|
if (!i) return e;
|
|
504
|
-
let
|
|
505
|
-
return typeof
|
|
506
|
-
},
|
|
504
|
+
let a = qe(r) && fe(r) ? r.value : r;
|
|
505
|
+
return typeof a == "string" && !$(a) && (a = At(a) ?? a), a == null ? (O(i, o, null, n), e) : ($(a) || typeof a == "number", O(i, o, String(a), n), e);
|
|
506
|
+
}, we = (e, t, r, n = "") => ge ? Jr(e, t, r, n) : Dt(e, t, r, n), St = (e, t, r) => {
|
|
507
507
|
const n = e?.style;
|
|
508
|
-
return !t || typeof t != "string" || !e || !n ||
|
|
509
|
-
|
|
508
|
+
return !t || typeof t != "string" || !e || !n || cr(r, () => {
|
|
509
|
+
fr(r) || qe(r) || dr(r) ? we(e, t, r) : r == null && e.style.removeProperty(ce(t));
|
|
510
510
|
}), e;
|
|
511
|
-
},
|
|
512
|
-
const r =
|
|
513
|
-
return Object.entries(t).forEach(([n, o]) =>
|
|
514
|
-
},
|
|
515
|
-
const o =
|
|
516
|
-
return t?.[0] && (t[0].fetchPriority = "high"), t && i && typeof i == "string" &&
|
|
517
|
-
t?.[0] &&
|
|
518
|
-
})?.catch?.((
|
|
519
|
-
console.warn("Failed to load style sheet:",
|
|
511
|
+
}, Eo = (e, t, r) => we(Ze(e), t, r), en = (e, t) => {
|
|
512
|
+
const r = Ze(e);
|
|
513
|
+
return Object.entries(t).forEach(([n, o]) => we(r, n, o)), r;
|
|
514
|
+
}, jt = (e, t, r = "", n) => {
|
|
515
|
+
const o = un(e), i = typeof e == "string" && URL.canParse(e) ? e : o;
|
|
516
|
+
return t?.[0] && (t[0].fetchPriority = "high"), t && i && typeof i == "string" && vt(t, i, r), t?.[0] && (!URL.canParse(e) || n) && t?.[0] instanceof HTMLLinkElement, _t(o, (a) => {
|
|
517
|
+
t?.[0] && a && (vt(t, a, r), t?.[0].setAttribute("loaded", ""));
|
|
518
|
+
})?.catch?.((a) => {
|
|
519
|
+
console.warn("Failed to load style sheet:", a);
|
|
520
520
|
});
|
|
521
|
-
},
|
|
521
|
+
}, tn = (e) => {
|
|
522
522
|
const t = typeof document < "u" ? document.createElement("link") : null;
|
|
523
523
|
return t && (t.fetchPriority = "high"), t ? (Object.assign(t, {
|
|
524
524
|
rel: "stylesheet",
|
|
525
525
|
type: "text/css",
|
|
526
526
|
crossOrigin: "same-origin"
|
|
527
|
-
}), t.dataset.owner = "DOM",
|
|
528
|
-
},
|
|
527
|
+
}), t.dataset.owner = "DOM", jt(e, [t, "href"]), typeof document < "u" && document.head.append(t), t) : null;
|
|
528
|
+
}, P = (e, t = typeof document < "u" ? document?.head : null, r = "") => {
|
|
529
529
|
const n = t?.querySelector?.("head") ?? t;
|
|
530
|
-
if (typeof HTMLHeadElement < "u" && n instanceof HTMLHeadElement) return
|
|
530
|
+
if (typeof HTMLHeadElement < "u" && n instanceof HTMLHeadElement) return tn(e);
|
|
531
531
|
const o = typeof document < "u" ? document.createElement("style") : null;
|
|
532
|
-
return o ? (o.dataset.owner = "DOM",
|
|
533
|
-
},
|
|
534
|
-
|
|
535
|
-
},
|
|
532
|
+
return o ? (o.dataset.owner = "DOM", jt(e, [o, "innerHTML"], r), n?.prepend?.(o), o) : null;
|
|
533
|
+
}, Co = (e, t, r, n = "") => we(e, t, r, n), xo = (e) => qt(e, ""), _e = (e, t) => {
|
|
534
|
+
D.set(e, t), Rt.add(e);
|
|
535
|
+
}, F = (e) => {
|
|
536
536
|
if (!e) return null;
|
|
537
|
-
const t =
|
|
537
|
+
const t = D.get(e);
|
|
538
538
|
if (t) return t;
|
|
539
|
-
for (const [r, n] of
|
|
539
|
+
for (const [r, n] of T) if (n === e && typeof r == "string") return r;
|
|
540
540
|
return null;
|
|
541
|
-
},
|
|
541
|
+
}, se = (e, t) => {
|
|
542
542
|
if (!e) return !1;
|
|
543
|
-
const r = t ||
|
|
544
|
-
return n === null ? !1 : n > 0 ? (
|
|
545
|
-
},
|
|
543
|
+
const r = t || F(e), n = Vt(e);
|
|
544
|
+
return n === null ? !1 : n > 0 ? (Rt.add(e), r && !D.has(e) && D.set(e, r), !0) : r && Ne(e, r) ? (_e(e, r), !0) : !1;
|
|
545
|
+
}, Ne = (e, t) => {
|
|
546
546
|
if (!e || !t) return !1;
|
|
547
547
|
try {
|
|
548
548
|
return e.replaceSync(t), !0;
|
|
@@ -550,101 +550,101 @@ ${r}
|
|
|
550
550
|
const n = String(r?.message || "").toLowerCase();
|
|
551
551
|
return n.includes("@import rules are not allowed") || n.includes("@import") && n.includes("not allowed") || console.warn("[DOM] Failed to apply adopted stylesheet:", r), !1;
|
|
552
552
|
}
|
|
553
|
-
},
|
|
554
|
-
let t =
|
|
555
|
-
return t || (t = new CSSStyleSheet(),
|
|
556
|
-
},
|
|
553
|
+
}, rn = (e) => {
|
|
554
|
+
let t = V.get(e);
|
|
555
|
+
return t || (t = new CSSStyleSheet(), V.set(e, t)), t;
|
|
556
|
+
}, qt = (e, t = null) => {
|
|
557
557
|
try {
|
|
558
|
-
return
|
|
558
|
+
return nn(e, t);
|
|
559
559
|
} catch (r) {
|
|
560
|
-
return console.warn("[DOM] loadAsAdopted failed", r), typeof e == "string" &&
|
|
560
|
+
return console.warn("[DOM] loadAsAdopted failed", r), typeof e == "string" && P(e, void 0, t || ""), null;
|
|
561
561
|
}
|
|
562
|
-
},
|
|
563
|
-
if (!
|
|
564
|
-
return typeof e == "string" &&
|
|
565
|
-
if (typeof e == "string" &&
|
|
566
|
-
return
|
|
567
|
-
if (typeof e == "string" &&
|
|
568
|
-
const n =
|
|
569
|
-
return
|
|
562
|
+
}, nn = (e, t = null) => {
|
|
563
|
+
if (!z())
|
|
564
|
+
return typeof e == "string" && P(e, void 0, t || ""), null;
|
|
565
|
+
if (typeof e == "string" && ft(e))
|
|
566
|
+
return P(e, void 0, t || ""), null;
|
|
567
|
+
if (typeof e == "string" && T?.has?.(e)) {
|
|
568
|
+
const n = T.get(e), o = D.get(n) || xe(e, t);
|
|
569
|
+
return se(n, o), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
|
|
570
570
|
}
|
|
571
|
-
if ((e instanceof Blob || e instanceof File) &&
|
|
572
|
-
const n =
|
|
573
|
-
return
|
|
571
|
+
if ((e instanceof Blob || e instanceof File) && V?.has?.(e)) {
|
|
572
|
+
const n = V.get(e);
|
|
573
|
+
return se(n), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
|
|
574
574
|
}
|
|
575
575
|
if (!e) return null;
|
|
576
|
-
const r = typeof e == "string" ?
|
|
577
|
-
if (typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r), typeof e == "string" && !
|
|
578
|
-
const n =
|
|
579
|
-
return
|
|
580
|
-
} else
|
|
581
|
-
if (
|
|
582
|
-
if (
|
|
583
|
-
return
|
|
584
|
-
const o =
|
|
585
|
-
return
|
|
576
|
+
const r = typeof e == "string" ? ur(T, e, () => new CSSStyleSheet()) : rn(e);
|
|
577
|
+
if (typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r), typeof e == "string" && !Vr(e)) {
|
|
578
|
+
const n = xe(e, t);
|
|
579
|
+
return T.set(e, r), Ne(r, n) ? _e(r, n) : (ke(r), T.delete(e), P(e)), r;
|
|
580
|
+
} else _t(fn(e), (n) => {
|
|
581
|
+
if (T.set(n, r), n) {
|
|
582
|
+
if (ft(n))
|
|
583
|
+
return ke(r), T.delete(n), V.delete(e), P(n, void 0, t || ""), r;
|
|
584
|
+
const o = xe(n, t);
|
|
585
|
+
return Ne(r, o) ? _e(r, o) : (ke(r), T.delete(n), V.delete(e), P(n, void 0, t || "")), r;
|
|
586
586
|
}
|
|
587
587
|
});
|
|
588
588
|
return r;
|
|
589
|
-
},
|
|
589
|
+
}, zt = (e, t) => {
|
|
590
590
|
if (!(!e || e.nodeType === 3)) {
|
|
591
591
|
if (e.nodeType === 11) {
|
|
592
|
-
for (const r of e.childNodes || [])
|
|
592
|
+
for (const r of e.childNodes || []) zt(r, t);
|
|
593
593
|
return;
|
|
594
594
|
}
|
|
595
|
-
if (
|
|
595
|
+
if (oe(e) && t.add(e), typeof e.querySelectorAll == "function")
|
|
596
596
|
try {
|
|
597
|
-
for (const r of e.querySelectorAll("*"))
|
|
597
|
+
for (const r of e.querySelectorAll("*")) oe(r) && t.add(r);
|
|
598
598
|
} catch {
|
|
599
599
|
}
|
|
600
600
|
}
|
|
601
|
-
},
|
|
601
|
+
}, on = (e, t = "tree") => {
|
|
602
602
|
for (const r of e)
|
|
603
|
-
if (
|
|
604
|
-
for (const n of
|
|
605
|
-
},
|
|
606
|
-
typeof e == "function" &&
|
|
607
|
-
},
|
|
608
|
-
if (!e || typeof MutationObserver > "u" ||
|
|
609
|
-
|
|
603
|
+
if (oe(r))
|
|
604
|
+
for (const n of Tt) n(r, t);
|
|
605
|
+
}, Wt = (e) => {
|
|
606
|
+
typeof e == "function" && Tt.add(e);
|
|
607
|
+
}, ko = (e) => {
|
|
608
|
+
if (!e || typeof MutationObserver > "u" || be.has(e)) return e;
|
|
609
|
+
be.add(e), yr.add(e);
|
|
610
610
|
const t = new MutationObserver((r) => {
|
|
611
611
|
const n = /* @__PURE__ */ new Set();
|
|
612
612
|
for (const o of r) if (o.type === "childList") {
|
|
613
|
-
for (const
|
|
613
|
+
for (const a of o.addedNodes) zt(a, n);
|
|
614
614
|
const i = o.target?.getRootNode?.();
|
|
615
|
-
if (i instanceof ShadowRoot &&
|
|
616
|
-
const
|
|
617
|
-
(!
|
|
615
|
+
if (i instanceof ShadowRoot && oe(i.host)) {
|
|
616
|
+
const a = i.adoptedStyleSheets;
|
|
617
|
+
(!a || a.length === 0) && n.add(i.host);
|
|
618
618
|
}
|
|
619
|
-
} else o.type === "attributes" && o.target &&
|
|
620
|
-
|
|
619
|
+
} else o.type === "attributes" && o.target && oe(o.target) && n.add(o.target);
|
|
620
|
+
on(n, "mutation");
|
|
621
621
|
});
|
|
622
622
|
try {
|
|
623
623
|
t.observe(e, {
|
|
624
624
|
childList: !0,
|
|
625
625
|
subtree: !0,
|
|
626
626
|
attributes: !0,
|
|
627
|
-
attributeFilter: [...
|
|
627
|
+
attributeFilter: [...Pt]
|
|
628
628
|
});
|
|
629
629
|
} catch {
|
|
630
|
-
return
|
|
630
|
+
return be.delete(e), e;
|
|
631
631
|
}
|
|
632
632
|
return e;
|
|
633
|
-
},
|
|
633
|
+
}, Mo = () => {
|
|
634
634
|
if (typeof document > "u") return;
|
|
635
635
|
const e = typeof URL < "u" && typeof URL.canParse == "function";
|
|
636
|
-
for (const [t, r] of
|
|
636
|
+
for (const [t, r] of T) {
|
|
637
637
|
if (!r || typeof t != "string" || e && URL.canParse(t)) continue;
|
|
638
|
-
const n =
|
|
639
|
-
|
|
638
|
+
const n = D.get(r) || t;
|
|
639
|
+
se(r, n), document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r);
|
|
640
640
|
}
|
|
641
|
-
},
|
|
641
|
+
}, ke = (e) => {
|
|
642
642
|
if (!e) return !1;
|
|
643
|
-
const t = typeof e == "string" ?
|
|
643
|
+
const t = typeof e == "string" ? T.get(e) : e;
|
|
644
644
|
if (!t || typeof document > "u") return !1;
|
|
645
645
|
const r = document.adoptedStyleSheets, n = r.indexOf(t);
|
|
646
646
|
return n !== -1 ? (r.splice(n, 1), !0) : !1;
|
|
647
|
-
},
|
|
647
|
+
}, Ao = (e) => {
|
|
648
648
|
if (e?.computedStyleMap) {
|
|
649
649
|
const t = e.computedStyleMap().get("transform")?.toMatrix?.();
|
|
650
650
|
if (t) return t;
|
|
@@ -653,10 +653,10 @@ ${r}
|
|
|
653
653
|
return new DOMMatrix(t?.getPropertyValue?.("transform"));
|
|
654
654
|
}
|
|
655
655
|
return new DOMMatrix();
|
|
656
|
-
},
|
|
656
|
+
}, Ro = (e) => {
|
|
657
657
|
const t = getComputedStyle(e)?.getPropertyValue?.("transform-origin") || "50% 50%";
|
|
658
|
-
return
|
|
659
|
-
},
|
|
658
|
+
return Fr(t, e);
|
|
659
|
+
}, Y = (e, t) => {
|
|
660
660
|
if ("computedStyleMap" in e) {
|
|
661
661
|
const r = e?.computedStyleMap?.()?.get(t);
|
|
662
662
|
return r instanceof CSSUnitValue ? r?.value || 0 : r?.toString?.();
|
|
@@ -666,7 +666,7 @@ ${r}
|
|
|
666
666
|
return parseFloat(r?.getPropertyValue?.(t)?.replace?.("px", "")) || 0;
|
|
667
667
|
}
|
|
668
668
|
return parseFloat((e?.style ?? e).getPropertyValue?.(t)?.replace?.("px", "")) || 0;
|
|
669
|
-
},
|
|
669
|
+
}, To = (e) => {
|
|
670
670
|
let t = 1, r = e;
|
|
671
671
|
for (; r; ) {
|
|
672
672
|
if ("currentCSSZoom" in r) {
|
|
@@ -679,42 +679,42 @@ ${r}
|
|
|
679
679
|
r = r?.offsetParent ?? r?.parentElement;
|
|
680
680
|
}
|
|
681
681
|
return t;
|
|
682
|
-
},
|
|
683
|
-
|
|
684
|
-
var
|
|
685
|
-
e[0][e[1]] = e[1] == "innerHTML" ?
|
|
686
|
-
},
|
|
687
|
-
if (e.id) return `#${
|
|
682
|
+
}, Lo = (e, t) => Y?.(e, t), $o = (e, t) => t == "inline" ? Y(e, "padding-inline-start") + Y(e, "padding-inline-end") : Y(e, "padding-block-start") + Y(e, "padding-block-end"), J = typeof document < "u" ? document.createElement("style") : null;
|
|
683
|
+
J && (document.querySelector("head")?.appendChild?.(J), J.dataset.owner = "DOM");
|
|
684
|
+
var vt = (e, t, r = "") => {
|
|
685
|
+
e[0][e[1]] = e[1] == "innerHTML" ? Zr(t, r) : t;
|
|
686
|
+
}, Po = (e) => e?.map?.((t) => en(...t)), sn = (e, t) => (t ||= J?.sheet, Ke(t, e)), Ye = (e) => {
|
|
687
|
+
if (e.id) return `#${pt(e.id)}`;
|
|
688
688
|
let t = e.getAttribute("data-style-id");
|
|
689
|
-
return t || (t =
|
|
690
|
-
},
|
|
691
|
-
const o = Array.from(e?.cssRules || []), i = t.trim(),
|
|
692
|
-
return o.findIndex((
|
|
693
|
-
if (!(
|
|
694
|
-
const l =
|
|
695
|
-
return l === i ? !0 :
|
|
689
|
+
return t || (t = Nr(), e.setAttribute("data-style-id", t)), `[data-style-id="${pt(t)}"]`;
|
|
690
|
+
}, an = (e, t) => (t = t.trim(), e ? t ? t.startsWith("::") ? `${e}${t}` : `${e} ${t}` : e : t), ln = (e, t, r, n) => {
|
|
691
|
+
const o = Array.from(e?.cssRules || []), i = t.trim(), a = n.trim();
|
|
692
|
+
return o.findIndex((s) => {
|
|
693
|
+
if (!(s instanceof CSSStyleRule)) return !1;
|
|
694
|
+
const l = s.selectorText?.trim?.() ?? "";
|
|
695
|
+
return l === i ? !0 : a && l.endsWith(a) ? l.slice(0, l.length - a.length).trim() === r : !1;
|
|
696
696
|
});
|
|
697
|
-
},
|
|
698
|
-
const o =
|
|
699
|
-
let
|
|
700
|
-
i ?
|
|
701
|
-
let
|
|
702
|
-
if (
|
|
703
|
-
if (r) return
|
|
704
|
-
const l =
|
|
705
|
-
let c =
|
|
697
|
+
}, Ze = (e, t, r = "ux-query", n = null) => {
|
|
698
|
+
const o = Q(n) || dt(n) ? n : n?.getRootNode?.() ?? (typeof document < "u" ? document : null), i = Br(n) ? n : null;
|
|
699
|
+
let a = "";
|
|
700
|
+
i ? a = Ye(i) : Q(o) ? a = ":host" : dt(o) && (a = ":root");
|
|
701
|
+
let s = null;
|
|
702
|
+
if (Q(o) ? (s = o.querySelector("style[data-ux-query]"), !s && typeof document < "u" && (s = document.createElement("style"), s.setAttribute("data-ux-query", ""), o.appendChild(s))) : s = cn(), t ||= s?.sheet, !t) return;
|
|
703
|
+
if (r) return Ze(e, sn(r, t), null, n);
|
|
704
|
+
const l = an(a, e);
|
|
705
|
+
let c = ln(t, l, a, e);
|
|
706
706
|
return c === -1 && (c = t.insertRule(`${l} {}`)), t.cssRules?.[c];
|
|
707
707
|
};
|
|
708
|
-
function
|
|
709
|
-
return
|
|
708
|
+
function cn() {
|
|
709
|
+
return J ?? null;
|
|
710
710
|
}
|
|
711
|
-
var
|
|
711
|
+
var un = (e) => {
|
|
712
712
|
if (!e) return null;
|
|
713
|
-
if (
|
|
713
|
+
if (U.has(e)) return U.get(e);
|
|
714
714
|
if (e instanceof Blob || e instanceof File) {
|
|
715
|
-
if (
|
|
715
|
+
if (W.has(e)) return W.get(e);
|
|
716
716
|
const t = URL.createObjectURL(e);
|
|
717
|
-
return
|
|
717
|
+
return W.set(e, t), U.set(t, t), t;
|
|
718
718
|
}
|
|
719
719
|
if (URL.canParse(e) || e?.trim?.()?.startsWith?.("./")) {
|
|
720
720
|
const t = fetch(e?.replace?.("?url", "?raw"), {
|
|
@@ -723,22 +723,22 @@ var Xr = (e) => {
|
|
|
723
723
|
priority: "high"
|
|
724
724
|
})?.then?.(async (r) => {
|
|
725
725
|
const n = await r.blob(), o = URL.createObjectURL(n);
|
|
726
|
-
return
|
|
726
|
+
return W.set(n, o), U.set(e, o), U.set(o, o), o;
|
|
727
727
|
});
|
|
728
|
-
return
|
|
728
|
+
return U.set(e, t), t;
|
|
729
729
|
}
|
|
730
730
|
if (typeof e == "string") {
|
|
731
731
|
const t = new Blob([e], { type: "text/css" }), r = URL.createObjectURL(t);
|
|
732
|
-
return
|
|
732
|
+
return W.set(t, r), U.set(r, r), r;
|
|
733
733
|
}
|
|
734
734
|
return e;
|
|
735
|
-
},
|
|
735
|
+
}, fn = (e) => {
|
|
736
736
|
if (!e) return "";
|
|
737
|
-
if (
|
|
737
|
+
if (H.has(e)) return H.get(e) ?? "";
|
|
738
738
|
if (e instanceof Blob || e instanceof File) {
|
|
739
|
-
if (
|
|
740
|
-
const t = e?.text?.()?.then?.((r) => (
|
|
741
|
-
return
|
|
739
|
+
if (de.has(e)) return de.get(e) ?? "";
|
|
740
|
+
const t = e?.text?.()?.then?.((r) => (de.set(e, r), r));
|
|
741
|
+
return de.set(e, t), t;
|
|
742
742
|
}
|
|
743
743
|
if (URL.canParse(e) || e?.trim?.()?.startsWith?.("./")) {
|
|
744
744
|
const t = fetch(e?.replace?.("?url", "?raw"), {
|
|
@@ -747,55 +747,55 @@ var Xr = (e) => {
|
|
|
747
747
|
priority: "high"
|
|
748
748
|
})?.then?.(async (r) => {
|
|
749
749
|
const n = await r.text();
|
|
750
|
-
return
|
|
750
|
+
return H.set(e, n), n;
|
|
751
751
|
});
|
|
752
|
-
return
|
|
752
|
+
return H.set(e, t), t;
|
|
753
753
|
}
|
|
754
|
-
return typeof e == "string" &&
|
|
755
|
-
},
|
|
756
|
-
if (!e || !
|
|
757
|
-
const n =
|
|
754
|
+
return typeof e == "string" && H.set(e, e), e;
|
|
755
|
+
}, Oo = (e, t = "ux-query", r = null) => {
|
|
756
|
+
if (!e || !z()) return null;
|
|
757
|
+
const n = Q(r) ? r : r?.getRootNode ? r.getRootNode({ composed: !0 }) : null, o = Q(n), i = o ? n.adoptedStyleSheets : typeof document < "u" ? document.adoptedStyleSheets : null;
|
|
758
758
|
if (!i) return null;
|
|
759
|
-
const
|
|
760
|
-
let
|
|
759
|
+
const a = `${t || ""}:${e}`;
|
|
760
|
+
let s;
|
|
761
761
|
if (o) {
|
|
762
|
-
let u =
|
|
763
|
-
u || (u = /* @__PURE__ */ new Map(),
|
|
762
|
+
let u = st.get(n);
|
|
763
|
+
u || (u = /* @__PURE__ */ new Map(), st.set(n, u)), s = u.get(a), s || (s = new CSSStyleSheet(), u.set(a, s), i.includes(s) || i.push(s));
|
|
764
764
|
} else
|
|
765
|
-
|
|
765
|
+
s = it.get(a), s || (s = new CSSStyleSheet(), it.set(a, s), i.includes(s) || i.push(s));
|
|
766
766
|
if (t) {
|
|
767
767
|
let u;
|
|
768
768
|
if (o) {
|
|
769
|
-
let
|
|
770
|
-
|
|
771
|
-
} else u =
|
|
772
|
-
if (!u && (u =
|
|
769
|
+
let f = pe.get(n);
|
|
770
|
+
f || (f = /* @__PURE__ */ new Map(), pe.set(n, f)), u = f.get(t);
|
|
771
|
+
} else u = at.get(t);
|
|
772
|
+
if (!u && (u = Ke(s, t), u))
|
|
773
773
|
if (o) {
|
|
774
|
-
let
|
|
775
|
-
|
|
776
|
-
} else
|
|
774
|
+
let f = pe.get(n);
|
|
775
|
+
f || (f = /* @__PURE__ */ new Map(), pe.set(n, f)), f.set(t, u);
|
|
776
|
+
} else at.set(t, u);
|
|
777
777
|
if (u) {
|
|
778
|
-
let
|
|
779
|
-
if (
|
|
780
|
-
|
|
778
|
+
let f = Array.from(u.cssRules || []).findIndex((h) => h instanceof CSSStyleRule && h.selectorText?.trim?.() === e?.trim?.());
|
|
779
|
+
if (f === -1) try {
|
|
780
|
+
f = u.insertRule(`${e} {}`, u.cssRules.length);
|
|
781
781
|
} catch {
|
|
782
782
|
return null;
|
|
783
783
|
}
|
|
784
|
-
return u.cssRules[
|
|
784
|
+
return u.cssRules[f];
|
|
785
785
|
}
|
|
786
786
|
}
|
|
787
|
-
let l = Array.from(
|
|
787
|
+
let l = Array.from(s.cssRules || []).findIndex((u) => u instanceof CSSStyleRule && u.selectorText?.trim?.() === e?.trim?.());
|
|
788
788
|
if (l === -1) try {
|
|
789
|
-
l =
|
|
789
|
+
l = s.insertRule(`${e} {}`, s.cssRules.length);
|
|
790
790
|
} catch {
|
|
791
791
|
return null;
|
|
792
792
|
}
|
|
793
|
-
const c =
|
|
793
|
+
const c = s.cssRules[l];
|
|
794
794
|
return c instanceof CSSStyleRule ? c : null;
|
|
795
|
-
},
|
|
796
|
-
const t = [...e?.length ? e :
|
|
795
|
+
}, gt = !1, ee = "", Ve = !1, dn = (e) => {
|
|
796
|
+
const t = [...e?.length ? e : Tr];
|
|
797
797
|
return [...new Set(t.filter(Boolean))];
|
|
798
|
-
},
|
|
798
|
+
}, wt = (e, t, r = ue) => `${e}\0${[...t].sort().join(",")}\0${r === !1 ? "" : r}`, ae = (e = typeof document < "u" ? document.documentElement : null, t) => {
|
|
799
799
|
if (!e || typeof getComputedStyle != "function") return "";
|
|
800
800
|
const r = getComputedStyle(e), n = [
|
|
801
801
|
e.getAttribute?.("data-theme") || e.getAttribute?.("theme") || "",
|
|
@@ -808,64 +808,64 @@ var Xr = (e) => {
|
|
|
808
808
|
n.push(t.getAttribute?.("data-theme") || "", o.getPropertyValue("--base-color").trim());
|
|
809
809
|
}
|
|
810
810
|
return n.join("|");
|
|
811
|
-
},
|
|
811
|
+
}, ye = (e, t, r) => {
|
|
812
812
|
const n = t.getPropertyValue(r)?.trim();
|
|
813
813
|
n && e.set(r, n);
|
|
814
|
-
},
|
|
814
|
+
}, pn = new Set($t), bt = (e) => e.startsWith("--") ? 2 : pn.has(e) ? 0 : 1, hn = (e, t) => {
|
|
815
815
|
const r = /* @__PURE__ */ new Map(), n = new Set(t);
|
|
816
|
-
if (n.has("colors")) for (const o of
|
|
817
|
-
if (n.has("typography")) for (const o of
|
|
818
|
-
if (n.has("motion")) for (const o of
|
|
816
|
+
if (n.has("colors")) for (const o of $t) ye(r, e, o);
|
|
817
|
+
if (n.has("typography")) for (const o of br) ye(r, e, o);
|
|
818
|
+
if (n.has("motion")) for (const o of Er) ye(r, e, o);
|
|
819
819
|
if (n.has("tokens") || n.has("colors")) for (let o = 0; o < e.length; o++) {
|
|
820
820
|
const i = e.item(o);
|
|
821
|
-
i.startsWith("--") && (n.has("tokens") ||
|
|
821
|
+
i.startsWith("--") && (n.has("tokens") || jr(i)) && ye(r, e, i);
|
|
822
822
|
}
|
|
823
823
|
return r;
|
|
824
|
-
},
|
|
825
|
-
const o = [], i = [...t].sort((l, c) =>
|
|
824
|
+
}, yn = (e, t, r = Ot, n = ue) => {
|
|
825
|
+
const o = [], i = [...t].sort((l, c) => bt(l[0]) - bt(c[0]));
|
|
826
826
|
for (const [l, c] of i) {
|
|
827
827
|
if (!l || !c) continue;
|
|
828
828
|
const u = c.replace(/\s*!important\s*$/i, "").trim();
|
|
829
829
|
u && o.push(`${l}: ${u} !important;`);
|
|
830
830
|
}
|
|
831
831
|
if (!o.length) return "";
|
|
832
|
-
const
|
|
832
|
+
const a = `${e} {
|
|
833
833
|
${o.join(`
|
|
834
834
|
`)}
|
|
835
|
-
}`,
|
|
836
|
-
${
|
|
837
|
-
}` :
|
|
838
|
-
return [
|
|
839
|
-
},
|
|
835
|
+
}`, s = n ? `@media ${n} {
|
|
836
|
+
${a}
|
|
837
|
+
}` : a;
|
|
838
|
+
return [We(r), He(r, s)].filter(Boolean).join("");
|
|
839
|
+
}, Ht = (e) => {
|
|
840
840
|
if (!e || e.nodeType !== 1) return [];
|
|
841
|
-
const t = /* @__PURE__ */ new Set([e]), r = e.closest?.(
|
|
841
|
+
const t = /* @__PURE__ */ new Set([e]), r = e.closest?.(Lr.join(", "));
|
|
842
842
|
return r instanceof HTMLElement && t.add(r), [...t];
|
|
843
|
-
},
|
|
843
|
+
}, Kt = (e) => e ? e.classList?.contains("view-settings") || e.closest?.(".view-settings") ? Ut : e.classList?.contains("view-explorer") || e.closest?.(".view-explorer") || e.querySelector?.("ui-file-manager") ? It : [] : [], mn = (e, t = $r, r = !0) => {
|
|
844
844
|
if (!e || !t.length) return [];
|
|
845
|
-
const n =
|
|
845
|
+
const n = Ye(e), o = r ? Se : (a, s) => {
|
|
846
846
|
try {
|
|
847
|
-
const l =
|
|
847
|
+
const l = a.querySelector(s);
|
|
848
848
|
return l instanceof HTMLElement ? l : null;
|
|
849
849
|
} catch {
|
|
850
850
|
return null;
|
|
851
851
|
}
|
|
852
852
|
}, i = /* @__PURE__ */ new Map();
|
|
853
|
-
for (const
|
|
854
|
-
const
|
|
855
|
-
if (!
|
|
856
|
-
const l = o(e,
|
|
853
|
+
for (const a of t) {
|
|
854
|
+
const s = String(a || "").trim();
|
|
855
|
+
if (!s) continue;
|
|
856
|
+
const l = o(e, s);
|
|
857
857
|
if (!l || l === e) continue;
|
|
858
|
-
const c = l.getRootNode() === e.getRootNode() ? `${n} ${
|
|
858
|
+
const c = l.getRootNode() === e.getRootNode() ? `${n} ${s}` : s, u = i.get(l);
|
|
859
859
|
u ? u.includes(c) || u.push(c) : i.set(l, [c]);
|
|
860
860
|
}
|
|
861
|
-
return [...i].map(([
|
|
862
|
-
el:
|
|
863
|
-
selector:
|
|
861
|
+
return [...i].map(([a, s]) => ({
|
|
862
|
+
el: a,
|
|
863
|
+
selector: s.join(", ")
|
|
864
864
|
}));
|
|
865
|
-
},
|
|
865
|
+
}, Yt = (e) => {
|
|
866
866
|
const t = e.getRootNode?.();
|
|
867
867
|
return typeof ShadowRoot < "u" && t instanceof ShadowRoot ? t.adoptedStyleSheets ?? null : typeof document < "u" ? document.adoptedStyleSheets ?? null : null;
|
|
868
|
-
},
|
|
868
|
+
}, Zt = (e, t) => {
|
|
869
869
|
const r = e.getRootNode?.();
|
|
870
870
|
try {
|
|
871
871
|
if (typeof ShadowRoot < "u" && r instanceof ShadowRoot) {
|
|
@@ -875,9 +875,9 @@ ${s}
|
|
|
875
875
|
typeof document < "u" && (document.adoptedStyleSheets = t);
|
|
876
876
|
} catch {
|
|
877
877
|
}
|
|
878
|
-
},
|
|
879
|
-
if (t.sheet &&
|
|
880
|
-
const r =
|
|
878
|
+
}, Gt = (e, t) => {
|
|
879
|
+
if (t.sheet && z()) {
|
|
880
|
+
const r = Yt(e);
|
|
881
881
|
if (!r) return;
|
|
882
882
|
if (r.includes(t.sheet)) {
|
|
883
883
|
t.adopted = !0;
|
|
@@ -887,33 +887,33 @@ ${s}
|
|
|
887
887
|
r.push(t.sheet), t.adopted = !0;
|
|
888
888
|
return;
|
|
889
889
|
} catch {
|
|
890
|
-
|
|
890
|
+
Zt(e, [...r, t.sheet]), t.adopted = !0;
|
|
891
891
|
return;
|
|
892
892
|
}
|
|
893
893
|
}
|
|
894
894
|
t.styleEl && typeof document < "u" && (t.styleEl.isConnected || document.head?.append(t.styleEl), t.adopted = !0);
|
|
895
|
-
},
|
|
896
|
-
if (t.sheet &&
|
|
897
|
-
const r =
|
|
895
|
+
}, q = (e, t) => {
|
|
896
|
+
if (t.sheet && z()) {
|
|
897
|
+
const r = Yt(e);
|
|
898
898
|
if (r) {
|
|
899
899
|
const n = r.indexOf(t.sheet);
|
|
900
900
|
if (n !== -1) try {
|
|
901
901
|
r.splice(n, 1);
|
|
902
902
|
} catch {
|
|
903
|
-
|
|
903
|
+
Zt(e, r.filter((o) => o !== t.sheet));
|
|
904
904
|
}
|
|
905
905
|
}
|
|
906
906
|
}
|
|
907
907
|
t.styleEl?.remove(), t.adopted = !1;
|
|
908
|
-
},
|
|
908
|
+
}, Qt = (e, t) => {
|
|
909
909
|
if (e.cssText = t, !t) return !1;
|
|
910
|
-
if (e.sheet &&
|
|
910
|
+
if (e.sheet && z()) try {
|
|
911
911
|
return e.sheet.replaceSync(t), !0;
|
|
912
912
|
} catch (r) {
|
|
913
913
|
return console.warn("[style-lib] bake replaceSync failed", r), !1;
|
|
914
914
|
}
|
|
915
915
|
return e.styleEl ? (e.styleEl.textContent = t, !0) : !1;
|
|
916
|
-
},
|
|
916
|
+
}, Ge = (e, t) => {
|
|
917
917
|
const r = L.get(e.cacheKey);
|
|
918
918
|
r?.timer && clearTimeout(r.timer);
|
|
919
919
|
const n = {
|
|
@@ -926,38 +926,38 @@ ${s}
|
|
|
926
926
|
t > 0 && typeof setTimeout == "function" && (n.timer = setTimeout(() => {
|
|
927
927
|
L.get(e.cacheKey) === n && L.delete(e.cacheKey);
|
|
928
928
|
}, t)), L.set(e.cacheKey, n);
|
|
929
|
-
},
|
|
929
|
+
}, Xt = (e) => {
|
|
930
930
|
const t = L.get(e);
|
|
931
931
|
t?.timer && clearTimeout(t.timer), L.delete(e);
|
|
932
|
-
},
|
|
932
|
+
}, Sn = () => {
|
|
933
933
|
for (const e of L.values()) e.timer && clearTimeout(e.timer);
|
|
934
934
|
L.clear();
|
|
935
|
-
},
|
|
936
|
-
const r =
|
|
937
|
-
r && (r.adopted &&
|
|
938
|
-
},
|
|
939
|
-
const r =
|
|
935
|
+
}, vn = (e, t = ze) => {
|
|
936
|
+
const r = R.get(e);
|
|
937
|
+
r && (r.adopted && q(e, r), I.delete(e), r.cssText && Ge(r, t));
|
|
938
|
+
}, gn = (e, t = ze) => {
|
|
939
|
+
const r = R.get(e);
|
|
940
940
|
if (!r || !e.isConnected) return;
|
|
941
|
-
const n =
|
|
942
|
-
if (!r.cssText && o && o.fingerprint === n && (
|
|
943
|
-
|
|
941
|
+
const n = ae(void 0, e), o = L.get(r.cacheKey);
|
|
942
|
+
if (!r.cssText && o && o.fingerprint === n && (Qt(r, o.cssText), r.fingerprint = o.fingerprint), !r.cssText || r.fingerprint !== n) {
|
|
943
|
+
le(e, {
|
|
944
944
|
categories: r.categories,
|
|
945
945
|
cacheMs: t,
|
|
946
|
-
layer:
|
|
946
|
+
layer: Ot
|
|
947
947
|
});
|
|
948
948
|
return;
|
|
949
949
|
}
|
|
950
|
-
|
|
951
|
-
},
|
|
950
|
+
Gt(e, r), I.add(e);
|
|
951
|
+
}, Z = null, wn = () => (Z || typeof IntersectionObserver > "u" || (Z = new IntersectionObserver((e) => {
|
|
952
952
|
for (const t of e) {
|
|
953
953
|
const r = t.target;
|
|
954
|
-
|
|
954
|
+
R.has(r) && (t.isIntersecting && r.isConnected ? gn(r) : vn(r));
|
|
955
955
|
}
|
|
956
|
-
}, { threshold: 0 })),
|
|
957
|
-
let o =
|
|
956
|
+
}, { threshold: 0 })), Z), bn = (e, t, r, n = ue) => {
|
|
957
|
+
let o = R.get(e);
|
|
958
958
|
if (o)
|
|
959
|
-
return o.selector = t, o.categories = r, o.media = n, o.cacheKey =
|
|
960
|
-
const i =
|
|
959
|
+
return o.selector = t, o.categories = r, o.media = n, o.cacheKey = wt(t, r, n), o;
|
|
960
|
+
const i = z();
|
|
961
961
|
return o = {
|
|
962
962
|
sheet: i ? new CSSStyleSheet() : null,
|
|
963
963
|
styleEl: i || typeof document > "u" ? null : document.createElement("style"),
|
|
@@ -966,147 +966,147 @@ ${s}
|
|
|
966
966
|
cssText: "",
|
|
967
967
|
fingerprint: "",
|
|
968
968
|
adopted: !1,
|
|
969
|
-
cacheKey:
|
|
969
|
+
cacheKey: wt(t, r, n),
|
|
970
970
|
media: n
|
|
971
|
-
}, o.styleEl && (o.styleEl.dataset.uxBaked = "", o.styleEl.dataset.owner = "style-lib"),
|
|
972
|
-
},
|
|
973
|
-
|
|
974
|
-
const e = [...
|
|
975
|
-
|
|
971
|
+
}, o.styleEl && (o.styleEl.dataset.uxBaked = "", o.styleEl.dataset.owner = "style-lib"), R.set(e, o), wn()?.observe(e), o;
|
|
972
|
+
}, En = () => {
|
|
973
|
+
Ve = !1;
|
|
974
|
+
const e = [...Ue];
|
|
975
|
+
Ue.clear();
|
|
976
976
|
for (const t of e) {
|
|
977
|
-
if (!t.isConnected || !
|
|
978
|
-
const r =
|
|
979
|
-
|
|
977
|
+
if (!t.isConnected || !R.has(t)) continue;
|
|
978
|
+
const r = R.get(t);
|
|
979
|
+
le(t, r ? {
|
|
980
980
|
categories: r.categories,
|
|
981
981
|
selector: r.selector,
|
|
982
982
|
media: r.media
|
|
983
983
|
} : {});
|
|
984
984
|
}
|
|
985
|
-
},
|
|
986
|
-
|
|
987
|
-
},
|
|
988
|
-
const t =
|
|
989
|
-
if (!(e !== "force" && t ===
|
|
990
|
-
|
|
991
|
-
for (const r of [...
|
|
992
|
-
const n =
|
|
985
|
+
}, Jt = (e) => {
|
|
986
|
+
Ue.add(e), !Ve && (Ve = !0, queueMicrotask(En));
|
|
987
|
+
}, Me = (e = "theme") => {
|
|
988
|
+
const t = ae();
|
|
989
|
+
if (!(e !== "force" && t === ee && ee)) {
|
|
990
|
+
ee = t, Sn();
|
|
991
|
+
for (const r of [...I]) {
|
|
992
|
+
const n = R.get(r);
|
|
993
993
|
if (!n) {
|
|
994
|
-
|
|
994
|
+
I.delete(r);
|
|
995
995
|
continue;
|
|
996
996
|
}
|
|
997
|
-
|
|
997
|
+
q(r, n), n.cssText = "", n.fingerprint = "", Jt(r);
|
|
998
998
|
}
|
|
999
999
|
}
|
|
1000
|
-
},
|
|
1001
|
-
if (!(
|
|
1002
|
-
|
|
1003
|
-
if (
|
|
1004
|
-
|
|
1000
|
+
}, Cn = () => {
|
|
1001
|
+
if (!(gt || typeof document > "u")) {
|
|
1002
|
+
gt = !0, ee = ae(), Wt((e) => {
|
|
1003
|
+
if (ae() !== ee) {
|
|
1004
|
+
Me("style-tree");
|
|
1005
1005
|
return;
|
|
1006
1006
|
}
|
|
1007
|
-
e instanceof HTMLElement &&
|
|
1007
|
+
e instanceof HTMLElement && R.has(e) && Jt(e);
|
|
1008
1008
|
});
|
|
1009
1009
|
try {
|
|
1010
|
-
new MutationObserver(() =>
|
|
1010
|
+
new MutationObserver(() => Me("theme-attr")).observe(document.documentElement, {
|
|
1011
1011
|
attributes: !0,
|
|
1012
|
-
attributeFilter: [...
|
|
1012
|
+
attributeFilter: [...Cr]
|
|
1013
1013
|
});
|
|
1014
1014
|
} catch {
|
|
1015
1015
|
}
|
|
1016
1016
|
try {
|
|
1017
|
-
matchMedia?.("(prefers-color-scheme: dark)")?.addEventListener?.("change", () =>
|
|
1017
|
+
matchMedia?.("(prefers-color-scheme: dark)")?.addEventListener?.("change", () => Me("color-scheme"));
|
|
1018
1018
|
} catch {
|
|
1019
1019
|
}
|
|
1020
1020
|
}
|
|
1021
|
-
},
|
|
1021
|
+
}, le = (e, t = {}) => {
|
|
1022
1022
|
if (!e || e.nodeType !== 1 || typeof getComputedStyle != "function") return null;
|
|
1023
|
-
|
|
1024
|
-
const r =
|
|
1025
|
-
l.fingerprint =
|
|
1023
|
+
Cn();
|
|
1024
|
+
const r = dn(t.categories), n = t.layer || "ux-baked", o = t.cacheMs ?? 3e4, i = t.media === void 0 ? ue : t.media, a = t.selector?.trim() || Ye(e), s = ae(void 0, e), l = bn(e, a, r, i);
|
|
1025
|
+
l.fingerprint = s;
|
|
1026
1026
|
const c = L.get(l.cacheKey);
|
|
1027
1027
|
let u = "";
|
|
1028
|
-
if (c && c.fingerprint ===
|
|
1028
|
+
if (c && c.fingerprint === s && c.cssText) u = c.cssText;
|
|
1029
1029
|
else {
|
|
1030
|
-
const
|
|
1031
|
-
u =
|
|
1030
|
+
const f = getComputedStyle(e);
|
|
1031
|
+
u = yn(a, hn(f, r), n, i);
|
|
1032
1032
|
}
|
|
1033
|
-
return u ? (
|
|
1034
|
-
},
|
|
1033
|
+
return u ? (Qt(l, u), Ge(l, o), qr(e) ? (Gt(e, l), I.add(e)) : (q(e, l), I.delete(e)), l) : (q(e, l), I.delete(e), l);
|
|
1034
|
+
}, Fe = (e, t = !0) => {
|
|
1035
1035
|
if (!e) return;
|
|
1036
|
-
const r =
|
|
1037
|
-
r && (
|
|
1038
|
-
},
|
|
1036
|
+
const r = R.get(e);
|
|
1037
|
+
r && (q(e, r), I.delete(e), Z?.unobserve(e), t && r.cssText ? Ge(r, ze) : Xt(r.cacheKey), R.delete(e));
|
|
1038
|
+
}, Io = (e, t) => {
|
|
1039
1039
|
if (!e) return null;
|
|
1040
|
-
const r =
|
|
1041
|
-
return r && (
|
|
1040
|
+
const r = R.get(e);
|
|
1041
|
+
return r && (q(e, r), r.cssText = "", Xt(r.cacheKey)), le(e, t ?? (r ? {
|
|
1042
1042
|
categories: r.categories,
|
|
1043
1043
|
selector: r.selector,
|
|
1044
1044
|
media: r.media
|
|
1045
1045
|
} : {}));
|
|
1046
|
-
},
|
|
1046
|
+
}, Uo = (e) => e ? R.get(e) : void 0, xn = (e, t = {}) => {
|
|
1047
1047
|
const r = {
|
|
1048
|
-
media:
|
|
1048
|
+
media: ue,
|
|
1049
1049
|
pierceShadow: t.pierceShadow !== !1,
|
|
1050
1050
|
...t
|
|
1051
|
-
}, n =
|
|
1052
|
-
for (const
|
|
1053
|
-
const l =
|
|
1051
|
+
}, n = Ht(e), o = mn(e, r.also ?? Kt(e), r.pierceShadow !== !1), i = [], a = /* @__PURE__ */ new Set();
|
|
1052
|
+
for (const s of n) {
|
|
1053
|
+
const l = le(s, r);
|
|
1054
1054
|
l && i.push(l);
|
|
1055
1055
|
}
|
|
1056
|
-
for (const { el:
|
|
1057
|
-
if (n.includes(
|
|
1058
|
-
const c =
|
|
1056
|
+
for (const { el: s, selector: l } of o) {
|
|
1057
|
+
if (n.includes(s)) continue;
|
|
1058
|
+
const c = le(s, {
|
|
1059
1059
|
...r,
|
|
1060
1060
|
selector: l
|
|
1061
1061
|
});
|
|
1062
|
-
c && i.push(c),
|
|
1062
|
+
c && i.push(c), a.add(s);
|
|
1063
1063
|
}
|
|
1064
1064
|
if (e) {
|
|
1065
|
-
const
|
|
1066
|
-
if (
|
|
1067
|
-
for (const l of
|
|
1068
|
-
|
|
1065
|
+
const s = G.get(e);
|
|
1066
|
+
if (s)
|
|
1067
|
+
for (const l of s) !a.has(l) && !n.includes(l) && Fe(l, !0);
|
|
1068
|
+
a.size ? G.set(e, a) : G.delete(e);
|
|
1069
1069
|
}
|
|
1070
1070
|
return i;
|
|
1071
|
-
},
|
|
1071
|
+
}, Bo = (e, t = !0) => {
|
|
1072
1072
|
if (!e) return;
|
|
1073
|
-
const r =
|
|
1074
|
-
|
|
1075
|
-
for (const n of
|
|
1076
|
-
if (r) for (const n of r)
|
|
1077
|
-
},
|
|
1073
|
+
const r = G.get(e);
|
|
1074
|
+
G.delete(e);
|
|
1075
|
+
for (const n of Ht(e)) Fe(n, t);
|
|
1076
|
+
if (r) for (const n of r) Fe(n, t);
|
|
1077
|
+
}, _o = (e, t) => {
|
|
1078
1078
|
const r = (n = !0) => {
|
|
1079
|
-
if (
|
|
1080
|
-
const o = t?.also ??
|
|
1081
|
-
o.length && o.some((
|
|
1079
|
+
if (xn(e, t), !n || !e) return;
|
|
1080
|
+
const o = t?.also ?? Kt(e), i = t?.pierceShadow !== !1;
|
|
1081
|
+
o.length && o.some((a) => !(i ? Se(e, a) : e.querySelector(a))) && typeof requestAnimationFrame == "function" && requestAnimationFrame(() => r(!1));
|
|
1082
1082
|
};
|
|
1083
1083
|
if (!e || typeof requestAnimationFrame != "function") {
|
|
1084
1084
|
r(!1);
|
|
1085
1085
|
return;
|
|
1086
1086
|
}
|
|
1087
1087
|
requestAnimationFrame(() => r(!0));
|
|
1088
|
-
},
|
|
1088
|
+
}, Qe = (e) => {
|
|
1089
1089
|
const t = e?.shadowRoot;
|
|
1090
1090
|
if (!t) return;
|
|
1091
|
-
const r =
|
|
1092
|
-
for (const n of r)
|
|
1091
|
+
const r = Be.get(e) || [];
|
|
1092
|
+
for (const n of r) se(n);
|
|
1093
1093
|
try {
|
|
1094
1094
|
const n = t.adoptedStyleSheets || [];
|
|
1095
1095
|
t.adoptedStyleSheets = [...r.filter((o) => !n.includes(o)), .../* @__PURE__ */ new Set([...n])];
|
|
1096
1096
|
} catch {
|
|
1097
1097
|
}
|
|
1098
|
-
},
|
|
1099
|
-
let r =
|
|
1100
|
-
r ||
|
|
1101
|
-
},
|
|
1098
|
+
}, Ae = (e, t) => {
|
|
1099
|
+
let r = Be.get(e);
|
|
1100
|
+
r || Be.set(e, r = []), t && r.indexOf(t) < 0 && r.push(t), se(t), Qe(e);
|
|
1101
|
+
}, te = (e, t) => {
|
|
1102
1102
|
const r = e?.shadowRoot;
|
|
1103
1103
|
if (!r || !t) return null;
|
|
1104
|
-
let n = r.querySelector?.(`style[${
|
|
1105
|
-
return n ? n.textContent !== t && (n.textContent = t) : (n =
|
|
1106
|
-
},
|
|
1104
|
+
let n = r.querySelector?.(`style[${ct}]`);
|
|
1105
|
+
return n ? n.textContent !== t && (n.textContent = t) : (n = P(t, r, ""), n && n.setAttribute(ct, "")), n;
|
|
1106
|
+
}, No = (e = typeof document < "u" ? document : null) => {
|
|
1107
1107
|
if (!e) return;
|
|
1108
1108
|
const t = (n) => {
|
|
1109
|
-
n?.shadowRoot && (
|
|
1109
|
+
n?.shadowRoot && (te(n, er(n)), Qe(n));
|
|
1110
1110
|
};
|
|
1111
1111
|
e.nodeType === 1 && t(e);
|
|
1112
1112
|
const r = (n) => {
|
|
@@ -1117,100 +1117,100 @@ ${s}
|
|
|
1117
1117
|
return;
|
|
1118
1118
|
}
|
|
1119
1119
|
for (let i = 0; i < o.length; i++) {
|
|
1120
|
-
const
|
|
1121
|
-
|
|
1120
|
+
const a = o[i];
|
|
1121
|
+
a.shadowRoot && (t(a), r(a.shadowRoot));
|
|
1122
1122
|
}
|
|
1123
1123
|
};
|
|
1124
1124
|
r(e);
|
|
1125
|
-
},
|
|
1125
|
+
}, er = (e) => {
|
|
1126
1126
|
const t = e?.styles;
|
|
1127
1127
|
if (typeof t == "string") return t;
|
|
1128
1128
|
if (typeof t == "function") try {
|
|
1129
1129
|
const r = t.call(e);
|
|
1130
|
-
return typeof r == "string" ? r :
|
|
1130
|
+
return typeof r == "string" ? r : F(r);
|
|
1131
1131
|
} catch {
|
|
1132
1132
|
return null;
|
|
1133
1133
|
}
|
|
1134
|
-
return
|
|
1135
|
-
},
|
|
1136
|
-
e && (e.styles != null &&
|
|
1137
|
-
},
|
|
1138
|
-
!e || !(e instanceof Element) ||
|
|
1139
|
-
|
|
1140
|
-
const t =
|
|
1141
|
-
|
|
1134
|
+
return F(t);
|
|
1135
|
+
}, kn = (e) => {
|
|
1136
|
+
e && (e.styles != null && tr(e, e.styles), Qe(e), te(e, er(e)));
|
|
1137
|
+
}, Re = [], Te = !1, Mn = (e) => {
|
|
1138
|
+
!e || !(e instanceof Element) || Ee.has(e) || (Ee.add(e), Re.push(e), !Te && (Te = !0, queueMicrotask(() => {
|
|
1139
|
+
Te = !1;
|
|
1140
|
+
const t = Re;
|
|
1141
|
+
Re = [];
|
|
1142
1142
|
for (const r of t)
|
|
1143
|
-
|
|
1143
|
+
Ee.delete(r), r.isConnected && kn(r);
|
|
1144
1144
|
})));
|
|
1145
1145
|
};
|
|
1146
|
-
|
|
1147
|
-
var
|
|
1146
|
+
Wt((e) => Mn(e));
|
|
1147
|
+
var tr = (e, t) => {
|
|
1148
1148
|
if (!t) return null;
|
|
1149
1149
|
let r = t;
|
|
1150
1150
|
if (typeof t == "function") try {
|
|
1151
|
-
const
|
|
1152
|
-
r = t.call(e,
|
|
1153
|
-
} catch (
|
|
1154
|
-
return console.warn("Error calling styles function:",
|
|
1151
|
+
const s = new WeakRef(e);
|
|
1152
|
+
r = t.call(e, s);
|
|
1153
|
+
} catch (s) {
|
|
1154
|
+
return console.warn("Error calling styles function:", s), null;
|
|
1155
1155
|
}
|
|
1156
1156
|
if (r && typeof CSSStyleSheet < "u" && r instanceof CSSStyleSheet)
|
|
1157
|
-
return
|
|
1157
|
+
return Ae(e, r), te(e, F(r));
|
|
1158
1158
|
if (r instanceof Promise)
|
|
1159
|
-
return r.then((
|
|
1160
|
-
|
|
1161
|
-
}).catch((
|
|
1162
|
-
console.warn("Error loading adopted stylesheet:",
|
|
1159
|
+
return r.then((s) => {
|
|
1160
|
+
s instanceof CSSStyleSheet ? Ae(e, s) : s != null && tr(e, s);
|
|
1161
|
+
}).catch((s) => {
|
|
1162
|
+
console.warn("Error loading adopted stylesheet:", s);
|
|
1163
1163
|
}), null;
|
|
1164
1164
|
if (typeof r == "string" || r instanceof Blob || r instanceof File) {
|
|
1165
|
-
const
|
|
1166
|
-
if (
|
|
1165
|
+
const s = qt(r, "");
|
|
1166
|
+
if (s) {
|
|
1167
1167
|
const l = (c) => {
|
|
1168
|
-
|
|
1168
|
+
Ae(e, c);
|
|
1169
1169
|
};
|
|
1170
|
-
return
|
|
1171
|
-
l(c),
|
|
1170
|
+
return s instanceof Promise ? (s.then((c) => {
|
|
1171
|
+
l(c), te(e, typeof r == "string" ? r : F(c));
|
|
1172
1172
|
}).catch((c) => {
|
|
1173
1173
|
console.warn("Error loading adopted stylesheet:", c);
|
|
1174
|
-
}), null) : (l(
|
|
1174
|
+
}), null) : (l(s), te(e, typeof r == "string" ? r : F(s)));
|
|
1175
1175
|
}
|
|
1176
1176
|
}
|
|
1177
|
-
const n = typeof t == "function" || typeof t == "object" ?
|
|
1178
|
-
let i = o?.styleElement,
|
|
1177
|
+
const n = typeof t == "function" || typeof t == "object" ? Sr : mr, o = n.get(t);
|
|
1178
|
+
let i = o?.styleElement, a = o?.vars;
|
|
1179
1179
|
if (!o) {
|
|
1180
|
-
let
|
|
1181
|
-
typeof r == "string" ?
|
|
1182
|
-
css:
|
|
1180
|
+
let s = "", l = [];
|
|
1181
|
+
typeof r == "string" ? s = r || "" : typeof r == "object" && r != null && (r instanceof HTMLStyleElement ? i = r : (s = typeof r.css == "string" ? r.css : typeof r == "string" ? r : String(r), l = r?.props ?? l, a = r?.vars ?? a)), !i && s && (i = P(s, e, "ux-layer")), n.set(t, {
|
|
1182
|
+
css: s,
|
|
1183
1183
|
props: l,
|
|
1184
|
-
vars:
|
|
1184
|
+
vars: a,
|
|
1185
1185
|
styleElement: i
|
|
1186
1186
|
});
|
|
1187
1187
|
}
|
|
1188
1188
|
return i;
|
|
1189
|
-
},
|
|
1190
|
-
const o =
|
|
1189
|
+
}, An = (e) => !!e && typeof e == "object" && "ref" in e && typeof e?.unbind == "function", De = (e, t, r, n) => {
|
|
1190
|
+
const o = An(r) ? r : null;
|
|
1191
1191
|
o && (o.bind?.(), r = o.ref), n?.(e, t, r);
|
|
1192
|
-
const i =
|
|
1193
|
-
const u =
|
|
1194
|
-
n?.(u, t,
|
|
1192
|
+
const i = ot(e), a = ot(r), s = hr?.([r, "value"], (c) => {
|
|
1193
|
+
const u = nt(i), f = nt(a), h = rt(f) ?? rt(c);
|
|
1194
|
+
n?.(u, t, h);
|
|
1195
1195
|
}), l = () => {
|
|
1196
|
-
o?.unbind?.(),
|
|
1196
|
+
o?.unbind?.(), s?.();
|
|
1197
1197
|
};
|
|
1198
|
-
return
|
|
1199
|
-
},
|
|
1198
|
+
return pr(r, Symbol.dispose, l), l;
|
|
1199
|
+
}, Rn = 0, Vo = (e = {}) => ({
|
|
1200
1200
|
kind: "scroll",
|
|
1201
1201
|
...e
|
|
1202
|
-
}),
|
|
1202
|
+
}), Fo = (e = {}) => ({
|
|
1203
1203
|
kind: "view",
|
|
1204
1204
|
...e
|
|
1205
|
-
}),
|
|
1206
|
-
[
|
|
1207
|
-
id =
|
|
1205
|
+
}), Tn = class {
|
|
1206
|
+
[Bt] = !0;
|
|
1207
|
+
id = Rn++;
|
|
1208
1208
|
#n;
|
|
1209
1209
|
#e;
|
|
1210
1210
|
#r;
|
|
1211
1211
|
#o = /* @__PURE__ */ new Set();
|
|
1212
|
-
#
|
|
1213
|
-
#
|
|
1212
|
+
#i = /* @__PURE__ */ new Set();
|
|
1213
|
+
#s(e, t) {
|
|
1214
1214
|
return e == null || e === "self" ? t : e === "root" ? t.ownerDocument.scrollingElement ?? t.ownerDocument.documentElement : typeof e == "object" && "value" in e && !(e instanceof Element) ? e.value ?? t : e;
|
|
1215
1215
|
}
|
|
1216
1216
|
#a(e) {
|
|
@@ -1222,16 +1222,16 @@ var jt = (e, t) => {
|
|
|
1222
1222
|
}
|
|
1223
1223
|
#f(e, t) {
|
|
1224
1224
|
const r = e.ownerDocument.defaultView ?? globalThis;
|
|
1225
|
-
if (
|
|
1225
|
+
if (X(t)) {
|
|
1226
1226
|
const o = r.ScrollTimeline;
|
|
1227
1227
|
return typeof o != "function" ? null : new o({
|
|
1228
|
-
source: t.source === "nearest" || t.source == null ? this.#a(e) : this.#
|
|
1228
|
+
source: t.source === "nearest" || t.source == null ? this.#a(e) : this.#s(t.source, e),
|
|
1229
1229
|
axis: t.axis ?? "block"
|
|
1230
1230
|
});
|
|
1231
1231
|
}
|
|
1232
1232
|
const n = r.ViewTimeline;
|
|
1233
1233
|
return typeof n != "function" ? null : new n({
|
|
1234
|
-
subject: t.subject ? this.#
|
|
1234
|
+
subject: t.subject ? this.#s(t.subject, e) : e,
|
|
1235
1235
|
axis: t.axis ?? "block",
|
|
1236
1236
|
inset: t.inset
|
|
1237
1237
|
});
|
|
@@ -1239,7 +1239,7 @@ var jt = (e, t) => {
|
|
|
1239
1239
|
#d(e, t, r, n) {
|
|
1240
1240
|
const o = this.#f(e, n);
|
|
1241
1241
|
if (!o) return this.#p(e, t, r, n);
|
|
1242
|
-
const i = this.#u(),
|
|
1242
|
+
const i = this.#u(), a = e.animate(this.#c(r), {
|
|
1243
1243
|
...i,
|
|
1244
1244
|
duration: "auto",
|
|
1245
1245
|
delay: 0,
|
|
@@ -1248,7 +1248,7 @@ var jt = (e, t) => {
|
|
|
1248
1248
|
fill: this.#e.fill ?? "both",
|
|
1249
1249
|
timeline: o
|
|
1250
1250
|
});
|
|
1251
|
-
return n.rangeStart && (
|
|
1251
|
+
return n.rangeStart && (a.rangeStart = n.rangeStart), n.rangeEnd && (a.rangeEnd = n.rangeEnd), t.animation = a, () => a.cancel();
|
|
1252
1252
|
}
|
|
1253
1253
|
constructor(e, t = {}) {
|
|
1254
1254
|
if (!Array.isArray(e) || e.length < 2) throw new TypeError("animatable() expects at least 2 steps");
|
|
@@ -1263,25 +1263,25 @@ var jt = (e, t) => {
|
|
|
1263
1263
|
fill: "both"
|
|
1264
1264
|
});
|
|
1265
1265
|
i.pause(), t.animation = i;
|
|
1266
|
-
const
|
|
1267
|
-
let
|
|
1266
|
+
const a = X(n) ? n.source === "nearest" || n.source == null ? this.#a(e) : this.#s(n.source, e) : this.#a(e);
|
|
1267
|
+
let s = 0;
|
|
1268
1268
|
const l = () => {
|
|
1269
|
-
if (
|
|
1270
|
-
const
|
|
1269
|
+
if (ne(n)) {
|
|
1270
|
+
const C = a === document.scrollingElement ? {
|
|
1271
1271
|
top: 0,
|
|
1272
1272
|
height: innerHeight
|
|
1273
|
-
} :
|
|
1274
|
-
return Math.min(1, Math.max(0, (
|
|
1273
|
+
} : a.getBoundingClientRect(), S = e.getBoundingClientRect(), p = C.height + S.height;
|
|
1274
|
+
return Math.min(1, Math.max(0, (C.top + C.height - S.top) / p));
|
|
1275
1275
|
}
|
|
1276
|
-
const
|
|
1277
|
-
return
|
|
1276
|
+
const f = a, h = f.scrollHeight - f.clientHeight;
|
|
1277
|
+
return h > 0 ? f.scrollTop / h : 0;
|
|
1278
1278
|
}, c = () => {
|
|
1279
|
-
cancelAnimationFrame(
|
|
1279
|
+
cancelAnimationFrame(s), s = requestAnimationFrame(() => {
|
|
1280
1280
|
i.currentTime = l() * 1e4;
|
|
1281
1281
|
});
|
|
1282
|
-
}, u =
|
|
1282
|
+
}, u = a === document.scrollingElement ? window : a;
|
|
1283
1283
|
return u.addEventListener("scroll", c, { passive: !0 }), c(), () => {
|
|
1284
|
-
cancelAnimationFrame(
|
|
1284
|
+
cancelAnimationFrame(s), u.removeEventListener("scroll", c), i.cancel();
|
|
1285
1285
|
};
|
|
1286
1286
|
}
|
|
1287
1287
|
get value() {
|
|
@@ -1319,20 +1319,20 @@ var jt = (e, t) => {
|
|
|
1319
1319
|
}
|
|
1320
1320
|
#c(e) {
|
|
1321
1321
|
const t = this.#n.map((i) => this.#l(i)), r = t.length, n = this.#e.offsets, o = this.#e.easing;
|
|
1322
|
-
return t.map((i,
|
|
1323
|
-
const
|
|
1324
|
-
Array.isArray(o) && o[
|
|
1322
|
+
return t.map((i, a) => {
|
|
1323
|
+
const s = { offset: n?.[a] ?? (r > 1 ? a / (r - 1) : 0) };
|
|
1324
|
+
Array.isArray(o) && o[a] && (s.easing = o[a]);
|
|
1325
1325
|
let l = i;
|
|
1326
|
-
return e.mode === "property" && e.unit != null && typeof i == "number" && (l = `${i}${e.unit}`), e.mode === "custom-property" && typeof i != "string" && (l = String(i)),
|
|
1326
|
+
return e.mode === "property" && e.unit != null && typeof i == "number" && (l = `${i}${e.unit}`), e.mode === "custom-property" && typeof i != "string" && (l = String(i)), s[e.target] = l, s;
|
|
1327
1327
|
});
|
|
1328
1328
|
}
|
|
1329
1329
|
#u() {
|
|
1330
1330
|
const e = this.#e;
|
|
1331
1331
|
return {
|
|
1332
|
-
duration:
|
|
1333
|
-
delay:
|
|
1332
|
+
duration: B(e.duration, 300),
|
|
1333
|
+
delay: B(e.delay, 0),
|
|
1334
1334
|
endDelay: e.endDelay ?? 0,
|
|
1335
|
-
iterations:
|
|
1335
|
+
iterations: Dr(e.iterations),
|
|
1336
1336
|
direction: e.direction ?? "normal",
|
|
1337
1337
|
fill: e.fill ?? "both",
|
|
1338
1338
|
composite: e.composite,
|
|
@@ -1347,17 +1347,17 @@ var jt = (e, t) => {
|
|
|
1347
1347
|
}
|
|
1348
1348
|
}, n = this.#e.trigger ?? "mount";
|
|
1349
1349
|
let o;
|
|
1350
|
-
if (
|
|
1350
|
+
if (X(n) || ne(n)) o = this.#d(e, r, t, n);
|
|
1351
1351
|
else {
|
|
1352
1352
|
const i = () => {
|
|
1353
1353
|
r.animation?.cancel();
|
|
1354
|
-
const
|
|
1355
|
-
return r.animation =
|
|
1354
|
+
const a = e.animate(this.#c(t), this.#u());
|
|
1355
|
+
return r.animation = a, this.#h(a, t), a;
|
|
1356
1356
|
};
|
|
1357
1357
|
o = this.#y(e, r, i);
|
|
1358
1358
|
}
|
|
1359
|
-
return this.#
|
|
1360
|
-
o(), this.#
|
|
1359
|
+
return this.#i.add(r), r.cleanup = () => {
|
|
1360
|
+
o(), this.#i.delete(r);
|
|
1361
1361
|
}, r.cleanup;
|
|
1362
1362
|
}
|
|
1363
1363
|
#h(e, t) {
|
|
@@ -1370,7 +1370,7 @@ var jt = (e, t) => {
|
|
|
1370
1370
|
#y(e, t, r) {
|
|
1371
1371
|
const n = this.#e.trigger ?? "mount", o = this.#e.reverseOnExit ?? !0, i = () => {
|
|
1372
1372
|
!t.animation || t.animation.playState === "idle" ? r() : (t.animation.playbackRate = Math.abs(t.animation.playbackRate || 1), t.animation.play());
|
|
1373
|
-
},
|
|
1373
|
+
}, a = () => {
|
|
1374
1374
|
t.animation && t.animation.reverse();
|
|
1375
1375
|
};
|
|
1376
1376
|
if (n === "mount")
|
|
@@ -1379,17 +1379,17 @@ var jt = (e, t) => {
|
|
|
1379
1379
|
if (n === "manual") return () => {
|
|
1380
1380
|
};
|
|
1381
1381
|
if (n === "hover" || n === "focus") {
|
|
1382
|
-
const
|
|
1383
|
-
o &&
|
|
1382
|
+
const s = n === "hover" ? "pointerenter" : "focusin", l = n === "hover" ? "pointerleave" : "focusout", c = () => i(), u = () => {
|
|
1383
|
+
o && a();
|
|
1384
1384
|
};
|
|
1385
|
-
return e.addEventListener(
|
|
1386
|
-
e.removeEventListener(
|
|
1385
|
+
return e.addEventListener(s, c), e.addEventListener(l, u), () => {
|
|
1386
|
+
e.removeEventListener(s, c), e.removeEventListener(l, u);
|
|
1387
1387
|
};
|
|
1388
1388
|
}
|
|
1389
1389
|
if (n === "click") {
|
|
1390
|
-
let
|
|
1390
|
+
let s = !0;
|
|
1391
1391
|
const l = () => {
|
|
1392
|
-
|
|
1392
|
+
s ? i() : a(), s = !s;
|
|
1393
1393
|
};
|
|
1394
1394
|
return e.addEventListener("click", l), () => e.removeEventListener("click", l);
|
|
1395
1395
|
}
|
|
@@ -1397,22 +1397,37 @@ var jt = (e, t) => {
|
|
|
1397
1397
|
if (typeof IntersectionObserver != "function")
|
|
1398
1398
|
return r(), () => {
|
|
1399
1399
|
};
|
|
1400
|
-
const
|
|
1401
|
-
for (const c of l) c.isIntersecting ? i() : o && t.animation &&
|
|
1400
|
+
const s = new IntersectionObserver((l) => {
|
|
1401
|
+
for (const c of l) c.isIntersecting ? i() : o && t.animation && a();
|
|
1402
1402
|
}, this.#e.intersection);
|
|
1403
|
-
return
|
|
1403
|
+
return s.observe(e), () => s.disconnect();
|
|
1404
1404
|
}
|
|
1405
1405
|
if (n != null && typeof n == "object" && "value" in n) {
|
|
1406
|
-
const
|
|
1407
|
-
|
|
1408
|
-
const l = typeof n.subscribe == "function" ? n.subscribe(
|
|
1406
|
+
const s = (c) => c ? i() : a();
|
|
1407
|
+
s(n.value);
|
|
1408
|
+
const l = typeof n.subscribe == "function" ? n.subscribe(s) : null;
|
|
1409
1409
|
return () => l?.();
|
|
1410
1410
|
}
|
|
1411
|
+
if (n === "show" || n === "hide" || n === "remove") {
|
|
1412
|
+
const s = n === "show" ? "u2-before-show" : n === "hide" ? "u2-before-hide" : "u2-before-remove", l = n === "remove" ? "data-removing" : "data-hidden", c = n !== "show", u = (h) => {
|
|
1413
|
+
h.defaultPrevented || i();
|
|
1414
|
+
};
|
|
1415
|
+
e.addEventListener(s, u);
|
|
1416
|
+
const f = new MutationObserver(() => {
|
|
1417
|
+
e.hasAttribute(l) === c ? i() : o && t.animation && a();
|
|
1418
|
+
});
|
|
1419
|
+
return f.observe(e, {
|
|
1420
|
+
attributes: !0,
|
|
1421
|
+
attributeFilter: [l]
|
|
1422
|
+
}), () => {
|
|
1423
|
+
e.removeEventListener(s, u), f.disconnect();
|
|
1424
|
+
};
|
|
1425
|
+
}
|
|
1411
1426
|
return () => {
|
|
1412
1427
|
};
|
|
1413
1428
|
}
|
|
1414
1429
|
#t(e) {
|
|
1415
|
-
for (const t of this.#
|
|
1430
|
+
for (const t of this.#i) t.animation && e(t.animation);
|
|
1416
1431
|
return this;
|
|
1417
1432
|
}
|
|
1418
1433
|
play() {
|
|
@@ -1441,28 +1456,28 @@ var jt = (e, t) => {
|
|
|
1441
1456
|
}))), Promise.all(e).then(() => {
|
|
1442
1457
|
});
|
|
1443
1458
|
}
|
|
1444
|
-
},
|
|
1459
|
+
}, Do = (e, t) => new Tn(e, t), Ln = (e) => e != null && typeof e == "object" && e[Bt] === !0, $n = 0, re = (e) => {
|
|
1445
1460
|
const t = e.value?.value, r = typeof t == "number" ? t : Number(t);
|
|
1446
1461
|
if (!Number.isFinite(r)) throw new TypeError(`Reactive CSS value "${String(t)}" is not finite`);
|
|
1447
1462
|
return r;
|
|
1448
|
-
},
|
|
1463
|
+
}, Pn = (e) => {
|
|
1449
1464
|
const t = Number(e?.value);
|
|
1450
1465
|
return Number.isFinite(t) ? t : 0;
|
|
1451
|
-
},
|
|
1466
|
+
}, Et = (e, t) => {
|
|
1452
1467
|
let r = e;
|
|
1453
|
-
for (const n of t) r = r.replace(new RegExp(`var\\(\\s*${
|
|
1468
|
+
for (const n of t) r = r.replace(new RegExp(`var\\(\\s*${ie(n.marker)}\\s*\\)`, "g"), String(n.value));
|
|
1454
1469
|
return r;
|
|
1455
|
-
},
|
|
1456
|
-
const r =
|
|
1470
|
+
}, Le = (e, t) => {
|
|
1471
|
+
const r = ie(t);
|
|
1457
1472
|
return new RegExp(`^var\\(\\s*${r}\\s*\\)$`).test(e.trim());
|
|
1458
|
-
},
|
|
1473
|
+
}, Ct = (e, t) => {
|
|
1459
1474
|
let r = e;
|
|
1460
1475
|
return r != null && typeof r == "object" && "value" in r && !(r instanceof Element) && (r = r.value), r == null || r === "" ? t ? `0${t}` : "0" : t != null && typeof r == "number" ? `${r}${t}` : String(r);
|
|
1461
|
-
},
|
|
1476
|
+
}, $e = (e, t, r) => {
|
|
1462
1477
|
if (!r) return !1;
|
|
1463
|
-
const n =
|
|
1478
|
+
const n = ie(t), o = ie(r);
|
|
1464
1479
|
return new RegExp(`^calc\\(\\s*var\\(\\s*${n}\\s*\\)\\s*\\*\\s*1${o}\\s*\\)$`, "i").test(e.trim());
|
|
1465
|
-
},
|
|
1480
|
+
}, On = (e, t, r, n) => {
|
|
1466
1481
|
if (typeof t?.parseAll == "function") {
|
|
1467
1482
|
const o = t.parseAll(r, n);
|
|
1468
1483
|
e.set(r, ...o);
|
|
@@ -1473,7 +1488,7 @@ var jt = (e, t) => {
|
|
|
1473
1488
|
return;
|
|
1474
1489
|
}
|
|
1475
1490
|
e.set(r, n);
|
|
1476
|
-
},
|
|
1491
|
+
}, rr = (e) => {
|
|
1477
1492
|
const t = [];
|
|
1478
1493
|
let r = 0;
|
|
1479
1494
|
for (; r < e.length; ) {
|
|
@@ -1490,23 +1505,23 @@ var jt = (e, t) => {
|
|
|
1490
1505
|
}), r += i[0].length;
|
|
1491
1506
|
continue;
|
|
1492
1507
|
}
|
|
1493
|
-
const
|
|
1494
|
-
if (
|
|
1495
|
-
r +=
|
|
1508
|
+
const a = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
|
|
1509
|
+
if (a) {
|
|
1510
|
+
r += a[0].length;
|
|
1496
1511
|
const c = /^(%|[a-zA-Z]+)/.exec(e.slice(r)), u = c?.[0] ?? null;
|
|
1497
1512
|
c && (r += c[0].length), t.push({
|
|
1498
1513
|
kind: "number",
|
|
1499
|
-
value: Number(
|
|
1514
|
+
value: Number(a[0]),
|
|
1500
1515
|
unit: u == null ? null : u.toLowerCase()
|
|
1501
1516
|
});
|
|
1502
1517
|
continue;
|
|
1503
1518
|
}
|
|
1504
|
-
const
|
|
1505
|
-
if (
|
|
1519
|
+
const s = /^[a-zA-Z_][a-zA-Z0-9_-]*/.exec(n);
|
|
1520
|
+
if (s) {
|
|
1506
1521
|
t.push({
|
|
1507
1522
|
kind: "identifier",
|
|
1508
|
-
value:
|
|
1509
|
-
}), r +=
|
|
1523
|
+
value: s[0].toLowerCase()
|
|
1524
|
+
}), r += s[0].length;
|
|
1510
1525
|
continue;
|
|
1511
1526
|
}
|
|
1512
1527
|
const l = n[0];
|
|
@@ -1520,7 +1535,7 @@ var jt = (e, t) => {
|
|
|
1520
1535
|
throw new SyntaxError(`Unsupported Typed OM numeric token near "${n}"`);
|
|
1521
1536
|
}
|
|
1522
1537
|
return t;
|
|
1523
|
-
},
|
|
1538
|
+
}, nr = class {
|
|
1524
1539
|
tokens;
|
|
1525
1540
|
win;
|
|
1526
1541
|
reactiveByMarker;
|
|
@@ -1555,7 +1570,7 @@ var jt = (e, t) => {
|
|
|
1555
1570
|
return t?.kind === "symbol" && t.value === e;
|
|
1556
1571
|
}
|
|
1557
1572
|
createMath(e, ...t) {
|
|
1558
|
-
const r =
|
|
1573
|
+
const r = j(this.win, e);
|
|
1559
1574
|
if (typeof r != "function") throw new TypeError(`${e} is not supported`);
|
|
1560
1575
|
return new r(...t);
|
|
1561
1576
|
}
|
|
@@ -1592,15 +1607,15 @@ var jt = (e, t) => {
|
|
|
1592
1607
|
const i = this.current();
|
|
1593
1608
|
if (i?.kind === "number" && i.value === 1 && typeof i.unit == "string" && (!t.multipliedByUnit || t.multipliedByUnit === i.unit.toLowerCase())) {
|
|
1594
1609
|
this.consume();
|
|
1595
|
-
const
|
|
1610
|
+
const a = M(this.win, i.unit.toLowerCase(), re(t));
|
|
1596
1611
|
return this.leaves.push({
|
|
1597
1612
|
slot: t,
|
|
1598
|
-
value:
|
|
1599
|
-
}),
|
|
1613
|
+
value: a
|
|
1614
|
+
}), a;
|
|
1600
1615
|
}
|
|
1601
1616
|
this.index = o;
|
|
1602
1617
|
}
|
|
1603
|
-
const n = M(this.win, "number",
|
|
1618
|
+
const n = M(this.win, "number", re(t));
|
|
1604
1619
|
return this.leaves.push({
|
|
1605
1620
|
slot: t,
|
|
1606
1621
|
value: n
|
|
@@ -1640,350 +1655,350 @@ var jt = (e, t) => {
|
|
|
1640
1655
|
}
|
|
1641
1656
|
throw new SyntaxError(`Unsupported Typed OM function "${e}"`);
|
|
1642
1657
|
}
|
|
1643
|
-
},
|
|
1658
|
+
}, In = (e, t, r, n) => {
|
|
1644
1659
|
const o = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
|
|
1645
|
-
for (const
|
|
1646
|
-
for (const
|
|
1647
|
-
return new
|
|
1648
|
-
},
|
|
1649
|
-
const o =
|
|
1650
|
-
for (const
|
|
1651
|
-
for (const
|
|
1660
|
+
for (const a of r) o.set(a.marker, a);
|
|
1661
|
+
for (const a of n) i.set(a.marker, a);
|
|
1662
|
+
return new nr(rr(e), t, o, i).parse();
|
|
1663
|
+
}, Un = (e) => e.trim().toLowerCase() === "transform", Bn = (e, t, r, n) => {
|
|
1664
|
+
const o = rr(e), i = [], a = [], s = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
|
|
1665
|
+
for (const m of r) s.set(m.marker, m);
|
|
1666
|
+
for (const m of n) l.set(m.marker, m);
|
|
1652
1667
|
const c = () => M(t, "px", 0), u = () => M(t, "number", 1);
|
|
1653
|
-
let
|
|
1654
|
-
const
|
|
1655
|
-
const
|
|
1656
|
-
if (!
|
|
1657
|
-
return
|
|
1658
|
-
},
|
|
1659
|
-
const
|
|
1660
|
-
if (
|
|
1668
|
+
let f = 0;
|
|
1669
|
+
const h = () => o[f], C = () => {
|
|
1670
|
+
const m = o[f];
|
|
1671
|
+
if (!m) throw new SyntaxError("Unexpected end of transform expression");
|
|
1672
|
+
return f++, m;
|
|
1673
|
+
}, S = (m) => {
|
|
1674
|
+
const d = C();
|
|
1675
|
+
if (d.kind !== "symbol" || d.value !== m) throw new SyntaxError(`Expected "${m}"`);
|
|
1661
1676
|
}, p = () => {
|
|
1662
|
-
const
|
|
1663
|
-
let
|
|
1664
|
-
for (;
|
|
1665
|
-
const
|
|
1666
|
-
if (
|
|
1667
|
-
|
|
1677
|
+
const m = f;
|
|
1678
|
+
let d = 0;
|
|
1679
|
+
for (; f < o.length; ) {
|
|
1680
|
+
const A = o[f];
|
|
1681
|
+
if (A.kind === "symbol" && A.value === "(") {
|
|
1682
|
+
d++, f++;
|
|
1668
1683
|
continue;
|
|
1669
1684
|
}
|
|
1670
|
-
if (
|
|
1671
|
-
if (
|
|
1672
|
-
|
|
1685
|
+
if (A.kind === "symbol" && A.value === ")") {
|
|
1686
|
+
if (d === 0) break;
|
|
1687
|
+
d--, f++;
|
|
1673
1688
|
continue;
|
|
1674
1689
|
}
|
|
1675
|
-
if (
|
|
1676
|
-
|
|
1677
|
-
}
|
|
1678
|
-
const
|
|
1679
|
-
if (
|
|
1680
|
-
const
|
|
1681
|
-
return i.push(...
|
|
1682
|
-
},
|
|
1683
|
-
const
|
|
1684
|
-
if (
|
|
1685
|
-
for (
|
|
1686
|
-
|
|
1687
|
-
return
|
|
1688
|
-
},
|
|
1689
|
-
const
|
|
1690
|
-
const
|
|
1691
|
-
if (typeof
|
|
1692
|
-
return
|
|
1690
|
+
if (A.kind === "symbol" && A.value === "," && d === 0) break;
|
|
1691
|
+
f++;
|
|
1692
|
+
}
|
|
1693
|
+
const g = o.slice(m, f);
|
|
1694
|
+
if (g.length === 0) throw new SyntaxError("Empty transform function argument");
|
|
1695
|
+
const v = new nr(g, t, s, l).parse();
|
|
1696
|
+
return i.push(...v.leaves), v.root;
|
|
1697
|
+
}, y = () => {
|
|
1698
|
+
const m = [];
|
|
1699
|
+
if (S("("), !(h()?.kind === "symbol" && h()?.value === ")"))
|
|
1700
|
+
for (m.push(p()); h()?.kind === "symbol" && h()?.value === ","; )
|
|
1701
|
+
C(), m.push(p());
|
|
1702
|
+
return S(")"), m;
|
|
1703
|
+
}, w = (m, d) => {
|
|
1704
|
+
const g = (v) => {
|
|
1705
|
+
const A = j(t, v);
|
|
1706
|
+
if (typeof A != "function") throw new TypeError(`${v} is not supported`);
|
|
1707
|
+
return A;
|
|
1693
1708
|
};
|
|
1694
|
-
switch (
|
|
1709
|
+
switch (m) {
|
|
1695
1710
|
case "translate": {
|
|
1696
|
-
const
|
|
1697
|
-
if (
|
|
1698
|
-
if (
|
|
1699
|
-
if (
|
|
1711
|
+
const v = g("CSSTranslate");
|
|
1712
|
+
if (d.length === 1) return new v(d[0], c());
|
|
1713
|
+
if (d.length === 2) return new v(d[0], d[1]);
|
|
1714
|
+
if (d.length === 3) return new v(d[0], d[1], d[2]);
|
|
1700
1715
|
throw new SyntaxError("translate() expects 1..3 args");
|
|
1701
1716
|
}
|
|
1702
1717
|
case "translatex":
|
|
1703
|
-
return new (
|
|
1718
|
+
return new (g("CSSTranslate"))(d[0], c());
|
|
1704
1719
|
case "translatey":
|
|
1705
|
-
return new (
|
|
1720
|
+
return new (g("CSSTranslate"))(c(), d[0]);
|
|
1706
1721
|
case "translatez":
|
|
1707
|
-
return new (
|
|
1722
|
+
return new (g("CSSTranslate"))(c(), c(), d[0]);
|
|
1708
1723
|
case "translate3d":
|
|
1709
|
-
if (
|
|
1710
|
-
return new (
|
|
1724
|
+
if (d.length !== 3) throw new SyntaxError("translate3d() expects 3 args");
|
|
1725
|
+
return new (g("CSSTranslate"))(d[0], d[1], d[2]);
|
|
1711
1726
|
case "scale": {
|
|
1712
|
-
const
|
|
1713
|
-
if (
|
|
1714
|
-
if (
|
|
1715
|
-
if (
|
|
1727
|
+
const v = g("CSSScale");
|
|
1728
|
+
if (d.length === 1) return new v(d[0], d[0]);
|
|
1729
|
+
if (d.length === 2) return new v(d[0], d[1]);
|
|
1730
|
+
if (d.length === 3) return new v(d[0], d[1], d[2]);
|
|
1716
1731
|
throw new SyntaxError("scale() expects 1..3 args");
|
|
1717
1732
|
}
|
|
1718
1733
|
case "scalex":
|
|
1719
|
-
return new (
|
|
1734
|
+
return new (g("CSSScale"))(d[0], u());
|
|
1720
1735
|
case "scaley":
|
|
1721
|
-
return new (
|
|
1736
|
+
return new (g("CSSScale"))(u(), d[0]);
|
|
1722
1737
|
case "scalez":
|
|
1723
|
-
return new (
|
|
1738
|
+
return new (g("CSSScale"))(u(), u(), d[0]);
|
|
1724
1739
|
case "scale3d":
|
|
1725
|
-
if (
|
|
1726
|
-
return new (
|
|
1740
|
+
if (d.length !== 3) throw new SyntaxError("scale3d() expects 3 args");
|
|
1741
|
+
return new (g("CSSScale"))(d[0], d[1], d[2]);
|
|
1727
1742
|
case "rotate": {
|
|
1728
|
-
const
|
|
1729
|
-
if (
|
|
1730
|
-
if (
|
|
1743
|
+
const v = g("CSSRotate");
|
|
1744
|
+
if (d.length === 1) return new v(d[0]);
|
|
1745
|
+
if (d.length === 4) return new v(d[0], d[1], d[2], d[3]);
|
|
1731
1746
|
throw new SyntaxError("rotate() expects 1 or 4 args");
|
|
1732
1747
|
}
|
|
1733
1748
|
case "rotatex":
|
|
1734
|
-
return new (
|
|
1749
|
+
return new (g("CSSRotate"))(u(), M(t, "number", 0), M(t, "number", 0), d[0]);
|
|
1735
1750
|
case "rotatey":
|
|
1736
|
-
return new (
|
|
1751
|
+
return new (g("CSSRotate"))(M(t, "number", 0), u(), M(t, "number", 0), d[0]);
|
|
1737
1752
|
case "rotatez":
|
|
1738
|
-
return new (
|
|
1753
|
+
return new (g("CSSRotate"))(M(t, "number", 0), M(t, "number", 0), u(), d[0]);
|
|
1739
1754
|
case "rotate3d":
|
|
1740
|
-
if (
|
|
1741
|
-
return new (
|
|
1755
|
+
if (d.length !== 4) throw new SyntaxError("rotate3d() expects 4 args");
|
|
1756
|
+
return new (g("CSSRotate"))(d[0], d[1], d[2], d[3]);
|
|
1742
1757
|
case "skew": {
|
|
1743
|
-
const
|
|
1744
|
-
if (
|
|
1745
|
-
if (
|
|
1758
|
+
const v = g("CSSSkew");
|
|
1759
|
+
if (d.length === 1) return new v(d[0], M(t, "deg", 0));
|
|
1760
|
+
if (d.length === 2) return new v(d[0], d[1]);
|
|
1746
1761
|
throw new SyntaxError("skew() expects 1..2 args");
|
|
1747
1762
|
}
|
|
1748
1763
|
case "skewx":
|
|
1749
|
-
return new (
|
|
1764
|
+
return new (g("CSSSkewX"))(d[0]);
|
|
1750
1765
|
case "skewy":
|
|
1751
|
-
return new (
|
|
1766
|
+
return new (g("CSSSkewY"))(d[0]);
|
|
1752
1767
|
case "perspective":
|
|
1753
|
-
return new (
|
|
1768
|
+
return new (g("CSSPerspective"))(d[0]);
|
|
1754
1769
|
default:
|
|
1755
|
-
throw new SyntaxError(`Unsupported transform function "${
|
|
1770
|
+
throw new SyntaxError(`Unsupported transform function "${m}"`);
|
|
1756
1771
|
}
|
|
1757
1772
|
};
|
|
1758
|
-
for (;
|
|
1759
|
-
const
|
|
1760
|
-
if (
|
|
1761
|
-
const
|
|
1762
|
-
|
|
1763
|
-
}
|
|
1764
|
-
if (
|
|
1765
|
-
const k =
|
|
1773
|
+
for (; f < o.length; ) {
|
|
1774
|
+
const m = C();
|
|
1775
|
+
if (m.kind !== "identifier") throw new SyntaxError("Expected a transform function name");
|
|
1776
|
+
const d = y();
|
|
1777
|
+
a.push(w(m.value, d));
|
|
1778
|
+
}
|
|
1779
|
+
if (a.length === 0) throw new SyntaxError("Empty transform list");
|
|
1780
|
+
const k = j(t, "CSSTransformValue");
|
|
1766
1781
|
if (typeof k != "function") throw new TypeError("CSSTransformValue is not supported");
|
|
1767
1782
|
return {
|
|
1768
|
-
root: new k(
|
|
1783
|
+
root: new k(a),
|
|
1769
1784
|
leaves: i
|
|
1770
1785
|
};
|
|
1771
|
-
},
|
|
1786
|
+
}, xt = (e, t, r, n, o) => Un(e) ? Bn(t, r, n, o) : In(t, r, n, o), Pe = (e, t) => {
|
|
1772
1787
|
for (const r of t) {
|
|
1773
1788
|
const n = e.get(r.slot.marker);
|
|
1774
1789
|
n ? n.push(r) : e.set(r.slot.marker, [r]);
|
|
1775
1790
|
}
|
|
1776
|
-
},
|
|
1791
|
+
}, Oe = (e, t, r) => e.map((n) => ({
|
|
1777
1792
|
slot: n.slot,
|
|
1778
1793
|
value: n.value,
|
|
1779
1794
|
property: t,
|
|
1780
1795
|
root: r
|
|
1781
|
-
})),
|
|
1782
|
-
const
|
|
1783
|
-
|
|
1784
|
-
const
|
|
1796
|
+
})), _n = (e, t, r, n, o, i) => {
|
|
1797
|
+
const a = e.ownerDocument.createElement("span");
|
|
1798
|
+
a.style.cssText = t, Hr(e, "");
|
|
1799
|
+
const s = e, l = s.attributeStyleMap ?? s.styleMap, c = e.ownerDocument.defaultView ?? globalThis, u = c?.CSSStyleValue ?? globalThis.CSSStyleValue, f = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Set(), C = [], S = /* @__PURE__ */ new Set();
|
|
1785
1800
|
for (const p of i) {
|
|
1786
|
-
let
|
|
1787
|
-
for (let
|
|
1788
|
-
const k =
|
|
1789
|
-
if (
|
|
1790
|
-
|
|
1801
|
+
let y = null;
|
|
1802
|
+
for (let w = 0; w < a.style.length; w++) {
|
|
1803
|
+
const k = a.style.item(w), m = a.style.getPropertyValue(k);
|
|
1804
|
+
if (Le(m, p.marker)) {
|
|
1805
|
+
y = {
|
|
1791
1806
|
mode: "property",
|
|
1792
1807
|
target: k
|
|
1793
|
-
}, e.style.setProperty(k,
|
|
1808
|
+
}, e.style.setProperty(k, Ct(p.value.value)), S.add(k);
|
|
1794
1809
|
break;
|
|
1795
1810
|
}
|
|
1796
|
-
if (
|
|
1797
|
-
|
|
1811
|
+
if ($e(m, p.marker, p.multipliedByUnit)) {
|
|
1812
|
+
y = {
|
|
1798
1813
|
mode: "property",
|
|
1799
1814
|
target: k,
|
|
1800
1815
|
unit: p.multipliedByUnit
|
|
1801
|
-
}, e.style.setProperty(k,
|
|
1816
|
+
}, e.style.setProperty(k, Ct(p.value.value, p.multipliedByUnit)), S.add(k);
|
|
1802
1817
|
break;
|
|
1803
1818
|
}
|
|
1804
1819
|
}
|
|
1805
|
-
if (!
|
|
1806
|
-
const
|
|
1807
|
-
|
|
1820
|
+
if (!y) {
|
|
1821
|
+
const w = Number(p.value.value) || 0;
|
|
1822
|
+
Fn(c, p.marker, w), e.style.setProperty(p.marker, String(w)), y = {
|
|
1808
1823
|
mode: "custom-property",
|
|
1809
1824
|
target: p.marker
|
|
1810
1825
|
};
|
|
1811
1826
|
}
|
|
1812
|
-
|
|
1827
|
+
C.push(p.value.attach(e, y));
|
|
1813
1828
|
}
|
|
1814
|
-
for (let p = 0; p <
|
|
1815
|
-
const
|
|
1816
|
-
if (
|
|
1817
|
-
const
|
|
1818
|
-
if (
|
|
1819
|
-
e.style.setProperty(
|
|
1829
|
+
for (let p = 0; p < a.style.length; p++) {
|
|
1830
|
+
const y = a.style.item(p);
|
|
1831
|
+
if (S.has(y)) continue;
|
|
1832
|
+
const w = a.style.getPropertyValue(y), k = a.style.getPropertyPriority(y), m = r.filter((E) => mt(w, E.marker)), d = n.filter((E) => mt(w, E.marker));
|
|
1833
|
+
if (m.length === 0 && d.length === 0) {
|
|
1834
|
+
e.style.setProperty(y, w, k);
|
|
1820
1835
|
continue;
|
|
1821
1836
|
}
|
|
1822
|
-
const
|
|
1823
|
-
let
|
|
1824
|
-
if (
|
|
1825
|
-
const
|
|
1826
|
-
if (
|
|
1827
|
-
const
|
|
1828
|
-
l.set(
|
|
1829
|
-
slot:
|
|
1830
|
-
value:
|
|
1831
|
-
}],
|
|
1832
|
-
} else if (
|
|
1833
|
-
const
|
|
1834
|
-
l.set(
|
|
1835
|
-
slot:
|
|
1836
|
-
value:
|
|
1837
|
-
}],
|
|
1837
|
+
const g = l?.set && !k && !y.startsWith("--");
|
|
1838
|
+
let v = !1;
|
|
1839
|
+
if (g && d.length > 0) try {
|
|
1840
|
+
const E = d.length === 1 && m.length === 0 ? d[0] : null;
|
|
1841
|
+
if (E && $e(w, E.marker, E.multipliedByUnit)) {
|
|
1842
|
+
const x = M(c, E.multipliedByUnit, re(E));
|
|
1843
|
+
l.set(y, x), Pe(f, Oe([{
|
|
1844
|
+
slot: E,
|
|
1845
|
+
value: x
|
|
1846
|
+
}], y, x)), v = !0;
|
|
1847
|
+
} else if (E && Le(w, E.marker)) {
|
|
1848
|
+
const x = M(c, "number", re(E));
|
|
1849
|
+
l.set(y, x), Pe(f, Oe([{
|
|
1850
|
+
slot: E,
|
|
1851
|
+
value: x
|
|
1852
|
+
}], y, x)), v = !0;
|
|
1838
1853
|
} else {
|
|
1839
|
-
const
|
|
1840
|
-
l.set(
|
|
1854
|
+
const x = xt(y, w, c, d, m);
|
|
1855
|
+
l.set(y, x.root), Pe(f, Oe(x.leaves, y, x.root)), v = !0;
|
|
1841
1856
|
}
|
|
1842
1857
|
} catch {
|
|
1843
1858
|
}
|
|
1844
|
-
if (
|
|
1845
|
-
if (
|
|
1846
|
-
const
|
|
1847
|
-
if (
|
|
1848
|
-
l.set(
|
|
1849
|
-
else if (
|
|
1850
|
-
const
|
|
1851
|
-
if (typeof
|
|
1852
|
-
const
|
|
1853
|
-
l.set(
|
|
1859
|
+
if (v) continue;
|
|
1860
|
+
if (g && d.length === 0 && m.length > 0) try {
|
|
1861
|
+
const E = m.length === 1 ? m[0] : null;
|
|
1862
|
+
if (E && Le(w, E.marker))
|
|
1863
|
+
l.set(y, E.value), v = !0;
|
|
1864
|
+
else if (E && $e(w, E.marker, E.multipliedByUnit)) {
|
|
1865
|
+
const x = j(c, "CSSMathProduct");
|
|
1866
|
+
if (typeof x != "function") throw new TypeError("CSSMathProduct is not supported");
|
|
1867
|
+
const lr = new x(E.value, M(c, E.multipliedByUnit, 1));
|
|
1868
|
+
l.set(y, lr), v = !0;
|
|
1854
1869
|
} else {
|
|
1855
1870
|
try {
|
|
1856
|
-
const
|
|
1857
|
-
l.set(
|
|
1871
|
+
const x = xt(y, w, c, [], m);
|
|
1872
|
+
l.set(y, x.root);
|
|
1858
1873
|
} catch {
|
|
1859
|
-
const
|
|
1860
|
-
|
|
1874
|
+
const x = Et(w, m);
|
|
1875
|
+
On(l, u, y, x);
|
|
1861
1876
|
}
|
|
1862
|
-
|
|
1877
|
+
v = !0;
|
|
1863
1878
|
}
|
|
1864
1879
|
} catch {
|
|
1865
1880
|
}
|
|
1866
|
-
if (
|
|
1867
|
-
const
|
|
1868
|
-
e.style.setProperty(
|
|
1869
|
-
for (const
|
|
1881
|
+
if (v) continue;
|
|
1882
|
+
const A = Et(w, m);
|
|
1883
|
+
e.style.setProperty(y, A, k);
|
|
1884
|
+
for (const E of d) h.add(E.marker);
|
|
1870
1885
|
}
|
|
1871
1886
|
for (const p of n) {
|
|
1872
|
-
const
|
|
1873
|
-
if (
|
|
1874
|
-
const k =
|
|
1875
|
-
if (
|
|
1876
|
-
const
|
|
1877
|
-
for (const
|
|
1878
|
-
|
|
1879
|
-
if (l?.set) for (const [
|
|
1887
|
+
const y = f.get(p.marker) ?? [], w = h.has(p.marker);
|
|
1888
|
+
if (y.length === 0 && !w) continue;
|
|
1889
|
+
const k = De(e, p.marker, p.value, function(...m) {
|
|
1890
|
+
if (y.length > 0) try {
|
|
1891
|
+
const d = re(p), g = /* @__PURE__ */ new Map();
|
|
1892
|
+
for (const v of y)
|
|
1893
|
+
v.value.value = d, g.set(v.property, v.root);
|
|
1894
|
+
if (l?.set) for (const [v, A] of g) l.set(v, A);
|
|
1880
1895
|
} catch {
|
|
1881
1896
|
}
|
|
1882
|
-
|
|
1897
|
+
w && St.apply(this, m);
|
|
1883
1898
|
});
|
|
1884
|
-
|
|
1899
|
+
C.push(k);
|
|
1885
1900
|
}
|
|
1886
|
-
for (const p of
|
|
1887
|
-
if (n.some((
|
|
1888
|
-
const
|
|
1889
|
-
|
|
1901
|
+
for (const p of h) {
|
|
1902
|
+
if (n.some((w) => w.marker === p)) continue;
|
|
1903
|
+
const y = o.get(p);
|
|
1904
|
+
y != null && C.push(De(e, p, y, St));
|
|
1890
1905
|
}
|
|
1891
|
-
return
|
|
1892
|
-
for (const p of
|
|
1906
|
+
return Wr(e), () => {
|
|
1907
|
+
for (const p of C) p?.();
|
|
1893
1908
|
};
|
|
1894
|
-
},
|
|
1909
|
+
}, K = (e) => {
|
|
1895
1910
|
const [t, r, n] = e, o = document.createElement("div");
|
|
1896
1911
|
return t(o), o.style.cssText;
|
|
1897
|
-
},
|
|
1898
|
-
const r =
|
|
1899
|
-
for (let
|
|
1900
|
-
if (
|
|
1901
|
-
const
|
|
1902
|
-
if (
|
|
1912
|
+
}, je = (e, ...t) => {
|
|
1913
|
+
const r = $n++, n = [], o = /* @__PURE__ */ new Map(), i = [], a = [], s = [], l = [], c = new Array(e.length).fill(0);
|
|
1914
|
+
for (let f = 0; f < e.length; f++) {
|
|
1915
|
+
if (s.push(e[f].slice(c[f])), f >= t.length) continue;
|
|
1916
|
+
const h = t[f], C = e[f + 1] ?? "", S = Kr(C);
|
|
1917
|
+
if ($(h)) {
|
|
1903
1918
|
const p = `--fest-typed-${r}-${i.length}`;
|
|
1904
1919
|
i.push({
|
|
1905
1920
|
marker: p,
|
|
1906
|
-
value:
|
|
1907
|
-
multipliedByUnit:
|
|
1908
|
-
}),
|
|
1921
|
+
value: h,
|
|
1922
|
+
multipliedByUnit: S?.normalized
|
|
1923
|
+
}), S ? (s.push(`calc(var(${p}) * 1${S.authored})`), c[f + 1] += S.length) : s.push(`var(${p})`);
|
|
1909
1924
|
continue;
|
|
1910
1925
|
}
|
|
1911
|
-
if (
|
|
1926
|
+
if (Ln(h)) {
|
|
1912
1927
|
const p = `--fest-anim-${r}-${l.length}`;
|
|
1913
|
-
|
|
1928
|
+
S ? (s.push(`calc(var(${p}) * 1${S.authored})`), c[f + 1] += S.length) : s.push(`var(${p})`), n.push(`@property ${p} { syntax: "<number>"; initial-value: ${Number(h.value) || 0}; inherits: false; };`), l.push({
|
|
1914
1929
|
marker: p,
|
|
1915
|
-
value:
|
|
1916
|
-
multipliedByUnit:
|
|
1930
|
+
value: h,
|
|
1931
|
+
multipliedByUnit: S?.normalized
|
|
1917
1932
|
});
|
|
1918
1933
|
continue;
|
|
1919
1934
|
}
|
|
1920
|
-
if (
|
|
1921
|
-
const p = `--fest-ref-${r}-${
|
|
1922
|
-
|
|
1935
|
+
if (fe(h)) {
|
|
1936
|
+
const p = `--fest-ref-${r}-${a.length}`;
|
|
1937
|
+
a.push({
|
|
1923
1938
|
marker: p,
|
|
1924
|
-
value:
|
|
1925
|
-
multipliedByUnit:
|
|
1926
|
-
}),
|
|
1927
|
-
const
|
|
1928
|
-
n.push(`@property ${p} { syntax: "<number>"; initial-value: ${
|
|
1939
|
+
value: h,
|
|
1940
|
+
multipliedByUnit: S?.normalized
|
|
1941
|
+
}), S ? (s.push(`calc(var(${p}) * 1${S.authored})`), c[f + 1] += S.length) : s.push(`var(${p})`);
|
|
1942
|
+
const y = Pn(h);
|
|
1943
|
+
n.push(`@property ${p} { syntax: "<number>"; initial-value: ${y}; inherits: true; };`), o.set(p, h);
|
|
1929
1944
|
continue;
|
|
1930
1945
|
}
|
|
1931
|
-
typeof
|
|
1946
|
+
typeof h != "object" && typeof h != "function" && h != null && String(h).trim() !== "" && s.push(String(h));
|
|
1932
1947
|
}
|
|
1933
1948
|
const u = [
|
|
1934
|
-
(
|
|
1949
|
+
(f) => _n(f, s.join(""), i, a, o, l),
|
|
1935
1950
|
n,
|
|
1936
1951
|
o
|
|
1937
1952
|
];
|
|
1938
|
-
return u[Symbol.toStringTag] = () =>
|
|
1939
|
-
get: () =>
|
|
1940
|
-
set: (
|
|
1941
|
-
console.log("set cssText",
|
|
1942
|
-
const [
|
|
1943
|
-
|
|
1953
|
+
return u[Symbol.toStringTag] = () => K(u), u[Symbol.toPrimitive] = (f) => f === "string" ? K(u) : u[0], u.toString = () => K(u), u.valueOf = () => K(u), Object.defineProperty(u, "cssText", {
|
|
1954
|
+
get: () => K(u),
|
|
1955
|
+
set: (f) => {
|
|
1956
|
+
console.log("set cssText", f);
|
|
1957
|
+
const [h, C, S] = u, p = document.createElement("div");
|
|
1958
|
+
h(p), p.style.cssText = f;
|
|
1944
1959
|
},
|
|
1945
1960
|
configurable: !0,
|
|
1946
1961
|
enumerable: !0
|
|
1947
1962
|
}), u;
|
|
1948
|
-
},
|
|
1963
|
+
}, jo = (e, ...t) => je(e, ...t), Nn = (e, t) => {
|
|
1949
1964
|
const r = [], n = [], o = /#\{(\d+)\}/g;
|
|
1950
|
-
let i = 0,
|
|
1951
|
-
for (; (
|
|
1952
|
-
const
|
|
1953
|
-
!Number.isSafeInteger(
|
|
1965
|
+
let i = 0, a;
|
|
1966
|
+
for (; (a = o.exec(e)) != null; ) {
|
|
1967
|
+
const s = Number.parseInt(a[1], 10);
|
|
1968
|
+
!Number.isSafeInteger(s) || s < 0 || (r.push(e.slice(i, a.index)), n.push(t[s]), i = a.index + a[0].length);
|
|
1954
1969
|
}
|
|
1955
1970
|
return n.length === 0 ? null : (r.push(e.slice(i)), {
|
|
1956
1971
|
strings: r,
|
|
1957
1972
|
values: n
|
|
1958
1973
|
});
|
|
1959
|
-
},
|
|
1974
|
+
}, Vn = (e, t) => {
|
|
1960
1975
|
let r = e[0] ?? "";
|
|
1961
1976
|
for (let n = 0; n < t.length; n++) {
|
|
1962
1977
|
const o = t[n];
|
|
1963
1978
|
o != null && (r += String(o)), r += e[n + 1] ?? "";
|
|
1964
1979
|
}
|
|
1965
1980
|
return r;
|
|
1966
|
-
},
|
|
1967
|
-
const r =
|
|
1981
|
+
}, qo = (e, t) => {
|
|
1982
|
+
const r = Nn(e, t);
|
|
1968
1983
|
if (!r) return null;
|
|
1969
1984
|
const { strings: n, values: o } = r;
|
|
1970
|
-
return o.length === 1 && (n[0] ?? "").trim() === "" && (n[1] ?? "").trim() === "" && !
|
|
1985
|
+
return o.length === 1 && (n[0] ?? "").trim() === "" && (n[1] ?? "").trim() === "" && !yt(o[0]) && !$(o[0]) ? zr(o[0]) ? {
|
|
1971
1986
|
kind: "template",
|
|
1972
1987
|
binding: o[0]
|
|
1973
1988
|
} : {
|
|
1974
1989
|
kind: "direct",
|
|
1975
1990
|
value: o[0]
|
|
1976
|
-
} : o.some((i) =>
|
|
1991
|
+
} : o.some((i) => fe(i) || $(i)) ? {
|
|
1977
1992
|
kind: "template",
|
|
1978
|
-
binding:
|
|
1979
|
-
} : o.every(
|
|
1993
|
+
binding: je(n, ...o)
|
|
1994
|
+
} : o.every(yt) ? {
|
|
1980
1995
|
kind: "static",
|
|
1981
|
-
cssText:
|
|
1996
|
+
cssText: Vn(n, o)
|
|
1982
1997
|
} : {
|
|
1983
1998
|
kind: "template",
|
|
1984
|
-
binding:
|
|
1999
|
+
binding: je(n, ...o)
|
|
1985
2000
|
};
|
|
1986
|
-
},
|
|
2001
|
+
}, zo = (e, t) => {
|
|
1987
2002
|
const r = Array.isArray(t) ? t[0] : t;
|
|
1988
2003
|
if (typeof r != "function") return () => {
|
|
1989
2004
|
};
|
|
@@ -1995,9 +2010,9 @@ var jt = (e, t) => {
|
|
|
1995
2010
|
}
|
|
1996
2011
|
n?.unbind?.();
|
|
1997
2012
|
};
|
|
1998
|
-
},
|
|
1999
|
-
if (!
|
|
2000
|
-
|
|
2013
|
+
}, Fn = (e, t, r) => {
|
|
2014
|
+
if (!lt.has(t)) {
|
|
2015
|
+
lt.add(t);
|
|
2001
2016
|
try {
|
|
2002
2017
|
(e?.CSS ?? CSS)?.registerProperty?.({
|
|
2003
2018
|
name: t,
|
|
@@ -2008,66 +2023,82 @@ var jt = (e, t) => {
|
|
|
2008
2023
|
} catch {
|
|
2009
2024
|
}
|
|
2010
2025
|
}
|
|
2011
|
-
},
|
|
2012
|
-
|
|
2026
|
+
}, Xe = (e, t) => {
|
|
2027
|
+
if (t instanceof Map && t.size > 0) return Array.from(t.values());
|
|
2028
|
+
const r = e.keyframes?.properties;
|
|
2029
|
+
if (r instanceof Map && r.size > 0) return Array.from(r.values());
|
|
2030
|
+
const n = [];
|
|
2013
2031
|
if (typeof e.properties == "string") {
|
|
2014
|
-
const
|
|
2015
|
-
|
|
2016
|
-
if (
|
|
2017
|
-
const
|
|
2018
|
-
return {
|
|
2032
|
+
const o = e.properties?.trim?.()?.split?.(";");
|
|
2033
|
+
return n.push(...Array.from(o || [])?.map?.((i) => {
|
|
2034
|
+
if (i?.includes?.(":")) {
|
|
2035
|
+
const a = (i?.split?.(":") ?? [])?.slice?.(1, -1)?.join?.(":");
|
|
2036
|
+
return {
|
|
2037
|
+
property: i?.[0]?.trim?.(),
|
|
2038
|
+
values: [a?.trim?.()]
|
|
2039
|
+
};
|
|
2019
2040
|
}
|
|
2020
2041
|
return null;
|
|
2021
|
-
})?.filter?.((
|
|
2042
|
+
})?.filter?.((i) => i != null) || []), n;
|
|
2022
2043
|
}
|
|
2023
|
-
return Array.
|
|
2024
|
-
|
|
2044
|
+
return Array.isArray(e.properties) ? e.properties.map((o, i) => {
|
|
2045
|
+
if (o && Array.isArray(o.values) && o.property) return o;
|
|
2046
|
+
const a = Object.entries(o || {}).filter(([l]) => l !== "offset" && l !== "easing"), s = a[0]?.[1];
|
|
2047
|
+
return {
|
|
2048
|
+
property: a[0]?.[0] ?? `p${i}`,
|
|
2049
|
+
values: s == null ? [] : Array.isArray(s) ? s : [s]
|
|
2050
|
+
};
|
|
2051
|
+
}) : e.properties && typeof e.properties == "object" ? Object.entries(e.properties).map(([o, i]) => ({
|
|
2052
|
+
property: o,
|
|
2053
|
+
values: Array.isArray(i) ? i : [i]
|
|
2054
|
+
})) : n;
|
|
2055
|
+
}, Dn = (e, t) => {
|
|
2025
2056
|
const r = /* @__PURE__ */ new Map();
|
|
2026
2057
|
let n = "";
|
|
2027
2058
|
for (let i = 0; i < e.length; i++)
|
|
2028
2059
|
n += e[i], i < t.length && (n += `__SLOT_${i}__`);
|
|
2029
2060
|
const o = n.split(";").map((i) => i.trim()).filter(Boolean);
|
|
2030
2061
|
for (const i of o) {
|
|
2031
|
-
const
|
|
2032
|
-
if (
|
|
2033
|
-
const
|
|
2062
|
+
const a = i.indexOf(":");
|
|
2063
|
+
if (a === -1) continue;
|
|
2064
|
+
const s = i.slice(0, a).trim(), l = i.slice(a + 1).trim(), c = /__SLOT_(\d+)__/.exec(l);
|
|
2034
2065
|
if (!c) continue;
|
|
2035
2066
|
const u = t[parseInt(c[1], 10)];
|
|
2036
|
-
if (!Array.isArray(u)) throw new TypeError(`A\`${
|
|
2037
|
-
r.set(
|
|
2038
|
-
property:
|
|
2067
|
+
if (!Array.isArray(u)) throw new TypeError(`A\`${s}\` expects an array of values, got ${typeof u}`);
|
|
2068
|
+
r.set(s, {
|
|
2069
|
+
property: s,
|
|
2039
2070
|
values: u
|
|
2040
2071
|
});
|
|
2041
2072
|
}
|
|
2042
2073
|
return { properties: r };
|
|
2043
|
-
},
|
|
2074
|
+
}, Je = (e) => {
|
|
2044
2075
|
const t = [], r = [];
|
|
2045
2076
|
let n = !1;
|
|
2046
2077
|
for (let o = 0; o < e.length; o++) {
|
|
2047
2078
|
const i = e[o];
|
|
2048
|
-
|
|
2079
|
+
fe(i) ? (n = !0, r.push(o), t.push(i.value)) : ($(i), t.push(i));
|
|
2049
2080
|
}
|
|
2050
2081
|
return {
|
|
2051
2082
|
resolved: t,
|
|
2052
2083
|
hasReactive: n,
|
|
2053
2084
|
reactiveIndices: r
|
|
2054
2085
|
};
|
|
2055
|
-
},
|
|
2056
|
-
const
|
|
2057
|
-
if (
|
|
2058
|
-
const
|
|
2059
|
-
for (let s = 0; s <
|
|
2060
|
-
const
|
|
2061
|
-
for (const
|
|
2062
|
-
const { resolved:
|
|
2063
|
-
let
|
|
2064
|
-
|
|
2065
|
-
}
|
|
2066
|
-
|
|
2067
|
-
}
|
|
2068
|
-
return
|
|
2069
|
-
},
|
|
2070
|
-
const t =
|
|
2086
|
+
}, ve = (e, t) => {
|
|
2087
|
+
const r = e?.offsets, n = Xe(e, t);
|
|
2088
|
+
if (n.length === 0) throw new Error("No animatable properties found in A template");
|
|
2089
|
+
const o = Math.max(...n.map((s) => s.values.length)), i = (r?.length > 1 ? r : null) || Array.from({ length: o }, (s, l) => l / (o - 1)), a = [];
|
|
2090
|
+
for (let s = 0; s < o; s++) {
|
|
2091
|
+
const l = { offset: i[s] ?? s / (o - 1) };
|
|
2092
|
+
for (const c of n) {
|
|
2093
|
+
const { resolved: u } = Je(c.values), f = ce(c.property);
|
|
2094
|
+
let h = u[Math.min(s, u.length - 1)];
|
|
2095
|
+
$(h) && (h = String(h)), l[f] = h;
|
|
2096
|
+
}
|
|
2097
|
+
a.push(l);
|
|
2098
|
+
}
|
|
2099
|
+
return a;
|
|
2100
|
+
}, et = (e) => {
|
|
2101
|
+
const t = B(e.duration ?? 300), r = B(e.delay ?? 0), n = Nt(e.iterationCount);
|
|
2071
2102
|
return {
|
|
2072
2103
|
duration: t,
|
|
2073
2104
|
delay: r,
|
|
@@ -2078,241 +2109,612 @@ var jt = (e, t) => {
|
|
|
2078
2109
|
easing: typeof e.easing == "string" ? e.easing : "linear",
|
|
2079
2110
|
timeline: e.timeline
|
|
2080
2111
|
};
|
|
2081
|
-
},
|
|
2082
|
-
const r =
|
|
2112
|
+
}, jn = (e, t) => {
|
|
2113
|
+
const r = Xe(t), n = [], o = ve(t), i = et(t), a = e.animate(o, i);
|
|
2083
2114
|
for (const l of r) {
|
|
2084
|
-
const { hasReactive: c, reactiveIndices: u } =
|
|
2115
|
+
const { hasReactive: c, reactiveIndices: u } = Je(l.values);
|
|
2085
2116
|
if (c)
|
|
2086
|
-
for (const
|
|
2087
|
-
const
|
|
2088
|
-
const
|
|
2089
|
-
|
|
2117
|
+
for (const f of u) {
|
|
2118
|
+
const h = l.values[f], C = De(e, `--anim-${l.property}-${f}`, h, () => {
|
|
2119
|
+
const S = ve(t), p = a.currentTime;
|
|
2120
|
+
a.effect = new KeyframeEffect(e, S, i), p !== null && (a.currentTime = p);
|
|
2090
2121
|
});
|
|
2091
|
-
n.push(
|
|
2122
|
+
n.push(C);
|
|
2092
2123
|
}
|
|
2093
2124
|
}
|
|
2094
2125
|
return {
|
|
2095
|
-
animation:
|
|
2126
|
+
animation: a,
|
|
2096
2127
|
cleanup: () => {
|
|
2097
|
-
|
|
2128
|
+
a.cancel(), n.forEach((l) => l());
|
|
2098
2129
|
}
|
|
2099
2130
|
};
|
|
2100
|
-
},
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2131
|
+
}, Wo = (e, ...t) => Dn(e, t), _ = (e, t, r) => {
|
|
2132
|
+
const n = e != null && typeof e.animate == "function";
|
|
2133
|
+
if (!(typeof Element < "u" && e instanceof Element) && !n) throw new TypeError("doAnimation requires an Element");
|
|
2134
|
+
if (Xe(t, r).some((l) => {
|
|
2135
|
+
const { hasReactive: c } = Je(l.values);
|
|
2136
|
+
return c;
|
|
2137
|
+
})) return jn(e, t);
|
|
2138
|
+
const o = ve(t, r), i = et(t), a = e.animate(o, i);
|
|
2106
2139
|
return {
|
|
2107
|
-
animation:
|
|
2140
|
+
animation: a,
|
|
2108
2141
|
cleanup: () => {
|
|
2109
|
-
|
|
2142
|
+
a.cancel();
|
|
2110
2143
|
}
|
|
2111
2144
|
};
|
|
2112
|
-
},
|
|
2113
|
-
const r = /* @__PURE__ */ new Map();
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2145
|
+
}, qn = (e, t) => {
|
|
2146
|
+
const r = /* @__PURE__ */ new Map(), n = t.properties;
|
|
2147
|
+
if (n == null || typeof n == "string" || Array.isArray(n)) return _(e, t);
|
|
2148
|
+
for (const [o, i] of Object.entries(n)) {
|
|
2149
|
+
if (!Array.isArray(i)) throw new TypeError(`animate() expects arrays of values, got ${typeof i} for ${o}`);
|
|
2150
|
+
r.set(o, {
|
|
2151
|
+
property: o,
|
|
2152
|
+
values: i
|
|
2119
2153
|
});
|
|
2120
2154
|
}
|
|
2121
|
-
return
|
|
2122
|
-
},
|
|
2155
|
+
return _(e, { ...t }, r);
|
|
2156
|
+
}, Ho = (e) => (t) => _(t, e), Ko = async (e, t) => {
|
|
2123
2157
|
for (const r of t) {
|
|
2124
|
-
const { animation: n } =
|
|
2158
|
+
const { animation: n } = _(e, r);
|
|
2125
2159
|
await n.finished;
|
|
2126
2160
|
}
|
|
2127
|
-
},
|
|
2128
|
-
const r = t.map((o) =>
|
|
2161
|
+
}, Yo = (e, t) => {
|
|
2162
|
+
const r = t.map((o) => _(e, o)), n = () => {
|
|
2129
2163
|
r.forEach((o) => o.cleanup());
|
|
2130
2164
|
};
|
|
2131
2165
|
return {
|
|
2132
2166
|
animations: r.map((o) => o.animation),
|
|
2133
2167
|
cleanup: n
|
|
2134
2168
|
};
|
|
2135
|
-
},
|
|
2136
|
-
const i =
|
|
2137
|
-
return
|
|
2169
|
+
}, Zo = (e, t, r = 100) => e.map((n, o) => {
|
|
2170
|
+
const i = B(t?.delay ?? 0) + o * r;
|
|
2171
|
+
return _(n, {
|
|
2138
2172
|
...t,
|
|
2139
2173
|
delay: i
|
|
2140
2174
|
});
|
|
2141
|
-
})
|
|
2175
|
+
}), zn = (e) => e != null && typeof e == "object" && !X(e) && !ne(e) && "value" in e, Wn = (e) => {
|
|
2176
|
+
const t = e.keyframes?.properties;
|
|
2177
|
+
if (t instanceof Map) return Array.from(t.values());
|
|
2178
|
+
const r = e.properties;
|
|
2179
|
+
if (typeof r == "string") throw new TypeError("string properties are not used on the CSS compile path");
|
|
2180
|
+
if (Array.isArray(r)) return r.map((n, o) => {
|
|
2181
|
+
if (n && Array.isArray(n.values) && n.property) return n;
|
|
2182
|
+
const i = Object.entries(n || {}).filter(([a]) => a !== "offset" && a !== "easing");
|
|
2183
|
+
return {
|
|
2184
|
+
property: i[0]?.[0] ?? `p${o}`,
|
|
2185
|
+
values: i[0] ? [i[0][1]] : []
|
|
2186
|
+
};
|
|
2187
|
+
});
|
|
2188
|
+
if (r && typeof r == "object") return Object.entries(r).map(([n, o]) => ({
|
|
2189
|
+
property: n,
|
|
2190
|
+
values: Array.isArray(o) ? o : [o]
|
|
2191
|
+
}));
|
|
2192
|
+
throw new TypeError("No animatable properties");
|
|
2193
|
+
}, Hn = (e) => {
|
|
2194
|
+
if (e == null) return "";
|
|
2195
|
+
const t = typeof Element < "u" && e instanceof Element;
|
|
2196
|
+
return typeof e == "object" && "value" in e && !t ? String(e.value ?? "") : String(e);
|
|
2197
|
+
}, or = (e) => {
|
|
2198
|
+
const t = Wn(e), r = Math.max(2, ...t.map((l) => l.values.length)), n = e.offsets ?? Array.from({ length: r }, (l, c) => c / (r - 1)), o = [];
|
|
2199
|
+
for (let l = 0; l < r; l++) {
|
|
2200
|
+
const c = [];
|
|
2201
|
+
for (const f of t) {
|
|
2202
|
+
const h = f.values[Math.min(l, f.values.length - 1)];
|
|
2203
|
+
c.push(`${ce(f.property)}: ${Hn(h)}`);
|
|
2204
|
+
}
|
|
2205
|
+
const u = Math.round((n[l] ?? l / (r - 1)) * 100);
|
|
2206
|
+
o.push(`${u}% { ${c.join("; ")}; }`);
|
|
2207
|
+
}
|
|
2208
|
+
const i = o.join("|");
|
|
2209
|
+
let a = 0;
|
|
2210
|
+
for (let l = 0; l < i.length; l++) a = a * 31 + i.charCodeAt(l) | 0;
|
|
2211
|
+
const s = `fest-anim-${(a >>> 0).toString(36)}`;
|
|
2212
|
+
return {
|
|
2213
|
+
name: s,
|
|
2214
|
+
cssText: `@keyframes ${s} {
|
|
2215
|
+
${o.join(`
|
|
2216
|
+
`)}
|
|
2217
|
+
}`,
|
|
2218
|
+
fingerprint: i
|
|
2219
|
+
};
|
|
2220
|
+
}, Kn = (e, t) => {
|
|
2221
|
+
const r = t.trigger ?? "mount";
|
|
2222
|
+
if (zn(r)) throw new TypeError("reactive { value } trigger is not valid on the CSS path");
|
|
2223
|
+
const n = or(t), o = `${B(t.duration, 300)}ms`, i = `${B(t.delay, 0)}ms`, a = Nt(t.iterationCount), s = {
|
|
2224
|
+
"animation-name": n.name,
|
|
2225
|
+
"animation-duration": o,
|
|
2226
|
+
"animation-delay": i,
|
|
2227
|
+
"animation-iteration-count": a === "Infinity" || a === 1 / 0 ? "infinite" : String(a),
|
|
2228
|
+
"animation-direction": t.direction ?? "normal",
|
|
2229
|
+
"animation-fill-mode": t.fillMode ?? "none",
|
|
2230
|
+
"animation-timing-function": typeof t.easing == "string" ? t.easing : "linear"
|
|
2231
|
+
};
|
|
2232
|
+
if (r === "hover")
|
|
2233
|
+
return t.reverseOnExit && (s["animation-trigger"] = `${N} play-backwards`), {
|
|
2234
|
+
selector: `${e}:hover`,
|
|
2235
|
+
properties: s
|
|
2236
|
+
};
|
|
2237
|
+
if (r === "focus") return {
|
|
2238
|
+
selector: `${e}:focus`,
|
|
2239
|
+
properties: s
|
|
2240
|
+
};
|
|
2241
|
+
if (r === "show") return {
|
|
2242
|
+
selector: `${e}:not([data-hidden])`,
|
|
2243
|
+
properties: s
|
|
2244
|
+
};
|
|
2245
|
+
if (r === "hide") return {
|
|
2246
|
+
selector: `${e}[data-hidden]`,
|
|
2247
|
+
properties: s
|
|
2248
|
+
};
|
|
2249
|
+
if (r === "remove") return {
|
|
2250
|
+
selector: `${e}[data-removing]`,
|
|
2251
|
+
properties: s
|
|
2252
|
+
};
|
|
2253
|
+
if (r === "manual")
|
|
2254
|
+
return s["animation-play-state"] = "paused", {
|
|
2255
|
+
selector: e,
|
|
2256
|
+
properties: s
|
|
2257
|
+
};
|
|
2258
|
+
if (r === "click")
|
|
2259
|
+
return s["event-trigger"] = `${N} click`, s["animation-trigger"] = `${N} play`, {
|
|
2260
|
+
selector: e,
|
|
2261
|
+
properties: s
|
|
2262
|
+
};
|
|
2263
|
+
if (r === "visible")
|
|
2264
|
+
return s["timeline-trigger"] = `${N} view contain`, s["animation-trigger"] = `${N} play`, {
|
|
2265
|
+
selector: e,
|
|
2266
|
+
properties: s
|
|
2267
|
+
};
|
|
2268
|
+
if (X(r) || ne(r)) {
|
|
2269
|
+
const l = ne(r) ? "view" : "scroll";
|
|
2270
|
+
return s["timeline-trigger"] = `${N} ${l}`, r.rangeStart && (s["animation-range-start"] = r.rangeStart), r.rangeEnd && (s["animation-range-end"] = r.rangeEnd), {
|
|
2271
|
+
selector: e,
|
|
2272
|
+
properties: s
|
|
2273
|
+
};
|
|
2274
|
+
}
|
|
2275
|
+
return {
|
|
2276
|
+
selector: e,
|
|
2277
|
+
properties: s
|
|
2278
|
+
};
|
|
2279
|
+
}, ir = (e, t) => {
|
|
2280
|
+
if (typeof Element < "u" && e instanceof Element) throw new TypeError("bindCssAnimation does not accept Element");
|
|
2281
|
+
if (typeof CSSStyleDeclaration < "u" && e instanceof CSSStyleDeclaration) {
|
|
2282
|
+
const r = e.parentRule;
|
|
2283
|
+
if (!r) throw new TypeError("CSSStyleDeclaration has no parentRule");
|
|
2284
|
+
return ir(r, t);
|
|
2285
|
+
}
|
|
2286
|
+
if (typeof CSSStyleRule < "u" && e instanceof CSSStyleRule) {
|
|
2287
|
+
const r = e.parentStyleSheet;
|
|
2288
|
+
if (!r) throw new TypeError("CSSStyleRule has no parentStyleSheet");
|
|
2289
|
+
return {
|
|
2290
|
+
sheet: r,
|
|
2291
|
+
rule: e,
|
|
2292
|
+
selector: e.selectorText
|
|
2293
|
+
};
|
|
2294
|
+
}
|
|
2295
|
+
if (typeof CSSStyleSheet < "u" && e instanceof CSSStyleSheet) {
|
|
2296
|
+
const r = t.selector;
|
|
2297
|
+
if (!r) throw new TypeError("CSSStyleSheet bind requires options.selector");
|
|
2298
|
+
return {
|
|
2299
|
+
sheet: e,
|
|
2300
|
+
rule: null,
|
|
2301
|
+
selector: r
|
|
2302
|
+
};
|
|
2303
|
+
}
|
|
2304
|
+
throw new TypeError("bindCssAnimation target must be a CSSStyleRule, CSSStyleSheet, or CSSStyleDeclaration");
|
|
2305
|
+
}, Yn = (e) => Object.entries(e).map(([t, r]) => `${t}: ${r};`).join(" "), Go = (e, t) => {
|
|
2306
|
+
const r = or(t);
|
|
2307
|
+
let n, o;
|
|
2308
|
+
if (e && typeof e.insertRule == "function" && e.cssRules && t.selector)
|
|
2309
|
+
n = e, o = t.selector;
|
|
2310
|
+
else {
|
|
2311
|
+
const S = ir(e, t);
|
|
2312
|
+
n = S.sheet, o = S.selector;
|
|
2313
|
+
}
|
|
2314
|
+
const i = Kn(o, t), a = Ke(n, "ux-anim") ?? n, s = a.insertRule ? a : n;
|
|
2315
|
+
let l = Ce.get(r.fingerprint);
|
|
2316
|
+
if (l)
|
|
2317
|
+
l.hosts.has(s) || (s.insertRule(r.cssText, s.cssRules?.length ?? 0), l.keyframesRule || (l.keyframesRule = s.cssRules?.[s.cssRules.length - 1]));
|
|
2318
|
+
else {
|
|
2319
|
+
s.insertRule(r.cssText, s.cssRules?.length ?? 0);
|
|
2320
|
+
const S = s.cssRules?.[s.cssRules.length - 1];
|
|
2321
|
+
l = {
|
|
2322
|
+
name: r.name,
|
|
2323
|
+
count: 0,
|
|
2324
|
+
keyframesRule: S,
|
|
2325
|
+
hosts: /* @__PURE__ */ new Set(),
|
|
2326
|
+
hostCounts: /* @__PURE__ */ new Map()
|
|
2327
|
+
}, Ce.set(r.fingerprint, l);
|
|
2328
|
+
}
|
|
2329
|
+
l.hostCounts ??= /* @__PURE__ */ new Map(), l.count += 1, l.hosts.add(s), l.hostCounts.set(s, (l.hostCounts.get(s) ?? 0) + 1);
|
|
2330
|
+
const c = `${i.selector} { ${Yn(i.properties)} }`, u = s.insertRule(c, s.cssRules?.length ?? 0), f = s.cssRules?.[u], h = (S) => {
|
|
2331
|
+
try {
|
|
2332
|
+
const p = Array.from(S.cssRules || []);
|
|
2333
|
+
let y = p.indexOf(l.keyframesRule);
|
|
2334
|
+
y < 0 && (y = p.findIndex((w) => String(w?.cssText || "").includes(`@keyframes ${l.name}`))), y >= 0 && S.deleteRule(y);
|
|
2335
|
+
} catch {
|
|
2336
|
+
}
|
|
2337
|
+
};
|
|
2338
|
+
let C = !1;
|
|
2339
|
+
return () => {
|
|
2340
|
+
if (C) return;
|
|
2341
|
+
C = !0;
|
|
2342
|
+
try {
|
|
2343
|
+
const p = Array.from(s.cssRules || []).indexOf(f);
|
|
2344
|
+
p >= 0 && s.deleteRule(p);
|
|
2345
|
+
} catch {
|
|
2346
|
+
}
|
|
2347
|
+
l.count -= 1;
|
|
2348
|
+
const S = (l.hostCounts?.get(s) ?? 1) - 1;
|
|
2349
|
+
if (S <= 0 ? (l.hostCounts?.delete(s), l.hosts.delete(s), h(s)) : l.hostCounts?.set(s, S), l.count <= 0) {
|
|
2350
|
+
for (const p of l.hosts) h(p);
|
|
2351
|
+
Ce.delete(r.fingerprint);
|
|
2352
|
+
}
|
|
2353
|
+
};
|
|
2354
|
+
}, Zn = /* @__PURE__ */ Symbol.for("dom.ts@onBorderObserve"), Qo = globalThis[Zn] ??= /* @__PURE__ */ new WeakMap(), Gn = /* @__PURE__ */ Symbol.for("dom.ts@onContentObserve"), Xo = globalThis[Gn] ??= /* @__PURE__ */ new WeakMap(), Qn = (e) => (typeof e?.current == "object" && (e = e?.element ?? e?.current ?? (typeof e?.self == "object" ? e?.self : null) ?? e), e), tt = (e, t = "*") => typeof e != "string" ? t : e.trim() || t, Ie = (e, t) => {
|
|
2355
|
+
if (!e || typeof e.querySelectorAll != "function") return [];
|
|
2356
|
+
const r = tt(t, "");
|
|
2357
|
+
if (!r) return [];
|
|
2358
|
+
try {
|
|
2359
|
+
return Array.from(e.querySelectorAll(r) || []);
|
|
2360
|
+
} catch {
|
|
2361
|
+
return [];
|
|
2362
|
+
}
|
|
2363
|
+
}, kt = (e, t) => {
|
|
2364
|
+
if (!e || typeof e.matches != "function") return !1;
|
|
2365
|
+
const r = tt(t, "");
|
|
2366
|
+
if (!r) return !1;
|
|
2367
|
+
try {
|
|
2368
|
+
return !!e.matches(r);
|
|
2369
|
+
} catch {
|
|
2370
|
+
return !1;
|
|
2371
|
+
}
|
|
2372
|
+
}, Xn = (e, t, r, n) => {
|
|
2373
|
+
const o = tt(t), i = new Set([...r.split(",") || [r]].map((s) => s.trim())), a = new MutationObserver((s, l) => {
|
|
2374
|
+
for (const c of s) if (c.type == "childList") {
|
|
2375
|
+
const u = Array.from(c.addedNodes) || [], f = Array.from(c.removedNodes) || [];
|
|
2376
|
+
u.push(...Array.from(c.addedNodes || []).flatMap((h) => Ie(h, o))), f.push(...Array.from(c.removedNodes || []).flatMap((h) => Ie(h, o))), [...new Set(u)].filter((h) => kt(h, o))?.map?.((h) => {
|
|
2377
|
+
i.forEach((C) => {
|
|
2378
|
+
n({
|
|
2379
|
+
target: h,
|
|
2380
|
+
type: "attributes",
|
|
2381
|
+
attributeName: C,
|
|
2382
|
+
oldValue: h?.getAttribute?.(C)
|
|
2383
|
+
}, l);
|
|
2384
|
+
});
|
|
2385
|
+
});
|
|
2386
|
+
} else kt(c.target, o) && c.attributeName && i.has(c.attributeName) && n(c, l);
|
|
2387
|
+
});
|
|
2388
|
+
return a.observe(e = Qn(e), {
|
|
2389
|
+
attributeOldValue: !0,
|
|
2390
|
+
attributes: !0,
|
|
2391
|
+
attributeFilter: [...i],
|
|
2392
|
+
childList: !0,
|
|
2393
|
+
subtree: !0,
|
|
2394
|
+
characterData: !0
|
|
2395
|
+
}), Ie(e, o).map((s) => i.forEach((l) => n({
|
|
2396
|
+
target: s,
|
|
2397
|
+
type: "attributes",
|
|
2398
|
+
attributeName: l,
|
|
2399
|
+
oldValue: s?.getAttribute?.(l)
|
|
2400
|
+
}, a))), a;
|
|
2401
|
+
};
|
|
2402
|
+
if (typeof globalThis.CustomEvent != "function") {
|
|
2403
|
+
class e {
|
|
2404
|
+
type;
|
|
2405
|
+
detail;
|
|
2406
|
+
bubbles;
|
|
2407
|
+
cancelable;
|
|
2408
|
+
defaultPrevented = !1;
|
|
2409
|
+
constructor(r, n) {
|
|
2410
|
+
this.type = r, this.detail = n?.detail, this.bubbles = !!n?.bubbles, this.cancelable = !!n?.cancelable;
|
|
2411
|
+
}
|
|
2412
|
+
preventDefault() {
|
|
2413
|
+
this.cancelable && (this.defaultPrevented = !0);
|
|
2414
|
+
}
|
|
2415
|
+
}
|
|
2416
|
+
globalThis.CustomEvent = e;
|
|
2417
|
+
}
|
|
2418
|
+
var Jn = (e) => !!e && (e.properties != null || e.keyframes != null), sr = (e) => e?.hasAttribute?.("data-instant") || typeof matchMedia == "function" && matchMedia("(prefers-reduced-motion: reduce)").matches, Mt = (e, t) => e?.dispatchEvent?.(new CustomEvent(t, {
|
|
2419
|
+
detail: {},
|
|
2420
|
+
bubbles: !0,
|
|
2421
|
+
cancelable: !0
|
|
2422
|
+
})) !== !1, eo = async (e) => {
|
|
2423
|
+
if (sr(e)) return;
|
|
2424
|
+
await new Promise((r) => {
|
|
2425
|
+
(globalThis.requestAnimationFrame ?? ((n) => setTimeout(() => n(0), 0)))(() => r());
|
|
2426
|
+
});
|
|
2427
|
+
const t = typeof e?.getAnimations == "function" ? e.getAnimations() : [];
|
|
2428
|
+
await Promise.all(t.filter((r) => r.playState === "running" || r.playState === "pending").map((r) => r.finished?.catch?.(() => {
|
|
2429
|
+
}) ?? Promise.resolve()));
|
|
2430
|
+
}, to = (e) => !!e && typeof e == "object" && !Array.isArray(e), me = /* @__PURE__ */ new WeakMap(), ro = (e, t) => {
|
|
2431
|
+
try {
|
|
2432
|
+
return (to(t.properties) ? qn(e, t) : _(e, t))?.animation ?? null;
|
|
2433
|
+
} catch (r) {
|
|
2434
|
+
const n = r instanceof Error ? r.message : String(r);
|
|
2435
|
+
if (!(r instanceof TypeError && /Element/i.test(n)) || typeof e.animate != "function") throw r;
|
|
2436
|
+
return e.animate(ve(t), et(t));
|
|
2437
|
+
}
|
|
2438
|
+
}, ar = async (e, t, r, n, o) => {
|
|
2439
|
+
if (typeof Element < "u" && !(e instanceof Element) && typeof e?.animate != "function") throw new TypeError("appear/disappear require an Element");
|
|
2440
|
+
if (!Mt(e, n)) return !1;
|
|
2441
|
+
const i = me.get(e);
|
|
2442
|
+
i && i.kind !== r && i.cancel();
|
|
2443
|
+
let a = !1, s;
|
|
2444
|
+
const l = new Promise((f) => {
|
|
2445
|
+
s = f;
|
|
2446
|
+
});
|
|
2447
|
+
let c = null;
|
|
2448
|
+
const u = {
|
|
2449
|
+
kind: r,
|
|
2450
|
+
cancel() {
|
|
2451
|
+
if (!a) {
|
|
2452
|
+
a = !0;
|
|
2453
|
+
try {
|
|
2454
|
+
c?.cancel?.();
|
|
2455
|
+
} catch {
|
|
2456
|
+
}
|
|
2457
|
+
s();
|
|
2458
|
+
}
|
|
2459
|
+
}
|
|
2460
|
+
};
|
|
2461
|
+
me.set(e, u);
|
|
2462
|
+
try {
|
|
2463
|
+
return Jn(t) && !sr(e) && typeof e.animate == "function" && (c = ro(e, t), c?.finished && await Promise.race([Promise.resolve(c.finished).catch(() => {
|
|
2464
|
+
}), l])), a || (await Promise.race([eo(e), l]), a) ? !1 : (Mt(e, o), !0);
|
|
2465
|
+
} finally {
|
|
2466
|
+
me.get(e) === u && me.delete(e);
|
|
2467
|
+
}
|
|
2468
|
+
}, no = (e, t) => ar(e, t, "show", "u2-before-show", "u2-appear"), oo = (e, t) => ar(e, t, "hide", "u2-before-hide", "u2-hidden"), Jo = {
|
|
2469
|
+
properties: {
|
|
2470
|
+
"--opacity": [
|
|
2471
|
+
0,
|
|
2472
|
+
0,
|
|
2473
|
+
1
|
|
2474
|
+
],
|
|
2475
|
+
"--scale": [
|
|
2476
|
+
0.8,
|
|
2477
|
+
0.8,
|
|
2478
|
+
1
|
|
2479
|
+
],
|
|
2480
|
+
display: [
|
|
2481
|
+
"none",
|
|
2482
|
+
"none",
|
|
2483
|
+
"revert-layer"
|
|
2484
|
+
],
|
|
2485
|
+
pointerEvents: [
|
|
2486
|
+
"none",
|
|
2487
|
+
"none",
|
|
2488
|
+
"revert-layer"
|
|
2489
|
+
]
|
|
2490
|
+
},
|
|
2491
|
+
duration: 80,
|
|
2492
|
+
easing: "linear"
|
|
2493
|
+
}, ei = {
|
|
2494
|
+
properties: {
|
|
2495
|
+
"--opacity": [
|
|
2496
|
+
1,
|
|
2497
|
+
0,
|
|
2498
|
+
0
|
|
2499
|
+
],
|
|
2500
|
+
"--scale": [
|
|
2501
|
+
1,
|
|
2502
|
+
0.8,
|
|
2503
|
+
0.8
|
|
2504
|
+
],
|
|
2505
|
+
display: [
|
|
2506
|
+
"revert-layer",
|
|
2507
|
+
"revert-layer",
|
|
2508
|
+
"none"
|
|
2509
|
+
],
|
|
2510
|
+
pointerEvents: [
|
|
2511
|
+
"none",
|
|
2512
|
+
"none",
|
|
2513
|
+
"none"
|
|
2514
|
+
]
|
|
2515
|
+
},
|
|
2516
|
+
duration: 120,
|
|
2517
|
+
easing: "linear"
|
|
2518
|
+
}, ti = async (e = typeof document < "u" ? document.body : null, t) => {
|
|
2519
|
+
e && Xn(e, "*", "data-hidden", (r) => {
|
|
2520
|
+
if (r.attributeName !== "data-hidden") return;
|
|
2521
|
+
const n = r.target;
|
|
2522
|
+
if (n.getAttribute("data-hidden") === r.oldValue) return;
|
|
2523
|
+
const o = n.getAttribute("data-hidden") != null, i = o ? t?.disappear : t?.appear;
|
|
2524
|
+
Promise.resolve(o ? oo(n, i) : no(n, i)).catch(console.warn);
|
|
2525
|
+
});
|
|
2526
|
+
};
|
|
2142
2527
|
export {
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2528
|
+
Wo as A,
|
|
2529
|
+
Bt as ANIMATABLE_BRAND,
|
|
2530
|
+
fo as ANIM_LAYER,
|
|
2531
|
+
N as ANIM_TRIGGER_NAME,
|
|
2532
|
+
Tn as AnimatableValue,
|
|
2533
|
+
lo as BAKE_CATEGORIES,
|
|
2534
|
+
Ot as BAKE_LAYER,
|
|
2535
|
+
$r as BAKE_SCREEN_ALSO,
|
|
2536
|
+
It as BAKE_SCREEN_ALSO_EXPLORER,
|
|
2537
|
+
Ut as BAKE_SCREEN_ALSO_SETTINGS,
|
|
2538
|
+
Lr as BAKE_SCREEN_CHROME,
|
|
2539
|
+
ue as BAKE_SCREEN_MEDIA,
|
|
2540
|
+
$t as CSS_COLOR_PROPERTIES,
|
|
2541
|
+
gr as CSS_DIMENSION_UNITS,
|
|
2542
|
+
vr as CSS_DIMENSION_UNITS_LIST,
|
|
2543
|
+
Er as CSS_MOTION_PROPERTIES,
|
|
2544
|
+
br as CSS_TYPOGRAPHY_PROPERTIES,
|
|
2545
|
+
wr as CSS_UNIT_FACTORY_ALIASES,
|
|
2546
|
+
Lt as CSS_UNIT_TOKEN_RE,
|
|
2547
|
+
ze as DEFAULT_CACHE_MS,
|
|
2548
|
+
Tr as DEFAULT_CATEGORIES,
|
|
2549
|
+
ct as HOST_CSS_FALLBACK,
|
|
2550
|
+
Ar as LAYER_NAME,
|
|
2551
|
+
Rr as LAYER_OPEN,
|
|
2552
|
+
uo as OWNER,
|
|
2553
|
+
je as S,
|
|
2554
|
+
Pt as STYLE_THEME_ATTRS,
|
|
2555
|
+
Cr as STYLE_THEME_OBSERVE_ATTRS,
|
|
2556
|
+
kr as UX_HOST_LAYERS,
|
|
2557
|
+
bo as UX_PRELOAD_HOST_CSS,
|
|
2558
|
+
xr as VEELA_CASCADE_LAYERS,
|
|
2559
|
+
co as VIEWER_CSS_LAYER_ORDER,
|
|
2560
|
+
Mr as VIEWER_RUNTIME_LAYERS,
|
|
2561
|
+
Ae as addAdoptedSheetToElement,
|
|
2562
|
+
D as adoptedAppliedText,
|
|
2563
|
+
V as adoptedBlobMap,
|
|
2564
|
+
Rt as adoptedFilled,
|
|
2565
|
+
at as adoptedLayerMap,
|
|
2566
|
+
T as adoptedMap,
|
|
2567
|
+
it as adoptedSelectorMap,
|
|
2568
|
+
pe as adoptedShadowLayerMap,
|
|
2569
|
+
st as adoptedShadowSelectorMap,
|
|
2570
|
+
Be as adoptedStyleSheetsCache,
|
|
2571
|
+
Ce as animKeyframeRefs,
|
|
2572
|
+
Do as animatable,
|
|
2573
|
+
qn as animate,
|
|
2574
|
+
no as appear,
|
|
2575
|
+
Hr as applyNormalizedInlineStyle,
|
|
2576
|
+
Kt as bakeAlsoQueriesFor,
|
|
2577
|
+
le as bakeComputedStyle,
|
|
2578
|
+
xn as bakeScreenColors,
|
|
2579
|
+
ae as bakeThemeFingerprint,
|
|
2191
2580
|
L as bakedCache,
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2581
|
+
G as bakedFollowers,
|
|
2582
|
+
I as bakedLive,
|
|
2583
|
+
R as bakedStyles,
|
|
2584
|
+
Go as bindCssAnimation,
|
|
2585
|
+
zo as bindStyle,
|
|
2586
|
+
W as blobURLMap,
|
|
2587
|
+
et as buildAnimationTiming,
|
|
2588
|
+
yn as buildBakedCssText,
|
|
2589
|
+
ve as buildWebAnimationKeyframes,
|
|
2590
|
+
de as cacheBlobContentMap,
|
|
2591
|
+
H as cacheContentMap,
|
|
2592
|
+
U as cacheMap,
|
|
2593
|
+
mn as collectBakeAlsoHosts,
|
|
2594
|
+
Ht as collectBakeScreenHosts,
|
|
2595
|
+
hn as collectBakedDeclarations,
|
|
2596
|
+
qo as compileInlineStyleAttribute,
|
|
2597
|
+
or as compileKeyframesCss,
|
|
2598
|
+
Kn as compileTriggerCss,
|
|
2599
|
+
mt as containsMarker,
|
|
2600
|
+
Nr as createStyleId,
|
|
2207
2601
|
M as createTypedUnitValue,
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
$
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2602
|
+
jo as css,
|
|
2603
|
+
Ir as cssEmptyLayerRule,
|
|
2604
|
+
Zr as cssImportWithLayer,
|
|
2605
|
+
He as cssLayerBlock,
|
|
2606
|
+
We as cssLayerOrder,
|
|
2607
|
+
F as cssTextForAdoptedSheet,
|
|
2608
|
+
ft as cssTextRequiresInlineStyleElement,
|
|
2609
|
+
Or as cssUnitConstructorName,
|
|
2610
|
+
Pr as cssUnitFactoryName,
|
|
2611
|
+
ei as decorHide,
|
|
2612
|
+
Jo as decorShow,
|
|
2613
|
+
Ho as defineAnimation,
|
|
2614
|
+
oo as disappear,
|
|
2615
|
+
Mt as dispatchLifecycleEvent,
|
|
2616
|
+
_ as doAnimation,
|
|
2617
|
+
se as ensureAdoptedSheetContent,
|
|
2618
|
+
kn as ensureHostStyles,
|
|
2619
|
+
Ye as ensureStyleScopeSelector,
|
|
2620
|
+
pt as escapeCSSIdentifier,
|
|
2621
|
+
ie as escapeRegExp,
|
|
2622
|
+
un as fetchAndCache,
|
|
2623
|
+
fn as fetchAsInline,
|
|
2624
|
+
Oo as getAdoptedStyleRule,
|
|
2625
|
+
Uo as getBakedStyle,
|
|
2626
|
+
To as getElementZoom,
|
|
2627
|
+
Ke as getOrCreateLayerRule,
|
|
2628
|
+
$o as getPadding,
|
|
2629
|
+
Y as getPropertyValue,
|
|
2630
|
+
Lo as getPxValue,
|
|
2631
|
+
sn as getStyleLayer,
|
|
2632
|
+
Ze as getStyleRule,
|
|
2633
|
+
Ao as getTransform,
|
|
2634
|
+
Ro as getTransformOrigin,
|
|
2635
|
+
j as getWindowConstructor,
|
|
2636
|
+
ge as hasTypedOM,
|
|
2637
|
+
ho as hash,
|
|
2638
|
+
ti as initVisibility,
|
|
2639
|
+
Me as invalidateBakedStyles,
|
|
2640
|
+
yo as isAdoptedSheetEmpty,
|
|
2641
|
+
Ln as isAnimatableValue,
|
|
2642
|
+
jr as isColorToken,
|
|
2643
|
+
Br as isCssElement,
|
|
2644
|
+
po as isCssLayerName,
|
|
2645
|
+
dt as isDocument,
|
|
2646
|
+
Ft as isEffectivelyEmptyStyleText,
|
|
2647
|
+
qr as isElementVisible,
|
|
2648
|
+
ut as isLayerBlockRule,
|
|
2649
|
+
$ as isNativeCSSStyleValue,
|
|
2650
|
+
fe as isReactiveStyleValue,
|
|
2651
|
+
zn as isReactiveTrigger,
|
|
2652
|
+
X as isScrollDriven,
|
|
2653
|
+
Q as isShadowRoot,
|
|
2654
|
+
yt as isStaticStyleInterpolation,
|
|
2655
|
+
zr as isStyleBinding,
|
|
2656
|
+
oe as isStyleHost,
|
|
2657
|
+
mo as isStyleValue,
|
|
2658
|
+
he as isUnitValue,
|
|
2659
|
+
ne as isViewDriven,
|
|
2660
|
+
ao as layerCounter,
|
|
2661
|
+
qt as loadAsAdopted,
|
|
2662
|
+
tn as loadBlobStyle,
|
|
2663
|
+
tr as loadCachedStyles,
|
|
2664
|
+
P as loadInlineStyle,
|
|
2665
|
+
jt as loadStyleSheet,
|
|
2666
|
+
vo as makeHostLayerOrder,
|
|
2667
|
+
go as normalizeCssForLayer,
|
|
2668
|
+
Nt as normalizeIterationCount,
|
|
2669
|
+
Dr as normalizeIterations,
|
|
2670
|
+
on as notifyStyleTreeHosts,
|
|
2671
|
+
ko as observeStyleTree,
|
|
2672
|
+
Vo as onScroll,
|
|
2673
|
+
Fo as onView,
|
|
2674
|
+
Yo as parallelAnimations,
|
|
2675
|
+
ht as parseLength,
|
|
2676
|
+
Fr as parseOrigin,
|
|
2677
|
+
B as parseTime,
|
|
2678
|
+
xo as preloadStyle,
|
|
2679
|
+
_t as promiseOrDirect,
|
|
2680
|
+
Wr as pruneEmptyStyleAttribute,
|
|
2681
|
+
Se as queryFirstDeep,
|
|
2682
|
+
Kr as readAttachedCSSUnit,
|
|
2683
|
+
Vt as readSheetRuleCount,
|
|
2684
|
+
Ue as rebakeBatch,
|
|
2685
|
+
Io as rebakeComputedStyle,
|
|
2686
|
+
Wt as registerStyleTreeHook,
|
|
2687
|
+
lt as registeredProperties,
|
|
2688
|
+
No as rehydrateAdoptedStyleSheets,
|
|
2689
|
+
Mo as rehydrateConstructableSheets,
|
|
2690
|
+
ke as removeAdopted,
|
|
2691
|
+
ir as resolveCssAnimationTarget,
|
|
2692
|
+
_o as scheduleBakeScreenColors,
|
|
2693
|
+
Mn as scheduleEnsureHostStyles,
|
|
2694
|
+
Ko as sequenceAnimations,
|
|
2695
|
+
Co as setProperty,
|
|
2696
|
+
Eo as setStyleInRule,
|
|
2697
|
+
we as setStyleProperty,
|
|
2698
|
+
Dt as setStylePropertyFallback,
|
|
2699
|
+
Jr as setStylePropertyTyped,
|
|
2700
|
+
en as setStyleRule,
|
|
2701
|
+
Po as setStyleRules,
|
|
2702
|
+
vt as setStyleURL,
|
|
2703
|
+
Zo as staggerAnimation,
|
|
2704
|
+
Ur as stripCssPreamble,
|
|
2705
|
+
mr as styleCache,
|
|
2706
|
+
Sr as styleElementCache,
|
|
2707
|
+
Ee as styleFlushPending,
|
|
2708
|
+
Tt as styleTreeHooks,
|
|
2709
|
+
be as styleTreeObserved,
|
|
2710
|
+
yr as styleTreeRoots,
|
|
2711
|
+
z as supportsConstructableStylesheet,
|
|
2712
|
+
Fe as unbakeComputedStyle,
|
|
2713
|
+
Bo as unbakeScreenColors,
|
|
2714
|
+
wo as unwrapCssLayer,
|
|
2715
|
+
Vr as urlCanParse,
|
|
2716
|
+
So as veelaCascadeOrder,
|
|
2717
|
+
eo as waitElementAnimations,
|
|
2718
|
+
xe as wrapCssLayer
|
|
2317
2719
|
};
|
|
2318
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGUtbGliLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyAkYXZvaWRUcmlnZ2VyLCAkZ2V0VmFsdWUsIGNhbWVsVG9LZWJhYiwgZGVyZWYsIGdldE9ySW5zZXJ0Q29tcHV0ZWQsIGhhc1ZhbHVlLCBpc1ZhbCwgaXNWYWx1ZVVuaXQsIHRvUmVmLCB0cnlTdHJpbmdBc051bWJlciB9IGZyb20gXCJAZmVzdC1saWIvY29yZVwiO1xuaW1wb3J0IHsgYWRkVG9DYWxsQ2hhaW4sIGFmZmVjdGVkIH0gZnJvbSBcIkBmZXN0LWxpYi9vYmplY3RcIjtcblxuLy8jcmVnaW9uIHNyYy9tYXBzLnRzXG52YXIgc2hhcmVkID0gKGtleSwgY3JlYXRlKSA9PiBnbG9iYWxUaGlzW1N5bWJvbC5mb3Ioa2V5KV0gPz89IGNyZWF0ZSgpO1xudmFyIGJsb2JVUkxNYXAgPSBzaGFyZWQoXCJkb20udHNAYmxvYlVSTE1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgY2FjaGVNYXAgPSBzaGFyZWQoXCJkb20udHNAY2FjaGVNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgY2FjaGVDb250ZW50TWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlQ29udGVudE1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBjYWNoZUJsb2JDb250ZW50TWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlQmxvYkNvbnRlbnRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRTZWxlY3Rvck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkU2VsZWN0b3JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYWRvcHRlZExheWVyTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRMYXllck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBhZG9wdGVkU2hhZG93TGF5ZXJNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZFNoYWRvd0xheWVyTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZEJsb2JNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEJsb2JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRBcHBsaWVkVGV4dCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkQXBwbGllZFRleHRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRGaWxsZWQgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEZpbGxlZFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgbGF5ZXJDb3VudGVyID0gc2hhcmVkKFwiZG9tLnRzQGxheWVyQ291bnRlclwiLCAoKSA9PiAwKTtcbnZhciBzdHlsZVRyZWVIb29rcyA9IHNoYXJlZChcImRvbS50c0BzdHlsZVRyZWVIb29rc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBzdHlsZVRyZWVPYnNlcnZlZCA9IHNoYXJlZChcImRvbS50c0BzdHlsZVRyZWVPYnNlcnZlZFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgc3R5bGVUcmVlUm9vdHMgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlUm9vdHNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRTdHlsZXMgPSBzaGFyZWQoXCJzdHlsZS1saWJAYmFrZWRTdHlsZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYmFrZWRMaXZlID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkTGl2ZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBiYWtlZENhY2hlID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgcmViYWtlQmF0Y2ggPSBzaGFyZWQoXCJzdHlsZS1saWJAcmViYWtlQmF0Y2hcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRGb2xsb3dlcnMgPSBzaGFyZWQoXCJzdHlsZS1saWJAYmFrZWRGb2xsb3dlcnNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlID0gc2hhcmVkKFwibHVyLmVAYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlQ2FjaGUgPSBzaGFyZWQoXCJsdXIuZUBzdHlsZUNhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIHN0eWxlRWxlbWVudENhY2hlID0gc2hhcmVkKFwibHVyLmVAc3R5bGVFbGVtZW50Q2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlRmx1c2hQZW5kaW5nID0gc2hhcmVkKFwic3R5bGUtbGliQHN0eWxlRmx1c2hQZW5kaW5nXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpKTtcbnZhciByZWdpc3RlcmVkUHJvcGVydGllcyA9IHNoYXJlZChcInN0eWxlLWxpYkByZWdpc3RlcmVkUHJvcGVydGllc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbnN0YW50cy50c1xudmFyIENTU19ESU1FTlNJT05fVU5JVFNfTElTVCA9IFtcblx0XCIlXCIsXG5cdFwicHhcIixcblx0XCJjbVwiLFxuXHRcIm1tXCIsXG5cdFwicVwiLFxuXHRcImluXCIsXG5cdFwicGNcIixcblx0XCJwdFwiLFxuXHRcImVtXCIsXG5cdFwiZXhcIixcblx0XCJjaFwiLFxuXHRcImNhcFwiLFxuXHRcImljXCIsXG5cdFwibGhcIixcblx0XCJyZW1cIixcblx0XCJyZXhcIixcblx0XCJyY2hcIixcblx0XCJyY2FwXCIsXG5cdFwicmljXCIsXG5cdFwicmxoXCIsXG5cdFwidndcIixcblx0XCJ2aFwiLFxuXHRcInZpXCIsXG5cdFwidmJcIixcblx0XCJ2bWluXCIsXG5cdFwidm1heFwiLFxuXHRcInN2d1wiLFxuXHRcInN2aFwiLFxuXHRcInN2aVwiLFxuXHRcInN2YlwiLFxuXHRcInN2bWluXCIsXG5cdFwic3ZtYXhcIixcblx0XCJsdndcIixcblx0XCJsdmhcIixcblx0XCJsdmlcIixcblx0XCJsdmJcIixcblx0XCJsdm1pblwiLFxuXHRcImx2bWF4XCIsXG5cdFwiZHZ3XCIsXG5cdFwiZHZoXCIsXG5cdFwiZHZpXCIsXG5cdFwiZHZiXCIsXG5cdFwiZHZtaW5cIixcblx0XCJkdm1heFwiLFxuXHRcImNxd1wiLFxuXHRcImNxaFwiLFxuXHRcImNxaVwiLFxuXHRcImNxYlwiLFxuXHRcImNxbWluXCIsXG5cdFwiY3FtYXhcIixcblx0XCJkZWdcIixcblx0XCJncmFkXCIsXG5cdFwicmFkXCIsXG5cdFwidHVyblwiLFxuXHRcInNcIixcblx0XCJtc1wiLFxuXHRcImh6XCIsXG5cdFwia2h6XCIsXG5cdFwiZHBpXCIsXG5cdFwiZHBjbVwiLFxuXHRcImRwcHhcIixcblx0XCJ4XCIsXG5cdFwiZnJcIlxuXTtcbnZhciBDU1NfRElNRU5TSU9OX1VOSVRTID0gbmV3IFNldChDU1NfRElNRU5TSU9OX1VOSVRTX0xJU1QpO1xudmFyIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyA9IHtcblx0XCIlXCI6IFwicGVyY2VudFwiLFxuXHRxOiBcIlFcIixcblx0aHo6IFwiSHpcIixcblx0a2h6OiBcImtIelwiLFxuXHRmcjogXCJmbGV4XCJcbn07XG52YXIgQ1NTX1VOSVRfVE9LRU5fUkUgPSAvXiglfFthLXpBLVpdKykvO1xudmFyIENTU19DT0xPUl9QUk9QRVJUSUVTID0gW1xuXHRcImNvbG9yXCIsXG5cdFwiYmFja2dyb3VuZC1jb2xvclwiLFxuXHRcImJvcmRlci1jb2xvclwiLFxuXHRcImJvcmRlci10b3AtY29sb3JcIixcblx0XCJib3JkZXItcmlnaHQtY29sb3JcIixcblx0XCJib3JkZXItYm90dG9tLWNvbG9yXCIsXG5cdFwiYm9yZGVyLWxlZnQtY29sb3JcIixcblx0XCJvdXRsaW5lLWNvbG9yXCIsXG5cdFwiYWNjZW50LWNvbG9yXCIsXG5cdFwiY2FyZXQtY29sb3JcIixcblx0XCJ0ZXh0LWRlY29yYXRpb24tY29sb3JcIixcblx0XCJjb2x1bW4tcnVsZS1jb2xvclwiLFxuXHRcImZpbGxcIixcblx0XCJzdHJva2VcIixcblx0XCJmbG9vZC1jb2xvclwiLFxuXHRcImxpZ2h0aW5nLWNvbG9yXCIsXG5cdFwic3RvcC1jb2xvclwiXG5dO1xudmFyIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMgPSBbXG5cdFwiZm9udC1mYW1pbHlcIixcblx0XCJmb250LXNpemVcIixcblx0XCJmb250LXdlaWdodFwiLFxuXHRcImZvbnQtc3R5bGVcIixcblx0XCJmb250LXN0cmV0Y2hcIixcblx0XCJsaW5lLWhlaWdodFwiLFxuXHRcImxldHRlci1zcGFjaW5nXCIsXG5cdFwid29yZC1zcGFjaW5nXCJcbl07XG52YXIgQ1NTX01PVElPTl9QUk9QRVJUSUVTID0gW1xuXHRcInRyYW5zaXRpb24tZHVyYXRpb25cIixcblx0XCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLFxuXHRcImFuaW1hdGlvbi1kdXJhdGlvblwiLFxuXHRcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIlxuXTtcbnZhciBTVFlMRV9USEVNRV9BVFRSUyA9IFtcblx0XCJkYXRhLXRoZW1lXCIsXG5cdFwiZGF0YS1leHBsb3Jlci1jb2xvci1zY2hlbWVcIixcblx0XCJkYXRhLWNvbG9yLXNjaGVtZVwiLFxuXHRcInRoZW1lXCIsXG5cdFwiY29sb3Itc2NoZW1lXCJcbl07XG52YXIgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUyA9IFtcblx0Li4uU1RZTEVfVEhFTUVfQVRUUlMsXG5cdFwic3R5bGVcIixcblx0XCJjbGFzc1wiXG5dO1xudmFyIEJBS0VfQ0FURUdPUklFUyA9IFtcblx0XCJ0b2tlbnNcIixcblx0XCJjb2xvcnNcIixcblx0XCJ0eXBvZ3JhcGh5XCIsXG5cdFwibW90aW9uXCJcbl07XG52YXIgVkVFTEFfQ0FTQ0FERV9MQVlFUlMgPSBbXG5cdFwidG9rZW5zXCIsXG5cdFwiYmFzZVwiLFxuXHRcImxheW91dFwiLFxuXHRcImNvbXBvbmVudHNcIixcblx0XCJ1dGlsaXRpZXNcIixcblx0XCJ0aGVtZVwiLFxuXHRcIm92ZXJyaWRlc1wiLFxuXHRcInByaW50XCJcbl07XG52YXIgVVhfSE9TVF9MQVlFUlMgPSBbXCJ1eC1wcmVsb2FkXCIsIFwidXgtbGF5ZXJcIl07XG52YXIgVklFV0VSX1JVTlRJTUVfTEFZRVJTID0gW1xuXHRcInJzLW1kLWJhc2VcIixcblx0XCJycy1tZC1zeXN0ZW1cIixcblx0XCJycy1tZC1tb2R1bGVzXCIsXG5cdFwicnMtbWQtdXNlclwiLFxuXHRcInJzLW1kLXByaW50XCIsXG5cdFwicnMtbWQtdXNlci1wcmludFwiXG5dO1xudmFyIFZJRVdFUl9DU1NfTEFZRVJfT1JERVIgPSBWSUVXRVJfUlVOVElNRV9MQVlFUlM7XG52YXIgTEFZRVJfTkFNRSA9IC9eW2EtekEtWjAtOV8uLV0rJC87XG52YXIgTEFZRVJfT1BFTiA9IC9eQGxheWVyXFxzKyhbYS16QS1aMC05Xy4tXSspXFxzKlxcey87XG52YXIgT1dORVIgPSBcIkRPTVwiO1xudmFyIEhPU1RfQ1NTX0ZBTExCQUNLID0gXCJkYXRhLWdsaXQtaG9zdC1jc3NcIjtcbnZhciBCQUtFX0xBWUVSID0gXCJ1eC1iYWtlZFwiO1xudmFyIERFRkFVTFRfQ0FURUdPUklFUyA9IFtcImNvbG9yc1wiLCBcInRva2Vuc1wiXTtcbnZhciBERUZBVUxUX0NBQ0hFX01TID0gM2U0O1xudmFyIEJBS0VfU0NSRUVOX01FRElBID0gXCJzY3JlZW5cIjtcbnZhciBCQUtFX1NDUkVFTl9DSFJPTUUgPSBbXG5cdFwidWktd2luZG93LWZyYW1lXCIsXG5cdFwidWktbW9kYWxcIixcblx0XCJhcHAtYm94XCIsXG5cdFwiLnVpLW1vZGFsLWRpYWxvZ1wiLFxuXHRcIi51aS1tb2RhbC1wYW5lbFwiXG5dO1xudmFyIEJBS0VfU0NSRUVOX0FMU09fRVhQTE9SRVIgPSBbXG5cdFwiLnJvdy5jMi1zdXJmYWNlXCIsXG5cdFwiLnJvdy5jMi1zdXJmYWNlW2RhdGEta2luZD1kaXJlY3RvcnldXCIsXG5cdFwiLnJvdy5jMi1zdXJmYWNlW2RhdGEta2luZD1maWxlXVwiLFxuXHRcIi5yb3cuYzItc3VyZmFjZSAuYy5uYW1lXCIsXG5cdFwiLmZtLWdyaWQtaGVhZGVyXCJcbl07XG52YXIgQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUyA9IFtcblx0XCIuZmllbGRcIixcblx0XCIuZm9ybS1pbnB1dFwiLFxuXHRcIi5mb3JtLXNlbGVjdFwiLFxuXHRcIi5maWVsZC1jb250cm9sXCJcbl07XG52YXIgQkFLRV9TQ1JFRU5fQUxTTyA9IFsuLi5CQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSLCAuLi5CQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTXTtcbnZhciBBTklNQVRBQkxFX0JSQU5EID0gU3ltYm9sLmZvcihcImZlc3QuYW5pbWF0YWJsZVwiKTtcbnZhciBoYXNUeXBlZE9NID0gdHlwZW9mIENTU1N0eWxlVmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIENTU1VuaXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3V0aWxzLnRzXG52YXIgY3NzVW5pdEZhY3RvcnlOYW1lID0gKHVuaXQpID0+IENTU19VTklUX0ZBQ1RPUllfQUxJQVNFU1t1bml0LnRvTG93ZXJDYXNlKCldID8/IHVuaXQudG9Mb3dlckNhc2UoKTtcbnZhciBjc3NVbml0Q29uc3RydWN0b3JOYW1lID0gKHVuaXQpID0+IHVuaXQudG9Mb3dlckNhc2UoKSA9PT0gXCIlXCIgPyBcInBlcmNlbnRcIiA6IHVuaXQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0Nzc0xheWVyTmFtZSA9IChuYW1lKSA9PiBMQVlFUl9OQU1FLnRlc3QobmFtZSk7XG52YXIgY3NzRW1wdHlMYXllclJ1bGUgPSAobGF5ZXJOYW1lKSA9PiBgQGxheWVyICR7bGF5ZXJOYW1lfSB7fWA7XG52YXIgc3RyaXBDc3NQcmVhbWJsZSA9IChjc3MpID0+IHtcblx0bGV0IG91dCA9IFN0cmluZyhjc3MgfHwgXCJcIikudHJpbSgpO1xuXHRvdXQgPSBvdXQucmVwbGFjZSgvXihAY2hhcnNldFxccytbXjtdKztcXHMqKSsvaSwgXCJcIik7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdFx0Y29uc3QgbmV4dCA9IG91dC5yZXBsYWNlKC9eXFwvXFwqW1xcc1xcU10qP1xcKlxcL1xccyovLCBcIlwiKTtcblx0XHRpZiAobmV4dCA9PT0gb3V0KSBicmVhaztcblx0XHRvdXQgPSBuZXh0LnRyaW0oKTtcblx0fVxuXHRyZXR1cm4gb3V0O1xufTtcbnZhciBpc0xheWVyQmxvY2tSdWxlID0gKHJ1bGUpID0+IHR5cGVvZiBDU1NMYXllckJsb2NrUnVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBydWxlIGluc3RhbmNlb2YgQ1NTTGF5ZXJCbG9ja1J1bGU7XG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCA9ICgpID0+IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBnbG9iYWxUaGlzLkNTU1N0eWxlU2hlZXQgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQgPSAoY3NzKSA9PiB0eXBlb2YgY3NzID09PSBcInN0cmluZ1wiICYmIC9AaW1wb3J0XFxiL2kudGVzdChjc3MpO1xudmFyIHByb21pc2VPckRpcmVjdCA9IChwcm9taXNlLCBjYikgPT4ge1xuXHRpZiAodHlwZW9mIHByb21pc2U/LnRoZW4gPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gcHJvbWlzZT8udGhlbj8uKGNiKTtcblx0cmV0dXJuIGNiKHByb21pc2UpO1xufTtcbnZhciBpc1NoYWRvd1Jvb3QgPSAodmFsdWUpID0+IHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbnZhciBpc0RvY3VtZW50ID0gKHZhbHVlKSA9PiB0eXBlb2YgRG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEb2N1bWVudDtcbnZhciBpc0Nzc0VsZW1lbnQgPSAodmFsdWUpID0+IHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudDtcbnZhciBlc2NhcGVDU1NJZGVudGlmaWVyID0gKHZhbHVlKSA9PiB7XG5cdGlmICh0eXBlb2YgQ1NTICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBDU1MuZXNjYXBlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBDU1MuZXNjYXBlKHZhbHVlKTtcblx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpLm1hcCgoY2hhcikgPT4gYFxcXFwke2NoYXIuY29kZVBvaW50QXQoMCkudG9TdHJpbmcoMTYpfSBgKS5qb2luKFwiXCIpO1xufTtcbnZhciBzdHlsZUlkQ291bnRlciA9IDA7XG52YXIgY3JlYXRlU3R5bGVJZCA9ICgpID0+IHtcblx0aWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuXHRyZXR1cm4gYHV4LSR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7KCsrc3R5bGVJZENvdW50ZXIpLnRvU3RyaW5nKDM2KX1gO1xufTtcbnZhciB1cmxDYW5QYXJzZSA9ICh2YWx1ZSkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiB0eXBlb2YgVVJMICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkwuY2FuUGFyc2UgPT09IFwiZnVuY3Rpb25cIiAmJiBVUkwuY2FuUGFyc2UodmFsdWUpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgaGFzaCA9IGFzeW5jIChzdHJpbmcpID0+IHtcblx0Y29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0bz8uc3VidGxlPy5kaWdlc3QoXCJTSEEtMjU2XCIsIHR5cGVvZiBzdHJpbmcgPT0gXCJzdHJpbmdcIiA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHJpbmcpIDogc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBzdHJpbmcgOiBhd2FpdCBzdHJpbmc/LmFycmF5QnVmZmVyPy4oKSk7XG5cdHJldHVybiBcInNoYTI1Ni1cIiArIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSkpO1xufTtcbnZhciBwYXJzZUxlbmd0aCA9ICh2YWx1ZSwgc2l6ZSkgPT4ge1xuXHRpZiAodmFsdWUuZW5kc1dpdGgoXCIlXCIpKSByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAgKiBzaXplKCk7XG5cdHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbn07XG52YXIgcGFyc2VPcmlnaW4gPSAob3JpZ2luLCBlbGVtZW50KSA9PiB7XG5cdGNvbnN0IHZhbHVlcyA9IG9yaWdpbi5zcGxpdChcIiBcIik7XG5cdHJldHVybiBuZXcgRE9NUG9pbnQocGFyc2VMZW5ndGgodmFsdWVzWzBdLCAoKSA9PiBlbGVtZW50LmNsaWVudFdpZHRoKSwgcGFyc2VMZW5ndGgodmFsdWVzWzFdLCAoKSA9PiBlbGVtZW50LmNsaWVudEhlaWdodCkpO1xufTtcbnZhciBwYXJzZVRpbWUgPSAodiwgZmFsbGJhY2sgPSAwKSA9PiB7XG5cdGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHY7XG5cdGlmICghdikgcmV0dXJuIGZhbGxiYWNrO1xuXHRjb25zdCB0ID0gU3RyaW5nKHYpLnRyaW0oKTtcblx0aWYgKHQuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHBhcnNlRmxvYXQodCk7XG5cdGlmICh0LmVuZHNXaXRoKFwic1wiKSkgcmV0dXJuIHBhcnNlRmxvYXQodCkgKiAxZTM7XG5cdHJldHVybiBwYXJzZUZsb2F0KHQpIHx8IGZhbGxiYWNrO1xufTtcbnZhciBub3JtYWxpemVJdGVyYXRpb25Db3VudCA9IChjb3VudCkgPT4ge1xuXHRpZiAoY291bnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG5cdGlmIChjb3VudCA9PT0gLTEgfHwgY291bnQgPT09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG5cdHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGNvdW50KSk7XG59O1xudmFyIG5vcm1hbGl6ZUl0ZXJhdGlvbnMgPSAobikgPT4gbiA9PT0gLTEgfHwgbiA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IE1hdGgubWF4KDEsIG4gPz8gMSk7XG52YXIgaXNTY3JvbGxEcml2ZW4gPSAodCkgPT4gdCAhPSBudWxsICYmIHR5cGVvZiB0ID09PSBcIm9iamVjdFwiICYmIHQua2luZCA9PT0gXCJzY3JvbGxcIjtcbnZhciBpc1ZpZXdEcml2ZW4gPSAodCkgPT4gdCAhPSBudWxsICYmIHR5cGVvZiB0ID09PSBcIm9iamVjdFwiICYmIHQua2luZCA9PT0gXCJ2aWV3XCI7XG52YXIgaXNTdHlsZUhvc3QgPSAobm9kZSkgPT4ge1xuXHRpZiAoIW5vZGUgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoU3RyaW5nKG5vZGUubG9jYWxOYW1lIHx8IFwiXCIpLmluY2x1ZGVzKFwiLVwiKSkgcmV0dXJuIHRydWU7XG5cdGlmIChub2RlLnNoYWRvd1Jvb3QpIHJldHVybiB0cnVlO1xuXHRpZiAobm9kZS5zdHlsZXMgIT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgcmVhZFNoZWV0UnVsZUNvdW50ID0gKHNoZWV0KSA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHNoZWV0LmNzc1J1bGVzLmxlbmd0aDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG52YXIgaXNBZG9wdGVkU2hlZXRFbXB0eSA9IChzaGVldCkgPT4ge1xuXHRpZiAoIXNoZWV0KSByZXR1cm4gdHJ1ZTtcblx0Y29uc3QgY291bnQgPSByZWFkU2hlZXRSdWxlQ291bnQoc2hlZXQpO1xuXHRpZiAoY291bnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIGNvdW50ID09PSAwO1xufTtcbnZhciBpc0NvbG9yVG9rZW4gPSAobmFtZSkgPT4gbmFtZSA9PT0gXCItLWJhc2UtY29sb3JcIiB8fCBuYW1lLnN0YXJ0c1dpdGgoXCItLWNvbG9yLVwiKSB8fCBuYW1lLmVuZHNXaXRoKFwiLWNvbG9yXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCItZmdcIikgfHwgbmFtZS5lbmRzV2l0aChcIi1iZ1wiKTtcbnZhciBpc0VsZW1lbnRWaXNpYmxlID0gKGVsKSA9PiB7XG5cdGlmICghZWwuaXNDb25uZWN0ZWQpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBlbC5nZXRDbGllbnRSZWN0cyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZWwuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcbnZhciBpc1N0eWxlQmluZGluZyA9IChzdHlsZXMpID0+IHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkoc3R5bGVzKSAmJiB0eXBlb2Ygc3R5bGVzWzBdID09PSBcImZ1bmN0aW9uXCI7XG59O1xudmFyIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCA9IChjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IHNvdXJjZSA9IHR5cGVvZiBjc3NUZXh0ID09PSBcInN0cmluZ1wiID8gY3NzVGV4dC50cmltKCkgOiBcIlwiO1xuXHRpZiAoIXNvdXJjZSkgcmV0dXJuIHRydWU7XG5cdGZvciAoY29uc3QgY2h1bmsgb2Ygc291cmNlLnNwbGl0KFwiO1wiKSkge1xuXHRcdGNvbnN0IGRlY2xhcmF0aW9uID0gY2h1bmsudHJpbSgpO1xuXHRcdGlmICghZGVjbGFyYXRpb24pIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGNvbG9uSW5kZXggPSBkZWNsYXJhdGlvbi5pbmRleE9mKFwiOlwiKTtcblx0XHRpZiAoY29sb25JbmRleCA8IDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoZGVjbGFyYXRpb24uc2xpY2UoY29sb25JbmRleCArIDEpLnRyaW0oKS5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xudmFyIHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSA9IChlbGVtZW50KSA9PiB7XG5cdGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcblx0Y29uc3QgcmF3ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0aWYgKHJhdyA9PSBudWxsKSByZXR1cm47XG5cdGlmIChpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQocmF3KSkge1xuXHRcdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG5cdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0fVxufTtcbnZhciBhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZSA9IChlbGVtZW50LCBjc3NUZXh0KSA9PiB7XG5cdGlmIChpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQoY3NzVGV4dCkpIHtcblx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuXHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7XG59O1xudmFyIGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRjb25zdCBDU1NTdHlsZVZhbHVlQ3RvciA9IGdsb2JhbFRoaXMuQ1NTU3R5bGVWYWx1ZTtcblx0XHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBDU1NTdHlsZVZhbHVlQ3RvcikgcmV0dXJuIHRydWU7XG5cdFx0Zm9yIChsZXQgcHJvdG90eXBlID0gdmFsdWU7IHByb3RvdHlwZTsgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkpIGlmIChwcm90b3R5cGU/LmNvbnN0cnVjdG9yPy5uYW1lID09PSBcIkNTU1N0eWxlVmFsdWVcIikgcmV0dXJuIHRydWU7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciBpc1JlYWN0aXZlU3R5bGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdHJldHVybiBcInZhbHVlXCIgaW4gdmFsdWU7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbiA9ICh2YWx1ZSkgPT4ge1xuXHRyZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCI7XG59O1xudmFyIGVzY2FwZVJlZ0V4cCA9ICh2YWx1ZSkgPT4ge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufTtcbnZhciBjb250YWluc01hcmtlciA9IChjc3NWYWx1ZSwgbWFya2VyKSA9PiB7XG5cdHJldHVybiBuZXcgUmVnRXhwKGB2YXJcXFxcKFxcXFxzKiR7ZXNjYXBlUmVnRXhwKG1hcmtlcil9XFxcXHMqXFxcXClgKS50ZXN0KGNzc1ZhbHVlKTtcbn07XG52YXIgcmVhZEF0dGFjaGVkQ1NTVW5pdCA9ICh0ZXh0KSA9PiB7XG5cdGNvbnN0IG1hdGNoID0gQ1NTX1VOSVRfVE9LRU5fUkUuZXhlYyh0ZXh0KTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IGF1dGhvcmVkID0gbWF0Y2hbMF07XG5cdGNvbnN0IG5vcm1hbGl6ZWQgPSBhdXRob3JlZC50b0xvd2VyQ2FzZSgpO1xuXHRpZiAoIUNTU19ESU1FTlNJT05fVU5JVFMuaGFzKG5vcm1hbGl6ZWQpKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHtcblx0XHRhdXRob3JlZCxcblx0XHRub3JtYWxpemVkLFxuXHRcdGxlbmd0aDogYXV0aG9yZWQubGVuZ3RoXG5cdH07XG59O1xudmFyIGdldFdpbmRvd0NvbnN0cnVjdG9yID0gKHdpbiwgbmFtZSkgPT4ge1xuXHRyZXR1cm4gd2luPy5bbmFtZV0gPz8gZ2xvYmFsVGhpcz8uW25hbWVdO1xufTtcbnZhciBjcmVhdGVUeXBlZFVuaXRWYWx1ZSA9ICh3aW4sIHVuaXQsIHZhbHVlKSA9PiB7XG5cdGNvbnN0IENTU05hbWVzcGFjZSA9IHdpbj8uQ1NTO1xuXHRjb25zdCBmYWN0b3J5TmFtZSA9IGNzc1VuaXRGYWN0b3J5TmFtZSh1bml0KTtcblx0Y29uc3QgZmFjdG9yeSA9IENTU05hbWVzcGFjZT8uW2ZhY3RvcnlOYW1lXTtcblx0aWYgKHR5cGVvZiBmYWN0b3J5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWN0b3J5LmNhbGwoQ1NTTmFtZXNwYWNlLCB2YWx1ZSk7XG5cdGNvbnN0IENTU1VuaXRWYWx1ZUN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIFwiQ1NTVW5pdFZhbHVlXCIpO1xuXHRpZiAodHlwZW9mIENTU1VuaXRWYWx1ZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgVHlwZWQgT00gZG9lcyBub3Qgc3VwcG9ydCBDU1MgdW5pdCBcIiR7dW5pdH1cImApO1xuXHRyZXR1cm4gbmV3IENTU1VuaXRWYWx1ZUN0b3IodmFsdWUsIGNzc1VuaXRDb25zdHJ1Y3Rvck5hbWUodW5pdCkpO1xufTtcbnZhciBpc1N0eWxlVmFsdWUgPSAodmFsKSA9PiBoYXNUeXBlZE9NICYmIHZhbCBpbnN0YW5jZW9mIENTU1N0eWxlVmFsdWU7XG52YXIgaXNVbml0VmFsdWUgPSAodmFsKSA9PiBoYXNUeXBlZE9NICYmIHZhbCBpbnN0YW5jZW9mIENTU1VuaXRWYWx1ZTtcbnZhciBxdWVyeUZpcnN0RGVlcCA9IChyb290LCBzZWxlY3RvcikgPT4ge1xuXHRpZiAoIXJvb3QgfHwgIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgdHJ5UXVlcnkgPSAoc2NvcGUpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaGl0ID0gc2NvcGUucXVlcnlTZWxlY3Rvcj8uKHNlbGVjdG9yKTtcblx0XHRcdHJldHVybiBoaXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGhpdCA6IG51bGw7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGRpcmVjdCA9IHRyeVF1ZXJ5KHJvb3QpO1xuXHRpZiAoZGlyZWN0KSByZXR1cm4gZGlyZWN0O1xuXHRpZiAocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgcm9vdC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgaW5uZXIgPSBxdWVyeUZpcnN0RGVlcChyb290LnNoYWRvd1Jvb3QsIHNlbGVjdG9yKTtcblx0XHRpZiAoaW5uZXIpIHJldHVybiBpbm5lcjtcblx0fVxuXHRpZiAodHlwZW9mIHJvb3QucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblx0Zm9yIChjb25zdCBlbCBvZiByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKSB7XG5cdFx0aWYgKCFlbC5zaGFkb3dSb290KSBjb250aW51ZTtcblx0XHRjb25zdCBoaXQgPSBxdWVyeUZpcnN0RGVlcChlbC5zaGFkb3dSb290LCBzZWxlY3Rvcik7XG5cdFx0aWYgKGhpdCkgcmV0dXJuIGhpdDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9sYXllcnMudHNcbnZhciBjc3NMYXllck9yZGVyID0gKC4uLmdyb3VwcykgPT4ge1xuXHRjb25zdCBzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3QgbmFtZXMgPSBbXTtcblx0Zm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcblx0XHRpZiAoZ3JvdXAgPT0gbnVsbCkgY29udGludWU7XG5cdFx0Y29uc3QgbGlzdCA9IHR5cGVvZiBncm91cCA9PT0gXCJzdHJpbmdcIiA/IFtncm91cF0gOiBncm91cDtcblx0XHRmb3IgKGNvbnN0IHJhdyBvZiBsaXN0KSB7XG5cdFx0XHRjb25zdCBuYW1lID0gU3RyaW5nKHJhdyB8fCBcIlwiKS50cmltKCk7XG5cdFx0XHRpZiAoIW5hbWUgfHwgc2Vlbi5oYXMobmFtZSkpIGNvbnRpbnVlO1xuXHRcdFx0c2Vlbi5hZGQobmFtZSk7XG5cdFx0XHRuYW1lcy5wdXNoKG5hbWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbmFtZXMubGVuZ3RoID8gYEBsYXllciAke25hbWVzLmpvaW4oXCIsIFwiKX07YCA6IFwiXCI7XG59O1xudmFyIHZlZWxhQ2FzY2FkZU9yZGVyID0gKCkgPT4gY3NzTGF5ZXJPcmRlcihWRUVMQV9DQVNDQURFX0xBWUVSUyk7XG52YXIgbWFrZUhvc3RMYXllck9yZGVyID0gKGV4dHJhKSA9PiBjc3NMYXllck9yZGVyKFVYX0hPU1RfTEFZRVJTLCBleHRyYSk7XG52YXIgY3NzTGF5ZXJCbG9jayA9IChsYXllck5hbWUsIGNzc1RleHQpID0+IHtcblx0Y29uc3QgYm9keSA9IChjc3NUZXh0IHx8IFwiXCIpLnRyaW0oKTtcblx0aWYgKCFsYXllck5hbWUgfHwgIWJvZHkpIHJldHVybiBcIlwiO1xuXHRyZXR1cm4gYEBsYXllciAke2xheWVyTmFtZX0ge1xcbiR7Ym9keX1cXG59YDtcbn07XG52YXIgd3JhcENzc0xheWVyID0gKGNzc1RleHQsIGxheWVyTmFtZSkgPT4gbGF5ZXJOYW1lID8gYEBsYXllciAke2xheWVyTmFtZX0geyAke2Nzc1RleHR9IH1gIDogY3NzVGV4dDtcbnZhciBub3JtYWxpemVDc3NGb3JMYXllciA9IChsYXllck5hbWUsIGNzc1RleHQpID0+IHtcblx0Y29uc3QgdHJpbW1lZCA9IChjc3NUZXh0IHx8IFwiXCIpLnRyaW0oKTtcblx0aWYgKCF0cmltbWVkKSByZXR1cm4gXCJcIjtcblx0aWYgKC9eQGxheWVyXFxiLy50ZXN0KHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDtcblx0cmV0dXJuIGNzc0xheWVyQmxvY2sobGF5ZXJOYW1lLCB0cmltbWVkKTtcbn07XG52YXIgdW53cmFwT3V0ZXJMYXllckJsb2NrID0gKGNzcywgZXhwZWN0ZWROYW1lKSA9PiB7XG5cdGNvbnN0IG1hdGNoID0gY3NzLm1hdGNoKExBWUVSX09QRU4pO1xuXHRpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4cGVjdGVkTmFtZSAmJiBtYXRjaFsxXSAhPT0gZXhwZWN0ZWROYW1lKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgb3BlbiA9IG1hdGNoWzBdLmxhc3RJbmRleE9mKFwie1wiKTtcblx0bGV0IGRlcHRoID0gMDtcblx0Zm9yIChsZXQgaSA9IG9wZW47IGkgPCBjc3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjaCA9IGNzc1tpXTtcblx0XHRpZiAoY2ggPT09IFwie1wiKSBkZXB0aCsrO1xuXHRcdGVsc2UgaWYgKGNoID09PSBcIn1cIikge1xuXHRcdFx0ZGVwdGgtLTtcblx0XHRcdGlmIChkZXB0aCA9PT0gMCkge1xuXHRcdFx0XHRpZiAoY3NzLnNsaWNlKGkgKyAxKS50cmltKCkpIHJldHVybiBudWxsO1xuXHRcdFx0XHRyZXR1cm4gY3NzLnNsaWNlKG9wZW4gKyAxLCBpKS50cmltKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciB1bndyYXBDc3NMYXllciA9IChjc3NUZXh0LCBsYXllck5hbWUpID0+IHtcblx0Y29uc3Qgc3RyaXBwZWQgPSBzdHJpcENzc1ByZWFtYmxlKGNzc1RleHQpO1xuXHRyZXR1cm4gdW53cmFwT3V0ZXJMYXllckJsb2NrKHN0cmlwcGVkLCBsYXllck5hbWUpID8/IHN0cmlwcGVkO1xufTtcbnZhciBjc3NJbXBvcnRXaXRoTGF5ZXIgPSAodXJsLCBsYXllciA9IFwiXCIpID0+IGBAaW1wb3J0IHVybChcIiR7dXJsfVwiKSAke2xheWVyICYmIHR5cGVvZiBsYXllciA9PT0gXCJzdHJpbmdcIiA/IGBsYXllcigke2xheWVyfSlgIDogXCJcIn07YDtcbnZhciBVWF9QUkVMT0FEX0hPU1RfQ1NTID0gY3NzTGF5ZXJCbG9jayhcInV4LXByZWxvYWRcIiwgXCI6aG9zdCB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cIik7XG52YXIgZ2V0T3JDcmVhdGVMYXllclJ1bGUgPSAoc2hlZXQsIGxheWVyTmFtZSkgPT4ge1xuXHRpZiAoIXNoZWV0IHx8ICFsYXllck5hbWUpIHJldHVybiB2b2lkIDA7XG5cdGNvbnN0IHJ1bGVzID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSk7XG5cdGNvbnN0IGV4aXN0aW5nID0gcnVsZXMuZmluZCgocnVsZSkgPT4gaXNMYXllckJsb2NrUnVsZShydWxlKSAmJiBydWxlLm5hbWUgPT09IGxheWVyTmFtZSk7XG5cdGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXHR0cnkge1xuXHRcdGNvbnN0IHJ1bGVJbmRleCA9IHNoZWV0Lmluc2VydFJ1bGUoY3NzRW1wdHlMYXllclJ1bGUobGF5ZXJOYW1lKSwgcnVsZXMubGVuZ3RoKTtcblx0XHRjb25zdCBjcmVhdGVkID0gc2hlZXQuY3NzUnVsZXM/LltydWxlSW5kZXhdO1xuXHRcdHJldHVybiBpc0xheWVyQmxvY2tSdWxlKGNyZWF0ZWQpID8gY3JlYXRlZCA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcHJvcGVydHkudHNcbnZhciB0b2tlbml6ZU51bWVyaWNDU1MkMSA9IChzb3VyY2UpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gW107XG5cdGxldCBjdXJzb3IgPSAwO1xuXHR3aGlsZSAoY3Vyc29yIDwgc291cmNlLmxlbmd0aCkge1xuXHRcdGNvbnN0IHJlc3QgPSBzb3VyY2Uuc2xpY2UoY3Vyc29yKTtcblx0XHRjb25zdCB3aGl0ZXNwYWNlID0gL15cXHMrLy5leGVjKHJlc3QpO1xuXHRcdGlmICh3aGl0ZXNwYWNlKSB7XG5cdFx0XHRjdXJzb3IgKz0gd2hpdGVzcGFjZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyID0gL14oPzpcXGQqXFwuXFxkK3xcXGQrXFwuP1xcZCopKD86W2VFXVsrLV0/XFxkKyk/Ly5leGVjKHJlc3QpO1xuXHRcdGlmIChudW1iZXIpIHtcblx0XHRcdGN1cnNvciArPSBudW1iZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29uc3QgdW5pdE1hdGNoID0gQ1NTX1VOSVRfVE9LRU5fUkUuZXhlYyhzb3VyY2Uuc2xpY2UoY3Vyc29yKSk7XG5cdFx0XHRjb25zdCB1bml0ID0gdW5pdE1hdGNoPy5bMF0gPz8gbnVsbDtcblx0XHRcdGlmICh1bml0TWF0Y2gpIGN1cnNvciArPSB1bml0TWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcIm51bWJlclwiLFxuXHRcdFx0XHR2YWx1ZTogTnVtYmVyKG51bWJlclswXSksXG5cdFx0XHRcdHVuaXQ6IHVuaXQgPT0gbnVsbCA/IG51bGwgOiB1bml0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSAvXlthLXpBLVpfXVthLXpBLVowLTlfLV0qLy5leGVjKHJlc3QpO1xuXHRcdGlmIChpZGVudGlmaWVyKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwiaWRlbnRpZmllclwiLFxuXHRcdFx0XHR2YWx1ZTogaWRlbnRpZmllclswXS50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvciArPSBpZGVudGlmaWVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBzeW1ib2wgPSByZXN0WzBdO1xuXHRcdGlmIChbXG5cdFx0XHRcIitcIixcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCIqXCIsXG5cdFx0XHRcIi9cIixcblx0XHRcdFwiKFwiLFxuXHRcdFx0XCIpXCIsXG5cdFx0XHRcIixcIlxuXHRcdF0uaW5jbHVkZXMoc3ltYm9sKSkge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcInN5bWJvbFwiLFxuXHRcdFx0XHR2YWx1ZTogc3ltYm9sXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvcisrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgdG9rZW4gbmVhciBcIiR7cmVzdH1cImApO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xudmFyIE51bWVyaWNUeXBlZE9NUGFyc2VyJDEgPSBjbGFzcyB7XG5cdHRva2Vucztcblx0d2luO1xuXHRpbmRleCA9IDA7XG5cdGNvbnN0cnVjdG9yKHRva2Vucywgd2luKSB7XG5cdFx0dGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy53aW4gPSB3aW47XG5cdH1cblx0cGFyc2UoKSB7XG5cdFx0Y29uc3Qgcm9vdCA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRpZiAodGhpcy5pbmRleCAhPT0gdGhpcy50b2tlbnMubGVuZ3RoKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIHRyYWlsaW5nIGV4cHJlc3Npb25cIik7XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblx0Y3VycmVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdH1cblx0Y29uc3VtZSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cIik7XG5cdFx0dGhpcy5pbmRleCsrO1xuXHRcdHJldHVybiB0b2tlbjtcblx0fVxuXHRjb25zdW1lU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwic3ltYm9sXCIgfHwgdG9rZW4udmFsdWUgIT09IHN5bWJvbCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBFeHBlY3RlZCBcIiR7c3ltYm9sfVwiYCk7XG5cdH1cblx0bWF0Y2hlc1N5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudCgpO1xuXHRcdHJldHVybiB0b2tlbj8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gc3ltYm9sO1xuXHR9XG5cdGNyZWF0ZU1hdGgobmFtZSwgLi4udmFsdWVzKSB7XG5cdFx0Y29uc3QgQ29uc3RydWN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih0aGlzLndpbiwgbmFtZSk7XG5cdFx0aWYgKHR5cGVvZiBDb25zdHJ1Y3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKC4uLnZhbHVlcyk7XG5cdH1cblx0cGFyc2VTdW0oKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlUHJvZHVjdCgpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLmtpbmQgIT09IFwic3ltYm9sXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIHN1bSBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIrXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFN1bVwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgcmlnaHQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHBhcnNlUHJvZHVjdCgpIHtcblx0XHRsZXQgdmFsdWUgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiKlwiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCIvXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBwcm9kdWN0IG9wZXJhdG9yXCIpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLnZhbHVlID09PSBcIipcIikgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhQcm9kdWN0XCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoSW52ZXJ0XCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVVuYXJ5KCkge1xuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCIrXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIi1cIikpIHtcblx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgdGhpcy5wYXJzZVVuYXJ5KCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVByaW1hcnkoKTtcblx0fVxuXHRwYXJzZVByaW1hcnkoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCB0b2tlbi51bml0ID8/IFwibnVtYmVyXCIsIHRva2VuLnZhbHVlKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKHRva2VuLnZhbHVlKTtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIG51bWVyaWMgdmFsdWVcIik7XG5cdH1cblx0cGFyc2VGdW5jdGlvbihuYW1lKSB7XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJjYWxjXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVzID0gW107XG5cdFx0aWYgKCF0aGlzLm1hdGNoZXNTeW1ib2woXCIpXCIpKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIixcIikpIHtcblx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwibWluXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtaW4oKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNaW5cIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWF4XCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtYXgoKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNYXhcIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwiY2xhbXBcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcImNsYW1wKCkgcmVxdWlyZXMgdGhyZWUgdmFsdWVzXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhDbGFtcFwiLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHR9XG59O1xudmFyIHBhcnNlVG9UeXBlZE9NID0gKGNzc1ZhbHVlLCB3aW4pID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCB0b2tlbnMgPSB0b2tlbml6ZU51bWVyaWNDU1MkMShjc3NWYWx1ZSk7XG5cdFx0cmV0dXJuIG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlciQxKHRva2Vucywgd2luKS5wYXJzZSgpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciBzZXRQcm9wZXJ0eUlmTm90RXF1YWwgPSAoc3R5bGVSZWYsIGtlYmFiLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFzdHlsZVJlZiB8fCAha2ViYWIpIHJldHVybjtcblx0aWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRpZiAoc3R5bGVSZWYuZ2V0UHJvcGVydHlWYWx1ZShrZWJhYikgIT09IFwiXCIpIHN0eWxlUmVmLnJlbW92ZVByb3BlcnR5KGtlYmFiKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHN0eWxlUmVmLmdldFByb3BlcnR5VmFsdWUoa2ViYWIpICE9PSB2YWx1ZSkgc3R5bGVSZWYuc2V0UHJvcGVydHkoa2ViYWIsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eVR5cGVkID0gKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRpZiAoIWVsZW1lbnQgfHwgIW5hbWUpIHJldHVybiBlbGVtZW50O1xuXHRjb25zdCBrZWJhYiA9IGNhbWVsVG9LZWJhYihuYW1lKTtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbGVtZW50LnN0eWxlO1xuXHRjb25zdCBzdHlsZU1hcFJlZiA9IGVsZW1lbnQuYXR0cmlidXRlU3R5bGVNYXAgPz8gZWxlbWVudC5zdHlsZU1hcDtcblx0aWYgKCFoYXNUeXBlZE9NIHx8ICFzdHlsZU1hcFJlZikgcmV0dXJuIHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayhlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG5cdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXcgPz8gZ2xvYmFsVGhpcztcblx0bGV0IHZhbCA9IGhhc1ZhbHVlKHZhbHVlKSAmJiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuXHRpZiAodmFsID09IG51bGwpIHtcblx0XHRzdHlsZU1hcFJlZi5kZWxldGU/LihrZWJhYik7XG5cdFx0aWYgKHN0eWxlUmVmKSBzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBudWxsLCBpbXBvcnRhbmNlKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbCkpIHtcblx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdGlmIChpc1VuaXRWYWx1ZSh2YWwpICYmIGlzVW5pdFZhbHVlKG9sZCkpIHtcblx0XHRcdGlmIChvbGQudmFsdWUgPT09IHZhbC52YWx1ZSAmJiBvbGQudW5pdCA9PT0gdmFsLnVuaXQpIHJldHVybiBlbGVtZW50O1xuXHRcdH0gZWxzZSBpZiAob2xkID09PSB2YWwpIHJldHVybiBlbGVtZW50O1xuXHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgdmFsKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAodHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikge1xuXHRcdGlmIChDU1M/Lm51bWJlciAmJiAha2ViYWIuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG5cdFx0XHRjb25zdCBuZXdWYWwgPSBDU1MubnVtYmVyKHZhbCk7XG5cdFx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdFx0aWYgKGlzVW5pdFZhbHVlKG9sZCkgJiYgb2xkLnZhbHVlID09PSBuZXdWYWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IG5ld1ZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgbmV3VmFsKTtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoL1xcYihjYWxjfG1pbnxtYXh8Y2xhbXApXFxzKlxcKC8udGVzdCh2YWwpKSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSBwYXJzZVRvVHlwZWRPTSh2YWwsIHdpbik7XG5cdFx0XHRpZiAocGFyc2VkKSB0cnkge1xuXHRcdFx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIHBhcnNlZCk7XG5cdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0XHRjb25zdCBtYXliZU51bSA9IHRyeVN0cmluZ0FzTnVtYmVyKHZhbCk7XG5cdFx0aWYgKHR5cGVvZiBtYXliZU51bSA9PT0gXCJudW1iZXJcIiAmJiBDU1M/Lm51bWJlciAmJiAha2ViYWIuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG5cdFx0XHRjb25zdCBuZXdWYWwgPSBDU1MubnVtYmVyKG1heWJlTnVtKTtcblx0XHRcdGNvbnN0IG9sZCA9IHN0eWxlTWFwUmVmLmdldChrZWJhYik7XG5cdFx0XHRpZiAoaXNVbml0VmFsdWUob2xkKSAmJiBvbGQudmFsdWUgPT09IG5ld1ZhbC52YWx1ZSAmJiBvbGQudW5pdCA9PT0gbmV3VmFsLnVuaXQpIHJldHVybiBlbGVtZW50O1xuXHRcdFx0c3R5bGVNYXBSZWYuc2V0KGtlYmFiLCBuZXdWYWwpO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIHZhbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrID0gKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRpZiAoIWVsZW1lbnQgfHwgIW5hbWUpIHJldHVybiBlbGVtZW50O1xuXHRjb25zdCBrZWJhYiA9IGNhbWVsVG9LZWJhYihuYW1lKTtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbGVtZW50LnN0eWxlO1xuXHRpZiAoIXN0eWxlUmVmKSByZXR1cm4gZWxlbWVudDtcblx0bGV0IHZhbCA9IGhhc1ZhbHVlKHZhbHVlKSAmJiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuXHRpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbCkpIHZhbCA9IHRyeVN0cmluZ0FzTnVtYmVyKHZhbCkgPz8gdmFsO1xuXHRpZiAodmFsID09IG51bGwpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBudWxsLCBpbXBvcnRhbmNlKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbCkpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eSA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0cmV0dXJuIGhhc1R5cGVkT00gPyBzZXRTdHlsZVByb3BlcnR5VHlwZWQoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UpIDogc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgaGFuZGxlU3R5bGVDaGFuZ2UgPSAoZWwsIHByb3AsIHZhbCkgPT4ge1xuXHRjb25zdCBzdHlsZVJlZiA9IGVsPy5zdHlsZTtcblx0aWYgKCFwcm9wIHx8IHR5cGVvZiBwcm9wICE9PSBcInN0cmluZ1wiIHx8ICFlbCB8fCAhc3R5bGVSZWYpIHJldHVybiBlbDtcblx0JGF2b2lkVHJpZ2dlcih2YWwsICgpID0+IHtcblx0XHRpZiAoaXNWYWwodmFsKSB8fCBoYXNWYWx1ZSh2YWwpIHx8IGlzVmFsdWVVbml0KHZhbCkpIHNldFN0eWxlUHJvcGVydHkoZWwsIHByb3AsIHZhbCk7XG5cdFx0ZWxzZSBpZiAodmFsID09IG51bGwpIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KGNhbWVsVG9LZWJhYihwcm9wKSk7XG5cdH0pO1xuXHRyZXR1cm4gZWw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hlZXRzLnRzXG52YXIgc2V0U3R5bGVJblJ1bGUgPSAoc2VsZWN0b3IsIG5hbWUsIHZhbHVlKSA9PiB7XG5cdHJldHVybiBzZXRTdHlsZVByb3BlcnR5KGdldFN0eWxlUnVsZShzZWxlY3RvciksIG5hbWUsIHZhbHVlKTtcbn07XG52YXIgc2V0U3R5bGVSdWxlID0gKHNlbGVjdG9yLCBzaGVldCkgPT4ge1xuXHRjb25zdCBydWxlID0gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yKTtcblx0T2JqZWN0LmVudHJpZXMoc2hlZXQpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFZhbHVlXSkgPT4gc2V0U3R5bGVQcm9wZXJ0eShydWxlLCBwcm9wTmFtZSwgcHJvcFZhbHVlKSk7XG5cdHJldHVybiBydWxlO1xufTtcbnZhciBsb2FkU3R5bGVTaGVldCA9IChpbmxpbmUsIGJhc2UsIGxheWVyID0gXCJcIiwgaW50ZWdyaXR5KSA9PiB7XG5cdGNvbnN0IGxvYWQgPSBmZXRjaEFuZENhY2hlKGlubGluZSk7XG5cdGNvbnN0IHVybCA9IHR5cGVvZiBpbmxpbmUgPT0gXCJzdHJpbmdcIiA/IFVSTC5jYW5QYXJzZShpbmxpbmUpID8gaW5saW5lIDogbG9hZCA6IGxvYWQ7XG5cdGlmIChiYXNlPy5bMF0pIGJhc2VbMF0uZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoYmFzZSAmJiB1cmwgJiYgdHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSBzZXRTdHlsZVVSTChiYXNlLCB1cmwsIGxheWVyKTtcblx0aWYgKGJhc2U/LlswXSAmJiAoIVVSTC5jYW5QYXJzZShpbmxpbmUpIHx8IGludGVncml0eSkgJiYgYmFzZT8uWzBdIGluc3RhbmNlb2YgSFRNTExpbmtFbGVtZW50KSB7fVxuXHRyZXR1cm4gcHJvbWlzZU9yRGlyZWN0KGxvYWQsIChyZXMpID0+IHtcblx0XHRpZiAoYmFzZT8uWzBdICYmIHJlcykge1xuXHRcdFx0c2V0U3R5bGVVUkwoYmFzZSwgcmVzLCBsYXllcik7XG5cdFx0XHRiYXNlPy5bMF0uc2V0QXR0cmlidXRlKFwibG9hZGVkXCIsIFwiXCIpO1xuXHRcdH1cblx0fSk/LmNhdGNoPy4oKGVycm9yKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgc3R5bGUgc2hlZXQ6XCIsIGVycm9yKTtcblx0fSk7XG59O1xudmFyIGxvYWRCbG9iU3R5bGUgPSAoaW5saW5lKSA9PiB7XG5cdGNvbnN0IHN0eWxlID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSA6IG51bGw7XG5cdGlmIChzdHlsZSkgc3R5bGUuZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoc3R5bGUpIHtcblx0XHRPYmplY3QuYXNzaWduKHN0eWxlLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdFx0dHlwZTogXCJ0ZXh0L2Nzc1wiLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwic2FtZS1vcmlnaW5cIlxuXHRcdH0pO1xuXHRcdHN0eWxlLmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xuXHRcdGxvYWRTdHlsZVNoZWV0KGlubGluZSwgW3N0eWxlLCBcImhyZWZcIl0pO1xuXHRcdHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlKTtcblx0XHRyZXR1cm4gc3R5bGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGxvYWRJbmxpbmVTdHlsZSA9IChpbmxpbmUsIHJvb3RFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudD8uaGVhZCA6IG51bGwsIGxheWVyID0gXCJcIikgPT4ge1xuXHRjb25zdCBQTEFDRSA9IHJvb3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPy4oXCJoZWFkXCIpID8/IHJvb3RFbGVtZW50O1xuXHRpZiAodHlwZW9mIEhUTUxIZWFkRWxlbWVudCAhPSBcInVuZGVmaW5lZFwiICYmIFBMQUNFIGluc3RhbmNlb2YgSFRNTEhlYWRFbGVtZW50KSByZXR1cm4gbG9hZEJsb2JTdHlsZShpbmxpbmUpO1xuXHRjb25zdCBzdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpIDogbnVsbDtcblx0aWYgKHN0eWxlKSB7XG5cdFx0c3R5bGUuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG5cdFx0bG9hZFN0eWxlU2hlZXQoaW5saW5lLCBbc3R5bGUsIFwiaW5uZXJIVE1MXCJdLCBsYXllcik7XG5cdFx0UExBQ0U/LnByZXBlbmQ/LihzdHlsZSk7XG5cdFx0cmV0dXJuIHN0eWxlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBzZXRQcm9wZXJ0eSA9ICh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRyZXR1cm4gc2V0U3R5bGVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgcHJlbG9hZFN0eWxlID0gKHN0eWxlcykgPT4ge1xuXHRyZXR1cm4gbG9hZEFzQWRvcHRlZChzdHlsZXMsIFwiXCIpO1xufTtcbnZhciByZW1lbWJlckFkb3B0ZWRUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIGNzc1RleHQpO1xuXHRhZG9wdGVkRmlsbGVkLmFkZChzaGVldCk7XG59O1xudmFyIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHN0b3JlZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpO1xuXHRpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuXHRmb3IgKGNvbnN0IFtrZXksIG1hcHBlZF0gb2YgYWRvcHRlZE1hcCkgaWYgKG1hcHBlZCA9PT0gc2hlZXQgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGtleTtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQgPSAoc2hlZXQsIGNzc1RleHQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCB0ZXh0ID0gY3NzVGV4dCB8fCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHNoZWV0KTtcblx0Y29uc3QgY291bnQgPSByZWFkU2hlZXRSdWxlQ291bnQoc2hlZXQpO1xuXHRpZiAoY291bnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0aWYgKGNvdW50ID4gMCkge1xuXHRcdGFkb3B0ZWRGaWxsZWQuYWRkKHNoZWV0KTtcblx0XHRpZiAodGV4dCAmJiAhYWRvcHRlZEFwcGxpZWRUZXh0LmhhcyhzaGVldCkpIGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghdGV4dCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCB0ZXh0KSkge1xuXHRcdHJlbWVtYmVyQWRvcHRlZFRleHQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgYXBwbHlBZG9wdGVkU3R5bGVUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGlmICghc2hlZXQgfHwgIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRzaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycm9yPy5tZXNzYWdlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKCEobWVzc2FnZS5pbmNsdWRlcyhcIkBpbXBvcnQgcnVsZXMgYXJlIG5vdCBhbGxvd2VkXCIpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoXCJAaW1wb3J0XCIpICYmIG1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgYWxsb3dlZFwiKSkpIGNvbnNvbGUud2FybihcIltET01dIEZhaWxlZCB0byBhcHBseSBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGVycm9yKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgc2hlZXRGb3JCbG9iID0gKGJsb2IpID0+IHtcblx0bGV0IHNoZWV0ID0gYWRvcHRlZEJsb2JNYXAuZ2V0KGJsb2IpO1xuXHRpZiAoIXNoZWV0KSB7XG5cdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGFkb3B0ZWRCbG9iTWFwLnNldChibG9iLCBzaGVldCk7XG5cdH1cblx0cmV0dXJuIHNoZWV0O1xufTtcbnZhciBsb2FkQXNBZG9wdGVkID0gKHN0eWxlcywgbGF5ZXJOYW1lID0gbnVsbCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBsb2FkQXNBZG9wdGVkVW5zYWZlKHN0eWxlcywgbGF5ZXJOYW1lKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbRE9NXSBsb2FkQXNBZG9wdGVkIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xudmFyIGxvYWRBc0Fkb3B0ZWRVbnNhZmUgPSAoc3R5bGVzLCBsYXllck5hbWUgPSBudWxsKSA9PiB7XG5cdGlmICghc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiICYmIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudChzdHlsZXMpKSB7XG5cdFx0bG9hZElubGluZVN0eWxlKHN0eWxlcywgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiBhZG9wdGVkTWFwPy5oYXM/LihzdHlsZXMpKSB7XG5cdFx0Y29uc3QgY2FjaGVkID0gYWRvcHRlZE1hcC5nZXQoc3R5bGVzKTtcblx0XHRjb25zdCBhcHBsaWVkID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChjYWNoZWQpIHx8IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0ZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChjYWNoZWQsIGFwcGxpZWQpO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoY2FjaGVkKSkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goY2FjaGVkKTtcblx0XHRyZXR1cm4gY2FjaGVkO1xuXHR9XG5cdGlmICgoc3R5bGVzIGluc3RhbmNlb2YgQmxvYiB8fCBzdHlsZXMgaW5zdGFuY2VvZiBGaWxlKSAmJiBhZG9wdGVkQmxvYk1hcD8uaGFzPy4oc3R5bGVzKSkge1xuXHRcdGNvbnN0IGNhY2hlZCA9IGFkb3B0ZWRCbG9iTWFwLmdldChzdHlsZXMpO1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoY2FjaGVkKTtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiAhZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLmluY2x1ZGVzKGNhY2hlZCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKGNhY2hlZCk7XG5cdFx0cmV0dXJuIGNhY2hlZDtcblx0fVxuXHRpZiAoIXN0eWxlcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHNoZWV0ID0gdHlwZW9mIHN0eWxlcyA9PSBcInN0cmluZ1wiID8gZ2V0T3JJbnNlcnRDb21wdXRlZChhZG9wdGVkTWFwLCBzdHlsZXMsICgpID0+IG5ldyBDU1NTdHlsZVNoZWV0KCkpIDogc2hlZXRGb3JCbG9iKHN0eWxlcyk7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiAhdXJsQ2FuUGFyc2Uoc3R5bGVzKSkge1xuXHRcdGNvbnN0IGxheWVyV3JhcHBlZCA9IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0YWRvcHRlZE1hcC5zZXQoc3R5bGVzLCBzaGVldCk7XG5cdFx0aWYgKCFhcHBseUFkb3B0ZWRTdHlsZVRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCkpIHtcblx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMpO1xuXHRcdH0gZWxzZSByZW1lbWJlckFkb3B0ZWRUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpO1xuXHRcdHJldHVybiBzaGVldDtcblx0fSBlbHNlIHByb21pc2VPckRpcmVjdChmZXRjaEFzSW5saW5lKHN0eWxlcyksIChjYWNoZWQpID0+IHtcblx0XHRhZG9wdGVkTWFwLnNldChjYWNoZWQsIHNoZWV0KTtcblx0XHRpZiAoY2FjaGVkKSB7XG5cdFx0XHRpZiAoY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50KGNhY2hlZCkpIHtcblx0XHRcdFx0cmVtb3ZlQWRvcHRlZChzaGVldCk7XG5cdFx0XHRcdGFkb3B0ZWRNYXAuZGVsZXRlKGNhY2hlZCk7XG5cdFx0XHRcdGFkb3B0ZWRCbG9iTWFwLmRlbGV0ZShzdHlsZXMpO1xuXHRcdFx0XHRsb2FkSW5saW5lU3R5bGUoY2FjaGVkLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNoZWV0O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbGF5ZXJXcmFwcGVkID0gd3JhcENzc0xheWVyKGNhY2hlZCwgbGF5ZXJOYW1lKTtcblx0XHRcdGlmICghYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpKSB7XG5cdFx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0XHRhZG9wdGVkTWFwLmRlbGV0ZShjYWNoZWQpO1xuXHRcdFx0XHRhZG9wdGVkQmxvYk1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdFx0bG9hZElubGluZVN0eWxlKGNhY2hlZCwgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0XHR9IGVsc2UgcmVtZW1iZXJBZG9wdGVkVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKTtcblx0XHRcdHJldHVybiBzaGVldDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2hlZXQ7XG59O1xudmFyIGNvbGxlY3RTdHlsZUhvc3RzID0gKG5vZGUsIGludG8pID0+IHtcblx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgPT09IDMpIHJldHVybjtcblx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDExKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkTm9kZXMgfHwgW10pIGNvbGxlY3RTdHlsZUhvc3RzKGNoaWxkLCBpbnRvKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGlzU3R5bGVIb3N0KG5vZGUpKSBpbnRvLmFkZChub2RlKTtcblx0aWYgKHR5cGVvZiBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuO1xuXHR0cnkge1xuXHRcdGZvciAoY29uc3QgZWwgb2Ygbm9kZS5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkgaWYgKGlzU3R5bGVIb3N0KGVsKSkgaW50by5hZGQoZWwpO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIG5vdGlmeVN0eWxlVHJlZUhvc3RzID0gKGhvc3RzLCByZWFzb24gPSBcInRyZWVcIikgPT4ge1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0aWYgKCFpc1N0eWxlSG9zdChlbCkpIGNvbnRpbnVlO1xuXHRcdGZvciAoY29uc3QgZm4gb2Ygc3R5bGVUcmVlSG9va3MpIGZuKGVsLCByZWFzb24pO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyU3R5bGVUcmVlSG9vayA9IChmbikgPT4ge1xuXHRpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybjtcblx0c3R5bGVUcmVlSG9va3MuYWRkKGZuKTtcbn07XG52YXIgb2JzZXJ2ZVN0eWxlVHJlZSA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHJvb3Q7XG5cdGlmIChzdHlsZVRyZWVPYnNlcnZlZC5oYXMocm9vdCkpIHJldHVybiByb290O1xuXHRzdHlsZVRyZWVPYnNlcnZlZC5hZGQocm9vdCk7XG5cdHN0eWxlVHJlZVJvb3RzLmFkZChyb290KTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuXHRcdGNvbnN0IGhvc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IHJlYyBvZiByZWNvcmRzKSBpZiAocmVjLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiByZWMuYWRkZWROb2RlcykgY29sbGVjdFN0eWxlSG9zdHMobm9kZSwgaG9zdHMpO1xuXHRcdFx0Y29uc3Qgc2NvcGUgPSByZWMudGFyZ2V0Py5nZXRSb290Tm9kZT8uKCk7XG5cdFx0XHRpZiAoc2NvcGUgaW5zdGFuY2VvZiBTaGFkb3dSb290ICYmIGlzU3R5bGVIb3N0KHNjb3BlLmhvc3QpKSB7XG5cdFx0XHRcdGNvbnN0IHNoZWV0cyA9IHNjb3BlLmFkb3B0ZWRTdHlsZVNoZWV0cztcblx0XHRcdFx0aWYgKCFzaGVldHMgfHwgc2hlZXRzLmxlbmd0aCA9PT0gMCkgaG9zdHMuYWRkKHNjb3BlLmhvc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVjLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIHJlYy50YXJnZXQpIHtcblx0XHRcdGlmIChpc1N0eWxlSG9zdChyZWMudGFyZ2V0KSkgaG9zdHMuYWRkKHJlYy50YXJnZXQpO1xuXHRcdH1cblx0XHRub3RpZnlTdHlsZVRyZWVIb3N0cyhob3N0cywgXCJtdXRhdGlvblwiKTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7XG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWy4uLlNUWUxFX1RIRU1FX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHtcblx0XHRzdHlsZVRyZWVPYnNlcnZlZC5kZWxldGUocm9vdCk7XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblx0cmV0dXJuIHJvb3Q7XG59O1xudmFyIHJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMgPSAoKSA9PiB7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0Y29uc3QgY2FuUGFyc2UgPSB0eXBlb2YgVVJMICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkwuY2FuUGFyc2UgPT09IFwiZnVuY3Rpb25cIjtcblx0Zm9yIChjb25zdCBba2V5LCBzaGVldF0gb2YgYWRvcHRlZE1hcCkge1xuXHRcdGlmICghc2hlZXQgfHwgdHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XG5cdFx0aWYgKGNhblBhcnNlICYmIFVSTC5jYW5QYXJzZShrZXkpKSBjb250aW51ZTtcblx0XHRjb25zdCB0ZXh0ID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChzaGVldCkgfHwga2V5O1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoc2hlZXQsIHRleHQpO1xuXHRcdGlmIChkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0fVxufTtcbnZhciByZW1vdmVBZG9wdGVkID0gKHNoZWV0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgdGFyZ2V0ID0gdHlwZW9mIHNoZWV0ID09PSBcInN0cmluZ1wiID8gYWRvcHRlZE1hcC5nZXQoc2hlZXQpIDogc2hlZXQ7XG5cdGlmICghdGFyZ2V0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBzaGVldHMgPSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHM7XG5cdGNvbnN0IGlkeCA9IHNoZWV0cy5pbmRleE9mKHRhcmdldCk7XG5cdGlmIChpZHggIT09IC0xKSB7XG5cdFx0c2hlZXRzLnNwbGljZShpZHgsIDEpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgZ2V0VHJhbnNmb3JtID0gKGVsKSA9PiB7XG5cdGlmIChlbD8uY29tcHV0ZWRTdHlsZU1hcCkge1xuXHRcdGNvbnN0IG1hdHJpeCA9IGVsLmNvbXB1dGVkU3R5bGVNYXAoKS5nZXQoXCJ0cmFuc2Zvcm1cIik/LnRvTWF0cml4Py4oKTtcblx0XHRpZiAobWF0cml4KSByZXR1cm4gbWF0cml4O1xuXHR9IGVsc2UgaWYgKGVsKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRyZXR1cm4gbmV3IERPTU1hdHJpeChzdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZT8uKFwidHJhbnNmb3JtXCIpKTtcblx0fVxuXHRyZXR1cm4gbmV3IERPTU1hdHJpeCgpO1xufTtcbnZhciBnZXRUcmFuc2Zvcm1PcmlnaW4gPSAoZWwpID0+IHtcblx0Y29uc3QgY3NzT3JpZ2luID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk/LmdldFByb3BlcnR5VmFsdWU/LihcInRyYW5zZm9ybS1vcmlnaW5cIikgfHwgYDUwJSA1MCVgO1xuXHRyZXR1cm4gcGFyc2VPcmlnaW4oY3NzT3JpZ2luLCBlbCk7XG59O1xudmFyIGdldFByb3BlcnR5VmFsdWUgPSAoc3JjLCBuYW1lKSA9PiB7XG5cdGlmIChcImNvbXB1dGVkU3R5bGVNYXBcIiBpbiBzcmMpIHtcblx0XHRjb25zdCB2YWwgPSBzcmM/LmNvbXB1dGVkU3R5bGVNYXA/LigpPy5nZXQobmFtZSk7XG5cdFx0cmV0dXJuIHZhbCBpbnN0YW5jZW9mIENTU1VuaXRWYWx1ZSA/IHZhbD8udmFsdWUgfHwgMCA6IHZhbD8udG9TdHJpbmc/LigpO1xuXHR9XG5cdGlmIChzcmMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZT8uKHNyYywgXCJcIik7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQoY3M/LmdldFByb3BlcnR5VmFsdWU/LihuYW1lKT8ucmVwbGFjZT8uKFwicHhcIiwgXCJcIikpIHx8IDA7XG5cdH1cblx0cmV0dXJuIHBhcnNlRmxvYXQoKHNyYz8uc3R5bGUgPz8gc3JjKS5nZXRQcm9wZXJ0eVZhbHVlPy4obmFtZSk/LnJlcGxhY2U/LihcInB4XCIsIFwiXCIpKSB8fCAwO1xufTtcbnZhciBnZXRFbGVtZW50Wm9vbSA9IChlbGVtZW50KSA9PiB7XG5cdGxldCB6b29tID0gMSwgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuXHR3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcblx0XHRpZiAoXCJjdXJyZW50Q1NTWm9vbVwiIGluIGN1cnJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q1NTWm9vbSA9IGN1cnJlbnRFbGVtZW50LmN1cnJlbnRDU1Nab29tO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50Q1NTWm9vbSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHpvb20gKj0gY3VycmVudENTU1pvb207XG5cdFx0fVxuXHRcdGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCk7XG5cdFx0aWYgKHN0eWxlLnpvb20gJiYgc3R5bGUuem9vbSAhPT0gXCJub3JtYWxcIikgcmV0dXJuIHpvb20gKj0gcGFyc2VGbG9hdChzdHlsZS56b29tKTtcblx0XHRpZiAoc3R5bGUuem9vbSAmJiBzdHlsZS56b29tICE9PSBcIm5vcm1hbFwiIHx8IFwiY3VycmVudENTU1pvb21cIiBpbiBjdXJyZW50RWxlbWVudCkgcmV0dXJuIHpvb207XG5cdFx0Y3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudD8ub2Zmc2V0UGFyZW50ID8/IGN1cnJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuXHR9XG5cdHJldHVybiB6b29tO1xufTtcbnZhciBnZXRQeFZhbHVlID0gKGVsZW1lbnQsIG5hbWUpID0+IHtcblx0cmV0dXJuIGdldFByb3BlcnR5VmFsdWU/LihlbGVtZW50LCBuYW1lKTtcbn07XG52YXIgZ2V0UGFkZGluZyA9IChzcmMsIGF4aXMpID0+IHtcblx0aWYgKGF4aXMgPT0gXCJpbmxpbmVcIikgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctaW5saW5lLXN0YXJ0XCIpICsgZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1pbmxpbmUtZW5kXCIpO1xuXHRyZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1ibG9jay1zdGFydFwiKSArIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctYmxvY2stZW5kXCIpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2Nzc29tLnRzXG52YXIgc3R5bGVFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikgOiBudWxsO1xuaWYgKHN0eWxlRWxlbWVudCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKT8uYXBwZW5kQ2hpbGQ/LihzdHlsZUVsZW1lbnQpO1xuXHRzdHlsZUVsZW1lbnQuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG59XG52YXIgc2V0U3R5bGVVUkwgPSAoYmFzZSwgdXJsLCBsYXllciA9IFwiXCIpID0+IHtcblx0YmFzZVswXVtiYXNlWzFdXSA9IGJhc2VbMV0gPT0gXCJpbm5lckhUTUxcIiA/IGNzc0ltcG9ydFdpdGhMYXllcih1cmwsIGxheWVyKSA6IHVybDtcbn07XG52YXIgc2V0U3R5bGVSdWxlcyA9IChjbGFzc2VzKSA9PiB7XG5cdHJldHVybiBjbGFzc2VzPy5tYXA/LigoYXJncykgPT4gc2V0U3R5bGVSdWxlKC4uLmFyZ3MpKTtcbn07XG52YXIgZ2V0U3R5bGVMYXllciA9IChsYXllck5hbWUsIHNoZWV0KSA9PiB7XG5cdHNoZWV0IHx8PSBzdHlsZUVsZW1lbnQ/LnNoZWV0O1xuXHRyZXR1cm4gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG59O1xudmFyIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciA9IChlbGVtZW50KSA9PiB7XG5cdGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VzY2FwZUNTU0lkZW50aWZpZXIoZWxlbWVudC5pZCl9YDtcblx0bGV0IHN0eWxlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtc3R5bGUtaWRcIik7XG5cdGlmICghc3R5bGVJZCkge1xuXHRcdHN0eWxlSWQgPSBjcmVhdGVTdHlsZUlkKCk7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIsIHN0eWxlSWQpO1xuXHR9XG5cdHJldHVybiBgW2RhdGEtc3R5bGUtaWQ9XCIke2VzY2FwZUNTU0lkZW50aWZpZXIoc3R5bGVJZCl9XCJdYDtcbn07XG52YXIgam9pblNjb3BlZFNlbGVjdG9yID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRzZWxlY3RvciA9IHNlbGVjdG9yLnRyaW0oKTtcblx0aWYgKCFzY29wZSkgcmV0dXJuIHNlbGVjdG9yO1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gc2NvcGU7XG5cdGlmIChzZWxlY3Rvci5zdGFydHNXaXRoKFwiOjpcIikpIHJldHVybiBgJHtzY29wZX0ke3NlbGVjdG9yfWA7XG5cdHJldHVybiBgJHtzY29wZX0gJHtzZWxlY3Rvcn1gO1xufTtcbnZhciBmaW5kU3R5bGVSdWxlID0gKHNoZWV0LCBmdWxsU2VsZWN0b3IsIHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQ/LmNzc1J1bGVzIHx8IFtdKTtcblx0Y29uc3QgZXhwZWN0ZWQgPSBmdWxsU2VsZWN0b3IudHJpbSgpO1xuXHRjb25zdCByZXF1ZXN0ZWQgPSBzZWxlY3Rvci50cmltKCk7XG5cdHJldHVybiBydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHtcblx0XHRpZiAoIShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IGFjdHVhbCA9IHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA/PyBcIlwiO1xuXHRcdGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVxdWVzdGVkICYmIGFjdHVhbC5lbmRzV2l0aChyZXF1ZXN0ZWQpKSByZXR1cm4gYWN0dWFsLnNsaWNlKDAsIGFjdHVhbC5sZW5ndGggLSByZXF1ZXN0ZWQubGVuZ3RoKS50cmltKCkgPT09IHNjb3BlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59O1xudmFyIGdldFN0eWxlUnVsZSA9IChzZWxlY3Rvciwgc2hlZXQsIGxheWVyTmFtZSA9IFwidXgtcXVlcnlcIiwgYmFzaXMgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBpc1NoYWRvd1Jvb3QoYmFzaXMpIHx8IGlzRG9jdW1lbnQoYmFzaXMpID8gYmFzaXMgOiBiYXNpcz8uZ2V0Um9vdE5vZGU/LigpID8/ICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpO1xuXHRjb25zdCBiYXNpc0VsZW1lbnQgPSBpc0Nzc0VsZW1lbnQoYmFzaXMpID8gYmFzaXMgOiBudWxsO1xuXHRsZXQgc2NvcGUgPSBcIlwiO1xuXHRpZiAoYmFzaXNFbGVtZW50KSBzY29wZSA9IGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvcihiYXNpc0VsZW1lbnQpO1xuXHRlbHNlIGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHNjb3BlID0gXCI6aG9zdFwiO1xuXHRlbHNlIGlmIChpc0RvY3VtZW50KHJvb3QpKSBzY29wZSA9IFwiOnJvb3RcIjtcblx0bGV0IHN0eWxlRWxlbWVudCA9IG51bGw7XG5cdGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHtcblx0XHRzdHlsZUVsZW1lbnQgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLXV4LXF1ZXJ5XVwiKTtcblx0XHRpZiAoIXN0eWxlRWxlbWVudCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXV4LXF1ZXJ5XCIsIFwiXCIpO1xuXHRcdFx0cm9vdC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXHRcdH1cblx0fSBlbHNlIHN0eWxlRWxlbWVudCA9IHN0eWxlRWxlbWVudEdsb2JhbCgpO1xuXHRzaGVldCB8fD0gc3R5bGVFbGVtZW50Py5zaGVldDtcblx0aWYgKCFzaGVldCkgcmV0dXJuO1xuXHRpZiAobGF5ZXJOYW1lKSByZXR1cm4gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yLCBnZXRTdHlsZUxheWVyKGxheWVyTmFtZSwgc2hlZXQpLCBudWxsLCBiYXNpcyk7XG5cdGNvbnN0IGZ1bGxTZWxlY3RvciA9IGpvaW5TY29wZWRTZWxlY3RvcihzY29wZSwgc2VsZWN0b3IpO1xuXHRsZXQgcnVsZUlkID0gZmluZFN0eWxlUnVsZShzaGVldCwgZnVsbFNlbGVjdG9yLCBzY29wZSwgc2VsZWN0b3IpO1xuXHRpZiAocnVsZUlkID09PSAtMSkgcnVsZUlkID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtmdWxsU2VsZWN0b3J9IHt9YCk7XG5cdHJldHVybiBzaGVldC5jc3NSdWxlcz8uW3J1bGVJZF07XG59O1xuZnVuY3Rpb24gc3R5bGVFbGVtZW50R2xvYmFsKCkge1xuXHRyZXR1cm4gc3R5bGVFbGVtZW50ID8/IG51bGw7XG59XG52YXIgZmV0Y2hBbmRDYWNoZSA9ICh1cmwpID0+IHtcblx0aWYgKCF1cmwpIHJldHVybiBudWxsO1xuXHRpZiAoY2FjaGVNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZU1hcC5nZXQodXJsKTtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChibG9iVVJMTWFwLmhhcyh1cmwpKSByZXR1cm4gYmxvYlVSTE1hcC5nZXQodXJsKTtcblx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh1cmwpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0Y2FjaGVNYXAuc2V0KGJ1cmwsIGJ1cmwpO1xuXHRcdHJldHVybiBidXJsO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cdFx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdFx0Y2FjaGVNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0XHRjYWNoZU1hcC5zZXQoYnVybCwgYnVybCk7XG5cdFx0XHRyZXR1cm4gYnVybDtcblx0XHR9KTtcblx0XHRjYWNoZU1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmICh0eXBlb2YgdXJsID09IFwic3RyaW5nXCIpIHtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3VybF0sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXHRcdGNvbnN0IGJ1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdGNhY2hlTWFwLnNldChidXJsLCBidXJsKTtcblx0XHRyZXR1cm4gYnVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBmZXRjaEFzSW5saW5lID0gKHVybCkgPT4ge1xuXHRpZiAoIXVybCkgcmV0dXJuIFwiXCI7XG5cdGlmIChjYWNoZUNvbnRlbnRNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZUNvbnRlbnRNYXAuZ2V0KHVybCkgPz8gXCJcIjtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChjYWNoZUJsb2JDb250ZW50TWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVCbG9iQ29udGVudE1hcC5nZXQodXJsKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb21pc2VkID0gdXJsPy50ZXh0Py4oKT8udGhlbj8uKCh0ZXh0KSA9PiB7XG5cdFx0XHRjYWNoZUJsb2JDb250ZW50TWFwLnNldCh1cmwsIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSk7XG5cdFx0Y2FjaGVCbG9iQ29udGVudE1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cdFx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9KTtcblx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHVybCk7XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBnZXRBZG9wdGVkU3R5bGVSdWxlID0gKHNlbGVjdG9yLCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0aWYgKCFzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHJldHVybiBudWxsO1xuXHRjb25zdCByb290ID0gaXNTaGFkb3dSb290KGJhc2lzKSA/IGJhc2lzIDogYmFzaXM/LmdldFJvb3ROb2RlID8gYmFzaXMuZ2V0Um9vdE5vZGUoeyBjb21wb3NlZDogdHJ1ZSB9KSA6IG51bGw7XG5cdGNvbnN0IGluU2hhZG93ID0gaXNTaGFkb3dSb290KHJvb3QpO1xuXHRjb25zdCB0YXJnZXRBZG9wdGVkU2hlZXRzID0gaW5TaGFkb3cgPyByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA6IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzIDogbnVsbDtcblx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgc2VsZWN0b3JLZXkgPSBgJHtsYXllck5hbWUgfHwgXCJcIn06JHtzZWxlY3Rvcn1gO1xuXHRsZXQgc2hlZXQ7XG5cdGlmIChpblNoYWRvdykge1xuXHRcdGxldCBzaGFkb3dNYXAgPSBhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAuZ2V0KHJvb3QpO1xuXHRcdGlmICghc2hhZG93TWFwKSB7XG5cdFx0XHRzaGFkb3dNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0YWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLnNldChyb290LCBzaGFkb3dNYXApO1xuXHRcdH1cblx0XHRzaGVldCA9IHNoYWRvd01hcC5nZXQoc2VsZWN0b3JLZXkpO1xuXHRcdGlmICghc2hlZXQpIHtcblx0XHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRcdHNoYWRvd01hcC5zZXQoc2VsZWN0b3JLZXksIHNoZWV0KTtcblx0XHRcdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHRhcmdldEFkb3B0ZWRTaGVldHMucHVzaChzaGVldCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNoZWV0ID0gYWRvcHRlZFNlbGVjdG9yTWFwLmdldChzZWxlY3RvcktleSk7XG5cdFx0aWYgKCFzaGVldCkge1xuXHRcdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdFx0YWRvcHRlZFNlbGVjdG9yTWFwLnNldChzZWxlY3RvcktleSwgc2hlZXQpO1xuXHRcdFx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzLmluY2x1ZGVzKHNoZWV0KSkgdGFyZ2V0QWRvcHRlZFNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR9XG5cdH1cblx0aWYgKGxheWVyTmFtZSkge1xuXHRcdGxldCBsYXllclJ1bGU7XG5cdFx0aWYgKGluU2hhZG93KSB7XG5cdFx0XHRsZXQgc2hhZG93TGF5ZXJNYXAgPSBhZG9wdGVkU2hhZG93TGF5ZXJNYXAuZ2V0KHJvb3QpO1xuXHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRzaGFkb3dMYXllck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0XHRcdGFkb3B0ZWRTaGFkb3dMYXllck1hcC5zZXQocm9vdCwgc2hhZG93TGF5ZXJNYXApO1xuXHRcdFx0fVxuXHRcdFx0bGF5ZXJSdWxlID0gc2hhZG93TGF5ZXJNYXAuZ2V0KGxheWVyTmFtZSk7XG5cdFx0fSBlbHNlIGxheWVyUnVsZSA9IGFkb3B0ZWRMYXllck1hcC5nZXQobGF5ZXJOYW1lKTtcblx0XHRpZiAoIWxheWVyUnVsZSkge1xuXHRcdFx0bGF5ZXJSdWxlID0gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlKSB7XG5cdFx0XHRcdGlmIChpblNoYWRvdykge1xuXHRcdFx0XHRcdGxldCBzaGFkb3dMYXllck1hcCA9IGFkb3B0ZWRTaGFkb3dMYXllck1hcC5nZXQocm9vdCk7XG5cdFx0XHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRcdFx0c2hhZG93TGF5ZXJNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRcdFx0YWRvcHRlZFNoYWRvd0xheWVyTWFwLnNldChyb290LCBzaGFkb3dMYXllck1hcCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNoYWRvd0xheWVyTWFwLnNldChsYXllck5hbWUsIGxheWVyUnVsZSk7XG5cdFx0XHRcdH0gZWxzZSBhZG9wdGVkTGF5ZXJNYXAuc2V0KGxheWVyTmFtZSwgbGF5ZXJSdWxlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGxheWVyUnVsZSkge1xuXHRcdFx0bGV0IGxheWVyUnVsZUluZGV4ID0gQXJyYXkuZnJvbShsYXllclJ1bGUuY3NzUnVsZXMgfHwgW10pLmZpbmRJbmRleCgocikgPT4gciBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiByLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPT09IHNlbGVjdG9yPy50cmltPy4oKSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlSW5kZXggPT09IC0xKSB0cnkge1xuXHRcdFx0XHRsYXllclJ1bGVJbmRleCA9IGxheWVyUnVsZS5pbnNlcnRSdWxlKGAke3NlbGVjdG9yfSB7fWAsIGxheWVyUnVsZS5jc3NSdWxlcy5sZW5ndGgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsYXllclJ1bGUuY3NzUnVsZXNbbGF5ZXJSdWxlSW5kZXhdO1xuXHRcdH1cblx0fVxuXHRsZXQgcnVsZUluZGV4ID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZmluZEluZGV4KChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA9PT0gc2VsZWN0b3I/LnRyaW0/LigpKTtcblx0aWYgKHJ1bGVJbmRleCA9PT0gLTEpIHRyeSB7XG5cdFx0cnVsZUluZGV4ID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtzZWxlY3Rvcn0ge31gLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgcnVsZSA9IHNoZWV0LmNzc1J1bGVzW3J1bGVJbmRleF07XG5cdGlmIChydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSByZXR1cm4gcnVsZTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYmFrZXIudHNcbnZhciBpbnZhbGlkYXRpb25SZWFkeSA9IGZhbHNlO1xudmFyIGxhc3RGaW5nZXJwcmludCA9IFwiXCI7XG52YXIgcmViYWtlUXVldWVkID0gZmFsc2U7XG52YXIgbm9ybWFsaXplQ2F0ZWdvcmllcyA9IChjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGxpc3QgPSBbLi4uY2F0ZWdvcmllcz8ubGVuZ3RoID8gY2F0ZWdvcmllcyA6IERFRkFVTFRfQ0FURUdPUklFU107XG5cdHJldHVybiBbLi4ubmV3IFNldChsaXN0LmZpbHRlcihCb29sZWFuKSldO1xufTtcbnZhciBjYWNoZUtleUZvciA9IChzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEgPSBCQUtFX1NDUkVFTl9NRURJQSkgPT4gYCR7c2VsZWN0b3J9XFwwJHtbLi4uY2F0ZWdvcmllc10uc29ydCgpLmpvaW4oXCIsXCIpfVxcMCR7bWVkaWEgPT09IGZhbHNlID8gXCJcIiA6IG1lZGlhfWA7XG52YXIgYmFrZVRoZW1lRmluZ2VycHJpbnQgPSAocm9vdCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG51bGwsIGVsKSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKHJvb3QpO1xuXHRjb25zdCBwYXJ0cyA9IFtcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS10aGVtZVwiKSB8fCByb290LmdldEF0dHJpYnV0ZT8uKFwidGhlbWVcIikgfHwgXCJcIixcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS1jb2xvci1zY2hlbWVcIikgfHwgcm9vdC5nZXRBdHRyaWJ1dGU/LihcImNvbG9yLXNjaGVtZVwiKSB8fCBjcy5jb2xvclNjaGVtZSB8fCBcIlwiLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWJhc2UtY29sb3JcIikudHJpbSgpLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWNvbG9yLXByaW1hcnlcIikudHJpbSgpXG5cdF07XG5cdGlmIChlbCAmJiBlbCAhPT0gcm9vdCkge1xuXHRcdGNvbnN0IGxvY2FsID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0cGFydHMucHVzaChlbC5nZXRBdHRyaWJ1dGU/LihcImRhdGEtdGhlbWVcIikgfHwgXCJcIiwgbG9jYWwuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYmFzZS1jb2xvclwiKS50cmltKCkpO1xuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKFwifFwiKTtcbn07XG52YXIgdGFrZVByb3AgPSAoaW50bywgY3MsIG5hbWUpID0+IHtcblx0Y29uc3QgdmFsdWUgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpPy50cmltKCk7XG5cdGlmICghdmFsdWUpIHJldHVybjtcblx0aW50by5zZXQobmFtZSwgdmFsdWUpO1xufTtcbnZhciBDT0xPUl9QUk9QX1NFVCA9IG5ldyBTZXQoQ1NTX0NPTE9SX1BST1BFUlRJRVMpO1xudmFyIGJha2VEZWNsUmFuayA9IChuYW1lKSA9PiB7XG5cdGlmIChuYW1lLnN0YXJ0c1dpdGgoXCItLVwiKSkgcmV0dXJuIDI7XG5cdGlmIChDT0xPUl9QUk9QX1NFVC5oYXMobmFtZSkpIHJldHVybiAwO1xuXHRyZXR1cm4gMTtcbn07XG52YXIgY29sbGVjdEJha2VkRGVjbGFyYXRpb25zID0gKGNzLCBjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGludG8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCBzZXQgPSBuZXcgU2V0KGNhdGVnb3JpZXMpO1xuXHRpZiAoc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19DT0xPUl9QUk9QRVJUSUVTKSB0YWtlUHJvcChpbnRvLCBjcywgbmFtZSk7XG5cdGlmIChzZXQuaGFzKFwidHlwb2dyYXBoeVwiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJtb3Rpb25cIikpIGZvciAoY29uc3QgbmFtZSBvZiBDU1NfTU9USU9OX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJ0b2tlbnNcIikgfHwgc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChsZXQgaSA9IDA7IGkgPCBjcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IG5hbWUgPSBjcy5pdGVtKGkpO1xuXHRcdGlmICghbmFtZS5zdGFydHNXaXRoKFwiLS1cIikpIGNvbnRpbnVlO1xuXHRcdGlmIChzZXQuaGFzKFwidG9rZW5zXCIpIHx8IGlzQ29sb3JUb2tlbihuYW1lKSkgdGFrZVByb3AoaW50bywgY3MsIG5hbWUpO1xuXHR9XG5cdHJldHVybiBpbnRvO1xufTtcbnZhciBidWlsZEJha2VkQ3NzVGV4dCA9IChzZWxlY3RvciwgZGVjbGFyYXRpb25zLCBsYXllciA9IEJBS0VfTEFZRVIsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IHtcblx0Y29uc3QgYm9keSA9IFtdO1xuXHRjb25zdCByb3dzID0gWy4uLmRlY2xhcmF0aW9uc10uc29ydCgoYSwgYikgPT4gYmFrZURlY2xSYW5rKGFbMF0pIC0gYmFrZURlY2xSYW5rKGJbMF0pKTtcblx0Zm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHJvd3MpIHtcblx0XHRpZiAoIW5hbWUgfHwgIXZhbHVlKSBjb250aW51ZTtcblx0XHRjb25zdCBiYWtlZCA9IHZhbHVlLnJlcGxhY2UoL1xccyohaW1wb3J0YW50XFxzKiQvaSwgXCJcIikudHJpbSgpO1xuXHRcdGlmICghYmFrZWQpIGNvbnRpbnVlO1xuXHRcdGJvZHkucHVzaChgJHtuYW1lfTogJHtiYWtlZH0gIWltcG9ydGFudDtgKTtcblx0fVxuXHRpZiAoIWJvZHkubGVuZ3RoKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgcnVsZSA9IGAke3NlbGVjdG9yfSB7XFxuJHtib2R5LmpvaW4oXCJcXG5cIil9XFxufWA7XG5cdGNvbnN0IGlubmVyID0gbWVkaWEgPyBgQG1lZGlhICR7bWVkaWF9IHtcXG4ke3J1bGV9XFxufWAgOiBydWxlO1xuXHRyZXR1cm4gW2Nzc0xheWVyT3JkZXIobGF5ZXIpLCBjc3NMYXllckJsb2NrKGxheWVyLCBpbm5lcildLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXCIpO1xufTtcbnZhciBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzID0gKHJvb3QpID0+IHtcblx0aWYgKCFyb290IHx8IHJvb3Qubm9kZVR5cGUgIT09IDEpIHJldHVybiBbXTtcblx0Y29uc3QgaG9zdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbcm9vdF0pO1xuXHRjb25zdCBjaHJvbWUgPSByb290LmNsb3Nlc3Q/LihCQUtFX1NDUkVFTl9DSFJPTUUuam9pbihcIiwgXCIpKTtcblx0aWYgKGNocm9tZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBob3N0cy5hZGQoY2hyb21lKTtcblx0cmV0dXJuIFsuLi5ob3N0c107XG59O1xudmFyIGJha2VBbHNvUXVlcmllc0ZvciA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuIFtdO1xuXHRpZiAocm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKFwidmlldy1zZXR0aW5nc1wiKSB8fCByb290LmNsb3Nlc3Q/LihcIi52aWV3LXNldHRpbmdzXCIpKSByZXR1cm4gQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUztcblx0aWYgKHJvb3QuY2xhc3NMaXN0Py5jb250YWlucyhcInZpZXctZXhwbG9yZXJcIikgfHwgcm9vdC5jbG9zZXN0Py4oXCIudmlldy1leHBsb3JlclwiKSB8fCByb290LnF1ZXJ5U2VsZWN0b3I/LihcInVpLWZpbGUtbWFuYWdlclwiKSkgcmV0dXJuIEJBS0VfU0NSRUVOX0FMU09fRVhQTE9SRVI7XG5cdHJldHVybiBbXTtcbn07XG52YXIgY29sbGVjdEJha2VBbHNvSG9zdHMgPSAocm9vdCwgcXVlcmllcyA9IEJBS0VfU0NSRUVOX0FMU08sIHBpZXJjZVNoYWRvdyA9IHRydWUpID0+IHtcblx0aWYgKCFyb290IHx8ICFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXHRjb25zdCByb290U2VsID0gZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yKHJvb3QpO1xuXHRjb25zdCBmaW5kID0gcGllcmNlU2hhZG93ID8gcXVlcnlGaXJzdERlZXAgOiAoc2NvcGUsIHNlbCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBoaXQgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbCk7XG5cdFx0XHRyZXR1cm4gaGl0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBoaXQgOiBudWxsO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBncm91cGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG5cdFx0Y29uc3QgcSA9IFN0cmluZyhxdWVyeSB8fCBcIlwiKS50cmltKCk7XG5cdFx0aWYgKCFxKSBjb250aW51ZTtcblx0XHRjb25zdCBlbCA9IGZpbmQocm9vdCwgcSk7XG5cdFx0aWYgKCFlbCB8fCBlbCA9PT0gcm9vdCkgY29udGludWU7XG5cdFx0Y29uc3Qgc2VsID0gZWwuZ2V0Um9vdE5vZGUoKSA9PT0gcm9vdC5nZXRSb290Tm9kZSgpID8gYCR7cm9vdFNlbH0gJHtxfWAgOiBxO1xuXHRcdGNvbnN0IGxpc3QgPSBncm91cGVkLmdldChlbCk7XG5cdFx0aWYgKGxpc3QpIHtcblx0XHRcdGlmICghbGlzdC5pbmNsdWRlcyhzZWwpKSBsaXN0LnB1c2goc2VsKTtcblx0XHR9IGVsc2UgZ3JvdXBlZC5zZXQoZWwsIFtzZWxdKTtcblx0fVxuXHRyZXR1cm4gWy4uLmdyb3VwZWRdLm1hcCgoW2VsLCBzZWxzXSkgPT4gKHtcblx0XHRlbCxcblx0XHRzZWxlY3Rvcjogc2Vscy5qb2luKFwiLCBcIilcblx0fSkpO1xufTtcbnZhciBhZG9wdGVkTGlzdCA9IChlbCkgPT4ge1xuXHRjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGU/LigpO1xuXHRpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09IFwidW5kZWZpbmVkXCIgJiYgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA/PyBudWxsO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzID8/IG51bGw7XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBhc3NpZ25BZG9wdGVkID0gKGVsLCBuZXh0KSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZT8uKCk7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0XHRyb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IG5leHQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IG5leHQ7XG5cdH0gY2F0Y2gge31cbn07XG52YXIgYWRvcHRTaGVldCA9IChlbCwgYmFrZWQpID0+IHtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGNvbnN0IGxpc3QgPSBhZG9wdGVkTGlzdChlbCk7XG5cdFx0aWYgKCFsaXN0KSByZXR1cm47XG5cdFx0aWYgKGxpc3QuaW5jbHVkZXMoYmFrZWQuc2hlZXQpKSB7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGxpc3QucHVzaChiYWtlZC5zaGVldCk7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGFzc2lnbkFkb3B0ZWQoZWwsIFsuLi5saXN0LCBiYWtlZC5zaGVldF0pO1xuXHRcdFx0YmFrZWQuYWRvcHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cdGlmIChiYWtlZC5zdHlsZUVsICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGlmICghYmFrZWQuc3R5bGVFbC5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuaGVhZD8uYXBwZW5kKGJha2VkLnN0eWxlRWwpO1xuXHRcdGJha2VkLmFkb3B0ZWQgPSB0cnVlO1xuXHR9XG59O1xudmFyIHVuYWRvcHRTaGVldCA9IChlbCwgYmFrZWQpID0+IHtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGNvbnN0IGxpc3QgPSBhZG9wdGVkTGlzdChlbCk7XG5cdFx0aWYgKGxpc3QpIHtcblx0XHRcdGNvbnN0IGlkeCA9IGxpc3QuaW5kZXhPZihiYWtlZC5zaGVldCk7XG5cdFx0XHRpZiAoaWR4ICE9PSAtMSkgdHJ5IHtcblx0XHRcdFx0bGlzdC5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRhc3NpZ25BZG9wdGVkKGVsLCBsaXN0LmZpbHRlcigoc2hlZXQpID0+IHNoZWV0ICE9PSBiYWtlZC5zaGVldCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRiYWtlZC5zdHlsZUVsPy5yZW1vdmUoKTtcblx0YmFrZWQuYWRvcHRlZCA9IGZhbHNlO1xufTtcbnZhciB3cml0ZUJha2VkQ3NzID0gKGJha2VkLCBjc3NUZXh0KSA9PiB7XG5cdGJha2VkLmNzc1RleHQgPSBjc3NUZXh0O1xuXHRpZiAoIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkgdHJ5IHtcblx0XHRiYWtlZC5zaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbc3R5bGUtbGliXSBiYWtlIHJlcGxhY2VTeW5jIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChiYWtlZC5zdHlsZUVsKSB7XG5cdFx0YmFrZWQuc3R5bGVFbC50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciByZW1lbWJlckNhY2hlID0gKGJha2VkLCBjYWNoZU1zKSA9PiB7XG5cdGNvbnN0IHByZXYgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGlmIChwcmV2Py50aW1lcikgY2xlYXJUaW1lb3V0KHByZXYudGltZXIpO1xuXHRjb25zdCBlbnRyeSA9IHtcblx0XHRjc3NUZXh0OiBiYWtlZC5jc3NUZXh0LFxuXHRcdGZpbmdlcnByaW50OiBiYWtlZC5maW5nZXJwcmludCxcblx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdHNlbGVjdG9yOiBiYWtlZC5zZWxlY3Rvcixcblx0XHRleHBpcmVzOiBEYXRlLm5vdygpICsgY2FjaGVNc1xuXHR9O1xuXHRpZiAoY2FjaGVNcyA+IDAgJiYgdHlwZW9mIHNldFRpbWVvdXQgPT09IFwiZnVuY3Rpb25cIikgZW50cnkudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpID09PSBlbnRyeSkgYmFrZWRDYWNoZS5kZWxldGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9LCBjYWNoZU1zKTtcblx0YmFrZWRDYWNoZS5zZXQoYmFrZWQuY2FjaGVLZXksIGVudHJ5KTtcbn07XG52YXIgZHJvcENhY2hlID0gKGNhY2hlS2V5KSA9PiB7XG5cdGNvbnN0IHByZXYgPSBiYWtlZENhY2hlLmdldChjYWNoZUtleSk7XG5cdGlmIChwcmV2Py50aW1lcikgY2xlYXJUaW1lb3V0KHByZXYudGltZXIpO1xuXHRiYWtlZENhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG59O1xudmFyIGNsZWFyQWxsQ2FjaGUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZW50cnkgb2YgYmFrZWRDYWNoZS52YWx1ZXMoKSkgaWYgKGVudHJ5LnRpbWVyKSBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpO1xuXHRiYWtlZENhY2hlLmNsZWFyKCk7XG59O1xudmFyIHBhcmtCYWtlZCA9IChlbCwgY2FjaGVNcyA9IERFRkFVTFRfQ0FDSEVfTVMpID0+IHtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoIWJha2VkKSByZXR1cm47XG5cdGlmIChiYWtlZC5hZG9wdGVkKSB1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0YmFrZWRMaXZlLmRlbGV0ZShlbCk7XG5cdGlmIChiYWtlZC5jc3NUZXh0KSByZW1lbWJlckNhY2hlKGJha2VkLCBjYWNoZU1zKTtcbn07XG52YXIgcmVzdW1lQmFrZWQgPSAoZWwsIGNhY2hlTXMgPSBERUZBVUxUX0NBQ0hFX01TKSA9PiB7XG5cdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKCFiYWtlZCB8fCAhZWwuaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgZmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCh2b2lkIDAsIGVsKTtcblx0Y29uc3QgY2FjaGVkID0gYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpO1xuXHRpZiAoIWJha2VkLmNzc1RleHQgJiYgY2FjaGVkICYmIGNhY2hlZC5maW5nZXJwcmludCA9PT0gZmluZ2VycHJpbnQpIHtcblx0XHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjYWNoZWQuY3NzVGV4dCk7XG5cdFx0YmFrZWQuZmluZ2VycHJpbnQgPSBjYWNoZWQuZmluZ2VycHJpbnQ7XG5cdH1cblx0aWYgKCFiYWtlZC5jc3NUZXh0IHx8IGJha2VkLmZpbmdlcnByaW50ICE9PSBmaW5nZXJwcmludCkge1xuXHRcdGJha2VDb21wdXRlZFN0eWxlKGVsLCB7XG5cdFx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdFx0Y2FjaGVNcyxcblx0XHRcdGxheWVyOiBCQUtFX0xBWUVSXG5cdFx0fSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0YmFrZWRMaXZlLmFkZChlbCk7XG59O1xudmFyIGJha2VJTyA9IG51bGw7XG52YXIgZW5zdXJlQmFrZUlPID0gKCkgPT4ge1xuXHRpZiAoYmFrZUlPIHx8IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGJha2VJTztcblx0YmFrZUlPID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBlbCA9IGVudHJ5LnRhcmdldDtcblx0XHRcdGlmICghYmFrZWRTdHlsZXMuaGFzKGVsKSkgY29udGludWU7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZWwuaXNDb25uZWN0ZWQpIHJlc3VtZUJha2VkKGVsKTtcblx0XHRcdGVsc2UgcGFya0Jha2VkKGVsKTtcblx0XHR9XG5cdH0sIHsgdGhyZXNob2xkOiAwIH0pO1xuXHRyZXR1cm4gYmFrZUlPO1xufTtcbnZhciBlbnN1cmVCYWtlZFJlY29yZCA9IChlbCwgc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IHtcblx0bGV0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKGJha2VkKSB7XG5cdFx0YmFrZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRiYWtlZC5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcztcblx0XHRiYWtlZC5tZWRpYSA9IG1lZGlhO1xuXHRcdGJha2VkLmNhY2hlS2V5ID0gY2FjaGVLZXlGb3Ioc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhKTtcblx0XHRyZXR1cm4gYmFrZWQ7XG5cdH1cblx0Y29uc3QgY2FuQ29uc3RydWN0ID0gc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpO1xuXHRiYWtlZCA9IHtcblx0XHRzaGVldDogY2FuQ29uc3RydWN0ID8gbmV3IENTU1N0eWxlU2hlZXQoKSA6IG51bGwsXG5cdFx0c3R5bGVFbDogY2FuQ29uc3RydWN0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiksXG5cdFx0c2VsZWN0b3IsXG5cdFx0Y2F0ZWdvcmllcyxcblx0XHRjc3NUZXh0OiBcIlwiLFxuXHRcdGZpbmdlcnByaW50OiBcIlwiLFxuXHRcdGFkb3B0ZWQ6IGZhbHNlLFxuXHRcdGNhY2hlS2V5OiBjYWNoZUtleUZvcihzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEpLFxuXHRcdG1lZGlhXG5cdH07XG5cdGlmIChiYWtlZC5zdHlsZUVsKSB7XG5cdFx0YmFrZWQuc3R5bGVFbC5kYXRhc2V0LnV4QmFrZWQgPSBcIlwiO1xuXHRcdGJha2VkLnN0eWxlRWwuZGF0YXNldC5vd25lciA9IFwic3R5bGUtbGliXCI7XG5cdH1cblx0YmFrZWRTdHlsZXMuc2V0KGVsLCBiYWtlZCk7XG5cdGVuc3VyZUJha2VJTygpPy5vYnNlcnZlKGVsKTtcblx0cmV0dXJuIGJha2VkO1xufTtcbnZhciBmbHVzaFJlYmFrZSA9ICgpID0+IHtcblx0cmViYWtlUXVldWVkID0gZmFsc2U7XG5cdGNvbnN0IGJhdGNoID0gWy4uLnJlYmFrZUJhdGNoXTtcblx0cmViYWtlQmF0Y2guY2xlYXIoKTtcblx0Zm9yIChjb25zdCBlbCBvZiBiYXRjaCkge1xuXHRcdGlmICghZWwuaXNDb25uZWN0ZWQgfHwgIWJha2VkU3R5bGVzLmhhcyhlbCkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0XHRiYWtlQ29tcHV0ZWRTdHlsZShlbCwgYmFrZWQgPyB7XG5cdFx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdFx0c2VsZWN0b3I6IGJha2VkLnNlbGVjdG9yLFxuXHRcdFx0bWVkaWE6IGJha2VkLm1lZGlhXG5cdFx0fSA6IHt9KTtcblx0fVxufTtcbnZhciBzY2hlZHVsZVJlYmFrZSA9IChlbCkgPT4ge1xuXHRyZWJha2VCYXRjaC5hZGQoZWwpO1xuXHRpZiAocmViYWtlUXVldWVkKSByZXR1cm47XG5cdHJlYmFrZVF1ZXVlZCA9IHRydWU7XG5cdHF1ZXVlTWljcm90YXNrKGZsdXNoUmViYWtlKTtcbn07XG52YXIgaW52YWxpZGF0ZUJha2VkU3R5bGVzID0gKHJlYXNvbiA9IFwidGhlbWVcIikgPT4ge1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KCk7XG5cdGlmIChyZWFzb24gIT09IFwiZm9yY2VcIiAmJiBmaW5nZXJwcmludCA9PT0gbGFzdEZpbmdlcnByaW50ICYmIGxhc3RGaW5nZXJwcmludCkgcmV0dXJuO1xuXHRsYXN0RmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcblx0Y2xlYXJBbGxDYWNoZSgpO1xuXHRmb3IgKGNvbnN0IGVsIG9mIFsuLi5iYWtlZExpdmVdKSB7XG5cdFx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRcdGlmICghYmFrZWQpIHtcblx0XHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkLmNzc1RleHQgPSBcIlwiO1xuXHRcdGJha2VkLmZpbmdlcnByaW50ID0gXCJcIjtcblx0XHRzY2hlZHVsZVJlYmFrZShlbCk7XG5cdH1cbn07XG52YXIgZW5zdXJlQmFrZUludmFsaWRhdGlvbiA9ICgpID0+IHtcblx0aWYgKGludmFsaWRhdGlvblJlYWR5IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRpbnZhbGlkYXRpb25SZWFkeSA9IHRydWU7XG5cdGxhc3RGaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KCk7XG5cdHJlZ2lzdGVyU3R5bGVUcmVlSG9vaygoaG9zdCkgPT4ge1xuXHRcdGlmIChiYWtlVGhlbWVGaW5nZXJwcmludCgpICE9PSBsYXN0RmluZ2VycHJpbnQpIHtcblx0XHRcdGludmFsaWRhdGVCYWtlZFN0eWxlcyhcInN0eWxlLXRyZWVcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChob3N0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgYmFrZWRTdHlsZXMuaGFzKGhvc3QpKSBzY2hlZHVsZVJlYmFrZShob3N0KTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gaW52YWxpZGF0ZUJha2VkU3R5bGVzKFwidGhlbWUtYXR0clwiKSkub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsuLi5TVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHt9XG5cdHRyeSB7XG5cdFx0KG1hdGNoTWVkaWE/LihcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikpPy5hZGRFdmVudExpc3RlbmVyPy4oXCJjaGFuZ2VcIiwgKCkgPT4gaW52YWxpZGF0ZUJha2VkU3R5bGVzKFwiY29sb3Itc2NoZW1lXCIpKTtcblx0fSBjYXRjaCB7fVxufTtcbnZhciBiYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICghZWwgfHwgZWwubm9kZVR5cGUgIT09IDEpIHJldHVybiBudWxsO1xuXHRpZiAodHlwZW9mIGdldENvbXB1dGVkU3R5bGUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdGVuc3VyZUJha2VJbnZhbGlkYXRpb24oKTtcblx0Y29uc3QgY2F0ZWdvcmllcyA9IG5vcm1hbGl6ZUNhdGVnb3JpZXMob3B0aW9ucy5jYXRlZ29yaWVzKTtcblx0Y29uc3QgbGF5ZXIgPSBvcHRpb25zLmxheWVyIHx8IFwidXgtYmFrZWRcIjtcblx0Y29uc3QgY2FjaGVNcyA9IG9wdGlvbnMuY2FjaGVNcyA/PyAzZTQ7XG5cdGNvbnN0IG1lZGlhID0gb3B0aW9ucy5tZWRpYSA9PT0gdm9pZCAwID8gQkFLRV9TQ1JFRU5fTUVESUEgOiBvcHRpb25zLm1lZGlhO1xuXHRjb25zdCBzZWxlY3RvciA9IG9wdGlvbnMuc2VsZWN0b3I/LnRyaW0oKSB8fCBlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IoZWwpO1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KHZvaWQgMCwgZWwpO1xuXHRjb25zdCBiYWtlZCA9IGVuc3VyZUJha2VkUmVjb3JkKGVsLCBzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEpO1xuXHRiYWtlZC5maW5nZXJwcmludCA9IGZpbmdlcnByaW50O1xuXHRjb25zdCBjYWNoZWQgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGxldCBjc3NUZXh0ID0gXCJcIjtcblx0aWYgKGNhY2hlZCAmJiBjYWNoZWQuZmluZ2VycHJpbnQgPT09IGZpbmdlcnByaW50ICYmIGNhY2hlZC5jc3NUZXh0KSBjc3NUZXh0ID0gY2FjaGVkLmNzc1RleHQ7XG5cdGVsc2Uge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0Y3NzVGV4dCA9IGJ1aWxkQmFrZWRDc3NUZXh0KHNlbGVjdG9yLCBjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMoY3MsIGNhdGVnb3JpZXMpLCBsYXllciwgbWVkaWEpO1xuXHR9XG5cdGlmICghY3NzVGV4dCkge1xuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdHJldHVybiBiYWtlZDtcblx0fVxuXHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjc3NUZXh0KTtcblx0cmVtZW1iZXJDYWNoZShiYWtlZCwgY2FjaGVNcyk7XG5cdGlmIChpc0VsZW1lbnRWaXNpYmxlKGVsKSkge1xuXHRcdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuYWRkKGVsKTtcblx0fSBlbHNlIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0fVxuXHRyZXR1cm4gYmFrZWQ7XG59O1xudmFyIHVuYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIGtlZXBDYWNoZSA9IHRydWUpID0+IHtcblx0aWYgKCFlbCkgcmV0dXJuO1xuXHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmICghYmFrZWQpIHJldHVybjtcblx0dW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRiYWtlSU8/LnVub2JzZXJ2ZShlbCk7XG5cdGlmIChrZWVwQ2FjaGUgJiYgYmFrZWQuY3NzVGV4dCkgcmVtZW1iZXJDYWNoZShiYWtlZCwgREVGQVVMVF9DQUNIRV9NUyk7XG5cdGVsc2UgZHJvcENhY2hlKGJha2VkLmNhY2hlS2V5KTtcblx0YmFrZWRTdHlsZXMuZGVsZXRlKGVsKTtcbn07XG52YXIgcmViYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucykgPT4ge1xuXHRpZiAoIWVsKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoYmFrZWQpIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZC5jc3NUZXh0ID0gXCJcIjtcblx0XHRkcm9wQ2FjaGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9XG5cdHJldHVybiBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0aW9ucyA/PyAoYmFrZWQgPyB7XG5cdFx0Y2F0ZWdvcmllczogYmFrZWQuY2F0ZWdvcmllcyxcblx0XHRzZWxlY3RvcjogYmFrZWQuc2VsZWN0b3IsXG5cdFx0bWVkaWE6IGJha2VkLm1lZGlhXG5cdH0gOiB7fSkpO1xufTtcbnZhciBnZXRCYWtlZFN0eWxlID0gKGVsKSA9PiBlbCA/IGJha2VkU3R5bGVzLmdldChlbCkgOiB2b2lkIDA7XG52YXIgYmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBvcHRpb25zID0ge30pID0+IHtcblx0Y29uc3Qgb3B0cyA9IHtcblx0XHRtZWRpYTogQkFLRV9TQ1JFRU5fTUVESUEsXG5cdFx0cGllcmNlU2hhZG93OiBvcHRpb25zLnBpZXJjZVNoYWRvdyAhPT0gZmFsc2UsXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXHRjb25zdCBob3N0cyA9IGNvbGxlY3RCYWtlU2NyZWVuSG9zdHMocm9vdCk7XG5cdGNvbnN0IGV4dHJhcyA9IGNvbGxlY3RCYWtlQWxzb0hvc3RzKHJvb3QsIG9wdHMuYWxzbyA/PyBiYWtlQWxzb1F1ZXJpZXNGb3Iocm9vdCksIG9wdHMucGllcmNlU2hhZG93ICE9PSBmYWxzZSk7XG5cdGNvbnN0IG91dCA9IFtdO1xuXHRjb25zdCBmb2xsb3dlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0Y29uc3QgYmFrZWQgPSBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0cyk7XG5cdFx0aWYgKGJha2VkKSBvdXQucHVzaChiYWtlZCk7XG5cdH1cblx0Zm9yIChjb25zdCB7IGVsLCBzZWxlY3RvciB9IG9mIGV4dHJhcykge1xuXHRcdGlmIChob3N0cy5pbmNsdWRlcyhlbCkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZUNvbXB1dGVkU3R5bGUoZWwsIHtcblx0XHRcdC4uLm9wdHMsXG5cdFx0XHRzZWxlY3RvclxuXHRcdH0pO1xuXHRcdGlmIChiYWtlZCkgb3V0LnB1c2goYmFrZWQpO1xuXHRcdGZvbGxvd2Vycy5hZGQoZWwpO1xuXHR9XG5cdGlmIChyb290KSB7XG5cdFx0Y29uc3QgcHJldiA9IGJha2VkRm9sbG93ZXJzLmdldChyb290KTtcblx0XHRpZiAocHJldikge1xuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBwcmV2KSBpZiAoIWZvbGxvd2Vycy5oYXMoZWwpICYmICFob3N0cy5pbmNsdWRlcyhlbCkpIHVuYmFrZUNvbXB1dGVkU3R5bGUoZWwsIHRydWUpO1xuXHRcdH1cblx0XHRpZiAoZm9sbG93ZXJzLnNpemUpIGJha2VkRm9sbG93ZXJzLnNldChyb290LCBmb2xsb3dlcnMpO1xuXHRcdGVsc2UgYmFrZWRGb2xsb3dlcnMuZGVsZXRlKHJvb3QpO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59O1xudmFyIHVuYmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBrZWVwQ2FjaGUgPSB0cnVlKSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBmb2xsb3dlcnMgPSBiYWtlZEZvbGxvd2Vycy5nZXQocm9vdCk7XG5cdGJha2VkRm9sbG93ZXJzLmRlbGV0ZShyb290KTtcblx0Zm9yIChjb25zdCBlbCBvZiBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzKHJvb3QpKSB1bmJha2VDb21wdXRlZFN0eWxlKGVsLCBrZWVwQ2FjaGUpO1xuXHRpZiAoZm9sbG93ZXJzKSBmb3IgKGNvbnN0IGVsIG9mIGZvbGxvd2VycykgdW5iYWtlQ29tcHV0ZWRTdHlsZShlbCwga2VlcENhY2hlKTtcbn07XG52YXIgc2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzID0gKHJvb3QsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcnVuID0gKHJldHJ5TWlzcyA9IHRydWUpID0+IHtcblx0XHRiYWtlU2NyZWVuQ29sb3JzKHJvb3QsIG9wdGlvbnMpO1xuXHRcdGlmICghcmV0cnlNaXNzIHx8ICFyb290KSByZXR1cm47XG5cdFx0Y29uc3QgcXVlcmllcyA9IG9wdGlvbnM/LmFsc28gPz8gYmFrZUFsc29RdWVyaWVzRm9yKHJvb3QpO1xuXHRcdGNvbnN0IHBpZXJjZSA9IG9wdGlvbnM/LnBpZXJjZVNoYWRvdyAhPT0gZmFsc2U7XG5cdFx0aWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuO1xuXHRcdGlmIChxdWVyaWVzLnNvbWUoKHNlbCkgPT4gIShwaWVyY2UgPyBxdWVyeUZpcnN0RGVlcChyb290LCBzZWwpIDogcm9vdC5xdWVyeVNlbGVjdG9yKHNlbCkpKSAmJiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCIpIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBydW4oZmFsc2UpKTtcblx0fTtcblx0aWYgKCFyb290IHx8IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJ1bihmYWxzZSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBydW4odHJ1ZSkpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudC50c1xudmFyIHN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3cgPSAoYlRvKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBiVG8/LnNoYWRvd1Jvb3Q7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbykgfHwgW107XG5cdGZvciAoY29uc3Qgc2hlZXQgb2YgYWRvcHRlZFNoZWV0cykgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChzaGVldCk7XG5cdHRyeSB7XG5cdFx0Y29uc3QgbGl2ZSA9IHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzIHx8IFtdO1xuXHRcdHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gWy4uLmFkb3B0ZWRTaGVldHMuZmlsdGVyKChzKSA9PiAhbGl2ZS5pbmNsdWRlcyhzKSksIC4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5saXZlXSldO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCA9IChiVG8sIHNoZWV0KSA9PiB7XG5cdGxldCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbyk7XG5cdGlmICghYWRvcHRlZFNoZWV0cykgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuc2V0KGJUbywgYWRvcHRlZFNoZWV0cyA9IFtdKTtcblx0aWYgKHNoZWV0ICYmIGFkb3B0ZWRTaGVldHMuaW5kZXhPZihzaGVldCkgPCAwKSBhZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0KTtcblx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhiVG8pO1xufTtcbnZhciBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayA9IChiVG8sIGNzc1RleHQpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGJUbz8uc2hhZG93Um9vdDtcblx0aWYgKCFyb290IHx8ICFjc3NUZXh0KSByZXR1cm4gbnVsbDtcblx0bGV0IHN0eWxlID0gcm9vdC5xdWVyeVNlbGVjdG9yPy4oYHN0eWxlWyR7SE9TVF9DU1NfRkFMTEJBQ0t9XWApO1xuXHRpZiAoIXN0eWxlKSB7XG5cdFx0c3R5bGUgPSBsb2FkSW5saW5lU3R5bGUoY3NzVGV4dCwgcm9vdCwgXCJcIik7XG5cdFx0aWYgKHN0eWxlKSBzdHlsZS5zZXRBdHRyaWJ1dGUoSE9TVF9DU1NfRkFMTEJBQ0ssIFwiXCIpO1xuXHR9IGVsc2UgaWYgKHN0eWxlLnRleHRDb250ZW50ICE9PSBjc3NUZXh0KSBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdHJldHVybiBzdHlsZTtcbn07XG52YXIgcmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzID0gKHJvb3QgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpID0+IHtcblx0aWYgKCFyb290KSByZXR1cm47XG5cdGNvbnN0IHJlc3RvcmUgPSAoaG9zdCkgPT4ge1xuXHRcdGlmICghaG9zdD8uc2hhZG93Um9vdCkgcmV0dXJuO1xuXHRcdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGhvc3QsIGhvc3RDc3NUZXh0KGhvc3QpKTtcblx0XHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGhvc3QpO1xuXHR9O1xuXHRpZiAocm9vdC5ub2RlVHlwZSA9PT0gMSkgcmVzdG9yZShyb290KTtcblx0Y29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuXHRcdGxldCBjaGlsZHJlbiA9IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChcIipcIik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBjaGlsZHJlbltpXTtcblx0XHRcdGlmIChob3N0LnNoYWRvd1Jvb3QpIHtcblx0XHRcdFx0cmVzdG9yZShob3N0KTtcblx0XHRcdFx0dmlzaXQoaG9zdC5zaGFkb3dSb290KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHZpc2l0KHJvb3QpO1xufTtcbnZhciBob3N0Q3NzVGV4dCA9IChiVG8pID0+IHtcblx0Y29uc3Qgc3JjID0gYlRvPy5zdHlsZXM7XG5cdGlmICh0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdGNvbnN0IG91dCA9IHNyYy5jYWxsKGJUbyk7XG5cdFx0aWYgKHR5cGVvZiBvdXQgPT09IFwic3RyaW5nXCIpIHJldHVybiBvdXQ7XG5cdFx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQob3V0KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc3JjKTtcbn07XG52YXIgZW5zdXJlSG9zdFN0eWxlcyA9IChiVG8pID0+IHtcblx0aWYgKCFiVG8pIHJldHVybjtcblx0aWYgKGJUby5zdHlsZXMgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIGJUby5zdHlsZXMpO1xuXHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGJUbyk7XG5cdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgaG9zdENzc1RleHQoYlRvKSk7XG59O1xudmFyIHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xudmFyIHN0eWxlRmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMgPSAoYlRvKSA9PiB7XG5cdGlmICghYlRvIHx8ICEoYlRvIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgc3R5bGVGbHVzaFBlbmRpbmcuaGFzKGJUbykpIHJldHVybjtcblx0c3R5bGVGbHVzaFBlbmRpbmcuYWRkKGJUbyk7XG5cdHN0eWxlRmx1c2hCYXRjaC5wdXNoKGJUbyk7XG5cdGlmIChzdHlsZUZsdXNoU2NoZWR1bGVkKSByZXR1cm47XG5cdHN0eWxlRmx1c2hTY2hlZHVsZWQgPSB0cnVlO1xuXHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0c3R5bGVGbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IGJhdGNoID0gc3R5bGVGbHVzaEJhdGNoO1xuXHRcdHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xuXHRcdGZvciAoY29uc3QgaG9zdCBvZiBiYXRjaCkge1xuXHRcdFx0c3R5bGVGbHVzaFBlbmRpbmcuZGVsZXRlKGhvc3QpO1xuXHRcdFx0aWYgKGhvc3QuaXNDb25uZWN0ZWQpIGVuc3VyZUhvc3RTdHlsZXMoaG9zdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5yZWdpc3RlclN0eWxlVHJlZUhvb2soKGVsKSA9PiBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMoZWwpKTtcbnZhciBsb2FkQ2FjaGVkU3R5bGVzID0gKGJUbywgc3JjKSA9PiB7XG5cdGlmICghc3JjKSByZXR1cm4gbnVsbDtcblx0bGV0IHJlc29sdmVkU3JjID0gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PSBcImZ1bmN0aW9uXCIpIHRyeSB7XG5cdFx0Y29uc3Qgd2VhayA9IG5ldyBXZWFrUmVmKGJUbyk7XG5cdFx0cmVzb2x2ZWRTcmMgPSBzcmMuY2FsbChiVG8sIHdlYWspO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiRXJyb3IgY2FsbGluZyBzdHlsZXMgZnVuY3Rpb246XCIsIGUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmIChyZXNvbHZlZFNyYyAmJiB0eXBlb2YgQ1NTU3R5bGVTaGVldCAhPSBcInVuZGVmaW5lZFwiICYmIHJlc29sdmVkU3JjIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc29sdmVkU3JjKTtcblx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHJlc29sdmVkU3JjKSk7XG5cdH1cblx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdHJlc29sdmVkU3JjLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc3VsdCk7XG5cdFx0XHRlbHNlIGlmIChyZXN1bHQgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIHJlc3VsdCk7XG5cdFx0fSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgfHwgcmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBCbG9iIHx8IHJlc29sdmVkU3JjIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGNvbnN0IGFkb3B0ZWQgPSBsb2FkQXNBZG9wdGVkKHJlc29sdmVkU3JjLCBcIlwiKTtcblx0XHRpZiAoYWRvcHRlZCkge1xuXHRcdFx0Y29uc3QgYWRkQWRvcHRlZFNoZWV0ID0gKHNoZWV0KSA9PiB7XG5cdFx0XHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHNoZWV0KTtcblx0XHRcdH07XG5cdFx0XHRpZiAoYWRvcHRlZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0YWRvcHRlZC50aGVuKChzaGVldCkgPT4ge1xuXHRcdFx0XHRcdGFkZEFkb3B0ZWRTaGVldChzaGVldCk7XG5cdFx0XHRcdFx0ZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChzaGVldCkpO1xuXHRcdFx0XHR9KS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQWRvcHRlZFNoZWV0KGFkb3B0ZWQpO1xuXHRcdFx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChhZG9wdGVkKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHNvdXJjZSA9IHR5cGVvZiBzcmMgPT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBzcmMgPT0gXCJvYmplY3RcIiA/IHN0eWxlRWxlbWVudENhY2hlIDogc3R5bGVDYWNoZTtcblx0Y29uc3QgY2FjaGVkID0gc291cmNlLmdldChzcmMpO1xuXHRsZXQgc3R5bGVFbGVtZW50ID0gY2FjaGVkPy5zdHlsZUVsZW1lbnQ7XG5cdGxldCB2YXJzID0gY2FjaGVkPy52YXJzO1xuXHRpZiAoIWNhY2hlZCkge1xuXHRcdGxldCBzdHlsZXMgPSBgYDtcblx0XHRsZXQgcHJvcHMgPSBbXTtcblx0XHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIpIHN0eWxlcyA9IHJlc29sdmVkU3JjIHx8IFwiXCI7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwib2JqZWN0XCIgJiYgcmVzb2x2ZWRTcmMgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgSFRNTFN0eWxlRWxlbWVudCkgc3R5bGVFbGVtZW50ID0gcmVzb2x2ZWRTcmM7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c3R5bGVzID0gdHlwZW9mIHJlc29sdmVkU3JjLmNzcyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMuY3NzIDogdHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYyA6IFN0cmluZyhyZXNvbHZlZFNyYyk7XG5cdFx0XHRcdHByb3BzID0gcmVzb2x2ZWRTcmM/LnByb3BzID8/IHByb3BzO1xuXHRcdFx0XHR2YXJzID0gcmVzb2x2ZWRTcmM/LnZhcnMgPz8gdmFycztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFzdHlsZUVsZW1lbnQgJiYgc3R5bGVzKSBzdHlsZUVsZW1lbnQgPSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCBiVG8sIFwidXgtbGF5ZXJcIik7XG5cdFx0c291cmNlLnNldChzcmMsIHtcblx0XHRcdGNzczogc3R5bGVzLFxuXHRcdFx0cHJvcHMsXG5cdFx0XHR2YXJzLFxuXHRcdFx0c3R5bGVFbGVtZW50XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHN0eWxlRWxlbWVudDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9iaW5kLnRzXG52YXIgaXNMaW5rZXJMaWtlID0gKHZhbHVlKSA9PiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInJlZlwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZT8udW5iaW5kID09PSBcImZ1bmN0aW9uXCI7XG52YXIgYmluZFdpdGggPSAoZWwsIHByb3AsIHZhbHVlLCBoYW5kbGVyKSA9PiB7XG5cdGNvbnN0IGxpbmtlciA9IGlzTGlua2VyTGlrZSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGw7XG5cdGlmIChsaW5rZXIpIHtcblx0XHRsaW5rZXIuYmluZD8uKCk7XG5cdFx0dmFsdWUgPSBsaW5rZXIucmVmO1xuXHR9XG5cdGhhbmRsZXI/LihlbCwgcHJvcCwgdmFsdWUpO1xuXHRjb25zdCB3ZWwgPSB0b1JlZihlbCk7XG5cdGNvbnN0IHd2ID0gdG9SZWYodmFsdWUpO1xuXHRjb25zdCB1biA9IGFmZmVjdGVkPy4oW3ZhbHVlLCBcInZhbHVlXCJdLCAoY3VycikgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnRSZWYgPSBkZXJlZih3ZWwpO1xuXHRcdGNvbnN0IHZhbHVlUmVmID0gZGVyZWYod3YpO1xuXHRcdGNvbnN0IHYgPSAkZ2V0VmFsdWUodmFsdWVSZWYpID8/ICRnZXRWYWx1ZShjdXJyKTtcblx0XHRoYW5kbGVyPy4oZWxlbWVudFJlZiwgcHJvcCwgdik7XG5cdH0pO1xuXHRjb25zdCB1bnN1YiA9ICgpID0+IHtcblx0XHRsaW5rZXI/LnVuYmluZD8uKCk7XG5cdFx0dW4/LigpO1xuXHR9O1xuXHRhZGRUb0NhbGxDaGFpbih2YWx1ZSwgU3ltYm9sLmRpc3Bvc2UsIHVuc3ViKTtcblx0cmV0dXJuIHVuc3ViO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL0FuaW1hdGFibGUudHNcbnZhciBhbmltYXRhYmxlSWQgPSAwO1xudmFyIG9uU2Nyb2xsID0gKG8gPSB7fSkgPT4gKHtcblx0a2luZDogXCJzY3JvbGxcIixcblx0Li4ub1xufSk7XG52YXIgb25WaWV3ID0gKG8gPSB7fSkgPT4gKHtcblx0a2luZDogXCJ2aWV3XCIsXG5cdC4uLm9cbn0pO1xudmFyIEFuaW1hdGFibGVWYWx1ZSA9IGNsYXNzIHtcblx0W0FOSU1BVEFCTEVfQlJBTkRdID0gdHJ1ZTtcblx0aWQgPSBhbmltYXRhYmxlSWQrKztcblx0I3N0ZXBzO1xuXHQjb3B0aW9ucztcblx0I2N1cnJlbnQ7XG5cdCNzdWJzY3JpYmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdCNhdHRhY2htZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdCNyZXNvbHZlRWxlbWVudFJlZih2LCBzZWxmKSB7XG5cdFx0aWYgKHYgPT0gbnVsbCB8fCB2ID09PSBcInNlbGZcIikgcmV0dXJuIHNlbGY7XG5cdFx0aWYgKHYgPT09IFwicm9vdFwiKSByZXR1cm4gc2VsZi5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPz8gc2VsZi5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRpZiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHYgJiYgISh2IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB2LnZhbHVlID8/IHNlbGY7XG5cdFx0cmV0dXJuIHY7XG5cdH1cblx0I2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWwpIHtcblx0XHRmb3IgKGxldCBub2RlID0gZWwucGFyZW50RWxlbWVudDsgbm9kZTsgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCkge1xuXHRcdFx0Y29uc3QgcyA9IGdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cdFx0XHRpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChzLm92ZXJmbG93ICsgcy5vdmVyZmxvd1ggKyBzLm92ZXJmbG93WSkpIHJldHVybiBub2RlO1xuXHRcdH1cblx0XHRyZXR1cm4gZWwub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8/IGVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHR9XG5cdCNjcmVhdGVUaW1lbGluZShlbGVtZW50LCB0cmlnZ2VyKSB7XG5cdFx0Y29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdFx0aWYgKGlzU2Nyb2xsRHJpdmVuKHRyaWdnZXIpKSB7XG5cdFx0XHRjb25zdCBTY3JvbGxUaW1lbGluZUN0b3IgPSB3aW4uU2Nyb2xsVGltZWxpbmU7XG5cdFx0XHRpZiAodHlwZW9mIFNjcm9sbFRpbWVsaW5lQ3RvciAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiBuZXcgU2Nyb2xsVGltZWxpbmVDdG9yKHtcblx0XHRcdFx0c291cmNlOiB0cmlnZ2VyLnNvdXJjZSA9PT0gXCJuZWFyZXN0XCIgfHwgdHJpZ2dlci5zb3VyY2UgPT0gbnVsbCA/IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCkgOiB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnNvdXJjZSwgZWxlbWVudCksXG5cdFx0XHRcdGF4aXM6IHRyaWdnZXIuYXhpcyA/PyBcImJsb2NrXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCBWaWV3VGltZWxpbmVDdG9yID0gd2luLlZpZXdUaW1lbGluZTtcblx0XHRpZiAodHlwZW9mIFZpZXdUaW1lbGluZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIG5ldyBWaWV3VGltZWxpbmVDdG9yKHtcblx0XHRcdHN1YmplY3Q6IHRyaWdnZXIuc3ViamVjdCA/IHRoaXMuI3Jlc29sdmVFbGVtZW50UmVmKHRyaWdnZXIuc3ViamVjdCwgZWxlbWVudCkgOiBlbGVtZW50LFxuXHRcdFx0YXhpczogdHJpZ2dlci5heGlzID8/IFwiYmxvY2tcIixcblx0XHRcdGluc2V0OiB0cmlnZ2VyLmluc2V0XG5cdFx0fSk7XG5cdH1cblx0I3N0YXJ0VGltZWxpbmVEcml2ZW4oZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IHRpbWVsaW5lID0gdGhpcy4jY3JlYXRlVGltZWxpbmUoZWxlbWVudCwgdHJpZ2dlcik7XG5cdFx0aWYgKCF0aW1lbGluZSkgcmV0dXJuIHRoaXMuI3N0YXJ0VGltZWxpbmVGYWxsYmFjayhlbGVtZW50LCBhdHRhY2htZW50LCBwbGFuLCB0cmlnZ2VyKTtcblx0XHRjb25zdCB0aW1pbmcgPSB0aGlzLiNidWlsZFRpbWluZygpO1xuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IGVsZW1lbnQuYW5pbWF0ZSh0aGlzLiNidWlsZEtleWZyYW1lcyhwbGFuKSwge1xuXHRcdFx0Li4udGltaW5nLFxuXHRcdFx0ZHVyYXRpb246IFwiYXV0b1wiLFxuXHRcdFx0ZGVsYXk6IDAsXG5cdFx0XHRlbmREZWxheTogMCxcblx0XHRcdGl0ZXJhdGlvbnM6IDEsXG5cdFx0XHRmaWxsOiB0aGlzLiNvcHRpb25zLmZpbGwgPz8gXCJib3RoXCIsXG5cdFx0XHR0aW1lbGluZVxuXHRcdH0pO1xuXHRcdGlmICh0cmlnZ2VyLnJhbmdlU3RhcnQpIGFuaW1hdGlvbi5yYW5nZVN0YXJ0ID0gdHJpZ2dlci5yYW5nZVN0YXJ0O1xuXHRcdGlmICh0cmlnZ2VyLnJhbmdlRW5kKSBhbmltYXRpb24ucmFuZ2VFbmQgPSB0cmlnZ2VyLnJhbmdlRW5kO1xuXHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdHJldHVybiAoKSA9PiBhbmltYXRpb24uY2FuY2VsKCk7XG5cdH1cblx0Y29uc3RydWN0b3Ioc3RlcHMsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzdGVwcykgfHwgc3RlcHMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFuaW1hdGFibGUoKSBleHBlY3RzIGF0IGxlYXN0IDIgc3RlcHNcIik7XG5cdFx0dGhpcy4jc3RlcHMgPSBzdGVwcztcblx0XHR0aGlzLiNvcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLiNjdXJyZW50ID0gdGhpcy4jcmVzb2x2ZVN0ZXAoc3RlcHNbMF0pO1xuXHR9XG5cdCNzdGFydFRpbWVsaW5lRmFsbGJhY2soZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IERVUkFUSU9OID0gMWU0O1xuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IGVsZW1lbnQuYW5pbWF0ZSh0aGlzLiNidWlsZEtleWZyYW1lcyhwbGFuKSwge1xuXHRcdFx0Li4udGhpcy4jYnVpbGRUaW1pbmcoKSxcblx0XHRcdGR1cmF0aW9uOiBEVVJBVElPTixcblx0XHRcdGRlbGF5OiAwLFxuXHRcdFx0aXRlcmF0aW9uczogMSxcblx0XHRcdGZpbGw6IFwiYm90aFwiXG5cdFx0fSk7XG5cdFx0YW5pbWF0aW9uLnBhdXNlKCk7XG5cdFx0YXR0YWNobWVudC5hbmltYXRpb24gPSBhbmltYXRpb247XG5cdFx0Y29uc3Qgc2Nyb2xsZXIgPSBpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSA/IHRyaWdnZXIuc291cmNlID09PSBcIm5lYXJlc3RcIiB8fCB0cmlnZ2VyLnNvdXJjZSA9PSBudWxsID8gdGhpcy4jZmluZE5lYXJlc3RTY3JvbGxlcihlbGVtZW50KSA6IHRoaXMuI3Jlc29sdmVFbGVtZW50UmVmKHRyaWdnZXIuc291cmNlLCBlbGVtZW50KSA6IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCk7XG5cdFx0bGV0IHJhZklkID0gMDtcblx0XHRjb25zdCBjb21wdXRlUHJvZ3Jlc3MgPSAoKSA9PiB7XG5cdFx0XHRpZiAoaXNWaWV3RHJpdmVuKHRyaWdnZXIpKSB7XG5cdFx0XHRcdGNvbnN0IHZwID0gc2Nyb2xsZXIgPT09IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPyB7XG5cdFx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRcdGhlaWdodDogaW5uZXJIZWlnaHRcblx0XHRcdFx0fSA6IHNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgdG90YWwgPSB2cC5oZWlnaHQgKyByZWN0LmhlaWdodDtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsICh2cC50b3AgKyB2cC5oZWlnaHQgLSByZWN0LnRvcCkgLyB0b3RhbCkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZWwgPSBzY3JvbGxlcjtcblx0XHRcdGNvbnN0IG1heCA9IGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodDtcblx0XHRcdHJldHVybiBtYXggPiAwID8gZWwuc2Nyb2xsVG9wIC8gbWF4IDogMDtcblx0XHR9O1xuXHRcdGNvbnN0IG9uU2Nyb2xsID0gKCkgPT4ge1xuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuXHRcdFx0cmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRhbmltYXRpb24uY3VycmVudFRpbWUgPSBjb21wdXRlUHJvZ3Jlc3MoKSAqIERVUkFUSU9OO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRjb25zdCBsaXN0ZW5UYXJnZXQgPSBzY3JvbGxlciA9PT0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/IHdpbmRvdyA6IHNjcm9sbGVyO1xuXHRcdGxpc3RlblRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cdFx0b25TY3JvbGwoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuXHRcdFx0bGlzdGVuVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25TY3JvbGwpO1xuXHRcdFx0YW5pbWF0aW9uLmNhbmNlbCgpO1xuXHRcdH07XG5cdH1cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLiNjdXJyZW50O1xuXHR9XG5cdHNldCB2YWx1ZShuZXh0KSB7XG5cdFx0dGhpcy4jY3VycmVudCA9IG5leHQ7XG5cdFx0Zm9yIChjb25zdCBjYiBvZiB0aGlzLiNzdWJzY3JpYmVycykgY2IobmV4dCk7XG5cdH1cblx0dmFsdWVPZigpIHtcblx0XHRyZXR1cm4gdGhpcy4jY3VycmVudDtcblx0fVxuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCB2ID0gdGhpcy4jY3VycmVudDtcblx0XHRyZXR1cm4gdiA9PSBudWxsID8gXCJcIiA6IFN0cmluZyh2KTtcblx0fVxuXHRbU3ltYm9sLnRvUHJpbWl0aXZlXShoaW50KSB7XG5cdFx0aWYgKGhpbnQgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdGNvbnN0IG4gPSBOdW1iZXIodGhpcy4jY3VycmVudCk7XG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IDA7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG5cdH1cblx0c3Vic2NyaWJlKGNiKSB7XG5cdFx0dGhpcy4jc3Vic2NyaWJlcnMuYWRkKGNiKTtcblx0XHRyZXR1cm4gKCkgPT4gdGhpcy4jc3Vic2NyaWJlcnMuZGVsZXRlKGNiKTtcblx0fVxuXHRnZXQgb3B0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy4jb3B0aW9ucztcblx0fVxuXHRnZXQgc3RlcHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3N0ZXBzO1xuXHR9XG5cdCNyZXNvbHZlU3RlcChzdGVwKSB7XG5cdFx0aWYgKHN0ZXAgIT0gbnVsbCAmJiB0eXBlb2Ygc3RlcCA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gc3RlcCkgcmV0dXJuIHN0ZXAudmFsdWU7XG5cdFx0cmV0dXJuIHN0ZXA7XG5cdH1cblx0I2J1aWxkS2V5ZnJhbWVzKHBsYW4pIHtcblx0XHRjb25zdCBzdGVwcyA9IHRoaXMuI3N0ZXBzLm1hcCgocykgPT4gdGhpcy4jcmVzb2x2ZVN0ZXAocykpO1xuXHRcdGNvbnN0IGNvdW50ID0gc3RlcHMubGVuZ3RoO1xuXHRcdGNvbnN0IG9mZnNldHMgPSB0aGlzLiNvcHRpb25zLm9mZnNldHM7XG5cdFx0Y29uc3QgZWFzaW5nID0gdGhpcy4jb3B0aW9ucy5lYXNpbmc7XG5cdFx0cmV0dXJuIHN0ZXBzLm1hcCgocmF3LCBpKSA9PiB7XG5cdFx0XHRjb25zdCBmcmFtZSA9IHsgb2Zmc2V0OiBvZmZzZXRzPy5baV0gPz8gKGNvdW50ID4gMSA/IGkgLyAoY291bnQgLSAxKSA6IDApIH07XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlYXNpbmcpKSB7XG5cdFx0XHRcdGlmIChlYXNpbmdbaV0pIGZyYW1lLmVhc2luZyA9IGVhc2luZ1tpXTtcblx0XHRcdH1cblx0XHRcdGxldCB2YWx1ZSA9IHJhdztcblx0XHRcdGlmIChwbGFuLm1vZGUgPT09IFwicHJvcGVydHlcIiAmJiBwbGFuLnVuaXQgIT0gbnVsbCAmJiB0eXBlb2YgcmF3ID09PSBcIm51bWJlclwiKSB2YWx1ZSA9IGAke3Jhd30ke3BsYW4udW5pdH1gO1xuXHRcdFx0aWYgKHBsYW4ubW9kZSA9PT0gXCJjdXN0b20tcHJvcGVydHlcIiAmJiB0eXBlb2YgcmF3ICE9PSBcInN0cmluZ1wiKSB2YWx1ZSA9IFN0cmluZyhyYXcpO1xuXHRcdFx0ZnJhbWVbcGxhbi50YXJnZXRdID0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gZnJhbWU7XG5cdFx0fSk7XG5cdH1cblx0I2J1aWxkVGltaW5nKCkge1xuXHRcdGNvbnN0IG8gPSB0aGlzLiNvcHRpb25zO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkdXJhdGlvbjogcGFyc2VUaW1lKG8uZHVyYXRpb24sIDMwMCksXG5cdFx0XHRkZWxheTogcGFyc2VUaW1lKG8uZGVsYXksIDApLFxuXHRcdFx0ZW5kRGVsYXk6IG8uZW5kRGVsYXkgPz8gMCxcblx0XHRcdGl0ZXJhdGlvbnM6IG5vcm1hbGl6ZUl0ZXJhdGlvbnMoby5pdGVyYXRpb25zKSxcblx0XHRcdGRpcmVjdGlvbjogby5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRcdGZpbGw6IG8uZmlsbCA/PyBcImJvdGhcIixcblx0XHRcdGNvbXBvc2l0ZTogby5jb21wb3NpdGUsXG5cdFx0XHRlYXNpbmc6IEFycmF5LmlzQXJyYXkoby5lYXNpbmcpID8gXCJsaW5lYXJcIiA6IG8uZWFzaW5nID8/IFwibGluZWFyXCJcblx0XHR9O1xuXHR9XG5cdGF0dGFjaChlbGVtZW50LCBwbGFuKSB7XG5cdFx0Y29uc3QgYXR0YWNobWVudCA9IHtcblx0XHRcdGVsZW1lbnQsXG5cdFx0XHRhbmltYXRpb246IG51bGwsXG5cdFx0XHRjbGVhbnVwOiAoKSA9PiB7fVxuXHRcdH07XG5cdFx0Y29uc3QgdHJpZ2dlciA9IHRoaXMuI29wdGlvbnMudHJpZ2dlciA/PyBcIm1vdW50XCI7XG5cdFx0bGV0IGlubmVyO1xuXHRcdGlmIChpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSB8fCBpc1ZpZXdEcml2ZW4odHJpZ2dlcikpIGlubmVyID0gdGhpcy4jc3RhcnRUaW1lbGluZURyaXZlbihlbGVtZW50LCBhdHRhY2htZW50LCBwbGFuLCB0cmlnZ2VyKTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbj8uY2FuY2VsKCk7XG5cdFx0XHRcdGNvbnN0IGFuaW1hdGlvbiA9IGVsZW1lbnQuYW5pbWF0ZSh0aGlzLiNidWlsZEtleWZyYW1lcyhwbGFuKSwgdGhpcy4jYnVpbGRUaW1pbmcoKSk7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdFx0XHR0aGlzLiN0cmFja1Byb2dyZXNzKGFuaW1hdGlvbiwgcGxhbik7XG5cdFx0XHRcdHJldHVybiBhbmltYXRpb247XG5cdFx0XHR9O1xuXHRcdFx0aW5uZXIgPSB0aGlzLiN3aXJlVHJpZ2dlcihlbGVtZW50LCBhdHRhY2htZW50LCBzdGFydCk7XG5cdFx0fVxuXHRcdHRoaXMuI2F0dGFjaG1lbnRzLmFkZChhdHRhY2htZW50KTtcblx0XHRhdHRhY2htZW50LmNsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRpbm5lcigpO1xuXHRcdFx0dGhpcy4jYXR0YWNobWVudHMuZGVsZXRlKGF0dGFjaG1lbnQpO1xuXHRcdH07XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnQuY2xlYW51cDtcblx0fVxuXHQjdHJhY2tQcm9ncmVzcyhhbmltYXRpb24sIHBsYW4pIHtcblx0XHRhbmltYXRpb24uZmluaXNoZWQudGhlbigoKSA9PiB7XG5cdFx0XHRjb25zdCBsYXN0ID0gdGhpcy4jcmVzb2x2ZVN0ZXAodGhpcy4jc3RlcHNbdGhpcy4jc3RlcHMubGVuZ3RoIC0gMV0pO1xuXHRcdFx0dGhpcy52YWx1ZSA9IGxhc3Q7XG5cdFx0fSkuY2F0Y2goKCkgPT4ge30pO1xuXHR9XG5cdCN3aXJlVHJpZ2dlcihlbGVtZW50LCBhdHRhY2htZW50LCBzdGFydCkge1xuXHRcdGNvbnN0IHRyaWdnZXIgPSB0aGlzLiNvcHRpb25zLnRyaWdnZXIgPz8gXCJtb3VudFwiO1xuXHRcdGNvbnN0IHJldmVyc2VPbkV4aXQgPSB0aGlzLiNvcHRpb25zLnJldmVyc2VPbkV4aXQgPz8gdHJ1ZTtcblx0XHRjb25zdCBwbGF5Rm9yd2FyZCA9ICgpID0+IHtcblx0XHRcdGlmICghYXR0YWNobWVudC5hbmltYXRpb24gfHwgYXR0YWNobWVudC5hbmltYXRpb24ucGxheVN0YXRlID09PSBcImlkbGVcIikgc3RhcnQoKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5YmFja1JhdGUgPSBNYXRoLmFicyhhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5YmFja1JhdGUgfHwgMSk7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXkoKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IHBsYXlCYWNrd2FyZCA9ICgpID0+IHtcblx0XHRcdGlmICghYXR0YWNobWVudC5hbmltYXRpb24pIHJldHVybjtcblx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uLnJldmVyc2UoKTtcblx0XHR9O1xuXHRcdGlmICh0cmlnZ2VyID09PSBcIm1vdW50XCIpIHtcblx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRyZXR1cm4gKCkgPT4ge307XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyID09PSBcIm1hbnVhbFwiKSByZXR1cm4gKCkgPT4ge307XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwiaG92ZXJcIiB8fCB0cmlnZ2VyID09PSBcImZvY3VzXCIpIHtcblx0XHRcdGNvbnN0IGVudGVyID0gdHJpZ2dlciA9PT0gXCJob3ZlclwiID8gXCJwb2ludGVyZW50ZXJcIiA6IFwiZm9jdXNpblwiO1xuXHRcdFx0Y29uc3QgbGVhdmUgPSB0cmlnZ2VyID09PSBcImhvdmVyXCIgPyBcInBvaW50ZXJsZWF2ZVwiIDogXCJmb2N1c291dFwiO1xuXHRcdFx0Y29uc3Qgb25FbnRlciA9ICgpID0+IHBsYXlGb3J3YXJkKCk7XG5cdFx0XHRjb25zdCBvbkxlYXZlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAocmV2ZXJzZU9uRXhpdCkgcGxheUJhY2t3YXJkKCk7XG5cdFx0XHR9O1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGVudGVyLCBvbkVudGVyKTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihsZWF2ZSwgb25MZWF2ZSk7XG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZW50ZXIsIG9uRW50ZXIpO1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobGVhdmUsIG9uTGVhdmUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwiY2xpY2tcIikge1xuXHRcdFx0bGV0IGZvcndhcmQgPSB0cnVlO1xuXHRcdFx0Y29uc3Qgb25DbGljayA9ICgpID0+IHtcblx0XHRcdFx0Zm9yd2FyZCA/IHBsYXlGb3J3YXJkKCkgOiBwbGF5QmFja3dhcmQoKTtcblx0XHRcdFx0Zm9yd2FyZCA9ICFmb3J3YXJkO1xuXHRcdFx0fTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xuXHRcdFx0cmV0dXJuICgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciA9PT0gXCJ2aXNpYmxlXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRzdGFydCgpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4ge307XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgcGxheUZvcndhcmQoKTtcblx0XHRcdFx0ZWxzZSBpZiAocmV2ZXJzZU9uRXhpdCAmJiBhdHRhY2htZW50LmFuaW1hdGlvbikgcGxheUJhY2t3YXJkKCk7XG5cdFx0XHR9LCB0aGlzLiNvcHRpb25zLmludGVyc2VjdGlvbik7XG5cdFx0XHRvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuXHRcdFx0cmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgIT0gbnVsbCAmJiB0eXBlb2YgdHJpZ2dlciA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gdHJpZ2dlcikge1xuXHRcdFx0Y29uc3QgYXBwbHkgPSAodikgPT4gdiA/IHBsYXlGb3J3YXJkKCkgOiBwbGF5QmFja3dhcmQoKTtcblx0XHRcdGFwcGx5KHRyaWdnZXIudmFsdWUpO1xuXHRcdFx0Y29uc3QgdW5zdWJzY3JpYmUgPSB0eXBlb2YgdHJpZ2dlci5zdWJzY3JpYmUgPT09IFwiZnVuY3Rpb25cIiA/IHRyaWdnZXIuc3Vic2NyaWJlKGFwcGx5KSA6IG51bGw7XG5cdFx0XHRyZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmU/LigpO1xuXHRcdH1cblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblx0I2VhY2goZm4pIHtcblx0XHRmb3IgKGNvbnN0IGF0IG9mIHRoaXMuI2F0dGFjaG1lbnRzKSBpZiAoYXQuYW5pbWF0aW9uKSBmbihhdC5hbmltYXRpb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHBsYXkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEucGxheSgpKTtcblx0fVxuXHRwYXVzZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5wYXVzZSgpKTtcblx0fVxuXHRyZXZlcnNlKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLnJldmVyc2UoKSk7XG5cdH1cblx0Y2FuY2VsKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLmNhbmNlbCgpKTtcblx0fVxuXHRmaW5pc2goKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEuZmluaXNoKCkpO1xuXHR9XG5cdHNldCBwbGF5YmFja1JhdGUocmF0ZSkge1xuXHRcdHRoaXMuI2VhY2goKGEpID0+IHtcblx0XHRcdGEucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0XHR9KTtcblx0fVxuXHRnZXQgZmluaXNoZWQoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IFtdO1xuXHRcdHRoaXMuI2VhY2goKGEpID0+IGxpc3QucHVzaChhLmZpbmlzaGVkLmNhdGNoKCgpID0+IHt9KSkpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChsaXN0KS50aGVuKCgpID0+IHt9KTtcblx0fVxufTtcbnZhciBhbmltYXRhYmxlID0gKHN0ZXBzLCBvcHRpb25zKSA9PiBuZXcgQW5pbWF0YWJsZVZhbHVlKHN0ZXBzLCBvcHRpb25zKTtcbnZhciBpc0FuaW1hdGFibGVWYWx1ZSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWVbQU5JTUFUQUJMRV9CUkFORF0gPT09IHRydWU7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9TdHlsZXMudHNcbnZhciBzdHlsZVRlbXBsYXRlSWQgPSAwO1xudmFyIHJlYWRSZWFjdGl2ZU51bWJlciA9IChzbG90KSA9PiB7XG5cdGNvbnN0IGN1cnJlbnQgPSBzbG90LnZhbHVlPy52YWx1ZTtcblx0Y29uc3QgbnVtYmVyID0gdHlwZW9mIGN1cnJlbnQgPT09IFwibnVtYmVyXCIgPyBjdXJyZW50IDogTnVtYmVyKGN1cnJlbnQpO1xuXHRpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWFjdGl2ZSBDU1MgdmFsdWUgXCIke1N0cmluZyhjdXJyZW50KX1cIiBpcyBub3QgZmluaXRlYCk7XG5cdHJldHVybiBudW1iZXI7XG59O1xudmFyIGdldFJlYWN0aXZlSW5pdGlhbE51bWJlciA9ICh2YWx1ZSkgPT4ge1xuXHRjb25zdCBudW1iZXIgPSBOdW1iZXIodmFsdWU/LnZhbHVlKTtcblx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogMDtcbn07XG52YXIgcmVwbGFjZVR5cGVkTWFya2VycyA9IChjc3NWYWx1ZSwgc2xvdHMpID0+IHtcblx0bGV0IHJlc3VsdCA9IGNzc1ZhbHVlO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2Ygc2xvdHMpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG5ldyBSZWdFeHAoYHZhclxcXFwoXFxcXHMqJHtlc2NhcGVSZWdFeHAoc2xvdC5tYXJrZXIpfVxcXFxzKlxcXFwpYCwgXCJnXCIpLCBTdHJpbmcoc2xvdC52YWx1ZSkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbnZhciBpc0RpcmVjdFNsb3RWYWx1ZSA9IChjc3NWYWx1ZSwgbWFya2VyKSA9PiB7XG5cdGNvbnN0IGVzY2FwZWRNYXJrZXIgPSBlc2NhcGVSZWdFeHAobWFya2VyKTtcblx0cmV0dXJuIG5ldyBSZWdFeHAoYF52YXJcXFxcKFxcXFxzKiR7ZXNjYXBlZE1hcmtlcn1cXFxccypcXFxcKSRgKS50ZXN0KGNzc1ZhbHVlLnRyaW0oKSk7XG59O1xudmFyIHNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZSA9IChyYXcsIHVuaXQpID0+IHtcblx0bGV0IHZhbHVlID0gcmF3O1xuXHRpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHZhbHVlICYmICEodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50KSkgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHJldHVybiB1bml0ID8gYDAke3VuaXR9YCA6IFwiMFwiO1xuXHRpZiAodW5pdCAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfSR7dW5pdH1gO1xuXHRyZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn07XG52YXIgaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QgPSAoY3NzVmFsdWUsIG1hcmtlciwgdW5pdCkgPT4ge1xuXHRpZiAoIXVuaXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgZXNjYXBlZE1hcmtlciA9IGVzY2FwZVJlZ0V4cChtYXJrZXIpO1xuXHRjb25zdCBlc2NhcGVkVW5pdCA9IGVzY2FwZVJlZ0V4cCh1bml0KTtcblx0cmV0dXJuIG5ldyBSZWdFeHAoYF5jYWxjXFxcXChcXFxccyp2YXJcXFxcKFxcXFxzKiR7ZXNjYXBlZE1hcmtlcn1cXFxccypcXFxcKVxcXFxzKlxcXFwqXFxcXHMqMSR7ZXNjYXBlZFVuaXR9XFxcXHMqXFxcXCkkYCwgXCJpXCIpLnRlc3QoY3NzVmFsdWUudHJpbSgpKTtcbn07XG52YXIgc2V0UGFyc2VkVHlwZWRWYWx1ZSA9IChzdHlsZU1hcCwgQ1NTU3R5bGVWYWx1ZUN0b3IsIHByb3BlcnR5LCBjc3NWYWx1ZSkgPT4ge1xuXHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yPy5wYXJzZUFsbCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gQ1NTU3R5bGVWYWx1ZUN0b3IucGFyc2VBbGwocHJvcGVydHksIGNzc1ZhbHVlKTtcblx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIC4uLnZhbHVlcyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICh0eXBlb2YgQ1NTU3R5bGVWYWx1ZUN0b3I/LnBhcnNlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIENTU1N0eWxlVmFsdWVDdG9yLnBhcnNlKHByb3BlcnR5LCBjc3NWYWx1ZSkpO1xuXHRcdHJldHVybjtcblx0fVxuXHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGNzc1ZhbHVlKTtcbn07XG52YXIgdG9rZW5pemVOdW1lcmljQ1NTID0gKHNvdXJjZSkgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSBbXTtcblx0bGV0IGN1cnNvciA9IDA7XG5cdHdoaWxlIChjdXJzb3IgPCBzb3VyY2UubGVuZ3RoKSB7XG5cdFx0Y29uc3QgcmVzdCA9IHNvdXJjZS5zbGljZShjdXJzb3IpO1xuXHRcdGNvbnN0IHdoaXRlc3BhY2UgPSAvXlxccysvLmV4ZWMocmVzdCk7XG5cdFx0aWYgKHdoaXRlc3BhY2UpIHtcblx0XHRcdGN1cnNvciArPSB3aGl0ZXNwYWNlWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYWJsZSA9IC9edmFyXFwoXFxzKigtLVthLXpBLVowLTlfLV0rKVxccypcXCkvLmV4ZWMocmVzdCk7XG5cdFx0aWYgKHZhcmlhYmxlKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwidmFyaWFibGVcIixcblx0XHRcdFx0bWFya2VyOiB2YXJpYWJsZVsxXVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gdmFyaWFibGVbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IG51bWJlciA9IC9eKD86XFxkKlxcLlxcZCt8XFxkK1xcLj9cXGQqKSg/OltlRV1bKy1dP1xcZCspPy8uZXhlYyhyZXN0KTtcblx0XHRpZiAobnVtYmVyKSB7XG5cdFx0XHRjdXJzb3IgKz0gbnVtYmVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnN0IHVuaXRNYXRjaCA9IC9eKCV8W2EtekEtWl0rKS8uZXhlYyhzb3VyY2Uuc2xpY2UoY3Vyc29yKSk7XG5cdFx0XHRjb25zdCB1bml0ID0gdW5pdE1hdGNoPy5bMF0gPz8gbnVsbDtcblx0XHRcdGlmICh1bml0TWF0Y2gpIGN1cnNvciArPSB1bml0TWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcIm51bWJlclwiLFxuXHRcdFx0XHR2YWx1ZTogTnVtYmVyKG51bWJlclswXSksXG5cdFx0XHRcdHVuaXQ6IHVuaXQgPT0gbnVsbCA/IG51bGwgOiB1bml0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSAvXlthLXpBLVpfXVthLXpBLVowLTlfLV0qLy5leGVjKHJlc3QpO1xuXHRcdGlmIChpZGVudGlmaWVyKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwiaWRlbnRpZmllclwiLFxuXHRcdFx0XHR2YWx1ZTogaWRlbnRpZmllclswXS50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvciArPSBpZGVudGlmaWVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBzeW1ib2wgPSByZXN0WzBdO1xuXHRcdGlmIChzeW1ib2wgPT09IFwiK1wiIHx8IHN5bWJvbCA9PT0gXCItXCIgfHwgc3ltYm9sID09PSBcIipcIiB8fCBzeW1ib2wgPT09IFwiL1wiIHx8IHN5bWJvbCA9PT0gXCIoXCIgfHwgc3ltYm9sID09PSBcIilcIiB8fCBzeW1ib2wgPT09IFwiLFwiKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwic3ltYm9sXCIsXG5cdFx0XHRcdHZhbHVlOiBzeW1ib2xcblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yKys7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBUeXBlZCBPTSBudW1lcmljIHRva2VuIG5lYXIgXCIke3Jlc3R9XCJgKTtcblx0fVxuXHRyZXR1cm4gdG9rZW5zO1xufTtcbnZhciBOdW1lcmljVHlwZWRPTVBhcnNlciA9IGNsYXNzIHtcblx0dG9rZW5zO1xuXHR3aW47XG5cdHJlYWN0aXZlQnlNYXJrZXI7XG5cdHR5cGVkQnlNYXJrZXI7XG5cdGluZGV4ID0gMDtcblx0bGVhdmVzID0gW107XG5cdGNvbnN0cnVjdG9yKHRva2Vucywgd2luLCByZWFjdGl2ZUJ5TWFya2VyLCB0eXBlZEJ5TWFya2VyKSB7XG5cdFx0dGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy53aW4gPSB3aW47XG5cdFx0dGhpcy5yZWFjdGl2ZUJ5TWFya2VyID0gcmVhY3RpdmVCeU1hcmtlcjtcblx0XHR0aGlzLnR5cGVkQnlNYXJrZXIgPSB0eXBlZEJ5TWFya2VyO1xuXHR9XG5cdHBhcnNlKCkge1xuXHRcdGNvbnN0IHJvb3QgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0aWYgKHRoaXMuaW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCB0cmFpbGluZyBUeXBlZCBPTSBleHByZXNzaW9uXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyb290LFxuXHRcdFx0bGVhdmVzOiB0aGlzLmxlYXZlc1xuXHRcdH07XG5cdH1cblx0Y3VycmVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdH1cblx0Y29uc3VtZSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIFR5cGVkIE9NIGV4cHJlc3Npb25cIik7XG5cdFx0dGhpcy5pbmRleCsrO1xuXHRcdHJldHVybiB0b2tlbjtcblx0fVxuXHRjb25zdW1lU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwic3ltYm9sXCIgfHwgdG9rZW4udmFsdWUgIT09IHN5bWJvbCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBFeHBlY3RlZCBcIiR7c3ltYm9sfVwiYCk7XG5cdH1cblx0bWF0Y2hlc1N5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudCgpO1xuXHRcdHJldHVybiB0b2tlbj8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gc3ltYm9sO1xuXHR9XG5cdGNyZWF0ZU1hdGgobmFtZSwgLi4udmFsdWVzKSB7XG5cdFx0Y29uc3QgQ29uc3RydWN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih0aGlzLndpbiwgbmFtZSk7XG5cdFx0aWYgKHR5cGVvZiBDb25zdHJ1Y3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKC4uLnZhbHVlcyk7XG5cdH1cblx0cGFyc2VTdW0oKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlUHJvZHVjdCgpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLmtpbmQgIT09IFwic3ltYm9sXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgc3VtIG9wZXJhdG9yXCIpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLnZhbHVlID09PSBcIitcIikgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCByaWdodCk7XG5cdFx0XHRlbHNlIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFN1bVwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE5lZ2F0ZVwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VQcm9kdWN0KCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VVbmFyeSgpO1xuXHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIqXCIpIHx8IHRoaXMubWF0Y2hlc1N5bWJvbChcIi9cIikpIHtcblx0XHRcdGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0XHRjb25zdCByaWdodCA9IHRoaXMucGFyc2VVbmFyeSgpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLmtpbmQgIT09IFwic3ltYm9sXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgcHJvZHVjdCBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIqXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aEludmVydFwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VVbmFyeSgpIHtcblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHRoaXMucGFyc2VVbmFyeSgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cdH1cblx0cGFyc2VQcmltYXJ5KCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwibnVtYmVyXCIpIHJldHVybiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgdG9rZW4udW5pdCA/PyBcIm51bWJlclwiLCB0b2tlbi52YWx1ZSk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwidmFyaWFibGVcIikge1xuXHRcdFx0Y29uc3QgcmVhY3RpdmUgPSB0aGlzLnJlYWN0aXZlQnlNYXJrZXIuZ2V0KHRva2VuLm1hcmtlcik7XG5cdFx0XHRpZiAocmVhY3RpdmUpIHtcblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikpIHtcblx0XHRcdFx0XHRjb25zdCBjaGVja3BvaW50ID0gdGhpcy5pbmRleDtcblx0XHRcdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdFx0XHRjb25zdCByaHMgPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRcdFx0XHRpZiAocmhzPy5raW5kID09PSBcIm51bWJlclwiICYmIHJocy52YWx1ZSA9PT0gMSAmJiB0eXBlb2YgcmhzLnVuaXQgPT09IFwic3RyaW5nXCIgJiYgKCFyZWFjdGl2ZS5tdWx0aXBsaWVkQnlVbml0IHx8IHJlYWN0aXZlLm11bHRpcGxpZWRCeVVuaXQgPT09IHJocy51bml0LnRvTG93ZXJDYXNlKCkpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxlYWYgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgcmhzLnVuaXQudG9Mb3dlckNhc2UoKSwgcmVhZFJlYWN0aXZlTnVtYmVyKHJlYWN0aXZlKSk7XG5cdFx0XHRcdFx0XHR0aGlzLmxlYXZlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c2xvdDogcmVhY3RpdmUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBsZWFmXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBsZWFmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmluZGV4ID0gY2hlY2twb2ludDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBsZWFmID0gY3JlYXRlVHlwZWRVbml0VmFsdWUodGhpcy53aW4sIFwibnVtYmVyXCIsIHJlYWRSZWFjdGl2ZU51bWJlcihyZWFjdGl2ZSkpO1xuXHRcdFx0XHR0aGlzLmxlYXZlcy5wdXNoKHtcblx0XHRcdFx0XHRzbG90OiByZWFjdGl2ZSxcblx0XHRcdFx0XHR2YWx1ZTogbGVhZlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGxlYWY7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0eXBlZCA9IHRoaXMudHlwZWRCeU1hcmtlci5nZXQodG9rZW4ubWFya2VyKTtcblx0XHRcdGlmICh0eXBlZCkgcmV0dXJuIHR5cGVkLnZhbHVlO1xuXHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmtub3duIHN0eWxlIHNsb3QgXCIke3Rva2VuLm1hcmtlcn1cImApO1xuXHRcdH1cblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKHRva2VuLnZhbHVlKTtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIFR5cGVkIE9NIG51bWVyaWMgdmFsdWVcIik7XG5cdH1cblx0cGFyc2VGdW5jdGlvbihuYW1lKSB7XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJjYWxjXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVzID0gW107XG5cdFx0aWYgKCF0aGlzLm1hdGNoZXNTeW1ib2woXCIpXCIpKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIixcIikpIHtcblx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwibWluXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtaW4oKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNaW5cIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWF4XCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtYXgoKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNYXhcIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwiY2xhbXBcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcImNsYW1wKCkgcmVxdWlyZXMgdGhyZWUgdmFsdWVzXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhDbGFtcFwiLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBUeXBlZCBPTSBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHR9XG59O1xudmFyIGJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlID0gKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpID0+IHtcblx0Y29uc3QgcmVhY3RpdmVCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHR5cGVkQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgcmVhY3RpdmVTbG90cykgcmVhY3RpdmVCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgdHlwZWRTbG90cykgdHlwZWRCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRyZXR1cm4gbmV3IE51bWVyaWNUeXBlZE9NUGFyc2VyKHRva2VuaXplTnVtZXJpY0NTUyhjc3NWYWx1ZSksIHdpbiwgcmVhY3RpdmVCeU1hcmtlciwgdHlwZWRCeU1hcmtlcikucGFyc2UoKTtcbn07XG52YXIgaXNUcmFuc2Zvcm1TdHlsZVByb3BlcnR5ID0gKHByb3BlcnR5KSA9PiB7XG5cdHJldHVybiBwcm9wZXJ0eS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cmFuc2Zvcm1cIjtcbn07XG52YXIgYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZSA9IChjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IHRva2VuaXplTnVtZXJpY0NTUyhjc3NWYWx1ZSk7XG5cdGNvbnN0IGxlYXZlcyA9IFtdO1xuXHRjb25zdCBjb21wb25lbnRzID0gW107XG5cdGNvbnN0IHJlYWN0aXZlQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCB0eXBlZEJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHJlYWN0aXZlU2xvdHMpIHJlYWN0aXZlQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHR5cGVkU2xvdHMpIHR5cGVkQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0Y29uc3QgemVyb1B4ID0gKCkgPT4gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcInB4XCIsIDApO1xuXHRjb25zdCBvbmVOdW1iZXIgPSAoKSA9PiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDEpO1xuXHRsZXQgaW5kZXggPSAwO1xuXHRjb25zdCBjdXJyZW50ID0gKCkgPT4gdG9rZW5zW2luZGV4XTtcblx0Y29uc3QgY29uc3VtZSA9ICgpID0+IHtcblx0XHRjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF07XG5cdFx0aWYgKCF0b2tlbikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgdHJhbnNmb3JtIGV4cHJlc3Npb25cIik7XG5cdFx0aW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH07XG5cdGNvbnN0IGNvbnN1bWVTeW1ib2wgPSAoc3ltYm9sKSA9PiB7XG5cdFx0Y29uc3QgdG9rZW4gPSBjb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwic3ltYm9sXCIgfHwgdG9rZW4udmFsdWUgIT09IHN5bWJvbCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBFeHBlY3RlZCBcIiR7c3ltYm9sfVwiYCk7XG5cdH07XG5cdGNvbnN0IHBhcnNlQXJndW1lbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnQgPSBpbmRleDtcblx0XHRsZXQgZGVwdGggPSAwO1xuXHRcdHdoaWxlIChpbmRleCA8IHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XTtcblx0XHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIihcIikge1xuXHRcdFx0XHRkZXB0aCsrO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIilcIikge1xuXHRcdFx0XHRpZiAoZGVwdGggPT09IDApIGJyZWFrO1xuXHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIixcIiAmJiBkZXB0aCA9PT0gMCkgYnJlYWs7XG5cdFx0XHRpbmRleCsrO1xuXHRcdH1cblx0XHRjb25zdCBzbGljZSA9IHRva2Vucy5zbGljZShzdGFydCwgaW5kZXgpO1xuXHRcdGlmIChzbGljZS5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkVtcHR5IHRyYW5zZm9ybSBmdW5jdGlvbiBhcmd1bWVudFwiKTtcblx0XHRjb25zdCB0cmVlID0gbmV3IE51bWVyaWNUeXBlZE9NUGFyc2VyKHNsaWNlLCB3aW4sIHJlYWN0aXZlQnlNYXJrZXIsIHR5cGVkQnlNYXJrZXIpLnBhcnNlKCk7XG5cdFx0bGVhdmVzLnB1c2goLi4udHJlZS5sZWF2ZXMpO1xuXHRcdHJldHVybiB0cmVlLnJvb3Q7XG5cdH07XG5cdGNvbnN0IHBhcnNlQXJndW1lbnRMaXN0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGFyZ3MgPSBbXTtcblx0XHRjb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAoIShjdXJyZW50KCk/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgY3VycmVudCgpPy52YWx1ZSA9PT0gXCIpXCIpKSB7XG5cdFx0XHRhcmdzLnB1c2gocGFyc2VBcmd1bWVudCgpKTtcblx0XHRcdHdoaWxlIChjdXJyZW50KCk/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgY3VycmVudCgpPy52YWx1ZSA9PT0gXCIsXCIpIHtcblx0XHRcdFx0Y29uc3VtZSgpO1xuXHRcdFx0XHRhcmdzLnB1c2gocGFyc2VBcmd1bWVudCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0cmV0dXJuIGFyZ3M7XG5cdH07XG5cdGNvbnN0IGNyZWF0ZUNvbXBvbmVudCA9IChuYW1lLCBhcmdzKSA9PiB7XG5cdFx0Y29uc3QgY3RvciA9IChjbGFzc05hbWUpID0+IHtcblx0XHRcdGNvbnN0IEN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIGNsYXNzTmFtZSk7XG5cdFx0XHRpZiAodHlwZW9mIEN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtjbGFzc05hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybiBDdG9yO1xuXHRcdH07XG5cdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRlXCI6IHtcblx0XHRcdFx0Y29uc3QgVHJhbnNsYXRlID0gY3RvcihcIkNTU1RyYW5zbGF0ZVwiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFRyYW5zbGF0ZShhcmdzWzBdLCB6ZXJvUHgoKSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMikgcmV0dXJuIG5ldyBUcmFuc2xhdGUoYXJnc1swXSwgYXJnc1sxXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMykgcmV0dXJuIG5ldyBUcmFuc2xhdGUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInRyYW5zbGF0ZSgpIGV4cGVjdHMgMS4uMyBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZXhcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoYXJnc1swXSwgemVyb1B4KCkpO1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZXlcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoemVyb1B4KCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZXpcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoemVyb1B4KCksIHplcm9QeCgpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGUzZFwiOlxuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcInRyYW5zbGF0ZTNkKCkgZXhwZWN0cyAzIGFyZ3NcIik7XG5cdFx0XHRcdHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0Y2FzZSBcInNjYWxlXCI6IHtcblx0XHRcdFx0Y29uc3QgU2NhbGUgPSBjdG9yKFwiQ1NTU2NhbGVcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBTY2FsZShhcmdzWzBdLCBhcmdzWzBdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAyKSByZXR1cm4gbmV3IFNjYWxlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDMpIHJldHVybiBuZXcgU2NhbGUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInNjYWxlKCkgZXhwZWN0cyAxLi4zIGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwic2NhbGV4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkoYXJnc1swXSwgb25lTnVtYmVyKCkpO1xuXHRcdFx0Y2FzZSBcInNjYWxleVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKG9uZU51bWJlcigpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJzY2FsZXpcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShvbmVOdW1iZXIoKSwgb25lTnVtYmVyKCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInNjYWxlM2RcIjpcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJzY2FsZTNkKCkgZXhwZWN0cyAzIGFyZ3NcIik7XG5cdFx0XHRcdHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRjYXNlIFwicm90YXRlXCI6IHtcblx0XHRcdFx0Y29uc3QgUm90YXRlID0gY3RvcihcIkNTU1JvdGF0ZVwiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFJvdGF0ZShhcmdzWzBdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSA0KSByZXR1cm4gbmV3IFJvdGF0ZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwicm90YXRlKCkgZXhwZWN0cyAxIG9yIDQgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJyb3RhdGV4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKG9uZU51bWJlcigpLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGV5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIG9uZU51bWJlcigpLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGV6XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIG9uZU51bWJlcigpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGUzZFwiOlxuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggIT09IDQpIHRocm93IG5ldyBTeW50YXhFcnJvcihcInJvdGF0ZTNkKCkgZXhwZWN0cyA0IGFyZ3NcIik7XG5cdFx0XHRcdHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuXHRcdFx0Y2FzZSBcInNrZXdcIjoge1xuXHRcdFx0XHRjb25zdCBTa2V3ID0gY3RvcihcIkNTU1NrZXdcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBTa2V3KGFyZ3NbMF0sIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJkZWdcIiwgMCkpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDIpIHJldHVybiBuZXcgU2tldyhhcmdzWzBdLCBhcmdzWzFdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwic2tldygpIGV4cGVjdHMgMS4uMiBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInNrZXd4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTa2V3WFwiKSkoYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwic2tld3lcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NrZXdZXCIpKShhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJwZXJzcGVjdGl2ZVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUGVyc3BlY3RpdmVcIikpKGFyZ3NbMF0pO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2Zvcm0gZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0XHR9XG5cdH07XG5cdHdoaWxlIChpbmRleCA8IHRva2Vucy5sZW5ndGgpIHtcblx0XHRjb25zdCB0b2tlbiA9IGNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJpZGVudGlmaWVyXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIG5hbWVcIik7XG5cdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRMaXN0KCk7XG5cdFx0Y29tcG9uZW50cy5wdXNoKGNyZWF0ZUNvbXBvbmVudCh0b2tlbi52YWx1ZSwgYXJncykpO1xuXHR9XG5cdGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRW1wdHkgdHJhbnNmb3JtIGxpc3RcIik7XG5cdGNvbnN0IENTU1RyYW5zZm9ybVZhbHVlQ3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgXCJDU1NUcmFuc2Zvcm1WYWx1ZVwiKTtcblx0aWYgKHR5cGVvZiBDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNTU1RyYW5zZm9ybVZhbHVlIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG5cdHJldHVybiB7XG5cdFx0cm9vdDogbmV3IENTU1RyYW5zZm9ybVZhbHVlQ3Rvcihjb21wb25lbnRzKSxcblx0XHRsZWF2ZXNcblx0fTtcbn07XG52YXIgYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZSA9IChwcm9wZXJ0eSwgY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cykgPT4ge1xuXHRpZiAoaXNUcmFuc2Zvcm1TdHlsZVByb3BlcnR5KHByb3BlcnR5KSkgcmV0dXJuIGJ1aWxkVHJhbnNmb3JtVHlwZWRPTVRyZWUoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cyk7XG5cdHJldHVybiBidWlsZE51bWVyaWNUeXBlZE9NVHJlZShjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKTtcbn07XG52YXIgYWRkTXV0YWJsZUxlYXZlcyA9ICh0YXJnZXQsIGxlYXZlcykgPT4ge1xuXHRmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRhcmdldC5nZXQobGVhZi5zbG90Lm1hcmtlcik7XG5cdFx0aWYgKGN1cnJlbnQpIGN1cnJlbnQucHVzaChsZWFmKTtcblx0XHRlbHNlIHRhcmdldC5zZXQobGVhZi5zbG90Lm1hcmtlciwgW2xlYWZdKTtcblx0fVxufTtcbnZhciBhdHRhY2hMZWFmVGFyZ2V0cyA9IChsZWF2ZXMsIHByb3BlcnR5LCByb290KSA9PiB7XG5cdHJldHVybiBsZWF2ZXMubWFwKChsZWFmKSA9PiAoe1xuXHRcdHNsb3Q6IGxlYWYuc2xvdCxcblx0XHR2YWx1ZTogbGVhZi52YWx1ZSxcblx0XHRwcm9wZXJ0eSxcblx0XHRyb290XG5cdH0pKTtcbn07XG52YXIgYXBwbHlTdHlsZVRlbXBsYXRlID0gKGVsZW1lbnQsIGNzc1RleHQsIHR5cGVkU2xvdHMsIHJlYWN0aXZlU2xvdHMsIHZhcmlhYmxlcywgYW5pbWF0YWJsZVNsb3RzKSA9PiB7XG5cdGNvbnN0IHByb2JlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRwcm9iZS5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcblx0YXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUoZWxlbWVudCwgXCJcIik7XG5cdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQ7XG5cdGNvbnN0IHN0eWxlTWFwID0gdGFyZ2V0LmF0dHJpYnV0ZVN0eWxlTWFwID8/IHRhcmdldC5zdHlsZU1hcDtcblx0Y29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdGNvbnN0IENTU1N0eWxlVmFsdWVDdG9yID0gd2luPy5DU1NTdHlsZVZhbHVlID8/IGdsb2JhbFRoaXMuQ1NTU3R5bGVWYWx1ZTtcblx0Y29uc3QgbXV0YWJsZUxlYXZlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlcXVpcmVkQ1NTVmFyaWFibGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3Qgc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRjb25zdCBwcm9wZXJ0eU1vZGVPd25lZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiBhbmltYXRhYmxlU2xvdHMpIHtcblx0XHRsZXQgcGxhbiA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9iZS5zdHlsZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9iZS5zdHlsZS5pdGVtKGkpO1xuXHRcdFx0Y29uc3QgcGFyc2VkVmFsdWUgPSBwcm9iZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcblx0XHRcdGlmIChpc0RpcmVjdFNsb3RWYWx1ZShwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIpKSB7XG5cdFx0XHRcdHBsYW4gPSB7XG5cdFx0XHRcdFx0bW9kZTogXCJwcm9wZXJ0eVwiLFxuXHRcdFx0XHRcdHRhcmdldDogcHJvcGVydHlcblx0XHRcdFx0fTtcblx0XHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgc2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlKHNsb3QudmFsdWUudmFsdWUpKTtcblx0XHRcdFx0cHJvcGVydHlNb2RlT3duZWQuYWRkKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyLCBzbG90Lm11bHRpcGxpZWRCeVVuaXQpKSB7XG5cdFx0XHRcdHBsYW4gPSB7XG5cdFx0XHRcdFx0bW9kZTogXCJwcm9wZXJ0eVwiLFxuXHRcdFx0XHRcdHRhcmdldDogcHJvcGVydHksXG5cdFx0XHRcdFx0dW5pdDogc2xvdC5tdWx0aXBsaWVkQnlVbml0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZShzbG90LnZhbHVlLnZhbHVlLCBzbG90Lm11bHRpcGxpZWRCeVVuaXQpKTtcblx0XHRcdFx0cHJvcGVydHlNb2RlT3duZWQuYWRkKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghcGxhbikge1xuXHRcdFx0Y29uc3QgaW5pdGlhbE51bWJlciA9IE51bWJlcihzbG90LnZhbHVlLnZhbHVlKSB8fCAwO1xuXHRcdFx0ZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5KHdpbiwgc2xvdC5tYXJrZXIsIGluaXRpYWxOdW1iZXIpO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzbG90Lm1hcmtlciwgU3RyaW5nKGluaXRpYWxOdW1iZXIpKTtcblx0XHRcdHBsYW4gPSB7XG5cdFx0XHRcdG1vZGU6IFwiY3VzdG9tLXByb3BlcnR5XCIsXG5cdFx0XHRcdHRhcmdldDogc2xvdC5tYXJrZXJcblx0XHRcdH07XG5cdFx0fVxuXHRcdHN1YnNjcmlwdGlvbnMucHVzaChzbG90LnZhbHVlLmF0dGFjaChlbGVtZW50LCBwbGFuKSk7XG5cdH1cblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHByb2JlLnN0eWxlLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvYmUuc3R5bGUuaXRlbShpbmRleCk7XG5cdFx0aWYgKHByb3BlcnR5TW9kZU93bmVkLmhhcyhwcm9wZXJ0eSkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHBhcnNlZFZhbHVlID0gcHJvYmUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgcHJpb3JpdHkgPSBwcm9iZS5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5KTtcblx0XHRjb25zdCB1c2VkVHlwZWRTbG90cyA9IHR5cGVkU2xvdHMuZmlsdGVyKChzbG90KSA9PiBjb250YWluc01hcmtlcihwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIpKTtcblx0XHRjb25zdCB1c2VkUmVhY3RpdmVTbG90cyA9IHJlYWN0aXZlU2xvdHMuZmlsdGVyKChzbG90KSA9PiBjb250YWluc01hcmtlcihwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIpKTtcblx0XHRpZiAodXNlZFR5cGVkU2xvdHMubGVuZ3RoID09PSAwICYmIHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgcGFyc2VkVmFsdWUsIHByaW9yaXR5KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBjYW5Vc2VUeXBlZE9NID0gc3R5bGVNYXA/LnNldCAmJiAhcHJpb3JpdHkgJiYgIXByb3BlcnR5LnN0YXJ0c1dpdGgoXCItLVwiKTtcblx0XHRsZXQgYXBwbGllZFRocm91Z2hUeXBlZE9NID0gZmFsc2U7XG5cdFx0aWYgKGNhblVzZVR5cGVkT00gJiYgdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID4gMCkgdHJ5IHtcblx0XHRcdGNvbnN0IGRpcmVjdFNsb3QgPSB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPT09IDEgJiYgdXNlZFR5cGVkU2xvdHMubGVuZ3RoID09PSAwID8gdXNlZFJlYWN0aXZlU2xvdHNbMF0gOiBudWxsO1xuXHRcdFx0aWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQpKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZFZhbHVlID0gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQsIHJlYWRSZWFjdGl2ZU51bWJlcihkaXJlY3RTbG90KSk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgbGlua2VkVmFsdWUpO1xuXHRcdFx0XHRhZGRNdXRhYmxlTGVhdmVzKG11dGFibGVMZWF2ZXMsIGF0dGFjaExlYWZUYXJnZXRzKFt7XG5cdFx0XHRcdFx0c2xvdDogZGlyZWN0U2xvdCxcblx0XHRcdFx0XHR2YWx1ZTogbGlua2VkVmFsdWVcblx0XHRcdFx0fV0sIHByb3BlcnR5LCBsaW5rZWRWYWx1ZSkpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFZhbHVlKHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlcikpIHtcblx0XHRcdFx0Y29uc3QgbGlua2VkVmFsdWUgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIHJlYWRSZWFjdGl2ZU51bWJlcihkaXJlY3RTbG90KSk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgbGlua2VkVmFsdWUpO1xuXHRcdFx0XHRhZGRNdXRhYmxlTGVhdmVzKG11dGFibGVMZWF2ZXMsIGF0dGFjaExlYWZUYXJnZXRzKFt7XG5cdFx0XHRcdFx0c2xvdDogZGlyZWN0U2xvdCxcblx0XHRcdFx0XHR2YWx1ZTogbGlua2VkVmFsdWVcblx0XHRcdFx0fV0sIHByb3BlcnR5LCBsaW5rZWRWYWx1ZSkpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUocHJvcGVydHksIHBhcnNlZFZhbHVlLCB3aW4sIHVzZWRSZWFjdGl2ZVNsb3RzLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgdHJlZS5yb290KTtcblx0XHRcdFx0YWRkTXV0YWJsZUxlYXZlcyhtdXRhYmxlTGVhdmVzLCBhdHRhY2hMZWFmVGFyZ2V0cyh0cmVlLmxlYXZlcywgcHJvcGVydHksIHRyZWUucm9vdCkpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge31cblx0XHRpZiAoYXBwbGllZFRocm91Z2hUeXBlZE9NKSBjb250aW51ZTtcblx0XHRpZiAoY2FuVXNlVHlwZWRPTSAmJiB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPT09IDAgJiYgdXNlZFR5cGVkU2xvdHMubGVuZ3RoID4gMCkgdHJ5IHtcblx0XHRcdGNvbnN0IGRpcmVjdFNsb3QgPSB1c2VkVHlwZWRTbG90cy5sZW5ndGggPT09IDEgPyB1c2VkVHlwZWRTbG90c1swXSA6IG51bGw7XG5cdFx0XHRpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RWYWx1ZShwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIpKSB7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgZGlyZWN0U2xvdC52YWx1ZSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQpKSB7XG5cdFx0XHRcdGNvbnN0IENTU01hdGhQcm9kdWN0Q3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgXCJDU1NNYXRoUHJvZHVjdFwiKTtcblx0XHRcdFx0aWYgKHR5cGVvZiBDU1NNYXRoUHJvZHVjdEN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNTU01hdGhQcm9kdWN0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHRcdGNvbnN0IHByb2R1Y3QgPSBuZXcgQ1NTTWF0aFByb2R1Y3RDdG9yKGRpcmVjdFNsb3QudmFsdWUsIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0LCAxKSk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgcHJvZHVjdCk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHRyZWUgPSBidWlsZFR5cGVkT01TdHlsZVZhbHVlKHByb3BlcnR5LCBwYXJzZWRWYWx1ZSwgd2luLCBbXSwgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgdHJlZS5yb290KTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Y29uc3QgcmVjb25zdHJ1Y3RlZCA9IHJlcGxhY2VUeXBlZE1hcmtlcnMocGFyc2VkVmFsdWUsIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRcdFx0XHRzZXRQYXJzZWRUeXBlZFZhbHVlKHN0eWxlTWFwLCBDU1NTdHlsZVZhbHVlQ3RvciwgcHJvcGVydHksIHJlY29uc3RydWN0ZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7fVxuXHRcdGlmIChhcHBsaWVkVGhyb3VnaFR5cGVkT00pIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHJlY29uc3RydWN0ZWQgPSByZXBsYWNlVHlwZWRNYXJrZXJzKHBhcnNlZFZhbHVlLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgcmVjb25zdHJ1Y3RlZCwgcHJpb3JpdHkpO1xuXHRcdGZvciAoY29uc3Qgc2xvdCBvZiB1c2VkUmVhY3RpdmVTbG90cykgcmVxdWlyZWRDU1NWYXJpYWJsZXMuYWRkKHNsb3QubWFya2VyKTtcblx0fVxuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgcmVhY3RpdmVTbG90cykge1xuXHRcdGNvbnN0IGxlYXZlcyA9IG11dGFibGVMZWF2ZXMuZ2V0KHNsb3QubWFya2VyKSA/PyBbXTtcblx0XHRjb25zdCBuZWVkc0NTU1ZhcmlhYmxlID0gcmVxdWlyZWRDU1NWYXJpYWJsZXMuaGFzKHNsb3QubWFya2VyKTtcblx0XHRpZiAobGVhdmVzLmxlbmd0aCA9PT0gMCAmJiAhbmVlZHNDU1NWYXJpYWJsZSkgY29udGludWU7XG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uID0gYmluZFdpdGgoZWxlbWVudCwgc2xvdC5tYXJrZXIsIHNsb3QudmFsdWUsIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0XHRcdGlmIChsZWF2ZXMubGVuZ3RoID4gMCkgdHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dFZhbHVlID0gcmVhZFJlYWN0aXZlTnVtYmVyKHNsb3QpO1xuXHRcdFx0XHRjb25zdCBkaXJ0eVJvb3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuXHRcdFx0XHRcdGxlYWYudmFsdWUudmFsdWUgPSBuZXh0VmFsdWU7XG5cdFx0XHRcdFx0ZGlydHlSb290cy5zZXQobGVhZi5wcm9wZXJ0eSwgbGVhZi5yb290KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc3R5bGVNYXA/LnNldCkgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCByb290XSBvZiBkaXJ0eVJvb3RzKSBzdHlsZU1hcC5zZXQocHJvcGVydHlOYW1lLCByb290KTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdGlmIChuZWVkc0NTU1ZhcmlhYmxlKSBoYW5kbGVTdHlsZUNoYW5nZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9KTtcblx0XHRzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblx0fVxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgcmVxdWlyZWRDU1NWYXJpYWJsZXMpIHtcblx0XHRpZiAocmVhY3RpdmVTbG90cy5zb21lKChzbG90KSA9PiBzbG90Lm1hcmtlciA9PT0gbmFtZSkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFyaWFibGVzLmdldChuYW1lKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG5cdFx0c3Vic2NyaXB0aW9ucy5wdXNoKGJpbmRXaXRoKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBoYW5kbGVTdHlsZUNoYW5nZSkpO1xuXHR9XG5cdHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZShlbGVtZW50KTtcblx0cmV0dXJuICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zKSBzdWJzY3JpcHRpb24/LigpO1xuXHR9O1xufTtcbnZhciBjb21wbGlsZVN0YXRpY0NTU1RleHQgPSAoZm9yUmV0dXJuKSA9PiB7XG5cdGNvbnN0IFthcHBseSwgcHJvcGVydGllcywgdmFyaWFibGVzXSA9IGZvclJldHVybjtcblx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdGFwcGx5KGVsZW1lbnQpO1xuXHRyZXR1cm4gZWxlbWVudC5zdHlsZS5jc3NUZXh0O1xufTtcbnZhciBTID0gKHN0cmluZ3MsIC4uLnZhbHVlcykgPT4ge1xuXHRjb25zdCB0ZW1wbGF0ZUlkID0gc3R5bGVUZW1wbGF0ZUlkKys7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcblx0Y29uc3QgdmFyaWFibGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgdHlwZWRTbG90cyA9IFtdO1xuXHRjb25zdCByZWFjdGl2ZVNsb3RzID0gW107XG5cdGNvbnN0IHBhcnRzID0gW107XG5cdGNvbnN0IGFuaW1hdGFibGVTbG90cyA9IFtdO1xuXHRjb25zdCBjb25zdW1lZCA9IG5ldyBBcnJheShzdHJpbmdzLmxlbmd0aCkuZmlsbCgwKTtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHN0cmluZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0cGFydHMucHVzaChzdHJpbmdzW2luZGV4XS5zbGljZShjb25zdW1lZFtpbmRleF0pKTtcblx0XHRpZiAoaW5kZXggPj0gdmFsdWVzLmxlbmd0aCkgY29udGludWU7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdO1xuXHRcdGNvbnN0IG5leHRUZXh0ID0gc3RyaW5nc1tpbmRleCArIDFdID8/IFwiXCI7XG5cdFx0Y29uc3QgYXR0YWNoZWRVbml0ID0gcmVhZEF0dGFjaGVkQ1NTVW5pdChuZXh0VGV4dCk7XG5cdFx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IG1hcmtlciA9IGAtLWZlc3QtdHlwZWQtJHt0ZW1wbGF0ZUlkfS0ke3R5cGVkU2xvdHMubGVuZ3RofWA7XG5cdFx0XHR0eXBlZFNsb3RzLnB1c2goe1xuXHRcdFx0XHRtYXJrZXIsXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRtdWx0aXBsaWVkQnlVbml0OiBhdHRhY2hlZFVuaXQ/Lm5vcm1hbGl6ZWRcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGF0dGFjaGVkVW5pdCkge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGBjYWxjKHZhcigke21hcmtlcn0pICogMSR7YXR0YWNoZWRVbml0LmF1dGhvcmVkfSlgKTtcblx0XHRcdFx0Y29uc3VtZWRbaW5kZXggKyAxXSArPSBhdHRhY2hlZFVuaXQubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHBhcnRzLnB1c2goYHZhcigke21hcmtlcn0pYCk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKGlzQW5pbWF0YWJsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgbWFya2VyID0gYC0tZmVzdC1hbmltLSR7dGVtcGxhdGVJZH0tJHthbmltYXRhYmxlU2xvdHMubGVuZ3RofWA7XG5cdFx0XHRpZiAoYXR0YWNoZWRVbml0KSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYGNhbGModmFyKCR7bWFya2VyfSkgKiAxJHthdHRhY2hlZFVuaXQuYXV0aG9yZWR9KWApO1xuXHRcdFx0XHRjb25zdW1lZFtpbmRleCArIDFdICs9IGF0dGFjaGVkVW5pdC5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgcGFydHMucHVzaChgdmFyKCR7bWFya2VyfSlgKTtcblx0XHRcdHByb3BlcnRpZXMucHVzaChgQHByb3BlcnR5ICR7bWFya2VyfSB7IHN5bnRheDogXCI8bnVtYmVyPlwiOyBpbml0aWFsLXZhbHVlOiAke051bWJlcih2YWx1ZS52YWx1ZSkgfHwgMH07IGluaGVyaXRzOiBmYWxzZTsgfTtgKTtcblx0XHRcdGFuaW1hdGFibGVTbG90cy5wdXNoKHtcblx0XHRcdFx0bWFya2VyLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bXVsdGlwbGllZEJ5VW5pdDogYXR0YWNoZWRVbml0Py5ub3JtYWxpemVkXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRjb25zdCBtYXJrZXIgPSBgLS1mZXN0LXJlZi0ke3RlbXBsYXRlSWR9LSR7cmVhY3RpdmVTbG90cy5sZW5ndGh9YDtcblx0XHRcdHJlYWN0aXZlU2xvdHMucHVzaCh7XG5cdFx0XHRcdG1hcmtlcixcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdG11bHRpcGxpZWRCeVVuaXQ6IGF0dGFjaGVkVW5pdD8ubm9ybWFsaXplZFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYXR0YWNoZWRVbml0KSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYGNhbGModmFyKCR7bWFya2VyfSkgKiAxJHthdHRhY2hlZFVuaXQuYXV0aG9yZWR9KWApO1xuXHRcdFx0XHRjb25zdW1lZFtpbmRleCArIDFdICs9IGF0dGFjaGVkVW5pdC5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgcGFydHMucHVzaChgdmFyKCR7bWFya2VyfSlgKTtcblx0XHRcdGNvbnN0IGluaXRpYWxWYWx1ZSA9IGdldFJlYWN0aXZlSW5pdGlhbE51bWJlcih2YWx1ZSk7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYEBwcm9wZXJ0eSAke21hcmtlcn0geyBzeW50YXg6IFwiPG51bWJlcj5cIjsgaW5pdGlhbC12YWx1ZTogJHtpbml0aWFsVmFsdWV9OyBpbmhlcml0czogdHJ1ZTsgfTtgKTtcblx0XHRcdHZhcmlhYmxlcy5zZXQobWFya2VyLCB2YWx1ZSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZSAhPSBudWxsICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpICE9PSBcIlwiKSBwYXJ0cy5wdXNoKFN0cmluZyh2YWx1ZSkpO1xuXHR9XG5cdGNvbnN0IGZvclJldHVybiA9IFtcblx0XHQoZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIGFwcGx5U3R5bGVUZW1wbGF0ZShlbGVtZW50LCBwYXJ0cy5qb2luKFwiXCIpLCB0eXBlZFNsb3RzLCByZWFjdGl2ZVNsb3RzLCB2YXJpYWJsZXMsIGFuaW1hdGFibGVTbG90cyk7XG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzLFxuXHRcdHZhcmlhYmxlc1xuXHRdO1xuXHRmb3JSZXR1cm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRmb3JSZXR1cm5bU3ltYm9sLnRvUHJpbWl0aXZlXSA9ICh0eXBlKSA9PiB7XG5cdFx0aWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHJldHVybiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0XHRyZXR1cm4gZm9yUmV0dXJuWzBdO1xuXHR9O1xuXHRmb3JSZXR1cm4udG9TdHJpbmcgPSAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0Zm9yUmV0dXJuLnZhbHVlT2YgPSAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZvclJldHVybiwgXCJjc3NUZXh0XCIsIHtcblx0XHRnZXQ6ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pLFxuXHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInNldCBjc3NUZXh0XCIsIHZhbHVlKTtcblx0XHRcdGNvbnN0IFthcHBseSwgcHJvcGVydGllcywgdmFyaWFibGVzXSA9IGZvclJldHVybjtcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0YXBwbHkoZWxlbWVudCk7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSB2YWx1ZTtcblx0XHR9LFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiB0cnVlXG5cdH0pO1xuXHRyZXR1cm4gZm9yUmV0dXJuO1xufTtcbnZhciBjc3MgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdHJldHVybiBTKHN0cmluZ3MsIC4uLnZhbHVlcyk7XG59O1xudmFyIHNwbGl0SW5saW5lU3R5bGVQbGFjZWhvbGRlcnMgPSAoc291cmNlLCBhdHRyaWJ1dGVzKSA9PiB7XG5cdGNvbnN0IHN0cmluZ3MgPSBbXTtcblx0Y29uc3QgdmFsdWVzID0gW107XG5cdGNvbnN0IHBhdHRlcm4gPSAvI1xceyhcXGQrKVxcfS9nO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0bGV0IG1hdGNoO1xuXHR3aGlsZSAoKG1hdGNoID0gcGF0dGVybi5leGVjKHNvdXJjZSkpICE9IG51bGwpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVJbmRleCA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSwgMTApO1xuXHRcdGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoYXR0cmlidXRlSW5kZXgpIHx8IGF0dHJpYnV0ZUluZGV4IDwgMCkgY29udGludWU7XG5cdFx0c3RyaW5ncy5wdXNoKHNvdXJjZS5zbGljZShjdXJzb3IsIG1hdGNoLmluZGV4KSk7XG5cdFx0dmFsdWVzLnB1c2goYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pO1xuXHRcdGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXHR9XG5cdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0c3RyaW5ncy5wdXNoKHNvdXJjZS5zbGljZShjdXJzb3IpKTtcblx0cmV0dXJuIHtcblx0XHRzdHJpbmdzLFxuXHRcdHZhbHVlc1xuXHR9O1xufTtcbnZhciBqb2luU3RhdGljSW5saW5lU3R5bGUgPSAoc3RyaW5ncywgdmFsdWVzKSA9PiB7XG5cdGxldCByZXN1bHQgPSBzdHJpbmdzWzBdID8/IFwiXCI7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdO1xuXHRcdGlmICh2YWx1ZSAhPSBudWxsKSByZXN1bHQgKz0gU3RyaW5nKHZhbHVlKTtcblx0XHRyZXN1bHQgKz0gc3RyaW5nc1tpbmRleCArIDFdID8/IFwiXCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG52YXIgY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlID0gKHNvdXJjZSwgYXR0cmlidXRlcykgPT4ge1xuXHRjb25zdCBwYXJzZWQgPSBzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzKHNvdXJjZSwgYXR0cmlidXRlcyk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgeyBzdHJpbmdzLCB2YWx1ZXMgfSA9IHBhcnNlZDtcblx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgKHN0cmluZ3NbMF0gPz8gXCJcIikudHJpbSgpID09PSBcIlwiICYmIChzdHJpbmdzWzFdID8/IFwiXCIpLnRyaW0oKSA9PT0gXCJcIiAmJiAhaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24odmFsdWVzWzBdKSAmJiAhaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlc1swXSkpIHtcblx0XHRpZiAoaXNTdHlsZUJpbmRpbmcodmFsdWVzWzBdKSkgcmV0dXJuIHtcblx0XHRcdGtpbmQ6IFwidGVtcGxhdGVcIixcblx0XHRcdGJpbmRpbmc6IHZhbHVlc1swXVxuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtpbmQ6IFwiZGlyZWN0XCIsXG5cdFx0XHR2YWx1ZTogdmFsdWVzWzBdXG5cdFx0fTtcblx0fVxuXHRpZiAodmFsdWVzLnNvbWUoKHZhbHVlKSA9PiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkgfHwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkpIHJldHVybiB7XG5cdFx0a2luZDogXCJ0ZW1wbGF0ZVwiLFxuXHRcdGJpbmRpbmc6IFMoc3RyaW5ncywgLi4udmFsdWVzKVxuXHR9O1xuXHRpZiAodmFsdWVzLmV2ZXJ5KGlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uKSkgcmV0dXJuIHtcblx0XHRraW5kOiBcInN0YXRpY1wiLFxuXHRcdGNzc1RleHQ6IGpvaW5TdGF0aWNJbmxpbmVTdHlsZShzdHJpbmdzLCB2YWx1ZXMpXG5cdH07XG5cdHJldHVybiB7XG5cdFx0a2luZDogXCJ0ZW1wbGF0ZVwiLFxuXHRcdGJpbmRpbmc6IFMoc3RyaW5ncywgLi4udmFsdWVzKVxuXHR9O1xufTtcbnZhciBiaW5kU3R5bGUgPSAoZWxlbWVudCwgc3R5bGVkKSA9PiB7XG5cdGNvbnN0IGFwcGx5ID0gQXJyYXkuaXNBcnJheShzdHlsZWQpID8gc3R5bGVkWzBdIDogc3R5bGVkO1xuXHRpZiAodHlwZW9mIGFwcGx5ICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiAoKSA9PiB7fTtcblx0Y29uc3QgcmVzdWx0ID0gYXBwbHkoZWxlbWVudCk7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmVzdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJlc3VsdD8udW5iaW5kPy4oKTtcblx0fTtcbn07XG52YXIgZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5ID0gKHdpbiwgbmFtZSwgaW5pdGlhbFZhbHVlKSA9PiB7XG5cdGlmIChyZWdpc3RlcmVkUHJvcGVydGllcy5oYXMobmFtZSkpIHJldHVybjtcblx0cmVnaXN0ZXJlZFByb3BlcnRpZXMuYWRkKG5hbWUpO1xuXHR0cnkge1xuXHRcdCh3aW4/LkNTUyA/PyBDU1MpPy5yZWdpc3RlclByb3BlcnR5Py4oe1xuXHRcdFx0bmFtZSxcblx0XHRcdHN5bnRheDogXCI8bnVtYmVyPlwiLFxuXHRcdFx0aW5pdGlhbFZhbHVlOiBTdHJpbmcoaW5pdGlhbFZhbHVlKSxcblx0XHRcdGluaGVyaXRzOiBmYWxzZVxuXHRcdH0pO1xuXHR9IGNhdGNoIHt9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvQW5pbWF0ZS50c1xudmFyIHBhcnNlUHJvcGVydHlMaXN0ID0gKG9wdGlvbnMpID0+IHtcblx0Y29uc3QgZnJvbVN0cmluZyA9IFtdO1xuXHRpZiAodHlwZW9mIG9wdGlvbnMucHJvcGVydGllcyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y29uc3QgcHJvcHMgPSBvcHRpb25zLnByb3BlcnRpZXM/LnRyaW0/LigpPy5zcGxpdD8uKFwiO1wiKTtcblx0XHRmcm9tU3RyaW5nLnB1c2goLi4uQXJyYXkuZnJvbShwcm9wcyB8fCBbXSk/Lm1hcD8uKCgkcGFpcikgPT4ge1xuXHRcdFx0aWYgKCRwYWlyPy5pbmNsdWRlcz8uKFwiOlwiKSkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9ICgkcGFpcj8uc3BsaXQ/LihcIjpcIikgPz8gW10pPy5zbGljZT8uKDEsIC0xKT8uam9pbj8uKFwiOlwiKTtcblx0XHRcdFx0cmV0dXJuIHsgWygkcGFpcj8uWzBdKT8udHJpbT8uKCldOiB2YWx1ZT8udHJpbT8uKCkgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pPy5maWx0ZXI/LigoYSkgPT4gYSAhPSBudWxsKSB8fCBbXSk7XG5cdH1cblx0cmV0dXJuIEFycmF5LmZyb20oQXJyYXkuaXNBcnJheShvcHRpb25zLnByb3BlcnRpZXMpID8gb3B0aW9ucy5wcm9wZXJ0aWVzIDogZnJvbVN0cmluZyk7XG59O1xudmFyIHBhcnNlQW5pbWF0aW9uVGVtcGxhdGUgPSAoc3RyaW5ncywgdmFsdWVzKSA9PiB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRsZXQgZnVsbFRleHQgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRmdWxsVGV4dCArPSBzdHJpbmdzW2ldO1xuXHRcdGlmIChpIDwgdmFsdWVzLmxlbmd0aCkgZnVsbFRleHQgKz0gYF9fU0xPVF8ke2l9X19gO1xuXHR9XG5cdGNvbnN0IGRlY2xhcmF0aW9ucyA9IGZ1bGxUZXh0LnNwbGl0KFwiO1wiKS5tYXAoKHMpID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG5cdGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgZGVjbGFyYXRpb25zKSB7XG5cdFx0Y29uc3QgY29sb25JbmRleCA9IGRlY2xhcmF0aW9uLmluZGV4T2YoXCI6XCIpO1xuXHRcdGlmIChjb2xvbkluZGV4ID09PSAtMSkgY29udGludWU7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5zbGljZSgwLCBjb2xvbkluZGV4KS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWVUZXh0ID0gZGVjbGFyYXRpb24uc2xpY2UoY29sb25JbmRleCArIDEpLnRyaW0oKTtcblx0XHRjb25zdCBzbG90TWF0Y2ggPSAvX19TTE9UXyhcXGQrKV9fLy5leGVjKHZhbHVlVGV4dCk7XG5cdFx0aWYgKCFzbG90TWF0Y2gpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHNsb3RWYWx1ZSA9IHZhbHVlc1twYXJzZUludChzbG90TWF0Y2hbMV0sIDEwKV07XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHNsb3RWYWx1ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoYEFcXGAke3Byb3BlcnR5fVxcYCBleHBlY3RzIGFuIGFycmF5IG9mIHZhbHVlcywgZ290ICR7dHlwZW9mIHNsb3RWYWx1ZX1gKTtcblx0XHRwcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwge1xuXHRcdFx0cHJvcGVydHksXG5cdFx0XHR2YWx1ZXM6IHNsb3RWYWx1ZVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7IHByb3BlcnRpZXMgfTtcbn07XG52YXIgcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyA9ICh2YWx1ZXMpID0+IHtcblx0Y29uc3QgcmVzb2x2ZWQgPSBbXTtcblx0Y29uc3QgcmVhY3RpdmVJbmRpY2VzID0gW107XG5cdGxldCBoYXNSZWFjdGl2ZSA9IGZhbHNlO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuXHRcdGlmIChpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGhhc1JlYWN0aXZlID0gdHJ1ZTtcblx0XHRcdHJlYWN0aXZlSW5kaWNlcy5wdXNoKGkpO1xuXHRcdFx0cmVzb2x2ZWQucHVzaCh2YWx1ZS52YWx1ZSk7XG5cdFx0fSBlbHNlIGlmIChpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSByZXNvbHZlZC5wdXNoKHZhbHVlKTtcblx0XHRlbHNlIHJlc29sdmVkLnB1c2godmFsdWUpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0cmVzb2x2ZWQsXG5cdFx0aGFzUmVhY3RpdmUsXG5cdFx0cmVhY3RpdmVJbmRpY2VzXG5cdH07XG59O1xudmFyIGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzID0gKG9wdGlvbnMpID0+IHtcblx0Y29uc3QgZ2xvYmFsT2Zmc2V0cyA9IG9wdGlvbnM/Lm9mZnNldHM7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMpO1xuXHRpZiAocHJvcGVydHlMaXN0Lmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gYW5pbWF0YWJsZSBwcm9wZXJ0aWVzIGZvdW5kIGluIEEgdGVtcGxhdGVcIik7XG5cdGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLnByb3BlcnR5TGlzdC5tYXAoKHApID0+IHAudmFsdWVzLmxlbmd0aCkpO1xuXHRjb25zdCBvZmZzZXRzID0gKGdsb2JhbE9mZnNldHM/Lmxlbmd0aCA+IDEgPyBnbG9iYWxPZmZzZXRzIDogbnVsbCkgfHwgQXJyYXkuZnJvbSh7IGxlbmd0aDogbWF4TGVuZ3RoIH0sIChfLCBpKSA9PiBpIC8gKG1heExlbmd0aCAtIDEpKTtcblx0Y29uc3QgZnJhbWVzID0gW107XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBmcmFtZSA9IHsgb2Zmc2V0OiBvZmZzZXRzW2ldID8/IGkgLyAobWF4TGVuZ3RoIC0gMSkgfTtcblx0XHRmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydHlMaXN0KSB7XG5cdFx0XHRjb25zdCB7IHJlc29sdmVkIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRcdGNvbnN0IGtlYmFiUHJvcCA9IGNhbWVsVG9LZWJhYihwcm9wLnByb3BlcnR5KTtcblx0XHRcdGxldCB2YWx1ZSA9IHJlc29sdmVkW01hdGgubWluKGksIHJlc29sdmVkLmxlbmd0aCAtIDEpXTtcblx0XHRcdGlmIChpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRmcmFtZVtrZWJhYlByb3BdID0gdmFsdWU7XG5cdFx0fVxuXHRcdGZyYW1lcy5wdXNoKGZyYW1lKTtcblx0fVxuXHRyZXR1cm4gZnJhbWVzO1xufTtcbnZhciBidWlsZEFuaW1hdGlvblRpbWluZyA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGR1cmF0aW9uID0gcGFyc2VUaW1lKG9wdGlvbnMuZHVyYXRpb24gPz8gMzAwKTtcblx0Y29uc3QgZGVsYXkgPSBwYXJzZVRpbWUob3B0aW9ucy5kZWxheSA/PyAwKTtcblx0Y29uc3QgaXRlcmF0aW9ucyA9IG5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50KG9wdGlvbnMuaXRlcmF0aW9uQ291bnQpO1xuXHRyZXR1cm4ge1xuXHRcdGR1cmF0aW9uLFxuXHRcdGRlbGF5LFxuXHRcdGNvbXBvc2l0ZTogb3B0aW9ucy5jb21wb3NpdGUgfHwgXCJyZXBsYWNlXCIsXG5cdFx0aXRlcmF0aW9uczogaXRlcmF0aW9ucyA9PT0gXCJJbmZpbml0eVwiID8gSW5maW5pdHkgOiBpdGVyYXRpb25zLFxuXHRcdGZpbGw6IG9wdGlvbnMuZmlsbE1vZGUgPz8gXCJub25lXCIsXG5cdFx0ZGlyZWN0aW9uOiBvcHRpb25zLmRpcmVjdGlvbiA/PyBcIm5vcm1hbFwiLFxuXHRcdGVhc2luZzogdHlwZW9mIG9wdGlvbnMuZWFzaW5nID09PSBcInN0cmluZ1wiID8gb3B0aW9ucy5lYXNpbmcgOiBcImxpbmVhclwiLFxuXHRcdHRpbWVsaW5lOiBvcHRpb25zLnRpbWVsaW5lXG5cdH07XG59O1xudmFyIGNyZWF0ZVJlYWN0aXZlQW5pbWF0aW9uID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcGVydHlMaXN0ID0gcGFyc2VQcm9wZXJ0eUxpc3Qob3B0aW9ucyk7XG5cdGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBbXTtcblx0Y29uc3QgZnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMob3B0aW9ucyk7XG5cdGNvbnN0IHRpbWluZyA9IGJ1aWxkQW5pbWF0aW9uVGltaW5nKG9wdGlvbnMpO1xuXHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUoZnJhbWVzLCB0aW1pbmcpO1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydHlMaXN0KSB7XG5cdFx0Y29uc3QgeyBoYXNSZWFjdGl2ZSwgcmVhY3RpdmVJbmRpY2VzIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRpZiAoIWhhc1JlYWN0aXZlKSBjb250aW51ZTtcblx0XHRmb3IgKGNvbnN0IGluZGV4IG9mIHJlYWN0aXZlSW5kaWNlcykge1xuXHRcdFx0Y29uc3QgcmVhY3RpdmVWYWx1ZSA9IHByb3AudmFsdWVzW2luZGV4XTtcblx0XHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IGJpbmRXaXRoKGVsZW1lbnQsIGAtLWFuaW0tJHtwcm9wLnByb3BlcnR5fS0ke2luZGV4fWAsIHJlYWN0aXZlVmFsdWUsICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3RnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMob3B0aW9ucyk7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRUaW1lID0gYW5pbWF0aW9uLmN1cnJlbnRUaW1lO1xuXHRcdFx0XHRhbmltYXRpb24uZWZmZWN0ID0gbmV3IEtleWZyYW1lRWZmZWN0KGVsZW1lbnQsIG5ld0ZyYW1lcywgdGltaW5nKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRUaW1lICE9PSBudWxsKSBhbmltYXRpb24uY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcblx0XHRcdH0pO1xuXHRcdFx0c3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG5cdFx0YW5pbWF0aW9uLmNhbmNlbCgpO1xuXHRcdHN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIoKSk7XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YW5pbWF0aW9uLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgQSA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcblx0cmV0dXJuIHBhcnNlQW5pbWF0aW9uVGVtcGxhdGUoc3RyaW5ncywgdmFsdWVzKTtcbn07XG52YXIgZG9BbmltYXRpb24gPSAoZWxlbWVudCwgY29uZmlnLCBrZXlmcmFtZXMpID0+IHtcblx0aWYgKHBhcnNlUHJvcGVydHlMaXN0KGNvbmZpZykuc29tZSgocHJvcCkgPT4ge1xuXHRcdGNvbnN0IHsgaGFzUmVhY3RpdmUgfSA9IHByb2Nlc3NBbmltYXRpb25WYWx1ZXMocHJvcC52YWx1ZXMpO1xuXHRcdHJldHVybiBoYXNSZWFjdGl2ZTtcblx0fSkpIHJldHVybiBjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbihlbGVtZW50LCBjb25maWcpO1xuXHRjb25zdCBmcmFtZXMgPSBidWlsZFdlYkFuaW1hdGlvbktleWZyYW1lcyhjb25maWcpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhjb25maWcpO1xuXHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUoZnJhbWVzLCB0aW1pbmcpO1xuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRhbmltYXRpb24sXG5cdFx0Y2xlYW51cFxuXHR9O1xufTtcbnZhciBhbmltYXRlID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcGVydGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3QgW3Byb3BlcnR5LCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMucHJvcGVydGllcykpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgYW5pbWF0ZSgpIGV4cGVjdHMgYXJyYXlzIG9mIHZhbHVlcywgZ290ICR7dHlwZW9mIHZhbHVlc30gZm9yICR7cHJvcGVydHl9YCk7XG5cdFx0cHJvcGVydGllcy5zZXQocHJvcGVydHksIHtcblx0XHRcdHByb3BlcnR5LFxuXHRcdFx0dmFsdWVzXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGRvQW5pbWF0aW9uKGVsZW1lbnQsIHsgLi4ub3B0aW9ucyB9LCBwcm9wZXJ0aWVzKTtcbn07XG52YXIgZGVmaW5lQW5pbWF0aW9uID0gKG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIChlbGVtZW50KSA9PiB7XG5cdFx0cmV0dXJuIGRvQW5pbWF0aW9uKGVsZW1lbnQsIG9wdGlvbnMpO1xuXHR9O1xufTtcbnZhciBzZXF1ZW5jZUFuaW1hdGlvbnMgPSBhc3luYyAoZWxlbWVudCwgc2VxdWVuY2UpID0+IHtcblx0Zm9yIChjb25zdCBjb25maWcgb2Ygc2VxdWVuY2UpIHtcblx0XHRjb25zdCB7IGFuaW1hdGlvbiB9ID0gZG9BbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0XHRhd2FpdCBhbmltYXRpb24uZmluaXNoZWQ7XG5cdH1cbn07XG52YXIgcGFyYWxsZWxBbmltYXRpb25zID0gKGVsZW1lbnQsIGFuaW1hdGlvbnMpID0+IHtcblx0Y29uc3QgcmVzdWx0cyA9IGFuaW1hdGlvbnMubWFwKChjb25maWcpID0+IGRvQW5pbWF0aW9uKGVsZW1lbnQsIGNvbmZpZykpO1xuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdHJlc3VsdHMuZm9yRWFjaCgocikgPT4gci5jbGVhbnVwKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbnM6IHJlc3VsdHMubWFwKChyKSA9PiByLmFuaW1hdGlvbiksXG5cdFx0Y2xlYW51cFxuXHR9O1xufTtcbnZhciBzdGFnZ2VyQW5pbWF0aW9uID0gKGVsZW1lbnRzLCBvcHRpb25zLCBzdGFnZ2VyRGVsYXkgPSAxMDApID0+IHtcblx0cmV0dXJuIGVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBkZWxheSA9IHBhcnNlVGltZShvcHRpb25zPy5kZWxheSA/PyAwKSArIGluZGV4ICogc3RhZ2dlckRlbGF5O1xuXHRcdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCB7XG5cdFx0XHQuLi5vcHRpb25zLFxuXHRcdFx0ZGVsYXlcblx0XHR9KTtcblx0fSk7XG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEEsIEFOSU1BVEFCTEVfQlJBTkQsIEFuaW1hdGFibGVWYWx1ZSwgQkFLRV9DQVRFR09SSUVTLCBCQUtFX0xBWUVSLCBCQUtFX1NDUkVFTl9BTFNPLCBCQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSLCBCQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTLCBCQUtFX1NDUkVFTl9DSFJPTUUsIEJBS0VfU0NSRUVOX01FRElBLCBDU1NfQ09MT1JfUFJPUEVSVElFUywgQ1NTX0RJTUVOU0lPTl9VTklUUywgQ1NTX0RJTUVOU0lPTl9VTklUU19MSVNULCBDU1NfTU9USU9OX1BST1BFUlRJRVMsIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMsIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUywgQ1NTX1VOSVRfVE9LRU5fUkUsIERFRkFVTFRfQ0FDSEVfTVMsIERFRkFVTFRfQ0FURUdPUklFUywgSE9TVF9DU1NfRkFMTEJBQ0ssIExBWUVSX05BTUUsIExBWUVSX09QRU4sIE9XTkVSLCBTLCBTVFlMRV9USEVNRV9BVFRSUywgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUywgVVhfSE9TVF9MQVlFUlMsIFVYX1BSRUxPQURfSE9TVF9DU1MsIFZFRUxBX0NBU0NBREVfTEFZRVJTLCBWSUVXRVJfQ1NTX0xBWUVSX09SREVSLCBWSUVXRVJfUlVOVElNRV9MQVlFUlMsIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCwgYWRvcHRlZEFwcGxpZWRUZXh0LCBhZG9wdGVkQmxvYk1hcCwgYWRvcHRlZEZpbGxlZCwgYWRvcHRlZExheWVyTWFwLCBhZG9wdGVkTWFwLCBhZG9wdGVkU2VsZWN0b3JNYXAsIGFkb3B0ZWRTaGFkb3dMYXllck1hcCwgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLCBhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSwgYW5pbWF0YWJsZSwgYW5pbWF0ZSwgYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUsIGJha2VBbHNvUXVlcmllc0ZvciwgYmFrZUNvbXB1dGVkU3R5bGUsIGJha2VTY3JlZW5Db2xvcnMsIGJha2VUaGVtZUZpbmdlcnByaW50LCBiYWtlZENhY2hlLCBiYWtlZEZvbGxvd2VycywgYmFrZWRMaXZlLCBiYWtlZFN0eWxlcywgYmluZFN0eWxlLCBibG9iVVJMTWFwLCBidWlsZEJha2VkQ3NzVGV4dCwgY2FjaGVCbG9iQ29udGVudE1hcCwgY2FjaGVDb250ZW50TWFwLCBjYWNoZU1hcCwgY29sbGVjdEJha2VBbHNvSG9zdHMsIGNvbGxlY3RCYWtlU2NyZWVuSG9zdHMsIGNvbGxlY3RCYWtlZERlY2xhcmF0aW9ucywgY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlLCBjb250YWluc01hcmtlciwgY3JlYXRlU3R5bGVJZCwgY3JlYXRlVHlwZWRVbml0VmFsdWUsIGNzcywgY3NzRW1wdHlMYXllclJ1bGUsIGNzc0ltcG9ydFdpdGhMYXllciwgY3NzTGF5ZXJCbG9jaywgY3NzTGF5ZXJPcmRlciwgY3NzVGV4dEZvckFkb3B0ZWRTaGVldCwgY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50LCBjc3NVbml0Q29uc3RydWN0b3JOYW1lLCBjc3NVbml0RmFjdG9yeU5hbWUsIGRlZmluZUFuaW1hdGlvbiwgZG9BbmltYXRpb24sIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQsIGVuc3VyZUhvc3RTdHlsZXMsIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciwgZXNjYXBlQ1NTSWRlbnRpZmllciwgZXNjYXBlUmVnRXhwLCBmZXRjaEFuZENhY2hlLCBmZXRjaEFzSW5saW5lLCBnZXRBZG9wdGVkU3R5bGVSdWxlLCBnZXRCYWtlZFN0eWxlLCBnZXRFbGVtZW50Wm9vbSwgZ2V0T3JDcmVhdGVMYXllclJ1bGUsIGdldFBhZGRpbmcsIGdldFByb3BlcnR5VmFsdWUsIGdldFB4VmFsdWUsIGdldFN0eWxlTGF5ZXIsIGdldFN0eWxlUnVsZSwgZ2V0VHJhbnNmb3JtLCBnZXRUcmFuc2Zvcm1PcmlnaW4sIGdldFdpbmRvd0NvbnN0cnVjdG9yLCBoYXNUeXBlZE9NLCBoYXNoLCBpbnZhbGlkYXRlQmFrZWRTdHlsZXMsIGlzQWRvcHRlZFNoZWV0RW1wdHksIGlzQW5pbWF0YWJsZVZhbHVlLCBpc0NvbG9yVG9rZW4sIGlzQ3NzRWxlbWVudCwgaXNDc3NMYXllck5hbWUsIGlzRG9jdW1lbnQsIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCwgaXNFbGVtZW50VmlzaWJsZSwgaXNMYXllckJsb2NrUnVsZSwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlLCBpc1JlYWN0aXZlU3R5bGVWYWx1ZSwgaXNTY3JvbGxEcml2ZW4sIGlzU2hhZG93Um9vdCwgaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24sIGlzU3R5bGVCaW5kaW5nLCBpc1N0eWxlSG9zdCwgaXNTdHlsZVZhbHVlLCBpc1VuaXRWYWx1ZSwgaXNWaWV3RHJpdmVuLCBsYXllckNvdW50ZXIsIGxvYWRBc0Fkb3B0ZWQsIGxvYWRCbG9iU3R5bGUsIGxvYWRDYWNoZWRTdHlsZXMsIGxvYWRJbmxpbmVTdHlsZSwgbG9hZFN0eWxlU2hlZXQsIG1ha2VIb3N0TGF5ZXJPcmRlciwgbm9ybWFsaXplQ3NzRm9yTGF5ZXIsIG5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50LCBub3JtYWxpemVJdGVyYXRpb25zLCBub3RpZnlTdHlsZVRyZWVIb3N0cywgb2JzZXJ2ZVN0eWxlVHJlZSwgb25TY3JvbGwsIG9uVmlldywgcGFyYWxsZWxBbmltYXRpb25zLCBwYXJzZUxlbmd0aCwgcGFyc2VPcmlnaW4sIHBhcnNlVGltZSwgcHJlbG9hZFN0eWxlLCBwcm9taXNlT3JEaXJlY3QsIHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSwgcXVlcnlGaXJzdERlZXAsIHJlYWRBdHRhY2hlZENTU1VuaXQsIHJlYWRTaGVldFJ1bGVDb3VudCwgcmViYWtlQmF0Y2gsIHJlYmFrZUNvbXB1dGVkU3R5bGUsIHJlZ2lzdGVyU3R5bGVUcmVlSG9vaywgcmVnaXN0ZXJlZFByb3BlcnRpZXMsIHJlaHlkcmF0ZUFkb3B0ZWRTdHlsZVNoZWV0cywgcmVoeWRyYXRlQ29uc3RydWN0YWJsZVNoZWV0cywgcmVtb3ZlQWRvcHRlZCwgc2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzLCBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMsIHNlcXVlbmNlQW5pbWF0aW9ucywgc2V0UHJvcGVydHksIHNldFN0eWxlSW5SdWxlLCBzZXRTdHlsZVByb3BlcnR5LCBzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2ssIHNldFN0eWxlUHJvcGVydHlUeXBlZCwgc2V0U3R5bGVSdWxlLCBzZXRTdHlsZVJ1bGVzLCBzZXRTdHlsZVVSTCwgc3RhZ2dlckFuaW1hdGlvbiwgc3RyaXBDc3NQcmVhbWJsZSwgc3R5bGVDYWNoZSwgc3R5bGVFbGVtZW50Q2FjaGUsIHN0eWxlRmx1c2hQZW5kaW5nLCBzdHlsZVRyZWVIb29rcywgc3R5bGVUcmVlT2JzZXJ2ZWQsIHN0eWxlVHJlZVJvb3RzLCBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0LCB1bmJha2VDb21wdXRlZFN0eWxlLCB1bmJha2VTY3JlZW5Db2xvcnMsIHVud3JhcENzc0xheWVyLCB1cmxDYW5QYXJzZSwgdmVlbGFDYXNjYWRlT3JkZXIsIHdyYXBDc3NMYXllciB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsYUFBQUMsSUFBVyxnQkFBQUMsSUFBYyxTQUFBQyxJQUFPLHVCQUFBQyxJQUFxQixZQUFBQyxJQUFVLFNBQUFDLElBQU8sZUFBQUMsSUFBYSxTQUFBQyxJQUFPLHFCQUFBQyxVQUF5QjtBQUMzSSxTQUFTLGtCQUFBQyxJQUFnQixZQUFBQyxVQUFnQjtBQUd6QyxJQUFJQyxJQUFTLENBQUNDLEdBQUtDLE1BQVcsV0FBVyxPQUFPLElBQUlELENBQUcsQ0FBQyxNQUFNQyxFQUFPLEdBQ2pFQyxJQUFhSCxFQUFPLHFCQUFxQixNQUFzQixvQkFBSSxRQUFRLENBQUMsR0FDNUVJLElBQVdKLEVBQU8sbUJBQW1CLE1BQXNCLG9CQUFJLElBQUksQ0FBQyxHQUNwRUssSUFBa0JMLEVBQU8sMEJBQTBCLE1BQXNCLG9CQUFJLElBQUksQ0FB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LENBQU07QUFDakQsVUFBTXRLLEVBQVU7QUFBQSxFQUNqQjtBQUNELEdBQ0k0SyxLQUFxQixDQUFDNWdCLEdBQVM2Z0IsTUFBZTtBQUNqRCxRQUFNQyxJQUFVRCxFQUFXLElBQUksQ0FBQ1AsTUFBV0QsR0FBWXJnQixHQUFTc2dCLENBQU0sQ0FBQyxHQUNqRVMsSUFBVSxNQUFNO0FBQ3JCLElBQUFELEVBQVEsUUFBUSxDQUFDdFQsTUFBTUEsRUFBRSxRQUFRLENBQUM7QUFBQSxFQUNuQztBQUNBLFNBQU87QUFBQSxJQUNOLFlBQVlzVCxFQUFRLElBQUksQ0FBQ3RULE1BQU1BLEVBQUUsU0FBUztBQUFBLElBQzFDLFNBQUF1VDtBQUFBLEVBQ0Q7QUFDRCxHQUNJQyxLQUFtQixDQUFDQyxHQUFVM1AsR0FBUzRQLElBQWUsUUFDbERELEVBQVMsSUFBSSxDQUFDamhCLEdBQVN1YSxNQUFVO0FBQ3ZDLFFBQU1zRixJQUFRM2YsRUFBVW9SLEdBQVMsU0FBUyxDQUFDLElBQUlpSixJQUFRMkc7QUFDdkQsU0FBT2IsR0FBWXJnQixHQUFTO0FBQUEsSUFDM0IsR0FBR3NSO0FBQUEsSUFDSCxPQUFBdU87QUFBQSxFQUNELENBQUM7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyIkYXZvaWRUcmlnZ2VyIiwgIiRnZXRWYWx1ZSIsICJjYW1lbFRvS2ViYWIiLCAiZGVyZWYiLCAiZ2V0T3JJbnNlcnRDb21wdXRlZCIsICJoYXNWYWx1ZSIsICJpc1ZhbCIsICJpc1ZhbHVlVW5pdCIsICJ0b1JlZiIsICJ0cnlTdHJpbmdBc051bWJlciIsICJhZGRUb0NhbGxDaGFpbiIsICJhZmZlY3RlZCIsICJzaGFyZWQiLCAia2V5IiwgImNyZWF0ZSIsICJibG9iVVJMTWFwIiwgImNhY2hlTWFwIiwgImNhY2hlQ29udGVudE1hcCIsICJjYWNoZUJsb2JDb250ZW50TWFwIiwgImFkb3B0ZWRTZWxlY3Rvck1hcCIsICJhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAiLCAiYWRvcHRlZExheWVyTWFwIiwgImFkb3B0ZWRTaGFkb3dMYXllck1hcCIsICJhZG9wdGVkTWFwIiwgImFkb3B0ZWRCbG9iTWFwIiwgImFkb3B0ZWRBcHBsaWVkVGV4dCIsICJhZG9wdGVkRmlsbGVkIiwgImxheWVyQ291bnRlciIsICJzdHlsZVRyZWVIb29rcyIsICJzdHlsZVRyZWVPYnNlcnZlZCIsICJzdHlsZVRyZWVSb290cyIsICJiYWtlZFN0eWxlcyIsICJiYWtlZExpdmUiLCAiYmFrZWRDYWNoZSIsICJyZWJha2VCYXRjaCIsICJiYWtlZEZvbGxvd2VycyIsICJhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSIsICJzdHlsZUNhY2hlIiwgInN0eWxlRWxlbWVudENhY2hlIiwgInN0eWxlRmx1c2hQZW5kaW5nIiwgInJlZ2lzdGVyZWRQcm9wZXJ0aWVzIiwgIkNTU19ESU1FTlNJT05fVU5JVFNfTElTVCIsICJDU1NfRElNRU5TSU9OX1VOSVRTIiwgIkNTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyIsICJDU1NfVU5JVF9UT0tFTl9SRSIsICJDU1NfQ09MT1JfUFJPUEVSVElFUyIsICJDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTIiwgIkNTU19NT1RJT05fUFJPUEVSVElFUyIsICJTVFlMRV9USEVNRV9BVFRSUyIsICJTVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTIiwgIkJBS0VfQ0FURUdPUklFUyIsICJWRUVMQV9DQVNDQURFX0xBWUVSUyIsICJVWF9IT1NUX0xBWUVSUyIsICJWSUVXRVJfUlVOVElNRV9MQVlFUlMiLCAiVklFV0VSX0NTU19MQVlFUl9PUkRFUiIsICJMQVlFUl9OQU1FIiwgIkxBWUVSX09QRU4iLCAiT1dORVIiLCAiSE9TVF9DU1NfRkFMTEJBQ0siLCAiQkFLRV9MQVlFUiIsICJERUZBVUxUX0NBVEVHT1JJRVMiLCAiREVGQVVMVF9DQUNIRV9NUyIsICJCQUtFX1NDUkVFTl9NRURJQSIsICJCQUtFX1NDUkVFTl9DSFJPTUUiLCAiQkFLRV9TQ1JFRU5fQUxTT19FWFBMT1JFUiIsICJCQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTIiwgIkJBS0VfU0NSRUVOX0FMU08iLCAiQU5JTUFUQUJMRV9CUkFORCIsICJoYXNUeXBlZE9NIiwgImNzc1VuaXRGYWN0b3J5TmFtZSIsICJ1bml0IiwgImNzc1VuaXRDb25zdHJ1Y3Rvck5hbWUiLCAiaXNDc3NMYXllck5hbWUiLCAibmFtZSIsICJjc3NFbXB0eUxheWVyUnVsZSIsICJsYXllck5hbWUiLCAic3RyaXBDc3NQcmVhbWJsZSIsICJjc3MiLCAib3V0IiwgImkiLCAibmV4dCIsICJpc0xheWVyQmxvY2tSdWxlIiwgInJ1bGUiLCAic3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCIsICJjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQiLCAicHJvbWlzZU9yRGlyZWN0IiwgInByb21pc2UiLCAiY2IiLCAiaXNTaGFkb3dSb290IiwgInZhbHVlIiwgImlzRG9jdW1lbnQiLCAiaXNDc3NFbGVtZW50IiwgImVzY2FwZUNTU0lkZW50aWZpZXIiLCAiY2hhciIsICJzdHlsZUlkQ291bnRlciIsICJjcmVhdGVTdHlsZUlkIiwgInVybENhblBhcnNlIiwgImhhc2giLCAic3RyaW5nIiwgImhhc2hCdWZmZXIiLCAicGFyc2VMZW5ndGgiLCAic2l6ZSIsICJwYXJzZU9yaWdpbiIsICJvcmlnaW4iLCAiZWxlbWVudCIsICJ2YWx1ZXMiLCAicGFyc2VUaW1lIiwgInYiLCAiZmFsbGJhY2siLCAidCIsICJub3JtYWxpemVJdGVyYXRpb25Db3VudCIsICJjb3VudCIsICJub3JtYWxpemVJdGVyYXRpb25zIiwgIm4iLCAiaXNTY3JvbGxEcml2ZW4iLCAiaXNWaWV3RHJpdmVuIiwgImlzU3R5bGVIb3N0IiwgIm5vZGUiLCAicmVhZFNoZWV0UnVsZUNvdW50IiwgInNoZWV0IiwgImlzQWRvcHRlZFNoZWV0RW1wdHkiLCAiaXNDb2xvclRva2VuIiwgImlzRWxlbWVudFZpc2libGUiLCAiZWwiLCAiaXNTdHlsZUJpbmRpbmciLCAic3R5bGVzIiwgImlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCIsICJjc3NUZXh0IiwgInNvdXJjZSIsICJjaHVuayIsICJkZWNsYXJhdGlvbiIsICJjb2xvbkluZGV4IiwgInBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSIsICJyYXciLCAiYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUiLCAiaXNOYXRpdmVDU1NTdHlsZVZhbHVlIiwgIkNTU1N0eWxlVmFsdWVDdG9yIiwgInByb3RvdHlwZSIsICJpc1JlYWN0aXZlU3R5bGVWYWx1ZSIsICJpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbiIsICJlc2NhcGVSZWdFeHAiLCAiY29udGFpbnNNYXJrZXIiLCAiY3NzVmFsdWUiLCAibWFya2VyIiwgInJlYWRBdHRhY2hlZENTU1VuaXQiLCAidGV4dCIsICJtYXRjaCIsICJhdXRob3JlZCIsICJub3JtYWxpemVkIiwgImdldFdpbmRvd0NvbnN0cnVjdG9yIiwgIndpbiIsICJjcmVhdGVUeXBlZFVuaXRWYWx1ZSIsICJDU1NOYW1lc3BhY2UiLCAiZmFjdG9yeU5hbWUiLCAiZmFjdG9yeSIsICJDU1NVbml0VmFsdWVDdG9yIiwgImlzU3R5bGVWYWx1ZSIsICJ2YWwiLCAiaXNVbml0VmFsdWUiLCAicXVlcnlGaXJzdERlZXAiLCAicm9vdCIsICJzZWxlY3RvciIsICJkaXJlY3QiLCAic2NvcGUiLCAiaGl0IiwgImlubmVyIiwgImNzc0xheWVyT3JkZXIiLCAiZ3JvdXBzIiwgInNlZW4iLCAibmFtZXMiLCAiZ3JvdXAiLCAibGlzdCIsICJ2ZWVsYUNhc2NhZGVPcmRlciIsICJtYWtlSG9zdExheWVyT3JkZXIiLCAiZXh0cmEiLCAiY3NzTGF5ZXJCbG9jayIsICJib2R5IiwgIndyYXBDc3NMYXllciIsICJub3JtYWxpemVDc3NGb3JMYXllciIsICJ0cmltbWVkIiwgInVud3JhcE91dGVyTGF5ZXJCbG9jayIsICJleHBlY3RlZE5hbWUiLCAib3BlbiIsICJkZXB0aCIsICJjaCIsICJ1bndyYXBDc3NMYXllciIsICJzdHJpcHBlZCIsICJjc3NJbXBvcnRXaXRoTGF5ZXIiLCAidXJsIiwgImxheWVyIiwgIlVYX1BSRUxPQURfSE9TVF9DU1MiLCAiZ2V0T3JDcmVhdGVMYXllclJ1bGUiLCAicnVsZXMiLCAiZXhpc3RpbmciLCAicnVsZUluZGV4IiwgImNyZWF0ZWQiLCAidG9rZW5pemVOdW1lcmljQ1NTJDEiLCAidG9rZW5zIiwgImN1cnNvciIsICJyZXN0IiwgIndoaXRlc3BhY2UiLCAibnVtYmVyIiwgInVuaXRNYXRjaCIsICJpZGVudGlmaWVyIiwgInN5bWJvbCIsICJOdW1lcmljVHlwZWRPTVBhcnNlciQxIiwgInRva2VuIiwgIkNvbnN0cnVjdG9yIiwgIm9wZXJhdG9yIiwgInJpZ2h0IiwgInBhcnNlVG9UeXBlZE9NIiwgInNldFByb3BlcnR5SWZOb3RFcXVhbCIsICJzdHlsZVJlZiIsICJrZWJhYiIsICJpbXBvcnRhbmNlIiwgInNldFN0eWxlUHJvcGVydHlUeXBlZCIsICJzdHlsZU1hcFJlZiIsICJzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2siLCAib2xkIiwgIm5ld1ZhbCIsICJwYXJzZWQiLCAibWF5YmVOdW0iLCAic2V0U3R5bGVQcm9wZXJ0eSIsICJoYW5kbGVTdHlsZUNoYW5nZSIsICJwcm9wIiwgInNldFN0eWxlSW5SdWxlIiwgImdldFN0eWxlUnVsZSIsICJzZXRTdHlsZVJ1bGUiLCAicHJvcE5hbWUiLCAicHJvcFZhbHVlIiwgImxvYWRTdHlsZVNoZWV0IiwgImlubGluZSIsICJiYXNlIiwgImludGVncml0eSIsICJsb2FkIiwgImZldGNoQW5kQ2FjaGUiLCAic2V0U3R5bGVVUkwiLCAicmVzIiwgImVycm9yIiwgImxvYWRCbG9iU3R5bGUiLCAic3R5bGUiLCAibG9hZElubGluZVN0eWxlIiwgInJvb3RFbGVtZW50IiwgIlBMQUNFIiwgInNldFByb3BlcnR5IiwgInRhcmdldCIsICJwcmVsb2FkU3R5bGUiLCAibG9hZEFzQWRvcHRlZCIsICJyZW1lbWJlckFkb3B0ZWRUZXh0IiwgImNzc1RleHRGb3JBZG9wdGVkU2hlZXQiLCAic3RvcmVkIiwgIm1hcHBlZCIsICJlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50IiwgImFwcGx5QWRvcHRlZFN0eWxlVGV4dCIsICJtZXNzYWdlIiwgInNoZWV0Rm9yQmxvYiIsICJibG9iIiwgImxvYWRBc0Fkb3B0ZWRVbnNhZmUiLCAiY2FjaGVkIiwgImFwcGxpZWQiLCAibGF5ZXJXcmFwcGVkIiwgInJlbW92ZUFkb3B0ZWQiLCAiZmV0Y2hBc0lubGluZSIsICJjb2xsZWN0U3R5bGVIb3N0cyIsICJpbnRvIiwgImNoaWxkIiwgIm5vdGlmeVN0eWxlVHJlZUhvc3RzIiwgImhvc3RzIiwgInJlYXNvbiIsICJmbiIsICJyZWdpc3RlclN0eWxlVHJlZUhvb2siLCAib2JzZXJ2ZVN0eWxlVHJlZSIsICJvYnNlcnZlciIsICJyZWNvcmRzIiwgInJlYyIsICJzaGVldHMiLCAicmVoeWRyYXRlQ29uc3RydWN0YWJsZVNoZWV0cyIsICJjYW5QYXJzZSIsICJpZHgiLCAiZ2V0VHJhbnNmb3JtIiwgIm1hdHJpeCIsICJnZXRUcmFuc2Zvcm1PcmlnaW4iLCAiY3NzT3JpZ2luIiwgImdldFByb3BlcnR5VmFsdWUiLCAic3JjIiwgImNzIiwgImdldEVsZW1lbnRab29tIiwgInpvb20iLCAiY3VycmVudEVsZW1lbnQiLCAiY3VycmVudENTU1pvb20iLCAiZ2V0UHhWYWx1ZSIsICJnZXRQYWRkaW5nIiwgImF4aXMiLCAic3R5bGVFbGVtZW50IiwgInNldFN0eWxlUnVsZXMiLCAiY2xhc3NlcyIsICJhcmdzIiwgImdldFN0eWxlTGF5ZXIiLCAiZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yIiwgInN0eWxlSWQiLCAiam9pblNjb3BlZFNlbGVjdG9yIiwgImZpbmRTdHlsZVJ1bGUiLCAiZnVsbFNlbGVjdG9yIiwgImV4cGVjdGVkIiwgInJlcXVlc3RlZCIsICJhY3R1YWwiLCAiYmFzaXMiLCAiYmFzaXNFbGVtZW50IiwgInN0eWxlRWxlbWVudEdsb2JhbCIsICJydWxlSWQiLCAiYnVybCIsICJwcm9taXNlZCIsICJnZXRBZG9wdGVkU3R5bGVSdWxlIiwgImluU2hhZG93IiwgInRhcmdldEFkb3B0ZWRTaGVldHMiLCAic2VsZWN0b3JLZXkiLCAic2hhZG93TWFwIiwgImxheWVyUnVsZSIsICJzaGFkb3dMYXllck1hcCIsICJsYXllclJ1bGVJbmRleCIsICJyIiwgImludmFsaWRhdGlvblJlYWR5IiwgImxhc3RGaW5nZXJwcmludCIsICJyZWJha2VRdWV1ZWQiLCAibm9ybWFsaXplQ2F0ZWdvcmllcyIsICJjYXRlZ29yaWVzIiwgImNhY2hlS2V5Rm9yIiwgIm1lZGlhIiwgImJha2VUaGVtZUZpbmdlcnByaW50IiwgInBhcnRzIiwgImxvY2FsIiwgInRha2VQcm9wIiwgIkNPTE9SX1BST1BfU0VUIiwgImJha2VEZWNsUmFuayIsICJjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMiLCAic2V0IiwgImJ1aWxkQmFrZWRDc3NUZXh0IiwgImRlY2xhcmF0aW9ucyIsICJyb3dzIiwgImEiLCAiYiIsICJiYWtlZCIsICJjb2xsZWN0QmFrZVNjcmVlbkhvc3RzIiwgImNocm9tZSIsICJiYWtlQWxzb1F1ZXJpZXNGb3IiLCAiY29sbGVjdEJha2VBbHNvSG9zdHMiLCAicXVlcmllcyIsICJwaWVyY2VTaGFkb3ciLCAicm9vdFNlbCIsICJmaW5kIiwgInNlbCIsICJncm91cGVkIiwgInF1ZXJ5IiwgInEiLCAic2VscyIsICJhZG9wdGVkTGlzdCIsICJhc3NpZ25BZG9wdGVkIiwgImFkb3B0U2hlZXQiLCAidW5hZG9wdFNoZWV0IiwgIndyaXRlQmFrZWRDc3MiLCAicmVtZW1iZXJDYWNoZSIsICJjYWNoZU1zIiwgInByZXYiLCAiZW50cnkiLCAiZHJvcENhY2hlIiwgImNhY2hlS2V5IiwgImNsZWFyQWxsQ2FjaGUiLCAicGFya0Jha2VkIiwgInJlc3VtZUJha2VkIiwgImZpbmdlcnByaW50IiwgImJha2VDb21wdXRlZFN0eWxlIiwgImJha2VJTyIsICJlbnN1cmVCYWtlSU8iLCAiZW50cmllcyIsICJlbnN1cmVCYWtlZFJlY29yZCIsICJjYW5Db25zdHJ1Y3QiLCAiZmx1c2hSZWJha2UiLCAiYmF0Y2giLCAic2NoZWR1bGVSZWJha2UiLCAiaW52YWxpZGF0ZUJha2VkU3R5bGVzIiwgImVuc3VyZUJha2VJbnZhbGlkYXRpb24iLCAiaG9zdCIsICJvcHRpb25zIiwgInVuYmFrZUNvbXB1dGVkU3R5bGUiLCAia2VlcENhY2hlIiwgInJlYmFrZUNvbXB1dGVkU3R5bGUiLCAiZ2V0QmFrZWRTdHlsZSIsICJiYWtlU2NyZWVuQ29sb3JzIiwgIm9wdHMiLCAiZXh0cmFzIiwgImZvbGxvd2VycyIsICJ1bmJha2VTY3JlZW5Db2xvcnMiLCAic2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzIiwgInJ1biIsICJyZXRyeU1pc3MiLCAicGllcmNlIiwgInN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3ciLCAiYlRvIiwgImFkb3B0ZWRTaGVldHMiLCAibGl2ZSIsICJzIiwgImFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCIsICJlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayIsICJyZWh5ZHJhdGVBZG9wdGVkU3R5bGVTaGVldHMiLCAicmVzdG9yZSIsICJob3N0Q3NzVGV4dCIsICJ2aXNpdCIsICJjaGlsZHJlbiIsICJlbnN1cmVIb3N0U3R5bGVzIiwgImxvYWRDYWNoZWRTdHlsZXMiLCAic3R5bGVGbHVzaEJhdGNoIiwgInN0eWxlRmx1c2hTY2hlZHVsZWQiLCAic2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzIiwgInJlc29sdmVkU3JjIiwgIndlYWsiLCAiZSIsICJyZXN1bHQiLCAiYWRvcHRlZCIsICJhZGRBZG9wdGVkU2hlZXQiLCAidmFycyIsICJwcm9wcyIsICJpc0xpbmtlckxpa2UiLCAiYmluZFdpdGgiLCAiaGFuZGxlciIsICJsaW5rZXIiLCAid2VsIiwgInd2IiwgInVuIiwgImN1cnIiLCAiZWxlbWVudFJlZiIsICJ2YWx1ZVJlZiIsICJ1bnN1YiIsICJhbmltYXRhYmxlSWQiLCAib25TY3JvbGwiLCAibyIsICJvblZpZXciLCAiQW5pbWF0YWJsZVZhbHVlIiwgIiNzdGVwcyIsICIjb3B0aW9ucyIsICIjY3VycmVudCIsICIjc3Vic2NyaWJlcnMiLCAiI2F0dGFjaG1lbnRzIiwgIiNyZXNvbHZlRWxlbWVudFJlZiIsICJzZWxmIiwgIiNmaW5kTmVhcmVzdFNjcm9sbGVyIiwgIiNjcmVhdGVUaW1lbGluZSIsICJ0cmlnZ2VyIiwgIlNjcm9sbFRpbWVsaW5lQ3RvciIsICJWaWV3VGltZWxpbmVDdG9yIiwgIiNzdGFydFRpbWVsaW5lRHJpdmVuIiwgImF0dGFjaG1lbnQiLCAicGxhbiIsICJ0aW1lbGluZSIsICIjc3RhcnRUaW1lbGluZUZhbGxiYWNrIiwgInRpbWluZyIsICIjYnVpbGRUaW1pbmciLCAiYW5pbWF0aW9uIiwgIiNidWlsZEtleWZyYW1lcyIsICJzdGVwcyIsICIjcmVzb2x2ZVN0ZXAiLCAic2Nyb2xsZXIiLCAicmFmSWQiLCAiY29tcHV0ZVByb2dyZXNzIiwgInZwIiwgInJlY3QiLCAidG90YWwiLCAibWF4IiwgImxpc3RlblRhcmdldCIsICJoaW50IiwgInN0ZXAiLCAib2Zmc2V0cyIsICJlYXNpbmciLCAiZnJhbWUiLCAic3RhcnQiLCAiI3RyYWNrUHJvZ3Jlc3MiLCAiI3dpcmVUcmlnZ2VyIiwgImxhc3QiLCAicmV2ZXJzZU9uRXhpdCIsICJwbGF5Rm9yd2FyZCIsICJwbGF5QmFja3dhcmQiLCAiZW50ZXIiLCAibGVhdmUiLCAib25FbnRlciIsICJvbkxlYXZlIiwgImZvcndhcmQiLCAib25DbGljayIsICJhcHBseSIsICJ1bnN1YnNjcmliZSIsICIjZWFjaCIsICJhdCIsICJyYXRlIiwgImFuaW1hdGFibGUiLCAiaXNBbmltYXRhYmxlVmFsdWUiLCAic3R5bGVUZW1wbGF0ZUlkIiwgInJlYWRSZWFjdGl2ZU51bWJlciIsICJzbG90IiwgImN1cnJlbnQiLCAiZ2V0UmVhY3RpdmVJbml0aWFsTnVtYmVyIiwgInJlcGxhY2VUeXBlZE1hcmtlcnMiLCAic2xvdHMiLCAiaXNEaXJlY3RTbG90VmFsdWUiLCAiZXNjYXBlZE1hcmtlciIsICJzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUiLCAiaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QiLCAiZXNjYXBlZFVuaXQiLCAic2V0UGFyc2VkVHlwZWRWYWx1ZSIsICJzdHlsZU1hcCIsICJwcm9wZXJ0eSIsICJ0b2tlbml6ZU51bWVyaWNDU1MiLCAidmFyaWFibGUiLCAiTnVtZXJpY1R5cGVkT01QYXJzZXIiLCAicmVhY3RpdmVCeU1hcmtlciIsICJ0eXBlZEJ5TWFya2VyIiwgInJlYWN0aXZlIiwgImNoZWNrcG9pbnQiLCAicmhzIiwgImxlYWYiLCAidHlwZWQiLCAiYnVpbGROdW1lcmljVHlwZWRPTVRyZWUiLCAicmVhY3RpdmVTbG90cyIsICJ0eXBlZFNsb3RzIiwgImlzVHJhbnNmb3JtU3R5bGVQcm9wZXJ0eSIsICJidWlsZFRyYW5zZm9ybVR5cGVkT01UcmVlIiwgImxlYXZlcyIsICJjb21wb25lbnRzIiwgInplcm9QeCIsICJvbmVOdW1iZXIiLCAiaW5kZXgiLCAiY29uc3VtZSIsICJjb25zdW1lU3ltYm9sIiwgInBhcnNlQXJndW1lbnQiLCAic2xpY2UiLCAidHJlZSIsICJwYXJzZUFyZ3VtZW50TGlzdCIsICJjcmVhdGVDb21wb25lbnQiLCAiY3RvciIsICJjbGFzc05hbWUiLCAiQ3RvciIsICJUcmFuc2xhdGUiLCAiU2NhbGUiLCAiUm90YXRlIiwgIlNrZXciLCAiQ1NTVHJhbnNmb3JtVmFsdWVDdG9yIiwgImJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUiLCAiYWRkTXV0YWJsZUxlYXZlcyIsICJhdHRhY2hMZWFmVGFyZ2V0cyIsICJhcHBseVN0eWxlVGVtcGxhdGUiLCAidmFyaWFibGVzIiwgImFuaW1hdGFibGVTbG90cyIsICJwcm9iZSIsICJtdXRhYmxlTGVhdmVzIiwgInJlcXVpcmVkQ1NTVmFyaWFibGVzIiwgInN1YnNjcmlwdGlvbnMiLCAicHJvcGVydHlNb2RlT3duZWQiLCAicGFyc2VkVmFsdWUiLCAiaW5pdGlhbE51bWJlciIsICJlbnN1cmVSZWdpc3RlcmVkTnVtYmVyUHJvcGVydHkiLCAicHJpb3JpdHkiLCAidXNlZFR5cGVkU2xvdHMiLCAidXNlZFJlYWN0aXZlU2xvdHMiLCAiY2FuVXNlVHlwZWRPTSIsICJhcHBsaWVkVGhyb3VnaFR5cGVkT00iLCAiZGlyZWN0U2xvdCIsICJsaW5rZWRWYWx1ZSIsICJDU1NNYXRoUHJvZHVjdEN0b3IiLCAicHJvZHVjdCIsICJyZWNvbnN0cnVjdGVkIiwgIm5lZWRzQ1NTVmFyaWFibGUiLCAic3Vic2NyaXB0aW9uIiwgIm5leHRWYWx1ZSIsICJkaXJ0eVJvb3RzIiwgInByb3BlcnR5TmFtZSIsICJjb21wbGlsZVN0YXRpY0NTU1RleHQiLCAiZm9yUmV0dXJuIiwgInByb3BlcnRpZXMiLCAiUyIsICJzdHJpbmdzIiwgInRlbXBsYXRlSWQiLCAiY29uc3VtZWQiLCAibmV4dFRleHQiLCAiYXR0YWNoZWRVbml0IiwgImluaXRpYWxWYWx1ZSIsICJ0eXBlIiwgInNwbGl0SW5saW5lU3R5bGVQbGFjZWhvbGRlcnMiLCAiYXR0cmlidXRlcyIsICJwYXR0ZXJuIiwgImF0dHJpYnV0ZUluZGV4IiwgImpvaW5TdGF0aWNJbmxpbmVTdHlsZSIsICJjb21waWxlSW5saW5lU3R5bGVBdHRyaWJ1dGUiLCAiYmluZFN0eWxlIiwgInN0eWxlZCIsICJwYXJzZVByb3BlcnR5TGlzdCIsICJmcm9tU3RyaW5nIiwgIiRwYWlyIiwgInBhcnNlQW5pbWF0aW9uVGVtcGxhdGUiLCAiZnVsbFRleHQiLCAidmFsdWVUZXh0IiwgInNsb3RNYXRjaCIsICJzbG90VmFsdWUiLCAicHJvY2Vzc0FuaW1hdGlvblZhbHVlcyIsICJyZXNvbHZlZCIsICJyZWFjdGl2ZUluZGljZXMiLCAiaGFzUmVhY3RpdmUiLCAiYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMiLCAiZ2xvYmFsT2Zmc2V0cyIsICJwcm9wZXJ0eUxpc3QiLCAibWF4TGVuZ3RoIiwgInAiLCAiXyIsICJmcmFtZXMiLCAia2ViYWJQcm9wIiwgImJ1aWxkQW5pbWF0aW9uVGltaW5nIiwgImR1cmF0aW9uIiwgImRlbGF5IiwgIml0ZXJhdGlvbnMiLCAiY3JlYXRlUmVhY3RpdmVBbmltYXRpb24iLCAicmVhY3RpdmVWYWx1ZSIsICJuZXdGcmFtZXMiLCAiY3VycmVudFRpbWUiLCAic3ViIiwgIkEiLCAiZG9BbmltYXRpb24iLCAiY29uZmlnIiwgImtleWZyYW1lcyIsICJhbmltYXRlIiwgImRlZmluZUFuaW1hdGlvbiIsICJzZXF1ZW5jZUFuaW1hdGlvbnMiLCAic2VxdWVuY2UiLCAicGFyYWxsZWxBbmltYXRpb25zIiwgImFuaW1hdGlvbnMiLCAicmVzdWx0cyIsICJjbGVhbnVwIiwgInN0YWdnZXJBbmltYXRpb24iLCAiZWxlbWVudHMiLCAic3RhZ2dlckRlbGF5Il0KfQo=
|
|
2720
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGUtbGliLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyAkYXZvaWRUcmlnZ2VyLCAkZ2V0VmFsdWUsIGNhbWVsVG9LZWJhYiwgZGVyZWYsIGdldE9ySW5zZXJ0Q29tcHV0ZWQsIGhhc1ZhbHVlLCBpc1ZhbCwgaXNWYWx1ZVVuaXQsIHRvUmVmLCB0cnlTdHJpbmdBc051bWJlciB9IGZyb20gXCJAZmVzdC1saWIvY29yZVwiO1xuaW1wb3J0IHsgYWRkVG9DYWxsQ2hhaW4sIGFmZmVjdGVkIH0gZnJvbSBcIkBmZXN0LWxpYi9vYmplY3RcIjtcblxuLy8jcmVnaW9uIHNyYy9tYXBzLnRzXG52YXIgc2hhcmVkID0gKGtleSwgY3JlYXRlKSA9PiBnbG9iYWxUaGlzW1N5bWJvbC5mb3Ioa2V5KV0gPz89IGNyZWF0ZSgpO1xudmFyIGJsb2JVUkxNYXAgPSBzaGFyZWQoXCJkb20udHNAYmxvYlVSTE1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgY2FjaGVNYXAgPSBzaGFyZWQoXCJkb20udHNAY2FjaGVNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgY2FjaGVDb250ZW50TWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlQ29udGVudE1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBjYWNoZUJsb2JDb250ZW50TWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlQmxvYkNvbnRlbnRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRTZWxlY3Rvck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkU2VsZWN0b3JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYWRvcHRlZExheWVyTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRMYXllck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBhZG9wdGVkU2hhZG93TGF5ZXJNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZFNoYWRvd0xheWVyTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZEJsb2JNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEJsb2JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRBcHBsaWVkVGV4dCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkQXBwbGllZFRleHRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRGaWxsZWQgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEZpbGxlZFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgbGF5ZXJDb3VudGVyID0gc2hhcmVkKFwiZG9tLnRzQGxheWVyQ291bnRlclwiLCAoKSA9PiAwKTtcbnZhciBzdHlsZVRyZWVIb29rcyA9IHNoYXJlZChcImRvbS50c0BzdHlsZVRyZWVIb29rc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBzdHlsZVRyZWVPYnNlcnZlZCA9IHNoYXJlZChcImRvbS50c0BzdHlsZVRyZWVPYnNlcnZlZFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgc3R5bGVUcmVlUm9vdHMgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlUm9vdHNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRTdHlsZXMgPSBzaGFyZWQoXCJzdHlsZS1saWJAYmFrZWRTdHlsZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYmFrZWRMaXZlID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkTGl2ZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBiYWtlZENhY2hlID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgcmViYWtlQmF0Y2ggPSBzaGFyZWQoXCJzdHlsZS1saWJAcmViYWtlQmF0Y2hcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRGb2xsb3dlcnMgPSBzaGFyZWQoXCJzdHlsZS1saWJAYmFrZWRGb2xsb3dlcnNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlID0gc2hhcmVkKFwibHVyLmVAYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlQ2FjaGUgPSBzaGFyZWQoXCJsdXIuZUBzdHlsZUNhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIHN0eWxlRWxlbWVudENhY2hlID0gc2hhcmVkKFwibHVyLmVAc3R5bGVFbGVtZW50Q2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlRmx1c2hQZW5kaW5nID0gc2hhcmVkKFwic3R5bGUtbGliQHN0eWxlRmx1c2hQZW5kaW5nXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpKTtcbnZhciByZWdpc3RlcmVkUHJvcGVydGllcyA9IHNoYXJlZChcInN0eWxlLWxpYkByZWdpc3RlcmVkUHJvcGVydGllc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBhbmltS2V5ZnJhbWVSZWZzID0gc2hhcmVkKFwic3R5bGUudHNAYW5pbUtleWZyYW1lUmVmc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbnN0YW50cy50c1xudmFyIENTU19ESU1FTlNJT05fVU5JVFNfTElTVCA9IFtcblx0XCIlXCIsXG5cdFwicHhcIixcblx0XCJjbVwiLFxuXHRcIm1tXCIsXG5cdFwicVwiLFxuXHRcImluXCIsXG5cdFwicGNcIixcblx0XCJwdFwiLFxuXHRcImVtXCIsXG5cdFwiZXhcIixcblx0XCJjaFwiLFxuXHRcImNhcFwiLFxuXHRcImljXCIsXG5cdFwibGhcIixcblx0XCJyZW1cIixcblx0XCJyZXhcIixcblx0XCJyY2hcIixcblx0XCJyY2FwXCIsXG5cdFwicmljXCIsXG5cdFwicmxoXCIsXG5cdFwidndcIixcblx0XCJ2aFwiLFxuXHRcInZpXCIsXG5cdFwidmJcIixcblx0XCJ2bWluXCIsXG5cdFwidm1heFwiLFxuXHRcInN2d1wiLFxuXHRcInN2aFwiLFxuXHRcInN2aVwiLFxuXHRcInN2YlwiLFxuXHRcInN2bWluXCIsXG5cdFwic3ZtYXhcIixcblx0XCJsdndcIixcblx0XCJsdmhcIixcblx0XCJsdmlcIixcblx0XCJsdmJcIixcblx0XCJsdm1pblwiLFxuXHRcImx2bWF4XCIsXG5cdFwiZHZ3XCIsXG5cdFwiZHZoXCIsXG5cdFwiZHZpXCIsXG5cdFwiZHZiXCIsXG5cdFwiZHZtaW5cIixcblx0XCJkdm1heFwiLFxuXHRcImNxd1wiLFxuXHRcImNxaFwiLFxuXHRcImNxaVwiLFxuXHRcImNxYlwiLFxuXHRcImNxbWluXCIsXG5cdFwiY3FtYXhcIixcblx0XCJkZWdcIixcblx0XCJncmFkXCIsXG5cdFwicmFkXCIsXG5cdFwidHVyblwiLFxuXHRcInNcIixcblx0XCJtc1wiLFxuXHRcImh6XCIsXG5cdFwia2h6XCIsXG5cdFwiZHBpXCIsXG5cdFwiZHBjbVwiLFxuXHRcImRwcHhcIixcblx0XCJ4XCIsXG5cdFwiZnJcIlxuXTtcbnZhciBDU1NfRElNRU5TSU9OX1VOSVRTID0gbmV3IFNldChDU1NfRElNRU5TSU9OX1VOSVRTX0xJU1QpO1xudmFyIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyA9IHtcblx0XCIlXCI6IFwicGVyY2VudFwiLFxuXHRxOiBcIlFcIixcblx0aHo6IFwiSHpcIixcblx0a2h6OiBcImtIelwiLFxuXHRmcjogXCJmbGV4XCJcbn07XG52YXIgQ1NTX1VOSVRfVE9LRU5fUkUgPSAvXiglfFthLXpBLVpdKykvO1xudmFyIENTU19DT0xPUl9QUk9QRVJUSUVTID0gW1xuXHRcImNvbG9yXCIsXG5cdFwiYmFja2dyb3VuZC1jb2xvclwiLFxuXHRcImJvcmRlci1jb2xvclwiLFxuXHRcImJvcmRlci10b3AtY29sb3JcIixcblx0XCJib3JkZXItcmlnaHQtY29sb3JcIixcblx0XCJib3JkZXItYm90dG9tLWNvbG9yXCIsXG5cdFwiYm9yZGVyLWxlZnQtY29sb3JcIixcblx0XCJvdXRsaW5lLWNvbG9yXCIsXG5cdFwiYWNjZW50LWNvbG9yXCIsXG5cdFwiY2FyZXQtY29sb3JcIixcblx0XCJ0ZXh0LWRlY29yYXRpb24tY29sb3JcIixcblx0XCJjb2x1bW4tcnVsZS1jb2xvclwiLFxuXHRcImZpbGxcIixcblx0XCJzdHJva2VcIixcblx0XCJmbG9vZC1jb2xvclwiLFxuXHRcImxpZ2h0aW5nLWNvbG9yXCIsXG5cdFwic3RvcC1jb2xvclwiXG5dO1xudmFyIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMgPSBbXG5cdFwiZm9udC1mYW1pbHlcIixcblx0XCJmb250LXNpemVcIixcblx0XCJmb250LXdlaWdodFwiLFxuXHRcImZvbnQtc3R5bGVcIixcblx0XCJmb250LXN0cmV0Y2hcIixcblx0XCJsaW5lLWhlaWdodFwiLFxuXHRcImxldHRlci1zcGFjaW5nXCIsXG5cdFwid29yZC1zcGFjaW5nXCJcbl07XG52YXIgQ1NTX01PVElPTl9QUk9QRVJUSUVTID0gW1xuXHRcInRyYW5zaXRpb24tZHVyYXRpb25cIixcblx0XCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLFxuXHRcImFuaW1hdGlvbi1kdXJhdGlvblwiLFxuXHRcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIlxuXTtcbnZhciBTVFlMRV9USEVNRV9BVFRSUyA9IFtcblx0XCJkYXRhLXRoZW1lXCIsXG5cdFwiZGF0YS1leHBsb3Jlci1jb2xvci1zY2hlbWVcIixcblx0XCJkYXRhLWNvbG9yLXNjaGVtZVwiLFxuXHRcInRoZW1lXCIsXG5cdFwiY29sb3Itc2NoZW1lXCJcbl07XG52YXIgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUyA9IFtcblx0Li4uU1RZTEVfVEhFTUVfQVRUUlMsXG5cdFwic3R5bGVcIixcblx0XCJjbGFzc1wiXG5dO1xudmFyIEJBS0VfQ0FURUdPUklFUyA9IFtcblx0XCJ0b2tlbnNcIixcblx0XCJjb2xvcnNcIixcblx0XCJ0eXBvZ3JhcGh5XCIsXG5cdFwibW90aW9uXCJcbl07XG52YXIgVkVFTEFfQ0FTQ0FERV9MQVlFUlMgPSBbXG5cdFwidG9rZW5zXCIsXG5cdFwiYmFzZVwiLFxuXHRcImxheW91dFwiLFxuXHRcImNvbXBvbmVudHNcIixcblx0XCJ1dGlsaXRpZXNcIixcblx0XCJ0aGVtZVwiLFxuXHRcIm92ZXJyaWRlc1wiLFxuXHRcInByaW50XCJcbl07XG52YXIgVVhfSE9TVF9MQVlFUlMgPSBbXCJ1eC1wcmVsb2FkXCIsIFwidXgtbGF5ZXJcIl07XG52YXIgVklFV0VSX1JVTlRJTUVfTEFZRVJTID0gW1xuXHRcInJzLW1kLWJhc2VcIixcblx0XCJycy1tZC1zeXN0ZW1cIixcblx0XCJycy1tZC1tb2R1bGVzXCIsXG5cdFwicnMtbWQtdXNlclwiLFxuXHRcInJzLW1kLXByaW50XCIsXG5cdFwicnMtbWQtdXNlci1wcmludFwiXG5dO1xudmFyIFZJRVdFUl9DU1NfTEFZRVJfT1JERVIgPSBWSUVXRVJfUlVOVElNRV9MQVlFUlM7XG52YXIgTEFZRVJfTkFNRSA9IC9eW2EtekEtWjAtOV8uLV0rJC87XG52YXIgTEFZRVJfT1BFTiA9IC9eQGxheWVyXFxzKyhbYS16QS1aMC05Xy4tXSspXFxzKlxcey87XG52YXIgT1dORVIgPSBcIkRPTVwiO1xudmFyIEhPU1RfQ1NTX0ZBTExCQUNLID0gXCJkYXRhLWdsaXQtaG9zdC1jc3NcIjtcbnZhciBCQUtFX0xBWUVSID0gXCJ1eC1iYWtlZFwiO1xudmFyIERFRkFVTFRfQ0FURUdPUklFUyA9IFtcImNvbG9yc1wiLCBcInRva2Vuc1wiXTtcbnZhciBERUZBVUxUX0NBQ0hFX01TID0gM2U0O1xudmFyIEJBS0VfU0NSRUVOX01FRElBID0gXCJzY3JlZW5cIjtcbnZhciBCQUtFX1NDUkVFTl9DSFJPTUUgPSBbXG5cdFwidWktd2luZG93LWZyYW1lXCIsXG5cdFwidWktbW9kYWxcIixcblx0XCJhcHAtYm94XCIsXG5cdFwiLnVpLW1vZGFsLWRpYWxvZ1wiLFxuXHRcIi51aS1tb2RhbC1wYW5lbFwiXG5dO1xudmFyIEJBS0VfU0NSRUVOX0FMU09fRVhQTE9SRVIgPSBbXG5cdFwiLnJvdy5jMi1zdXJmYWNlXCIsXG5cdFwiLnJvdy5jMi1zdXJmYWNlW2RhdGEta2luZD1kaXJlY3RvcnldXCIsXG5cdFwiLnJvdy5jMi1zdXJmYWNlW2RhdGEta2luZD1maWxlXVwiLFxuXHRcIi5yb3cuYzItc3VyZmFjZSAuYy5uYW1lXCIsXG5cdFwiLmZtLWdyaWQtaGVhZGVyXCJcbl07XG52YXIgQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUyA9IFtcblx0XCIuZmllbGRcIixcblx0XCIuZm9ybS1pbnB1dFwiLFxuXHRcIi5mb3JtLXNlbGVjdFwiLFxuXHRcIi5maWVsZC1jb250cm9sXCJcbl07XG52YXIgQkFLRV9TQ1JFRU5fQUxTTyA9IFsuLi5CQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSLCAuLi5CQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTXTtcbnZhciBBTklNQVRBQkxFX0JSQU5EID0gU3ltYm9sLmZvcihcImZlc3QuYW5pbWF0YWJsZVwiKTtcbnZhciBBTklNX0xBWUVSID0gXCJ1eC1hbmltXCI7XG52YXIgQU5JTV9UUklHR0VSX05BTUUgPSBcIi0tZmVzdC10XCI7XG52YXIgaGFzVHlwZWRPTSA9IHR5cGVvZiBDU1NTdHlsZVZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBDU1NVbml0VmFsdWUgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy91dGlscy50c1xudmFyIGNzc1VuaXRGYWN0b3J5TmFtZSA9ICh1bml0KSA9PiBDU1NfVU5JVF9GQUNUT1JZX0FMSUFTRVNbdW5pdC50b0xvd2VyQ2FzZSgpXSA/PyB1bml0LnRvTG93ZXJDYXNlKCk7XG52YXIgY3NzVW5pdENvbnN0cnVjdG9yTmFtZSA9ICh1bml0KSA9PiB1bml0LnRvTG93ZXJDYXNlKCkgPT09IFwiJVwiID8gXCJwZXJjZW50XCIgOiB1bml0LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNDc3NMYXllck5hbWUgPSAobmFtZSkgPT4gTEFZRVJfTkFNRS50ZXN0KG5hbWUpO1xudmFyIGNzc0VtcHR5TGF5ZXJSdWxlID0gKGxheWVyTmFtZSkgPT4gYEBsYXllciAke2xheWVyTmFtZX0ge31gO1xudmFyIHN0cmlwQ3NzUHJlYW1ibGUgPSAoY3NzKSA9PiB7XG5cdGxldCBvdXQgPSBTdHJpbmcoY3NzIHx8IFwiXCIpLnRyaW0oKTtcblx0b3V0ID0gb3V0LnJlcGxhY2UoL14oQGNoYXJzZXRcXHMrW147XSs7XFxzKikrL2ksIFwiXCIpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuXHRcdGNvbnN0IG5leHQgPSBvdXQucmVwbGFjZSgvXlxcL1xcKltcXHNcXFNdKj9cXCpcXC9cXHMqLywgXCJcIik7XG5cdFx0aWYgKG5leHQgPT09IG91dCkgYnJlYWs7XG5cdFx0b3V0ID0gbmV4dC50cmltKCk7XG5cdH1cblx0cmV0dXJuIG91dDtcbn07XG52YXIgaXNMYXllckJsb2NrUnVsZSA9IChydWxlKSA9PiB0eXBlb2YgQ1NTTGF5ZXJCbG9ja1J1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgcnVsZSBpbnN0YW5jZW9mIENTU0xheWVyQmxvY2tSdWxlO1xudmFyIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQgPSAoKSA9PiB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5DU1NTdHlsZVNoZWV0ID09PSBcImZ1bmN0aW9uXCI7XG52YXIgY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50ID0gKGNzcykgPT4gdHlwZW9mIGNzcyA9PT0gXCJzdHJpbmdcIiAmJiAvQGltcG9ydFxcYi9pLnRlc3QoY3NzKTtcbnZhciBwcm9taXNlT3JEaXJlY3QgPSAocHJvbWlzZSwgY2IpID0+IHtcblx0aWYgKHR5cGVvZiBwcm9taXNlPy50aGVuID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHByb21pc2U/LnRoZW4/LihjYik7XG5cdHJldHVybiBjYihwcm9taXNlKTtcbn07XG52YXIgaXNTaGFkb3dSb290ID0gKHZhbHVlKSA9PiB0eXBlb2YgU2hhZG93Um9vdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG52YXIgaXNEb2N1bWVudCA9ICh2YWx1ZSkgPT4gdHlwZW9mIERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRG9jdW1lbnQ7XG52YXIgaXNDc3NFbGVtZW50ID0gKHZhbHVlKSA9PiB0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG52YXIgZXNjYXBlQ1NTSWRlbnRpZmllciA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodHlwZW9mIENTUyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgQ1NTLmVzY2FwZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gQ1NTLmVzY2FwZSh2YWx1ZSk7XG5cdHJldHVybiBBcnJheS5mcm9tKHZhbHVlKS5tYXAoKGNoYXIpID0+IGBcXFxcJHtjaGFyLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KX0gYCkuam9pbihcIlwiKTtcbn07XG52YXIgc3R5bGVJZENvdW50ZXIgPSAwO1xudmFyIGNyZWF0ZVN0eWxlSWQgPSAoKSA9PiB7XG5cdGlmICh0eXBlb2YgY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcblx0cmV0dXJuIGB1eC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0keygrK3N0eWxlSWRDb3VudGVyKS50b1N0cmluZygzNil9YDtcbn07XG52YXIgdXJsQ2FuUGFyc2UgPSAodmFsdWUpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIFVSTCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgVVJMLmNhblBhcnNlID09PSBcImZ1bmN0aW9uXCIgJiYgVVJMLmNhblBhcnNlKHZhbHVlKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGhhc2ggPSBhc3luYyAoc3RyaW5nKSA9PiB7XG5cdGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8/LnN1YnRsZT8uZGlnZXN0KFwiU0hBLTI1NlwiLCB0eXBlb2Ygc3RyaW5nID09IFwic3RyaW5nXCIgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nKSA6IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gc3RyaW5nIDogYXdhaXQgc3RyaW5nPy5hcnJheUJ1ZmZlcj8uKCkpO1xuXHRyZXR1cm4gXCJzaGEyNTYtXCIgKyBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpKTtcbn07XG52YXIgcGFyc2VMZW5ndGggPSAodmFsdWUsIHNpemUpID0+IHtcblx0aWYgKHZhbHVlLmVuZHNXaXRoKFwiJVwiKSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwICogc2l6ZSgpO1xuXHRyZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59O1xudmFyIHBhcnNlT3JpZ2luID0gKG9yaWdpbiwgZWxlbWVudCkgPT4ge1xuXHRjb25zdCB2YWx1ZXMgPSBvcmlnaW4uc3BsaXQoXCIgXCIpO1xuXHRyZXR1cm4gbmV3IERPTVBvaW50KHBhcnNlTGVuZ3RoKHZhbHVlc1swXSwgKCkgPT4gZWxlbWVudC5jbGllbnRXaWR0aCksIHBhcnNlTGVuZ3RoKHZhbHVlc1sxXSwgKCkgPT4gZWxlbWVudC5jbGllbnRIZWlnaHQpKTtcbn07XG52YXIgcGFyc2VUaW1lID0gKHYsIGZhbGxiYWNrID0gMCkgPT4ge1xuXHRpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHJldHVybiB2O1xuXHRpZiAoIXYpIHJldHVybiBmYWxsYmFjaztcblx0Y29uc3QgdCA9IFN0cmluZyh2KS50cmltKCk7XG5cdGlmICh0LmVuZHNXaXRoKFwibXNcIikpIHJldHVybiBwYXJzZUZsb2F0KHQpO1xuXHRpZiAodC5lbmRzV2l0aChcInNcIikpIHJldHVybiBwYXJzZUZsb2F0KHQpICogMWUzO1xuXHRyZXR1cm4gcGFyc2VGbG9hdCh0KSB8fCBmYWxsYmFjaztcbn07XG52YXIgbm9ybWFsaXplSXRlcmF0aW9uQ291bnQgPSAoY291bnQpID0+IHtcblx0aWYgKGNvdW50ID09PSB2b2lkIDApIHJldHVybiAxO1xuXHRpZiAoY291bnQgPT09IC0xIHx8IGNvdW50ID09PSBJbmZpbml0eSkgcmV0dXJuIEluZmluaXR5O1xuXHRyZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihjb3VudCkpO1xufTtcbnZhciBub3JtYWxpemVJdGVyYXRpb25zID0gKG4pID0+IG4gPT09IC0xIHx8IG4gPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBNYXRoLm1heCgxLCBuID8/IDEpO1xudmFyIGlzU2Nyb2xsRHJpdmVuID0gKHQpID0+IHQgIT0gbnVsbCAmJiB0eXBlb2YgdCA9PT0gXCJvYmplY3RcIiAmJiB0LmtpbmQgPT09IFwic2Nyb2xsXCI7XG52YXIgaXNWaWV3RHJpdmVuID0gKHQpID0+IHQgIT0gbnVsbCAmJiB0eXBlb2YgdCA9PT0gXCJvYmplY3RcIiAmJiB0LmtpbmQgPT09IFwidmlld1wiO1xudmFyIGlzU3R5bGVIb3N0ID0gKG5vZGUpID0+IHtcblx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgIT09IDEpIHJldHVybiBmYWxzZTtcblx0aWYgKFN0cmluZyhub2RlLmxvY2FsTmFtZSB8fCBcIlwiKS5pbmNsdWRlcyhcIi1cIikpIHJldHVybiB0cnVlO1xuXHRpZiAobm9kZS5zaGFkb3dSb290KSByZXR1cm4gdHJ1ZTtcblx0aWYgKG5vZGUuc3R5bGVzICE9IG51bGwpIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIHJlYWRTaGVldFJ1bGVDb3VudCA9IChzaGVldCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBzaGVldC5jc3NSdWxlcy5sZW5ndGg7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xudmFyIGlzQWRvcHRlZFNoZWV0RW1wdHkgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIHRydWU7XG5cdGNvbnN0IGNvdW50ID0gcmVhZFNoZWV0UnVsZUNvdW50KHNoZWV0KTtcblx0aWYgKGNvdW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiBjb3VudCA9PT0gMDtcbn07XG52YXIgaXNDb2xvclRva2VuID0gKG5hbWUpID0+IG5hbWUgPT09IFwiLS1iYXNlLWNvbG9yXCIgfHwgbmFtZS5zdGFydHNXaXRoKFwiLS1jb2xvci1cIikgfHwgbmFtZS5lbmRzV2l0aChcIi1jb2xvclwiKSB8fCBuYW1lLmVuZHNXaXRoKFwiLWZnXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCItYmdcIik7XG52YXIgaXNFbGVtZW50VmlzaWJsZSA9IChlbCkgPT4ge1xuXHRpZiAoIWVsLmlzQ29ubmVjdGVkKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2YgZWwuZ2V0Q2xpZW50UmVjdHMgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG52YXIgaXNTdHlsZUJpbmRpbmcgPSAoc3R5bGVzKSA9PiB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHN0eWxlcykgJiYgdHlwZW9mIHN0eWxlc1swXSA9PT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciBpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQgPSAoY3NzVGV4dCkgPT4ge1xuXHRjb25zdCBzb3VyY2UgPSB0eXBlb2YgY3NzVGV4dCA9PT0gXCJzdHJpbmdcIiA/IGNzc1RleHQudHJpbSgpIDogXCJcIjtcblx0aWYgKCFzb3VyY2UpIHJldHVybiB0cnVlO1xuXHRmb3IgKGNvbnN0IGNodW5rIG9mIHNvdXJjZS5zcGxpdChcIjtcIikpIHtcblx0XHRjb25zdCBkZWNsYXJhdGlvbiA9IGNodW5rLnRyaW0oKTtcblx0XHRpZiAoIWRlY2xhcmF0aW9uKSBjb250aW51ZTtcblx0XHRjb25zdCBjb2xvbkluZGV4ID0gZGVjbGFyYXRpb24uaW5kZXhPZihcIjpcIik7XG5cdFx0aWYgKGNvbG9uSW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKGRlY2xhcmF0aW9uLnNsaWNlKGNvbG9uSW5kZXggKyAxKS50cmltKCkubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcbnZhciBwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUgPSAoZWxlbWVudCkgPT4ge1xuXHRpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47XG5cdGNvbnN0IHJhdyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG5cdGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuO1xuXHRpZiAoaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0KHJhdykpIHtcblx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuXHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG5cdH1cbn07XG52YXIgYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUgPSAoZWxlbWVudCwgY3NzVGV4dCkgPT4ge1xuXHRpZiAoaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0KGNzc1RleHQpKSB7XG5cdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcblx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xufTtcbnZhciBpc05hdGl2ZUNTU1N0eWxlVmFsdWUgPSAodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0Y29uc3QgQ1NTU3R5bGVWYWx1ZUN0b3IgPSBnbG9iYWxUaGlzLkNTU1N0eWxlVmFsdWU7XG5cdFx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgQ1NTU3R5bGVWYWx1ZUN0b3IpIHJldHVybiB0cnVlO1xuXHRcdGZvciAobGV0IHByb3RvdHlwZSA9IHZhbHVlOyBwcm90b3R5cGU7IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpKSBpZiAocHJvdG90eXBlPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gXCJDU1NTdHlsZVZhbHVlXCIpIHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHt9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgaXNSZWFjdGl2ZVN0eWxlVmFsdWUgPSAodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gXCJ2YWx1ZVwiIGluIHZhbHVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24gPSAodmFsdWUpID0+IHtcblx0cmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciBlc2NhcGVSZWdFeHAgPSAodmFsdWUpID0+IHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn07XG52YXIgY29udGFpbnNNYXJrZXIgPSAoY3NzVmFsdWUsIG1hcmtlcikgPT4ge1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgdmFyXFxcXChcXFxccyoke2VzY2FwZVJlZ0V4cChtYXJrZXIpfVxcXFxzKlxcXFwpYCkudGVzdChjc3NWYWx1ZSk7XG59O1xudmFyIHJlYWRBdHRhY2hlZENTU1VuaXQgPSAodGV4dCkgPT4ge1xuXHRjb25zdCBtYXRjaCA9IENTU19VTklUX1RPS0VOX1JFLmV4ZWModGV4dCk7XG5cdGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXHRjb25zdCBhdXRob3JlZCA9IG1hdGNoWzBdO1xuXHRjb25zdCBub3JtYWxpemVkID0gYXV0aG9yZWQudG9Mb3dlckNhc2UoKTtcblx0aWYgKCFDU1NfRElNRU5TSU9OX1VOSVRTLmhhcyhub3JtYWxpemVkKSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB7XG5cdFx0YXV0aG9yZWQsXG5cdFx0bm9ybWFsaXplZCxcblx0XHRsZW5ndGg6IGF1dGhvcmVkLmxlbmd0aFxuXHR9O1xufTtcbnZhciBnZXRXaW5kb3dDb25zdHJ1Y3RvciA9ICh3aW4sIG5hbWUpID0+IHtcblx0cmV0dXJuIHdpbj8uW25hbWVdID8/IGdsb2JhbFRoaXM/LltuYW1lXTtcbn07XG52YXIgY3JlYXRlVHlwZWRVbml0VmFsdWUgPSAod2luLCB1bml0LCB2YWx1ZSkgPT4ge1xuXHRjb25zdCBDU1NOYW1lc3BhY2UgPSB3aW4/LkNTUztcblx0Y29uc3QgZmFjdG9yeU5hbWUgPSBjc3NVbml0RmFjdG9yeU5hbWUodW5pdCk7XG5cdGNvbnN0IGZhY3RvcnkgPSBDU1NOYW1lc3BhY2U/LltmYWN0b3J5TmFtZV07XG5cdGlmICh0eXBlb2YgZmFjdG9yeSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFjdG9yeS5jYWxsKENTU05hbWVzcGFjZSwgdmFsdWUpO1xuXHRjb25zdCBDU1NVbml0VmFsdWVDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU1VuaXRWYWx1ZVwiKTtcblx0aWYgKHR5cGVvZiBDU1NVbml0VmFsdWVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYFR5cGVkIE9NIGRvZXMgbm90IHN1cHBvcnQgQ1NTIHVuaXQgXCIke3VuaXR9XCJgKTtcblx0cmV0dXJuIG5ldyBDU1NVbml0VmFsdWVDdG9yKHZhbHVlLCBjc3NVbml0Q29uc3RydWN0b3JOYW1lKHVuaXQpKTtcbn07XG52YXIgaXNTdHlsZVZhbHVlID0gKHZhbCkgPT4gaGFzVHlwZWRPTSAmJiB2YWwgaW5zdGFuY2VvZiBDU1NTdHlsZVZhbHVlO1xudmFyIGlzVW5pdFZhbHVlID0gKHZhbCkgPT4gaGFzVHlwZWRPTSAmJiB2YWwgaW5zdGFuY2VvZiBDU1NVbml0VmFsdWU7XG52YXIgcXVlcnlGaXJzdERlZXAgPSAocm9vdCwgc2VsZWN0b3IpID0+IHtcblx0aWYgKCFyb290IHx8ICFzZWxlY3RvcikgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHRyeVF1ZXJ5ID0gKHNjb3BlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGhpdCA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3I/LihzZWxlY3Rvcik7XG5cdFx0XHRyZXR1cm4gaGl0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBoaXQgOiBudWxsO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBkaXJlY3QgPSB0cnlRdWVyeShyb290KTtcblx0aWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdDtcblx0aWYgKHJvb3QgaW5zdGFuY2VvZiBFbGVtZW50ICYmIHJvb3Quc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IGlubmVyID0gcXVlcnlGaXJzdERlZXAocm9vdC5zaGFkb3dSb290LCBzZWxlY3Rvcik7XG5cdFx0aWYgKGlubmVyKSByZXR1cm4gaW5uZXI7XG5cdH1cblx0aWYgKHR5cGVvZiByb290LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdGZvciAoY29uc3QgZWwgb2Ygcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkge1xuXHRcdGlmICghZWwuc2hhZG93Um9vdCkgY29udGludWU7XG5cdFx0Y29uc3QgaGl0ID0gcXVlcnlGaXJzdERlZXAoZWwuc2hhZG93Um9vdCwgc2VsZWN0b3IpO1xuXHRcdGlmIChoaXQpIHJldHVybiBoaXQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGF5ZXJzLnRzXG52YXIgY3NzTGF5ZXJPcmRlciA9ICguLi5ncm91cHMpID0+IHtcblx0Y29uc3Qgc2VlbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0IG5hbWVzID0gW107XG5cdGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG5cdFx0aWYgKGdyb3VwID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGxpc3QgPSB0eXBlb2YgZ3JvdXAgPT09IFwic3RyaW5nXCIgPyBbZ3JvdXBdIDogZ3JvdXA7XG5cdFx0Zm9yIChjb25zdCByYXcgb2YgbGlzdCkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IFN0cmluZyhyYXcgfHwgXCJcIikudHJpbSgpO1xuXHRcdFx0aWYgKCFuYW1lIHx8IHNlZW4uaGFzKG5hbWUpKSBjb250aW51ZTtcblx0XHRcdHNlZW4uYWRkKG5hbWUpO1xuXHRcdFx0bmFtZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG5hbWVzLmxlbmd0aCA/IGBAbGF5ZXIgJHtuYW1lcy5qb2luKFwiLCBcIil9O2AgOiBcIlwiO1xufTtcbnZhciB2ZWVsYUNhc2NhZGVPcmRlciA9ICgpID0+IGNzc0xheWVyT3JkZXIoVkVFTEFfQ0FTQ0FERV9MQVlFUlMpO1xudmFyIG1ha2VIb3N0TGF5ZXJPcmRlciA9IChleHRyYSkgPT4gY3NzTGF5ZXJPcmRlcihVWF9IT1NUX0xBWUVSUywgZXh0cmEpO1xudmFyIGNzc0xheWVyQmxvY2sgPSAobGF5ZXJOYW1lLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSAoY3NzVGV4dCB8fCBcIlwiKS50cmltKCk7XG5cdGlmICghbGF5ZXJOYW1lIHx8ICFib2R5KSByZXR1cm4gXCJcIjtcblx0cmV0dXJuIGBAbGF5ZXIgJHtsYXllck5hbWV9IHtcXG4ke2JvZHl9XFxufWA7XG59O1xudmFyIHdyYXBDc3NMYXllciA9IChjc3NUZXh0LCBsYXllck5hbWUpID0+IGxheWVyTmFtZSA/IGBAbGF5ZXIgJHtsYXllck5hbWV9IHsgJHtjc3NUZXh0fSB9YCA6IGNzc1RleHQ7XG52YXIgbm9ybWFsaXplQ3NzRm9yTGF5ZXIgPSAobGF5ZXJOYW1lLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IHRyaW1tZWQgPSAoY3NzVGV4dCB8fCBcIlwiKS50cmltKCk7XG5cdGlmICghdHJpbW1lZCkgcmV0dXJuIFwiXCI7XG5cdGlmICgvXkBsYXllclxcYi8udGVzdCh0cmltbWVkKSkgcmV0dXJuIHRyaW1tZWQ7XG5cdHJldHVybiBjc3NMYXllckJsb2NrKGxheWVyTmFtZSwgdHJpbW1lZCk7XG59O1xudmFyIHVud3JhcE91dGVyTGF5ZXJCbG9jayA9IChjc3MsIGV4cGVjdGVkTmFtZSkgPT4ge1xuXHRjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChMQVlFUl9PUEVOKTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHBlY3RlZE5hbWUgJiYgbWF0Y2hbMV0gIT09IGV4cGVjdGVkTmFtZSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IG9wZW4gPSBtYXRjaFswXS5sYXN0SW5kZXhPZihcIntcIik7XG5cdGxldCBkZXB0aCA9IDA7XG5cdGZvciAobGV0IGkgPSBvcGVuOyBpIDwgY3NzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY2ggPSBjc3NbaV07XG5cdFx0aWYgKGNoID09PSBcIntcIikgZGVwdGgrKztcblx0XHRlbHNlIGlmIChjaCA9PT0gXCJ9XCIpIHtcblx0XHRcdGRlcHRoLS07XG5cdFx0XHRpZiAoZGVwdGggPT09IDApIHtcblx0XHRcdFx0aWYgKGNzcy5zbGljZShpICsgMSkudHJpbSgpKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0cmV0dXJuIGNzcy5zbGljZShvcGVuICsgMSwgaSkudHJpbSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgdW53cmFwQ3NzTGF5ZXIgPSAoY3NzVGV4dCwgbGF5ZXJOYW1lKSA9PiB7XG5cdGNvbnN0IHN0cmlwcGVkID0gc3RyaXBDc3NQcmVhbWJsZShjc3NUZXh0KTtcblx0cmV0dXJuIHVud3JhcE91dGVyTGF5ZXJCbG9jayhzdHJpcHBlZCwgbGF5ZXJOYW1lKSA/PyBzdHJpcHBlZDtcbn07XG52YXIgY3NzSW1wb3J0V2l0aExheWVyID0gKHVybCwgbGF5ZXIgPSBcIlwiKSA9PiBgQGltcG9ydCB1cmwoXCIke3VybH1cIikgJHtsYXllciAmJiB0eXBlb2YgbGF5ZXIgPT09IFwic3RyaW5nXCIgPyBgbGF5ZXIoJHtsYXllcn0pYCA6IFwiXCJ9O2A7XG52YXIgVVhfUFJFTE9BRF9IT1NUX0NTUyA9IGNzc0xheWVyQmxvY2soXCJ1eC1wcmVsb2FkXCIsIFwiOmhvc3QgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XCIpO1xudmFyIGdldE9yQ3JlYXRlTGF5ZXJSdWxlID0gKHNoZWV0LCBsYXllck5hbWUpID0+IHtcblx0aWYgKCFzaGVldCB8fCAhbGF5ZXJOYW1lKSByZXR1cm4gdm9pZCAwO1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMgfHwgW10pO1xuXHRjb25zdCBleGlzdGluZyA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IGlzTGF5ZXJCbG9ja1J1bGUocnVsZSkgJiYgcnVsZS5uYW1lID09PSBsYXllck5hbWUpO1xuXHRpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblx0dHJ5IHtcblx0XHRjb25zdCBydWxlSW5kZXggPSBzaGVldC5pbnNlcnRSdWxlKGNzc0VtcHR5TGF5ZXJSdWxlKGxheWVyTmFtZSksIHJ1bGVzLmxlbmd0aCk7XG5cdFx0Y29uc3QgY3JlYXRlZCA9IHNoZWV0LmNzc1J1bGVzPy5bcnVsZUluZGV4XTtcblx0XHRyZXR1cm4gaXNMYXllckJsb2NrUnVsZShjcmVhdGVkKSA/IGNyZWF0ZWQgOiB2b2lkIDA7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybjtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb3BlcnR5LnRzXG52YXIgdG9rZW5pemVOdW1lcmljQ1NTJDEgPSAoc291cmNlKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IFtdO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0d2hpbGUgKGN1cnNvciA8IHNvdXJjZS5sZW5ndGgpIHtcblx0XHRjb25zdCByZXN0ID0gc291cmNlLnNsaWNlKGN1cnNvcik7XG5cdFx0Y29uc3Qgd2hpdGVzcGFjZSA9IC9eXFxzKy8uZXhlYyhyZXN0KTtcblx0XHRpZiAod2hpdGVzcGFjZSkge1xuXHRcdFx0Y3Vyc29yICs9IHdoaXRlc3BhY2VbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IG51bWJlciA9IC9eKD86XFxkKlxcLlxcZCt8XFxkK1xcLj9cXGQqKSg/OltlRV1bKy1dP1xcZCspPy8uZXhlYyhyZXN0KTtcblx0XHRpZiAobnVtYmVyKSB7XG5cdFx0XHRjdXJzb3IgKz0gbnVtYmVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnN0IHVuaXRNYXRjaCA9IENTU19VTklUX1RPS0VOX1JFLmV4ZWMoc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRNYXRjaD8uWzBdID8/IG51bGw7XG5cdFx0XHRpZiAodW5pdE1hdGNoKSBjdXJzb3IgKz0gdW5pdE1hdGNoWzBdLmxlbmd0aDtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJudW1iZXJcIixcblx0XHRcdFx0dmFsdWU6IE51bWJlcihudW1iZXJbMF0pLFxuXHRcdFx0XHR1bml0OiB1bml0ID09IG51bGwgPyBudWxsIDogdW5pdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBpZGVudGlmaWVyID0gL15bYS16QS1aX11bYS16QS1aMC05Xy1dKi8uZXhlYyhyZXN0KTtcblx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcImlkZW50aWZpZXJcIixcblx0XHRcdFx0dmFsdWU6IGlkZW50aWZpZXJbMF0udG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gaWRlbnRpZmllclswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltYm9sID0gcmVzdFswXTtcblx0XHRpZiAoW1xuXHRcdFx0XCIrXCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCIvXCIsXG5cdFx0XHRcIihcIixcblx0XHRcdFwiKVwiLFxuXHRcdFx0XCIsXCJcblx0XHRdLmluY2x1ZGVzKHN5bWJvbCkpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJzeW1ib2xcIixcblx0XHRcdFx0dmFsdWU6IHN5bWJvbFxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IrKztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIHRva2VuIG5lYXIgXCIke3Jlc3R9XCJgKTtcblx0fVxuXHRyZXR1cm4gdG9rZW5zO1xufTtcbnZhciBOdW1lcmljVHlwZWRPTVBhcnNlciQxID0gY2xhc3Mge1xuXHR0b2tlbnM7XG5cdHdpbjtcblx0aW5kZXggPSAwO1xuXHRjb25zdHJ1Y3Rvcih0b2tlbnMsIHdpbikge1xuXHRcdHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMud2luID0gd2luO1xuXHR9XG5cdHBhcnNlKCkge1xuXHRcdGNvbnN0IHJvb3QgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0aWYgKHRoaXMuaW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCB0cmFpbGluZyBleHByZXNzaW9uXCIpO1xuXHRcdHJldHVybiByb290O1xuXHR9XG5cdGN1cnJlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHR9XG5cdGNvbnN1bWUoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uXCIpO1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH1cblx0Y29uc3VtZVN5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9XG5cdG1hdGNoZXNTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRyZXR1cm4gdG9rZW4/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHN5bWJvbDtcblx0fVxuXHRjcmVhdGVNYXRoKG5hbWUsIC4uLnZhbHVlcykge1xuXHRcdGNvbnN0IENvbnN0cnVjdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3IodGhpcy53aW4sIG5hbWUpO1xuXHRcdGlmICh0eXBlb2YgQ29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvciguLi52YWx1ZXMpO1xuXHR9XG5cdHBhcnNlU3VtKCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBzdW0gb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiK1wiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVByb2R1Y3QoKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiL1wiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgcHJvZHVjdCBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIqXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aEludmVydFwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VVbmFyeSgpIHtcblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHRoaXMucGFyc2VVbmFyeSgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cdH1cblx0cGFyc2VQcmltYXJ5KCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwibnVtYmVyXCIpIHJldHVybiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgdG9rZW4udW5pdCA/PyBcIm51bWJlclwiLCB0b2tlbi52YWx1ZSk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0b2tlbi52YWx1ZSk7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlXCIpO1xuXHR9XG5cdHBhcnNlRnVuY3Rpb24obmFtZSkge1xuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwiY2FsY1wiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdGlmICghdGhpcy5tYXRjaGVzU3ltYm9sKFwiKVwiKSkge1xuXHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIsXCIpKSB7XG5cdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdGlmIChuYW1lID09PSBcIm1pblwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWluKCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWluXCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcIm1heFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWF4KCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWF4XCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcImNsYW1wXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJjbGFtcCgpIHJlcXVpcmVzIHRocmVlIHZhbHVlc1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoQ2xhbXBcIiwgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0fVxufTtcbnZhciBwYXJzZVRvVHlwZWRPTSA9IChjc3NWYWx1ZSwgd2luKSA9PiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdG9rZW5zID0gdG9rZW5pemVOdW1lcmljQ1NTJDEoY3NzVmFsdWUpO1xuXHRcdHJldHVybiBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIkMSh0b2tlbnMsIHdpbikucGFyc2UoKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG52YXIgc2V0UHJvcGVydHlJZk5vdEVxdWFsID0gKHN0eWxlUmVmLCBrZWJhYiwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdGlmICghc3R5bGVSZWYgfHwgIWtlYmFiKSByZXR1cm47XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0aWYgKHN0eWxlUmVmLmdldFByb3BlcnR5VmFsdWUoa2ViYWIpICE9PSBcIlwiKSBzdHlsZVJlZi5yZW1vdmVQcm9wZXJ0eShrZWJhYik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdHlsZVJlZi5nZXRQcm9wZXJ0eVZhbHVlKGtlYmFiKSAhPT0gdmFsdWUpIHN0eWxlUmVmLnNldFByb3BlcnR5KGtlYmFiLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHlUeXBlZCA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFlbGVtZW50IHx8ICFuYW1lKSByZXR1cm4gZWxlbWVudDtcblx0Y29uc3Qga2ViYWIgPSBjYW1lbFRvS2ViYWIobmFtZSk7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWxlbWVudC5zdHlsZTtcblx0Y29uc3Qgc3R5bGVNYXBSZWYgPSBlbGVtZW50LmF0dHJpYnV0ZVN0eWxlTWFwID8/IGVsZW1lbnQuc3R5bGVNYXA7XG5cdGlmICghaGFzVHlwZWRPTSB8fCAhc3R5bGVNYXBSZWYpIHJldHVybiBzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2soZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UpO1xuXHRjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdGxldCB2YWwgPSBoYXNWYWx1ZSh2YWx1ZSkgJiYgaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c3R5bGVNYXBSZWYuZGVsZXRlPy4oa2ViYWIpO1xuXHRcdGlmIChzdHlsZVJlZikgc2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB7XG5cdFx0Y29uc3Qgb2xkID0gc3R5bGVNYXBSZWYuZ2V0KGtlYmFiKTtcblx0XHRpZiAoaXNVbml0VmFsdWUodmFsKSAmJiBpc1VuaXRWYWx1ZShvbGQpKSB7XG5cdFx0XHRpZiAob2xkLnZhbHVlID09PSB2YWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IHZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHR9IGVsc2UgaWYgKG9sZCA9PT0gdmFsKSByZXR1cm4gZWxlbWVudDtcblx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIHZhbCk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcblx0XHRpZiAoQ1NTPy5udW1iZXIgJiYgIWtlYmFiLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuXHRcdFx0Y29uc3QgbmV3VmFsID0gQ1NTLm51bWJlcih2YWwpO1xuXHRcdFx0Y29uc3Qgb2xkID0gc3R5bGVNYXBSZWYuZ2V0KGtlYmFiKTtcblx0XHRcdGlmIChpc1VuaXRWYWx1ZShvbGQpICYmIG9sZC52YWx1ZSA9PT0gbmV3VmFsLnZhbHVlICYmIG9sZC51bml0ID09PSBuZXdWYWwudW5pdCkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIG5ld1ZhbCk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKC9cXGIoY2FsY3xtaW58bWF4fGNsYW1wKVxccypcXCgvLnRlc3QodmFsKSkge1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VUb1R5cGVkT00odmFsLCB3aW4pO1xuXHRcdFx0aWYgKHBhcnNlZCkgdHJ5IHtcblx0XHRcdFx0c3R5bGVNYXBSZWYuc2V0KGtlYmFiLCBwYXJzZWQpO1xuXHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdH0gY2F0Y2gge31cblx0XHR9XG5cdFx0Y29uc3QgbWF5YmVOdW0gPSB0cnlTdHJpbmdBc051bWJlcih2YWwpO1xuXHRcdGlmICh0eXBlb2YgbWF5YmVOdW0gPT09IFwibnVtYmVyXCIgJiYgQ1NTPy5udW1iZXIgJiYgIWtlYmFiLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuXHRcdFx0Y29uc3QgbmV3VmFsID0gQ1NTLm51bWJlcihtYXliZU51bSk7XG5cdFx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdFx0aWYgKGlzVW5pdFZhbHVlKG9sZCkgJiYgb2xkLnZhbHVlID09PSBuZXdWYWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IG5ld1ZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgbmV3VmFsKTtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCB2YWwsIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIFN0cmluZyh2YWwpLCBpbXBvcnRhbmNlKTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFlbGVtZW50IHx8ICFuYW1lKSByZXR1cm4gZWxlbWVudDtcblx0Y29uc3Qga2ViYWIgPSBjYW1lbFRvS2ViYWIobmFtZSk7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWxlbWVudC5zdHlsZTtcblx0aWYgKCFzdHlsZVJlZikgcmV0dXJuIGVsZW1lbnQ7XG5cdGxldCB2YWwgPSBoYXNWYWx1ZSh2YWx1ZSkgJiYgaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgIWlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB2YWwgPSB0cnlTdHJpbmdBc051bWJlcih2YWwpID8/IHZhbDtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsID09PSBcIm51bWJlclwiKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIFN0cmluZyh2YWwpLCBpbXBvcnRhbmNlKTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHkgPSAoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdHJldHVybiBoYXNUeXBlZE9NID8gc2V0U3R5bGVQcm9wZXJ0eVR5cGVkKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKSA6IHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayhlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xudmFyIGhhbmRsZVN0eWxlQ2hhbmdlID0gKGVsLCBwcm9wLCB2YWwpID0+IHtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbD8uc3R5bGU7XG5cdGlmICghcHJvcCB8fCB0eXBlb2YgcHJvcCAhPT0gXCJzdHJpbmdcIiB8fCAhZWwgfHwgIXN0eWxlUmVmKSByZXR1cm4gZWw7XG5cdCRhdm9pZFRyaWdnZXIodmFsLCAoKSA9PiB7XG5cdFx0aWYgKGlzVmFsKHZhbCkgfHwgaGFzVmFsdWUodmFsKSB8fCBpc1ZhbHVlVW5pdCh2YWwpKSBzZXRTdHlsZVByb3BlcnR5KGVsLCBwcm9wLCB2YWwpO1xuXHRcdGVsc2UgaWYgKHZhbCA9PSBudWxsKSBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjYW1lbFRvS2ViYWIocHJvcCkpO1xuXHR9KTtcblx0cmV0dXJuIGVsO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoZWV0cy50c1xudmFyIHNldFN0eWxlSW5SdWxlID0gKHNlbGVjdG9yLCBuYW1lLCB2YWx1ZSkgPT4ge1xuXHRyZXR1cm4gc2V0U3R5bGVQcm9wZXJ0eShnZXRTdHlsZVJ1bGUoc2VsZWN0b3IpLCBuYW1lLCB2YWx1ZSk7XG59O1xudmFyIHNldFN0eWxlUnVsZSA9IChzZWxlY3Rvciwgc2hlZXQpID0+IHtcblx0Y29uc3QgcnVsZSA9IGdldFN0eWxlUnVsZShzZWxlY3Rvcik7XG5cdE9iamVjdC5lbnRyaWVzKHNoZWV0KS5mb3JFYWNoKChbcHJvcE5hbWUsIHByb3BWYWx1ZV0pID0+IHNldFN0eWxlUHJvcGVydHkocnVsZSwgcHJvcE5hbWUsIHByb3BWYWx1ZSkpO1xuXHRyZXR1cm4gcnVsZTtcbn07XG52YXIgbG9hZFN0eWxlU2hlZXQgPSAoaW5saW5lLCBiYXNlLCBsYXllciA9IFwiXCIsIGludGVncml0eSkgPT4ge1xuXHRjb25zdCBsb2FkID0gZmV0Y2hBbmRDYWNoZShpbmxpbmUpO1xuXHRjb25zdCB1cmwgPSB0eXBlb2YgaW5saW5lID09IFwic3RyaW5nXCIgPyBVUkwuY2FuUGFyc2UoaW5saW5lKSA/IGlubGluZSA6IGxvYWQgOiBsb2FkO1xuXHRpZiAoYmFzZT8uWzBdKSBiYXNlWzBdLmZldGNoUHJpb3JpdHkgPSBcImhpZ2hcIjtcblx0aWYgKGJhc2UgJiYgdXJsICYmIHR5cGVvZiB1cmwgPT0gXCJzdHJpbmdcIikgc2V0U3R5bGVVUkwoYmFzZSwgdXJsLCBsYXllcik7XG5cdGlmIChiYXNlPy5bMF0gJiYgKCFVUkwuY2FuUGFyc2UoaW5saW5lKSB8fCBpbnRlZ3JpdHkpICYmIGJhc2U/LlswXSBpbnN0YW5jZW9mIEhUTUxMaW5rRWxlbWVudCkge31cblx0cmV0dXJuIHByb21pc2VPckRpcmVjdChsb2FkLCAocmVzKSA9PiB7XG5cdFx0aWYgKGJhc2U/LlswXSAmJiByZXMpIHtcblx0XHRcdHNldFN0eWxlVVJMKGJhc2UsIHJlcywgbGF5ZXIpO1xuXHRcdFx0YmFzZT8uWzBdLnNldEF0dHJpYnV0ZShcImxvYWRlZFwiLCBcIlwiKTtcblx0XHR9XG5cdH0pPy5jYXRjaD8uKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBsb2FkIHN0eWxlIHNoZWV0OlwiLCBlcnJvcik7XG5cdH0pO1xufTtcbnZhciBsb2FkQmxvYlN0eWxlID0gKGlubGluZSkgPT4ge1xuXHRjb25zdCBzdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikgOiBudWxsO1xuXHRpZiAoc3R5bGUpIHN0eWxlLmZldGNoUHJpb3JpdHkgPSBcImhpZ2hcIjtcblx0aWYgKHN0eWxlKSB7XG5cdFx0T2JqZWN0LmFzc2lnbihzdHlsZSwge1xuXHRcdFx0cmVsOiBcInN0eWxlc2hlZXRcIixcblx0XHRcdHR5cGU6IFwidGV4dC9jc3NcIixcblx0XHRcdGNyb3NzT3JpZ2luOiBcInNhbWUtb3JpZ2luXCJcblx0XHR9KTtcblx0XHRzdHlsZS5kYXRhc2V0Lm93bmVyID0gXCJET01cIjtcblx0XHRsb2FkU3R5bGVTaGVldChpbmxpbmUsIFtzdHlsZSwgXCJocmVmXCJdKTtcblx0XHR0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZSk7XG5cdFx0cmV0dXJuIHN0eWxlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBsb2FkSW5saW5lU3R5bGUgPSAoaW5saW5lLCByb290RWxlbWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQ/LmhlYWQgOiBudWxsLCBsYXllciA9IFwiXCIpID0+IHtcblx0Y29uc3QgUExBQ0UgPSByb290RWxlbWVudD8ucXVlcnlTZWxlY3Rvcj8uKFwiaGVhZFwiKSA/PyByb290RWxlbWVudDtcblx0aWYgKHR5cGVvZiBIVE1MSGVhZEVsZW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBQTEFDRSBpbnN0YW5jZW9mIEhUTUxIZWFkRWxlbWVudCkgcmV0dXJuIGxvYWRCbG9iU3R5bGUoaW5saW5lKTtcblx0Y29uc3Qgc3R5bGUgPSB0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSA6IG51bGw7XG5cdGlmIChzdHlsZSkge1xuXHRcdHN0eWxlLmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xuXHRcdGxvYWRTdHlsZVNoZWV0KGlubGluZSwgW3N0eWxlLCBcImlubmVySFRNTFwiXSwgbGF5ZXIpO1xuXHRcdFBMQUNFPy5wcmVwZW5kPy4oc3R5bGUpO1xuXHRcdHJldHVybiBzdHlsZTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgc2V0UHJvcGVydHkgPSAodGFyZ2V0LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0cmV0dXJuIHNldFN0eWxlUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xudmFyIHByZWxvYWRTdHlsZSA9IChzdHlsZXMpID0+IHtcblx0cmV0dXJuIGxvYWRBc0Fkb3B0ZWQoc3R5bGVzLCBcIlwiKTtcbn07XG52YXIgcmVtZW1iZXJBZG9wdGVkVGV4dCA9IChzaGVldCwgY3NzVGV4dCkgPT4ge1xuXHRhZG9wdGVkQXBwbGllZFRleHQuc2V0KHNoZWV0LCBjc3NUZXh0KTtcblx0YWRvcHRlZEZpbGxlZC5hZGQoc2hlZXQpO1xufTtcbnZhciBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0ID0gKHNoZWV0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiBudWxsO1xuXHRjb25zdCBzdG9yZWQgPSBhZG9wdGVkQXBwbGllZFRleHQuZ2V0KHNoZWV0KTtcblx0aWYgKHN0b3JlZCkgcmV0dXJuIHN0b3JlZDtcblx0Zm9yIChjb25zdCBba2V5LCBtYXBwZWRdIG9mIGFkb3B0ZWRNYXApIGlmIChtYXBwZWQgPT09IHNoZWV0ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHJldHVybiBrZXk7XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgdGV4dCA9IGNzc1RleHQgfHwgY3NzVGV4dEZvckFkb3B0ZWRTaGVldChzaGVldCk7XG5cdGNvbnN0IGNvdW50ID0gcmVhZFNoZWV0UnVsZUNvdW50KHNoZWV0KTtcblx0aWYgKGNvdW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdGlmIChjb3VudCA+IDApIHtcblx0XHRhZG9wdGVkRmlsbGVkLmFkZChzaGVldCk7XG5cdFx0aWYgKHRleHQgJiYgIWFkb3B0ZWRBcHBsaWVkVGV4dC5oYXMoc2hlZXQpKSBhZG9wdGVkQXBwbGllZFRleHQuc2V0KHNoZWV0LCB0ZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRpZiAoIXRleHQpIHJldHVybiBmYWxzZTtcblx0aWYgKGFwcGx5QWRvcHRlZFN0eWxlVGV4dChzaGVldCwgdGV4dCkpIHtcblx0XHRyZW1lbWJlckFkb3B0ZWRUZXh0KHNoZWV0LCB0ZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIGFwcGx5QWRvcHRlZFN0eWxlVGV4dCA9IChzaGVldCwgY3NzVGV4dCkgPT4ge1xuXHRpZiAoIXNoZWV0IHx8ICFjc3NUZXh0KSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0c2hlZXQucmVwbGFjZVN5bmMoY3NzVGV4dCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IFN0cmluZyhlcnJvcj8ubWVzc2FnZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmICghKG1lc3NhZ2UuaW5jbHVkZXMoXCJAaW1wb3J0IHJ1bGVzIGFyZSBub3QgYWxsb3dlZFwiKSB8fCBtZXNzYWdlLmluY2x1ZGVzKFwiQGltcG9ydFwiKSAmJiBtZXNzYWdlLmluY2x1ZGVzKFwibm90IGFsbG93ZWRcIikpKSBjb25zb2xlLndhcm4oXCJbRE9NXSBGYWlsZWQgdG8gYXBwbHkgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlcnJvcik7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHNoZWV0Rm9yQmxvYiA9IChibG9iKSA9PiB7XG5cdGxldCBzaGVldCA9IGFkb3B0ZWRCbG9iTWFwLmdldChibG9iKTtcblx0aWYgKCFzaGVldCkge1xuXHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRhZG9wdGVkQmxvYk1hcC5zZXQoYmxvYiwgc2hlZXQpO1xuXHR9XG5cdHJldHVybiBzaGVldDtcbn07XG52YXIgbG9hZEFzQWRvcHRlZCA9IChzdHlsZXMsIGxheWVyTmFtZSA9IG51bGwpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbG9hZEFzQWRvcHRlZFVuc2FmZShzdHlsZXMsIGxheWVyTmFtZSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiW0RPTV0gbG9hZEFzQWRvcHRlZCBmYWlsZWRcIiwgZXJyb3IpO1xuXHRcdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiKSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciBsb2FkQXNBZG9wdGVkVW5zYWZlID0gKHN0eWxlcywgbGF5ZXJOYW1lID0gbnVsbCkgPT4ge1xuXHRpZiAoIXN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiKSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZW9mIHN0eWxlcyA9PT0gXCJzdHJpbmdcIiAmJiBjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQoc3R5bGVzKSkge1xuXHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09IFwic3RyaW5nXCIgJiYgYWRvcHRlZE1hcD8uaGFzPy4oc3R5bGVzKSkge1xuXHRcdGNvbnN0IGNhY2hlZCA9IGFkb3B0ZWRNYXAuZ2V0KHN0eWxlcyk7XG5cdFx0Y29uc3QgYXBwbGllZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoY2FjaGVkKSB8fCB3cmFwQ3NzTGF5ZXIoc3R5bGVzLCBsYXllck5hbWUpO1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoY2FjaGVkLCBhcHBsaWVkKTtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiAhZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLmluY2x1ZGVzKGNhY2hlZCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKGNhY2hlZCk7XG5cdFx0cmV0dXJuIGNhY2hlZDtcblx0fVxuXHRpZiAoKHN0eWxlcyBpbnN0YW5jZW9mIEJsb2IgfHwgc3R5bGVzIGluc3RhbmNlb2YgRmlsZSkgJiYgYWRvcHRlZEJsb2JNYXA/Lmhhcz8uKHN0eWxlcykpIHtcblx0XHRjb25zdCBjYWNoZWQgPSBhZG9wdGVkQmxvYk1hcC5nZXQoc3R5bGVzKTtcblx0XHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KGNhY2hlZCk7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhjYWNoZWQpKSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChjYWNoZWQpO1xuXHRcdHJldHVybiBjYWNoZWQ7XG5cdH1cblx0aWYgKCFzdHlsZXMpIHJldHVybiBudWxsO1xuXHRjb25zdCBzaGVldCA9IHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiA/IGdldE9ySW5zZXJ0Q29tcHV0ZWQoYWRvcHRlZE1hcCwgc3R5bGVzLCAoKSA9PiBuZXcgQ1NTU3R5bGVTaGVldCgpKSA6IHNoZWV0Rm9yQmxvYihzdHlsZXMpO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoc2hlZXQpKSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09IFwic3RyaW5nXCIgJiYgIXVybENhblBhcnNlKHN0eWxlcykpIHtcblx0XHRjb25zdCBsYXllcldyYXBwZWQgPSB3cmFwQ3NzTGF5ZXIoc3R5bGVzLCBsYXllck5hbWUpO1xuXHRcdGFkb3B0ZWRNYXAuc2V0KHN0eWxlcywgc2hlZXQpO1xuXHRcdGlmICghYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpKSB7XG5cdFx0XHRyZW1vdmVBZG9wdGVkKHNoZWV0KTtcblx0XHRcdGFkb3B0ZWRNYXAuZGVsZXRlKHN0eWxlcyk7XG5cdFx0XHRsb2FkSW5saW5lU3R5bGUoc3R5bGVzKTtcblx0XHR9IGVsc2UgcmVtZW1iZXJBZG9wdGVkVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKTtcblx0XHRyZXR1cm4gc2hlZXQ7XG5cdH0gZWxzZSBwcm9taXNlT3JEaXJlY3QoZmV0Y2hBc0lubGluZShzdHlsZXMpLCAoY2FjaGVkKSA9PiB7XG5cdFx0YWRvcHRlZE1hcC5zZXQoY2FjaGVkLCBzaGVldCk7XG5cdFx0aWYgKGNhY2hlZCkge1xuXHRcdFx0aWYgKGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudChjYWNoZWQpKSB7XG5cdFx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0XHRhZG9wdGVkTWFwLmRlbGV0ZShjYWNoZWQpO1xuXHRcdFx0XHRhZG9wdGVkQmxvYk1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdFx0bG9hZElubGluZVN0eWxlKGNhY2hlZCwgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzaGVldDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGxheWVyV3JhcHBlZCA9IHdyYXBDc3NMYXllcihjYWNoZWQsIGxheWVyTmFtZSk7XG5cdFx0XHRpZiAoIWFwcGx5QWRvcHRlZFN0eWxlVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKSkge1xuXHRcdFx0XHRyZW1vdmVBZG9wdGVkKHNoZWV0KTtcblx0XHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoY2FjaGVkKTtcblx0XHRcdFx0YWRvcHRlZEJsb2JNYXAuZGVsZXRlKHN0eWxlcyk7XG5cdFx0XHRcdGxvYWRJbmxpbmVTdHlsZShjYWNoZWQsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdFx0fSBlbHNlIHJlbWVtYmVyQWRvcHRlZFRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCk7XG5cdFx0XHRyZXR1cm4gc2hlZXQ7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHNoZWV0O1xufTtcbnZhciBjb2xsZWN0U3R5bGVIb3N0cyA9IChub2RlLCBpbnRvKSA9PiB7XG5cdGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlID09PSAzKSByZXR1cm47XG5cdGlmIChub2RlLm5vZGVUeXBlID09PSAxMSkge1xuXHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZE5vZGVzIHx8IFtdKSBjb2xsZWN0U3R5bGVIb3N0cyhjaGlsZCwgaW50byk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChpc1N0eWxlSG9zdChub2RlKSkgaW50by5hZGQobm9kZSk7XG5cdGlmICh0eXBlb2Ygbm9kZS5xdWVyeVNlbGVjdG9yQWxsICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybjtcblx0dHJ5IHtcblx0XHRmb3IgKGNvbnN0IGVsIG9mIG5vZGUucXVlcnlTZWxlY3RvckFsbChcIipcIikpIGlmIChpc1N0eWxlSG9zdChlbCkpIGludG8uYWRkKGVsKTtcblx0fSBjYXRjaCB7fVxufTtcbnZhciBub3RpZnlTdHlsZVRyZWVIb3N0cyA9IChob3N0cywgcmVhc29uID0gXCJ0cmVlXCIpID0+IHtcblx0Zm9yIChjb25zdCBlbCBvZiBob3N0cykge1xuXHRcdGlmICghaXNTdHlsZUhvc3QoZWwpKSBjb250aW51ZTtcblx0XHRmb3IgKGNvbnN0IGZuIG9mIHN0eWxlVHJlZUhvb2tzKSBmbihlbCwgcmVhc29uKTtcblx0fVxufTtcbnZhciByZWdpc3RlclN0eWxlVHJlZUhvb2sgPSAoZm4pID0+IHtcblx0aWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm47XG5cdHN0eWxlVHJlZUhvb2tzLmFkZChmbik7XG59O1xudmFyIG9ic2VydmVTdHlsZVRyZWUgPSAocm9vdCkgPT4ge1xuXHRpZiAoIXJvb3QgfHwgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiByb290O1xuXHRpZiAoc3R5bGVUcmVlT2JzZXJ2ZWQuaGFzKHJvb3QpKSByZXR1cm4gcm9vdDtcblx0c3R5bGVUcmVlT2JzZXJ2ZWQuYWRkKHJvb3QpO1xuXHRzdHlsZVRyZWVSb290cy5hZGQocm9vdCk7XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHJlY29yZHMpID0+IHtcblx0XHRjb25zdCBob3N0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdFx0Zm9yIChjb25zdCByZWMgb2YgcmVjb3JkcykgaWYgKHJlYy50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgcmVjLmFkZGVkTm9kZXMpIGNvbGxlY3RTdHlsZUhvc3RzKG5vZGUsIGhvc3RzKTtcblx0XHRcdGNvbnN0IHNjb3BlID0gcmVjLnRhcmdldD8uZ2V0Um9vdE5vZGU/LigpO1xuXHRcdFx0aWYgKHNjb3BlIGluc3RhbmNlb2YgU2hhZG93Um9vdCAmJiBpc1N0eWxlSG9zdChzY29wZS5ob3N0KSkge1xuXHRcdFx0XHRjb25zdCBzaGVldHMgPSBzY29wZS5hZG9wdGVkU3R5bGVTaGVldHM7XG5cdFx0XHRcdGlmICghc2hlZXRzIHx8IHNoZWV0cy5sZW5ndGggPT09IDApIGhvc3RzLmFkZChzY29wZS5ob3N0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlYy50eXBlID09PSBcImF0dHJpYnV0ZXNcIiAmJiByZWMudGFyZ2V0KSB7XG5cdFx0XHRpZiAoaXNTdHlsZUhvc3QocmVjLnRhcmdldCkpIGhvc3RzLmFkZChyZWMudGFyZ2V0KTtcblx0XHR9XG5cdFx0bm90aWZ5U3R5bGVUcmVlSG9zdHMoaG9zdHMsIFwibXV0YXRpb25cIik7XG5cdH0pO1xuXHR0cnkge1xuXHRcdG9ic2VydmVyLm9ic2VydmUocm9vdCwge1xuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsuLi5TVFlMRV9USEVNRV9BVFRSU11cblx0XHR9KTtcblx0fSBjYXRjaCB7XG5cdFx0c3R5bGVUcmVlT2JzZXJ2ZWQuZGVsZXRlKHJvb3QpO1xuXHRcdHJldHVybiByb290O1xuXHR9XG5cdHJldHVybiByb290O1xufTtcbnZhciByZWh5ZHJhdGVDb25zdHJ1Y3RhYmxlU2hlZXRzID0gKCkgPT4ge1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG5cdGNvbnN0IGNhblBhcnNlID0gdHlwZW9mIFVSTCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgVVJMLmNhblBhcnNlID09PSBcImZ1bmN0aW9uXCI7XG5cdGZvciAoY29uc3QgW2tleSwgc2hlZXRdIG9mIGFkb3B0ZWRNYXApIHtcblx0XHRpZiAoIXNoZWV0IHx8IHR5cGVvZiBrZXkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuXHRcdGlmIChjYW5QYXJzZSAmJiBVUkwuY2FuUGFyc2Uoa2V5KSkgY29udGludWU7XG5cdFx0Y29uc3QgdGV4dCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpIHx8IGtleTtcblx0XHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0LCB0ZXh0KTtcblx0XHRpZiAoZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoc2hlZXQpKSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdH1cbn07XG52YXIgcmVtb3ZlQWRvcHRlZCA9IChzaGVldCkgPT4ge1xuXHRpZiAoIXNoZWV0KSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IHRhcmdldCA9IHR5cGVvZiBzaGVldCA9PT0gXCJzdHJpbmdcIiA/IGFkb3B0ZWRNYXAuZ2V0KHNoZWV0KSA6IHNoZWV0O1xuXHRpZiAoIXRhcmdldCB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcblx0Y29uc3Qgc2hlZXRzID0gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzO1xuXHRjb25zdCBpZHggPSBzaGVldHMuaW5kZXhPZih0YXJnZXQpO1xuXHRpZiAoaWR4ICE9PSAtMSkge1xuXHRcdHNoZWV0cy5zcGxpY2UoaWR4LCAxKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFRyYW5zZm9ybSA9IChlbCkgPT4ge1xuXHRpZiAoZWw/LmNvbXB1dGVkU3R5bGVNYXApIHtcblx0XHRjb25zdCBtYXRyaXggPSBlbC5jb21wdXRlZFN0eWxlTWFwKCkuZ2V0KFwidHJhbnNmb3JtXCIpPy50b01hdHJpeD8uKCk7XG5cdFx0aWYgKG1hdHJpeCkgcmV0dXJuIG1hdHJpeDtcblx0fSBlbHNlIGlmIChlbCkge1xuXHRcdGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0cmV0dXJuIG5ldyBET01NYXRyaXgoc3R5bGU/LmdldFByb3BlcnR5VmFsdWU/LihcInRyYW5zZm9ybVwiKSk7XG5cdH1cblx0cmV0dXJuIG5ldyBET01NYXRyaXgoKTtcbn07XG52YXIgZ2V0VHJhbnNmb3JtT3JpZ2luID0gKGVsKSA9PiB7XG5cdGNvbnN0IGNzc09yaWdpbiA9IGdldENvbXB1dGVkU3R5bGUoZWwpPy5nZXRQcm9wZXJ0eVZhbHVlPy4oXCJ0cmFuc2Zvcm0tb3JpZ2luXCIpIHx8IGA1MCUgNTAlYDtcblx0cmV0dXJuIHBhcnNlT3JpZ2luKGNzc09yaWdpbiwgZWwpO1xufTtcbnZhciBnZXRQcm9wZXJ0eVZhbHVlID0gKHNyYywgbmFtZSkgPT4ge1xuXHRpZiAoXCJjb21wdXRlZFN0eWxlTWFwXCIgaW4gc3JjKSB7XG5cdFx0Y29uc3QgdmFsID0gc3JjPy5jb21wdXRlZFN0eWxlTWFwPy4oKT8uZ2V0KG5hbWUpO1xuXHRcdHJldHVybiB2YWwgaW5zdGFuY2VvZiBDU1NVbml0VmFsdWUgPyB2YWw/LnZhbHVlIHx8IDAgOiB2YWw/LnRvU3RyaW5nPy4oKTtcblx0fVxuXHRpZiAoc3JjIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRjb25zdCBjcyA9IGdldENvbXB1dGVkU3R5bGU/LihzcmMsIFwiXCIpO1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KGNzPy5nZXRQcm9wZXJ0eVZhbHVlPy4obmFtZSk/LnJlcGxhY2U/LihcInB4XCIsIFwiXCIpKSB8fCAwO1xuXHR9XG5cdHJldHVybiBwYXJzZUZsb2F0KChzcmM/LnN0eWxlID8/IHNyYykuZ2V0UHJvcGVydHlWYWx1ZT8uKG5hbWUpPy5yZXBsYWNlPy4oXCJweFwiLCBcIlwiKSkgfHwgMDtcbn07XG52YXIgZ2V0RWxlbWVudFpvb20gPSAoZWxlbWVudCkgPT4ge1xuXHRsZXQgem9vbSA9IDEsIGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcblx0d2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG5cdFx0aWYgKFwiY3VycmVudENTU1pvb21cIiBpbiBjdXJyZW50RWxlbWVudCkge1xuXHRcdFx0Y29uc3QgY3VycmVudENTU1pvb20gPSBjdXJyZW50RWxlbWVudC5jdXJyZW50Q1NTWm9vbTtcblx0XHRcdGlmICh0eXBlb2YgY3VycmVudENTU1pvb20gPT09IFwibnVtYmVyXCIpIHJldHVybiB6b29tICo9IGN1cnJlbnRDU1Nab29tO1xuXHRcdH1cblx0XHRjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudEVsZW1lbnQpO1xuXHRcdGlmIChzdHlsZS56b29tICYmIHN0eWxlLnpvb20gIT09IFwibm9ybWFsXCIpIHJldHVybiB6b29tICo9IHBhcnNlRmxvYXQoc3R5bGUuem9vbSk7XG5cdFx0aWYgKHN0eWxlLnpvb20gJiYgc3R5bGUuem9vbSAhPT0gXCJub3JtYWxcIiB8fCBcImN1cnJlbnRDU1Nab29tXCIgaW4gY3VycmVudEVsZW1lbnQpIHJldHVybiB6b29tO1xuXHRcdGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQ/Lm9mZnNldFBhcmVudCA/PyBjdXJyZW50RWxlbWVudD8ucGFyZW50RWxlbWVudDtcblx0fVxuXHRyZXR1cm4gem9vbTtcbn07XG52YXIgZ2V0UHhWYWx1ZSA9IChlbGVtZW50LCBuYW1lKSA9PiB7XG5cdHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPy4oZWxlbWVudCwgbmFtZSk7XG59O1xudmFyIGdldFBhZGRpbmcgPSAoc3JjLCBheGlzKSA9PiB7XG5cdGlmIChheGlzID09IFwiaW5saW5lXCIpIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHNyYywgXCJwYWRkaW5nLWlubGluZS1zdGFydFwiKSArIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctaW5saW5lLWVuZFwiKTtcblx0cmV0dXJuIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctYmxvY2stc3RhcnRcIikgKyBnZXRQcm9wZXJ0eVZhbHVlKHNyYywgXCJwYWRkaW5nLWJsb2NrLWVuZFwiKTtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jc3NvbS50c1xudmFyIHN0eWxlRWxlbWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpIDogbnVsbDtcbmlmIChzdHlsZUVsZW1lbnQpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImhlYWRcIik/LmFwcGVuZENoaWxkPy4oc3R5bGVFbGVtZW50KTtcblx0c3R5bGVFbGVtZW50LmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xufVxudmFyIHNldFN0eWxlVVJMID0gKGJhc2UsIHVybCwgbGF5ZXIgPSBcIlwiKSA9PiB7XG5cdGJhc2VbMF1bYmFzZVsxXV0gPSBiYXNlWzFdID09IFwiaW5uZXJIVE1MXCIgPyBjc3NJbXBvcnRXaXRoTGF5ZXIodXJsLCBsYXllcikgOiB1cmw7XG59O1xudmFyIHNldFN0eWxlUnVsZXMgPSAoY2xhc3NlcykgPT4ge1xuXHRyZXR1cm4gY2xhc3Nlcz8ubWFwPy4oKGFyZ3MpID0+IHNldFN0eWxlUnVsZSguLi5hcmdzKSk7XG59O1xudmFyIGdldFN0eWxlTGF5ZXIgPSAobGF5ZXJOYW1lLCBzaGVldCkgPT4ge1xuXHRzaGVldCB8fD0gc3R5bGVFbGVtZW50Py5zaGVldDtcblx0cmV0dXJuIGdldE9yQ3JlYXRlTGF5ZXJSdWxlKHNoZWV0LCBsYXllck5hbWUpO1xufTtcbnZhciBlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IgPSAoZWxlbWVudCkgPT4ge1xuXHRpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlc2NhcGVDU1NJZGVudGlmaWVyKGVsZW1lbnQuaWQpfWA7XG5cdGxldCBzdHlsZUlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIpO1xuXHRpZiAoIXN0eWxlSWQpIHtcblx0XHRzdHlsZUlkID0gY3JlYXRlU3R5bGVJZCgpO1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZS1pZFwiLCBzdHlsZUlkKTtcblx0fVxuXHRyZXR1cm4gYFtkYXRhLXN0eWxlLWlkPVwiJHtlc2NhcGVDU1NJZGVudGlmaWVyKHN0eWxlSWQpfVwiXWA7XG59O1xudmFyIGpvaW5TY29wZWRTZWxlY3RvciA9IChzY29wZSwgc2VsZWN0b3IpID0+IHtcblx0c2VsZWN0b3IgPSBzZWxlY3Rvci50cmltKCk7XG5cdGlmICghc2NvcGUpIHJldHVybiBzZWxlY3Rvcjtcblx0aWYgKCFzZWxlY3RvcikgcmV0dXJuIHNjb3BlO1xuXHRpZiAoc2VsZWN0b3Iuc3RhcnRzV2l0aChcIjo6XCIpKSByZXR1cm4gYCR7c2NvcGV9JHtzZWxlY3Rvcn1gO1xuXHRyZXR1cm4gYCR7c2NvcGV9ICR7c2VsZWN0b3J9YDtcbn07XG52YXIgZmluZFN0eWxlUnVsZSA9IChzaGVldCwgZnVsbFNlbGVjdG9yLCBzY29wZSwgc2VsZWN0b3IpID0+IHtcblx0Y29uc3QgcnVsZXMgPSBBcnJheS5mcm9tKHNoZWV0Py5jc3NSdWxlcyB8fCBbXSk7XG5cdGNvbnN0IGV4cGVjdGVkID0gZnVsbFNlbGVjdG9yLnRyaW0oKTtcblx0Y29uc3QgcmVxdWVzdGVkID0gc2VsZWN0b3IudHJpbSgpO1xuXHRyZXR1cm4gcnVsZXMuZmluZEluZGV4KChydWxlKSA9PiB7XG5cdFx0aWYgKCEocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSkpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCBhY3R1YWwgPSBydWxlLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPz8gXCJcIjtcblx0XHRpZiAoYWN0dWFsID09PSBleHBlY3RlZCkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHJlcXVlc3RlZCAmJiBhY3R1YWwuZW5kc1dpdGgocmVxdWVzdGVkKSkgcmV0dXJuIGFjdHVhbC5zbGljZSgwLCBhY3R1YWwubGVuZ3RoIC0gcmVxdWVzdGVkLmxlbmd0aCkudHJpbSgpID09PSBzY29wZTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufTtcbnZhciBnZXRTdHlsZVJ1bGUgPSAoc2VsZWN0b3IsIHNoZWV0LCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRjb25zdCByb290ID0gaXNTaGFkb3dSb290KGJhc2lzKSB8fCBpc0RvY3VtZW50KGJhc2lzKSA/IGJhc2lzIDogYmFzaXM/LmdldFJvb3ROb2RlPy4oKSA/PyAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQgOiBudWxsKTtcblx0Y29uc3QgYmFzaXNFbGVtZW50ID0gaXNDc3NFbGVtZW50KGJhc2lzKSA/IGJhc2lzIDogbnVsbDtcblx0bGV0IHNjb3BlID0gXCJcIjtcblx0aWYgKGJhc2lzRWxlbWVudCkgc2NvcGUgPSBlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IoYmFzaXNFbGVtZW50KTtcblx0ZWxzZSBpZiAoaXNTaGFkb3dSb290KHJvb3QpKSBzY29wZSA9IFwiOmhvc3RcIjtcblx0ZWxzZSBpZiAoaXNEb2N1bWVudChyb290KSkgc2NvcGUgPSBcIjpyb290XCI7XG5cdGxldCBzdHlsZUVsZW1lbnQgPSBudWxsO1xuXHRpZiAoaXNTaGFkb3dSb290KHJvb3QpKSB7XG5cdFx0c3R5bGVFbGVtZW50ID0gcm9vdC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS11eC1xdWVyeV1cIik7XG5cdFx0aWYgKCFzdHlsZUVsZW1lbnQgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS11eC1xdWVyeVwiLCBcIlwiKTtcblx0XHRcdHJvb3QuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblx0XHR9XG5cdH0gZWxzZSBzdHlsZUVsZW1lbnQgPSBzdHlsZUVsZW1lbnRHbG9iYWwoKTtcblx0c2hlZXQgfHw9IHN0eWxlRWxlbWVudD8uc2hlZXQ7XG5cdGlmICghc2hlZXQpIHJldHVybjtcblx0aWYgKGxheWVyTmFtZSkgcmV0dXJuIGdldFN0eWxlUnVsZShzZWxlY3RvciwgZ2V0U3R5bGVMYXllcihsYXllck5hbWUsIHNoZWV0KSwgbnVsbCwgYmFzaXMpO1xuXHRjb25zdCBmdWxsU2VsZWN0b3IgPSBqb2luU2NvcGVkU2VsZWN0b3Ioc2NvcGUsIHNlbGVjdG9yKTtcblx0bGV0IHJ1bGVJZCA9IGZpbmRTdHlsZVJ1bGUoc2hlZXQsIGZ1bGxTZWxlY3Rvciwgc2NvcGUsIHNlbGVjdG9yKTtcblx0aWYgKHJ1bGVJZCA9PT0gLTEpIHJ1bGVJZCA9IHNoZWV0Lmluc2VydFJ1bGUoYCR7ZnVsbFNlbGVjdG9yfSB7fWApO1xuXHRyZXR1cm4gc2hlZXQuY3NzUnVsZXM/LltydWxlSWRdO1xufTtcbmZ1bmN0aW9uIHN0eWxlRWxlbWVudEdsb2JhbCgpIHtcblx0cmV0dXJuIHN0eWxlRWxlbWVudCA/PyBudWxsO1xufVxudmFyIGZldGNoQW5kQ2FjaGUgPSAodXJsKSA9PiB7XG5cdGlmICghdXJsKSByZXR1cm4gbnVsbDtcblx0aWYgKGNhY2hlTWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVNYXAuZ2V0KHVybCk7XG5cdGlmICh1cmwgaW5zdGFuY2VvZiBCbG9iIHx8IHVybCBpbnN0YW5jZW9mIEZpbGUpIHtcblx0XHRpZiAoYmxvYlVSTE1hcC5oYXModXJsKSkgcmV0dXJuIGJsb2JVUkxNYXAuZ2V0KHVybCk7XG5cdFx0Y29uc3QgYnVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodXJsKTtcblx0XHRibG9iVVJMTWFwLnNldCh1cmwsIGJ1cmwpO1xuXHRcdGNhY2hlTWFwLnNldChidXJsLCBidXJsKTtcblx0XHRyZXR1cm4gYnVybDtcblx0fVxuXHRpZiAoVVJMLmNhblBhcnNlKHVybCkgfHwgdXJsPy50cmltPy4oKT8uc3RhcnRzV2l0aD8uKFwiLi9cIikpIHtcblx0XHRjb25zdCBwcm9taXNlZCA9IGZldGNoKHVybD8ucmVwbGFjZT8uKFwiP3VybFwiLCBcIj9yYXdcIiksIHtcblx0XHRcdGNhY2hlOiBcImZvcmNlLWNhY2hlXCIsXG5cdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRwcmlvcml0eTogXCJoaWdoXCJcblx0XHR9KT8udGhlbj8uKGFzeW5jIChyZXMpID0+IHtcblx0XHRcdGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuXHRcdFx0Y29uc3QgYnVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0XHRibG9iVVJMTWFwLnNldChibG9iLCBidXJsKTtcblx0XHRcdGNhY2hlTWFwLnNldCh1cmwsIGJ1cmwpO1xuXHRcdFx0Y2FjaGVNYXAuc2V0KGJ1cmwsIGJ1cmwpO1xuXHRcdFx0cmV0dXJuIGJ1cmw7XG5cdFx0fSk7XG5cdFx0Y2FjaGVNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFt1cmxdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRibG9iVVJMTWFwLnNldChibG9iLCBidXJsKTtcblx0XHRjYWNoZU1hcC5zZXQoYnVybCwgYnVybCk7XG5cdFx0cmV0dXJuIGJ1cmw7XG5cdH1cblx0cmV0dXJuIHVybDtcbn07XG52YXIgZmV0Y2hBc0lubGluZSA9ICh1cmwpID0+IHtcblx0aWYgKCF1cmwpIHJldHVybiBcIlwiO1xuXHRpZiAoY2FjaGVDb250ZW50TWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVDb250ZW50TWFwLmdldCh1cmwpID8/IFwiXCI7XG5cdGlmICh1cmwgaW5zdGFuY2VvZiBCbG9iIHx8IHVybCBpbnN0YW5jZW9mIEZpbGUpIHtcblx0XHRpZiAoY2FjaGVCbG9iQ29udGVudE1hcC5oYXModXJsKSkgcmV0dXJuIGNhY2hlQmxvYkNvbnRlbnRNYXAuZ2V0KHVybCkgPz8gXCJcIjtcblx0XHRjb25zdCBwcm9taXNlZCA9IHVybD8udGV4dD8uKCk/LnRoZW4/LigodGV4dCkgPT4ge1xuXHRcdFx0Y2FjaGVCbG9iQ29udGVudE1hcC5zZXQodXJsLCB0ZXh0KTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH0pO1xuXHRcdGNhY2hlQmxvYkNvbnRlbnRNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAoVVJMLmNhblBhcnNlKHVybCkgfHwgdXJsPy50cmltPy4oKT8uc3RhcnRzV2l0aD8uKFwiLi9cIikpIHtcblx0XHRjb25zdCBwcm9taXNlZCA9IGZldGNoKHVybD8ucmVwbGFjZT8uKFwiP3VybFwiLCBcIj9yYXdcIiksIHtcblx0XHRcdGNhY2hlOiBcImZvcmNlLWNhY2hlXCIsXG5cdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRwcmlvcml0eTogXCJoaWdoXCJcblx0XHR9KT8udGhlbj8uKGFzeW5jIChyZXMpID0+IHtcblx0XHRcdGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuXHRcdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSk7XG5cdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHByb21pc2VkKTtcblx0XHRyZXR1cm4gcHJvbWlzZWQ7XG5cdH1cblx0aWYgKHR5cGVvZiB1cmwgPT0gXCJzdHJpbmdcIikge1xuXHRcdGNhY2hlQ29udGVudE1hcC5zZXQodXJsLCB1cmwpO1xuXHRcdHJldHVybiB1cmw7XG5cdH1cblx0cmV0dXJuIHVybDtcbn07XG52YXIgZ2V0QWRvcHRlZFN0eWxlUnVsZSA9IChzZWxlY3RvciwgbGF5ZXJOYW1lID0gXCJ1eC1xdWVyeVwiLCBiYXNpcyA9IG51bGwpID0+IHtcblx0aWYgKCFzZWxlY3RvcikgcmV0dXJuIG51bGw7XG5cdGlmICghc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgcm9vdCA9IGlzU2hhZG93Um9vdChiYXNpcykgPyBiYXNpcyA6IGJhc2lzPy5nZXRSb290Tm9kZSA/IGJhc2lzLmdldFJvb3ROb2RlKHsgY29tcG9zZWQ6IHRydWUgfSkgOiBudWxsO1xuXHRjb25zdCBpblNoYWRvdyA9IGlzU2hhZG93Um9vdChyb290KTtcblx0Y29uc3QgdGFyZ2V0QWRvcHRlZFNoZWV0cyA9IGluU2hhZG93ID8gcm9vdC5hZG9wdGVkU3R5bGVTaGVldHMgOiB0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyA6IG51bGw7XG5cdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHNlbGVjdG9yS2V5ID0gYCR7bGF5ZXJOYW1lIHx8IFwiXCJ9OiR7c2VsZWN0b3J9YDtcblx0bGV0IHNoZWV0O1xuXHRpZiAoaW5TaGFkb3cpIHtcblx0XHRsZXQgc2hhZG93TWFwID0gYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLmdldChyb290KTtcblx0XHRpZiAoIXNoYWRvd01hcCkge1xuXHRcdFx0c2hhZG93TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRcdGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcC5zZXQocm9vdCwgc2hhZG93TWFwKTtcblx0XHR9XG5cdFx0c2hlZXQgPSBzaGFkb3dNYXAuZ2V0KHNlbGVjdG9yS2V5KTtcblx0XHRpZiAoIXNoZWV0KSB7XG5cdFx0XHRzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0XHRzaGFkb3dNYXAuc2V0KHNlbGVjdG9yS2V5LCBzaGVldCk7XG5cdFx0XHRpZiAoIXRhcmdldEFkb3B0ZWRTaGVldHMuaW5jbHVkZXMoc2hlZXQpKSB0YXJnZXRBZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzaGVldCA9IGFkb3B0ZWRTZWxlY3Rvck1hcC5nZXQoc2VsZWN0b3JLZXkpO1xuXHRcdGlmICghc2hlZXQpIHtcblx0XHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRcdGFkb3B0ZWRTZWxlY3Rvck1hcC5zZXQoc2VsZWN0b3JLZXksIHNoZWV0KTtcblx0XHRcdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHRhcmdldEFkb3B0ZWRTaGVldHMucHVzaChzaGVldCk7XG5cdFx0fVxuXHR9XG5cdGlmIChsYXllck5hbWUpIHtcblx0XHRsZXQgbGF5ZXJSdWxlO1xuXHRcdGlmIChpblNoYWRvdykge1xuXHRcdFx0bGV0IHNoYWRvd0xheWVyTWFwID0gYWRvcHRlZFNoYWRvd0xheWVyTWFwLmdldChyb290KTtcblx0XHRcdGlmICghc2hhZG93TGF5ZXJNYXApIHtcblx0XHRcdFx0c2hhZG93TGF5ZXJNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRhZG9wdGVkU2hhZG93TGF5ZXJNYXAuc2V0KHJvb3QsIHNoYWRvd0xheWVyTWFwKTtcblx0XHRcdH1cblx0XHRcdGxheWVyUnVsZSA9IHNoYWRvd0xheWVyTWFwLmdldChsYXllck5hbWUpO1xuXHRcdH0gZWxzZSBsYXllclJ1bGUgPSBhZG9wdGVkTGF5ZXJNYXAuZ2V0KGxheWVyTmFtZSk7XG5cdFx0aWYgKCFsYXllclJ1bGUpIHtcblx0XHRcdGxheWVyUnVsZSA9IGdldE9yQ3JlYXRlTGF5ZXJSdWxlKHNoZWV0LCBsYXllck5hbWUpO1xuXHRcdFx0aWYgKGxheWVyUnVsZSkge1xuXHRcdFx0XHRpZiAoaW5TaGFkb3cpIHtcblx0XHRcdFx0XHRsZXQgc2hhZG93TGF5ZXJNYXAgPSBhZG9wdGVkU2hhZG93TGF5ZXJNYXAuZ2V0KHJvb3QpO1xuXHRcdFx0XHRcdGlmICghc2hhZG93TGF5ZXJNYXApIHtcblx0XHRcdFx0XHRcdHNoYWRvd0xheWVyTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRcdFx0XHRcdGFkb3B0ZWRTaGFkb3dMYXllck1hcC5zZXQocm9vdCwgc2hhZG93TGF5ZXJNYXApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzaGFkb3dMYXllck1hcC5zZXQobGF5ZXJOYW1lLCBsYXllclJ1bGUpO1xuXHRcdFx0XHR9IGVsc2UgYWRvcHRlZExheWVyTWFwLnNldChsYXllck5hbWUsIGxheWVyUnVsZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChsYXllclJ1bGUpIHtcblx0XHRcdGxldCBsYXllclJ1bGVJbmRleCA9IEFycmF5LmZyb20obGF5ZXJSdWxlLmNzc1J1bGVzIHx8IFtdKS5maW5kSW5kZXgoKHIpID0+IHIgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUgJiYgci5zZWxlY3RvclRleHQ/LnRyaW0/LigpID09PSBzZWxlY3Rvcj8udHJpbT8uKCkpO1xuXHRcdFx0aWYgKGxheWVyUnVsZUluZGV4ID09PSAtMSkgdHJ5IHtcblx0XHRcdFx0bGF5ZXJSdWxlSW5kZXggPSBsYXllclJ1bGUuaW5zZXJ0UnVsZShgJHtzZWxlY3Rvcn0ge31gLCBsYXllclJ1bGUuY3NzUnVsZXMubGVuZ3RoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGF5ZXJSdWxlLmNzc1J1bGVzW2xheWVyUnVsZUluZGV4XTtcblx0XHR9XG5cdH1cblx0bGV0IHJ1bGVJbmRleCA9IEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMgfHwgW10pLmZpbmRJbmRleCgocnVsZSkgPT4gcnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiBydWxlLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPT09IHNlbGVjdG9yPy50cmltPy4oKSk7XG5cdGlmIChydWxlSW5kZXggPT09IC0xKSB0cnkge1xuXHRcdHJ1bGVJbmRleCA9IHNoZWV0Lmluc2VydFJ1bGUoYCR7c2VsZWN0b3J9IHt9YCwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IHJ1bGUgPSBzaGVldC5jc3NSdWxlc1tydWxlSW5kZXhdO1xuXHRpZiAocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSkgcmV0dXJuIHJ1bGU7XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2Jha2VyLnRzXG52YXIgaW52YWxpZGF0aW9uUmVhZHkgPSBmYWxzZTtcbnZhciBsYXN0RmluZ2VycHJpbnQgPSBcIlwiO1xudmFyIHJlYmFrZVF1ZXVlZCA9IGZhbHNlO1xudmFyIG5vcm1hbGl6ZUNhdGVnb3JpZXMgPSAoY2F0ZWdvcmllcykgPT4ge1xuXHRjb25zdCBsaXN0ID0gWy4uLmNhdGVnb3JpZXM/Lmxlbmd0aCA/IGNhdGVnb3JpZXMgOiBERUZBVUxUX0NBVEVHT1JJRVNdO1xuXHRyZXR1cm4gWy4uLm5ldyBTZXQobGlzdC5maWx0ZXIoQm9vbGVhbikpXTtcbn07XG52YXIgY2FjaGVLZXlGb3IgPSAoc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IGAke3NlbGVjdG9yfVxcMCR7Wy4uLmNhdGVnb3JpZXNdLnNvcnQoKS5qb2luKFwiLFwiKX1cXDAke21lZGlhID09PSBmYWxzZSA/IFwiXCIgOiBtZWRpYX1gO1xudmFyIGJha2VUaGVtZUZpbmdlcnByaW50ID0gKHJvb3QgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBudWxsLCBlbCkgPT4ge1xuXHRpZiAoIXJvb3QgfHwgdHlwZW9mIGdldENvbXB1dGVkU3R5bGUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFwiXCI7XG5cdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZShyb290KTtcblx0Y29uc3QgcGFydHMgPSBbXG5cdFx0cm9vdC5nZXRBdHRyaWJ1dGU/LihcImRhdGEtdGhlbWVcIikgfHwgcm9vdC5nZXRBdHRyaWJ1dGU/LihcInRoZW1lXCIpIHx8IFwiXCIsXG5cdFx0cm9vdC5nZXRBdHRyaWJ1dGU/LihcImRhdGEtY29sb3Itc2NoZW1lXCIpIHx8IHJvb3QuZ2V0QXR0cmlidXRlPy4oXCJjb2xvci1zY2hlbWVcIikgfHwgY3MuY29sb3JTY2hlbWUgfHwgXCJcIixcblx0XHRjcy5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1iYXNlLWNvbG9yXCIpLnRyaW0oKSxcblx0XHRjcy5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1jb2xvci1wcmltYXJ5XCIpLnRyaW0oKVxuXHRdO1xuXHRpZiAoZWwgJiYgZWwgIT09IHJvb3QpIHtcblx0XHRjb25zdCBsb2NhbCA9IGdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdHBhcnRzLnB1c2goZWwuZ2V0QXR0cmlidXRlPy4oXCJkYXRhLXRoZW1lXCIpIHx8IFwiXCIsIGxvY2FsLmdldFByb3BlcnR5VmFsdWUoXCItLWJhc2UtY29sb3JcIikudHJpbSgpKTtcblx0fVxuXHRyZXR1cm4gcGFydHMuam9pbihcInxcIik7XG59O1xudmFyIHRha2VQcm9wID0gKGludG8sIGNzLCBuYW1lKSA9PiB7XG5cdGNvbnN0IHZhbHVlID0gY3MuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKT8udHJpbSgpO1xuXHRpZiAoIXZhbHVlKSByZXR1cm47XG5cdGludG8uc2V0KG5hbWUsIHZhbHVlKTtcbn07XG52YXIgQ09MT1JfUFJPUF9TRVQgPSBuZXcgU2V0KENTU19DT0xPUl9QUk9QRVJUSUVTKTtcbnZhciBiYWtlRGVjbFJhbmsgPSAobmFtZSkgPT4ge1xuXHRpZiAobmFtZS5zdGFydHNXaXRoKFwiLS1cIikpIHJldHVybiAyO1xuXHRpZiAoQ09MT1JfUFJPUF9TRVQuaGFzKG5hbWUpKSByZXR1cm4gMDtcblx0cmV0dXJuIDE7XG59O1xudmFyIGNvbGxlY3RCYWtlZERlY2xhcmF0aW9ucyA9IChjcywgY2F0ZWdvcmllcykgPT4ge1xuXHRjb25zdCBpbnRvID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3Qgc2V0ID0gbmV3IFNldChjYXRlZ29yaWVzKTtcblx0aWYgKHNldC5oYXMoXCJjb2xvcnNcIikpIGZvciAoY29uc3QgbmFtZSBvZiBDU1NfQ09MT1JfUFJPUEVSVElFUykgdGFrZVByb3AoaW50bywgY3MsIG5hbWUpO1xuXHRpZiAoc2V0LmhhcyhcInR5cG9ncmFwaHlcIikpIGZvciAoY29uc3QgbmFtZSBvZiBDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTKSB0YWtlUHJvcChpbnRvLCBjcywgbmFtZSk7XG5cdGlmIChzZXQuaGFzKFwibW90aW9uXCIpKSBmb3IgKGNvbnN0IG5hbWUgb2YgQ1NTX01PVElPTl9QUk9QRVJUSUVTKSB0YWtlUHJvcChpbnRvLCBjcywgbmFtZSk7XG5cdGlmIChzZXQuaGFzKFwidG9rZW5zXCIpIHx8IHNldC5oYXMoXCJjb2xvcnNcIikpIGZvciAobGV0IGkgPSAwOyBpIDwgY3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBuYW1lID0gY3MuaXRlbShpKTtcblx0XHRpZiAoIW5hbWUuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblx0XHRpZiAoc2V0LmhhcyhcInRva2Vuc1wiKSB8fCBpc0NvbG9yVG9rZW4obmFtZSkpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0fVxuXHRyZXR1cm4gaW50bztcbn07XG52YXIgYnVpbGRCYWtlZENzc1RleHQgPSAoc2VsZWN0b3IsIGRlY2xhcmF0aW9ucywgbGF5ZXIgPSBCQUtFX0xBWUVSLCBtZWRpYSA9IEJBS0VfU0NSRUVOX01FRElBKSA9PiB7XG5cdGNvbnN0IGJvZHkgPSBbXTtcblx0Y29uc3Qgcm93cyA9IFsuLi5kZWNsYXJhdGlvbnNdLnNvcnQoKGEsIGIpID0+IGJha2VEZWNsUmFuayhhWzBdKSAtIGJha2VEZWNsUmFuayhiWzBdKSk7XG5cdGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByb3dzKSB7XG5cdFx0aWYgKCFuYW1lIHx8ICF2YWx1ZSkgY29udGludWU7XG5cdFx0Y29uc3QgYmFrZWQgPSB2YWx1ZS5yZXBsYWNlKC9cXHMqIWltcG9ydGFudFxccyokL2ksIFwiXCIpLnRyaW0oKTtcblx0XHRpZiAoIWJha2VkKSBjb250aW51ZTtcblx0XHRib2R5LnB1c2goYCR7bmFtZX06ICR7YmFrZWR9ICFpbXBvcnRhbnQ7YCk7XG5cdH1cblx0aWYgKCFib2R5Lmxlbmd0aCkgcmV0dXJuIFwiXCI7XG5cdGNvbnN0IHJ1bGUgPSBgJHtzZWxlY3Rvcn0ge1xcbiR7Ym9keS5qb2luKFwiXFxuXCIpfVxcbn1gO1xuXHRjb25zdCBpbm5lciA9IG1lZGlhID8gYEBtZWRpYSAke21lZGlhfSB7XFxuJHtydWxlfVxcbn1gIDogcnVsZTtcblx0cmV0dXJuIFtjc3NMYXllck9yZGVyKGxheWVyKSwgY3NzTGF5ZXJCbG9jayhsYXllciwgaW5uZXIpXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlwiKTtcbn07XG52YXIgY29sbGVjdEJha2VTY3JlZW5Ib3N0cyA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCB8fCByb290Lm5vZGVUeXBlICE9PSAxKSByZXR1cm4gW107XG5cdGNvbnN0IGhvc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW3Jvb3RdKTtcblx0Y29uc3QgY2hyb21lID0gcm9vdC5jbG9zZXN0Py4oQkFLRV9TQ1JFRU5fQ0hST01FLmpvaW4oXCIsIFwiKSk7XG5cdGlmIChjaHJvbWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgaG9zdHMuYWRkKGNocm9tZSk7XG5cdHJldHVybiBbLi4uaG9zdHNdO1xufTtcbnZhciBiYWtlQWxzb1F1ZXJpZXNGb3IgPSAocm9vdCkgPT4ge1xuXHRpZiAoIXJvb3QpIHJldHVybiBbXTtcblx0aWYgKHJvb3QuY2xhc3NMaXN0Py5jb250YWlucyhcInZpZXctc2V0dGluZ3NcIikgfHwgcm9vdC5jbG9zZXN0Py4oXCIudmlldy1zZXR0aW5nc1wiKSkgcmV0dXJuIEJBS0VfU0NSRUVOX0FMU09fU0VUVElOR1M7XG5cdGlmIChyb290LmNsYXNzTGlzdD8uY29udGFpbnMoXCJ2aWV3LWV4cGxvcmVyXCIpIHx8IHJvb3QuY2xvc2VzdD8uKFwiLnZpZXctZXhwbG9yZXJcIikgfHwgcm9vdC5xdWVyeVNlbGVjdG9yPy4oXCJ1aS1maWxlLW1hbmFnZXJcIikpIHJldHVybiBCQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSO1xuXHRyZXR1cm4gW107XG59O1xudmFyIGNvbGxlY3RCYWtlQWxzb0hvc3RzID0gKHJvb3QsIHF1ZXJpZXMgPSBCQUtFX1NDUkVFTl9BTFNPLCBwaWVyY2VTaGFkb3cgPSB0cnVlKSA9PiB7XG5cdGlmICghcm9vdCB8fCAhcXVlcmllcy5sZW5ndGgpIHJldHVybiBbXTtcblx0Y29uc3Qgcm9vdFNlbCA9IGVuc3VyZVN0eWxlU2NvcGVTZWxlY3Rvcihyb290KTtcblx0Y29uc3QgZmluZCA9IHBpZXJjZVNoYWRvdyA/IHF1ZXJ5Rmlyc3REZWVwIDogKHNjb3BlLCBzZWwpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaGl0ID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWwpO1xuXHRcdFx0cmV0dXJuIGhpdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gaGl0IDogbnVsbDtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZ3JvdXBlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3QgcXVlcnkgb2YgcXVlcmllcykge1xuXHRcdGNvbnN0IHEgPSBTdHJpbmcocXVlcnkgfHwgXCJcIikudHJpbSgpO1xuXHRcdGlmICghcSkgY29udGludWU7XG5cdFx0Y29uc3QgZWwgPSBmaW5kKHJvb3QsIHEpO1xuXHRcdGlmICghZWwgfHwgZWwgPT09IHJvb3QpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHNlbCA9IGVsLmdldFJvb3ROb2RlKCkgPT09IHJvb3QuZ2V0Um9vdE5vZGUoKSA/IGAke3Jvb3RTZWx9ICR7cX1gIDogcTtcblx0XHRjb25zdCBsaXN0ID0gZ3JvdXBlZC5nZXQoZWwpO1xuXHRcdGlmIChsaXN0KSB7XG5cdFx0XHRpZiAoIWxpc3QuaW5jbHVkZXMoc2VsKSkgbGlzdC5wdXNoKHNlbCk7XG5cdFx0fSBlbHNlIGdyb3VwZWQuc2V0KGVsLCBbc2VsXSk7XG5cdH1cblx0cmV0dXJuIFsuLi5ncm91cGVkXS5tYXAoKFtlbCwgc2Vsc10pID0+ICh7XG5cdFx0ZWwsXG5cdFx0c2VsZWN0b3I6IHNlbHMuam9pbihcIiwgXCIpXG5cdH0pKTtcbn07XG52YXIgYWRvcHRlZExpc3QgPSAoZWwpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlPy4oKTtcblx0aWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSByZXR1cm4gcm9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPz8gbnVsbDtcblx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyA/PyBudWxsO1xuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgYXNzaWduQWRvcHRlZCA9IChlbCwgbmV4dCkgPT4ge1xuXHRjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGU/LigpO1xuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgU2hhZG93Um9vdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuXHRcdFx0cm9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBuZXh0O1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgPSBuZXh0O1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIGFkb3B0U2hlZXQgPSAoZWwsIGJha2VkKSA9PiB7XG5cdGlmIChiYWtlZC5zaGVldCAmJiBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHtcblx0XHRjb25zdCBsaXN0ID0gYWRvcHRlZExpc3QoZWwpO1xuXHRcdGlmICghbGlzdCkgcmV0dXJuO1xuXHRcdGlmIChsaXN0LmluY2x1ZGVzKGJha2VkLnNoZWV0KSkge1xuXHRcdFx0YmFrZWQuYWRvcHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRsaXN0LnB1c2goYmFrZWQuc2hlZXQpO1xuXHRcdFx0YmFrZWQuYWRvcHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRhc3NpZ25BZG9wdGVkKGVsLCBbLi4ubGlzdCwgYmFrZWQuc2hlZXRdKTtcblx0XHRcdGJha2VkLmFkb3B0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fVxuXHRpZiAoYmFrZWQuc3R5bGVFbCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRpZiAoIWJha2VkLnN0eWxlRWwuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmhlYWQ/LmFwcGVuZChiYWtlZC5zdHlsZUVsKTtcblx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0fVxufTtcbnZhciB1bmFkb3B0U2hlZXQgPSAoZWwsIGJha2VkKSA9PiB7XG5cdGlmIChiYWtlZC5zaGVldCAmJiBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHtcblx0XHRjb25zdCBsaXN0ID0gYWRvcHRlZExpc3QoZWwpO1xuXHRcdGlmIChsaXN0KSB7XG5cdFx0XHRjb25zdCBpZHggPSBsaXN0LmluZGV4T2YoYmFrZWQuc2hlZXQpO1xuXHRcdFx0aWYgKGlkeCAhPT0gLTEpIHRyeSB7XG5cdFx0XHRcdGxpc3Quc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0YXNzaWduQWRvcHRlZChlbCwgbGlzdC5maWx0ZXIoKHNoZWV0KSA9PiBzaGVldCAhPT0gYmFrZWQuc2hlZXQpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0YmFrZWQuc3R5bGVFbD8ucmVtb3ZlKCk7XG5cdGJha2VkLmFkb3B0ZWQgPSBmYWxzZTtcbn07XG52YXIgd3JpdGVCYWtlZENzcyA9IChiYWtlZCwgY3NzVGV4dCkgPT4ge1xuXHRiYWtlZC5jc3NUZXh0ID0gY3NzVGV4dDtcblx0aWYgKCFjc3NUZXh0KSByZXR1cm4gZmFsc2U7XG5cdGlmIChiYWtlZC5zaGVldCAmJiBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHRyeSB7XG5cdFx0YmFrZWQuc2hlZXQucmVwbGFjZVN5bmMoY3NzVGV4dCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiW3N0eWxlLWxpYl0gYmFrZSByZXBsYWNlU3luYyBmYWlsZWRcIiwgZXJyb3IpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoYmFrZWQuc3R5bGVFbCkge1xuXHRcdGJha2VkLnN0eWxlRWwudGV4dENvbnRlbnQgPSBjc3NUZXh0O1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgcmVtZW1iZXJDYWNoZSA9IChiYWtlZCwgY2FjaGVNcykgPT4ge1xuXHRjb25zdCBwcmV2ID0gYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpO1xuXHRpZiAocHJldj8udGltZXIpIGNsZWFyVGltZW91dChwcmV2LnRpbWVyKTtcblx0Y29uc3QgZW50cnkgPSB7XG5cdFx0Y3NzVGV4dDogYmFrZWQuY3NzVGV4dCxcblx0XHRmaW5nZXJwcmludDogYmFrZWQuZmluZ2VycHJpbnQsXG5cdFx0Y2F0ZWdvcmllczogYmFrZWQuY2F0ZWdvcmllcyxcblx0XHRzZWxlY3RvcjogYmFrZWQuc2VsZWN0b3IsXG5cdFx0ZXhwaXJlczogRGF0ZS5ub3coKSArIGNhY2hlTXNcblx0fTtcblx0aWYgKGNhY2hlTXMgPiAwICYmIHR5cGVvZiBzZXRUaW1lb3V0ID09PSBcImZ1bmN0aW9uXCIpIGVudHJ5LnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGJha2VkQ2FjaGUuZ2V0KGJha2VkLmNhY2hlS2V5KSA9PT0gZW50cnkpIGJha2VkQ2FjaGUuZGVsZXRlKGJha2VkLmNhY2hlS2V5KTtcblx0fSwgY2FjaGVNcyk7XG5cdGJha2VkQ2FjaGUuc2V0KGJha2VkLmNhY2hlS2V5LCBlbnRyeSk7XG59O1xudmFyIGRyb3BDYWNoZSA9IChjYWNoZUtleSkgPT4ge1xuXHRjb25zdCBwcmV2ID0gYmFrZWRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXHRpZiAocHJldj8udGltZXIpIGNsZWFyVGltZW91dChwcmV2LnRpbWVyKTtcblx0YmFrZWRDYWNoZS5kZWxldGUoY2FjaGVLZXkpO1xufTtcbnZhciBjbGVhckFsbENhY2hlID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGVudHJ5IG9mIGJha2VkQ2FjaGUudmFsdWVzKCkpIGlmIChlbnRyeS50aW1lcikgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKTtcblx0YmFrZWRDYWNoZS5jbGVhcigpO1xufTtcbnZhciBwYXJrQmFrZWQgPSAoZWwsIGNhY2hlTXMgPSBERUZBVUxUX0NBQ0hFX01TKSA9PiB7XG5cdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKCFiYWtlZCkgcmV0dXJuO1xuXHRpZiAoYmFrZWQuYWRvcHRlZCkgdW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRpZiAoYmFrZWQuY3NzVGV4dCkgcmVtZW1iZXJDYWNoZShiYWtlZCwgY2FjaGVNcyk7XG59O1xudmFyIHJlc3VtZUJha2VkID0gKGVsLCBjYWNoZU1zID0gREVGQVVMVF9DQUNIRV9NUykgPT4ge1xuXHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmICghYmFrZWQgfHwgIWVsLmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IGZpbmdlcnByaW50ID0gYmFrZVRoZW1lRmluZ2VycHJpbnQodm9pZCAwLCBlbCk7XG5cdGNvbnN0IGNhY2hlZCA9IGJha2VkQ2FjaGUuZ2V0KGJha2VkLmNhY2hlS2V5KTtcblx0aWYgKCFiYWtlZC5jc3NUZXh0ICYmIGNhY2hlZCAmJiBjYWNoZWQuZmluZ2VycHJpbnQgPT09IGZpbmdlcnByaW50KSB7XG5cdFx0d3JpdGVCYWtlZENzcyhiYWtlZCwgY2FjaGVkLmNzc1RleHQpO1xuXHRcdGJha2VkLmZpbmdlcnByaW50ID0gY2FjaGVkLmZpbmdlcnByaW50O1xuXHR9XG5cdGlmICghYmFrZWQuY3NzVGV4dCB8fCBiYWtlZC5maW5nZXJwcmludCAhPT0gZmluZ2VycHJpbnQpIHtcblx0XHRiYWtlQ29tcHV0ZWRTdHlsZShlbCwge1xuXHRcdFx0Y2F0ZWdvcmllczogYmFrZWQuY2F0ZWdvcmllcyxcblx0XHRcdGNhY2hlTXMsXG5cdFx0XHRsYXllcjogQkFLRV9MQVlFUlxuXHRcdH0pO1xuXHRcdHJldHVybjtcblx0fVxuXHRhZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdGJha2VkTGl2ZS5hZGQoZWwpO1xufTtcbnZhciBiYWtlSU8gPSBudWxsO1xudmFyIGVuc3VyZUJha2VJTyA9ICgpID0+IHtcblx0aWYgKGJha2VJTyB8fCB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBiYWtlSU87XG5cdGJha2VJTyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdFx0Y29uc3QgZWwgPSBlbnRyeS50YXJnZXQ7XG5cdFx0XHRpZiAoIWJha2VkU3R5bGVzLmhhcyhlbCkpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIGVsLmlzQ29ubmVjdGVkKSByZXN1bWVCYWtlZChlbCk7XG5cdFx0XHRlbHNlIHBhcmtCYWtlZChlbCk7XG5cdFx0fVxuXHR9LCB7IHRocmVzaG9sZDogMCB9KTtcblx0cmV0dXJuIGJha2VJTztcbn07XG52YXIgZW5zdXJlQmFrZWRSZWNvcmQgPSAoZWwsIHNlbGVjdG9yLCBjYXRlZ29yaWVzLCBtZWRpYSA9IEJBS0VfU0NSRUVOX01FRElBKSA9PiB7XG5cdGxldCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmIChiYWtlZCkge1xuXHRcdGJha2VkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0YmFrZWQuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXM7XG5cdFx0YmFrZWQubWVkaWEgPSBtZWRpYTtcblx0XHRiYWtlZC5jYWNoZUtleSA9IGNhY2hlS2V5Rm9yKHNlbGVjdG9yLCBjYXRlZ29yaWVzLCBtZWRpYSk7XG5cdFx0cmV0dXJuIGJha2VkO1xuXHR9XG5cdGNvbnN0IGNhbkNvbnN0cnVjdCA9IHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKTtcblx0YmFrZWQgPSB7XG5cdFx0c2hlZXQ6IGNhbkNvbnN0cnVjdCA/IG5ldyBDU1NTdHlsZVNoZWV0KCkgOiBudWxsLFxuXHRcdHN0eWxlRWw6IGNhbkNvbnN0cnVjdCB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBudWxsIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLFxuXHRcdHNlbGVjdG9yLFxuXHRcdGNhdGVnb3JpZXMsXG5cdFx0Y3NzVGV4dDogXCJcIixcblx0XHRmaW5nZXJwcmludDogXCJcIixcblx0XHRhZG9wdGVkOiBmYWxzZSxcblx0XHRjYWNoZUtleTogY2FjaGVLZXlGb3Ioc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhKSxcblx0XHRtZWRpYVxuXHR9O1xuXHRpZiAoYmFrZWQuc3R5bGVFbCkge1xuXHRcdGJha2VkLnN0eWxlRWwuZGF0YXNldC51eEJha2VkID0gXCJcIjtcblx0XHRiYWtlZC5zdHlsZUVsLmRhdGFzZXQub3duZXIgPSBcInN0eWxlLWxpYlwiO1xuXHR9XG5cdGJha2VkU3R5bGVzLnNldChlbCwgYmFrZWQpO1xuXHRlbnN1cmVCYWtlSU8oKT8ub2JzZXJ2ZShlbCk7XG5cdHJldHVybiBiYWtlZDtcbn07XG52YXIgZmx1c2hSZWJha2UgPSAoKSA9PiB7XG5cdHJlYmFrZVF1ZXVlZCA9IGZhbHNlO1xuXHRjb25zdCBiYXRjaCA9IFsuLi5yZWJha2VCYXRjaF07XG5cdHJlYmFrZUJhdGNoLmNsZWFyKCk7XG5cdGZvciAoY29uc3QgZWwgb2YgYmF0Y2gpIHtcblx0XHRpZiAoIWVsLmlzQ29ubmVjdGVkIHx8ICFiYWtlZFN0eWxlcy5oYXMoZWwpKSBjb250aW51ZTtcblx0XHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdFx0YmFrZUNvbXB1dGVkU3R5bGUoZWwsIGJha2VkID8ge1xuXHRcdFx0Y2F0ZWdvcmllczogYmFrZWQuY2F0ZWdvcmllcyxcblx0XHRcdHNlbGVjdG9yOiBiYWtlZC5zZWxlY3Rvcixcblx0XHRcdG1lZGlhOiBiYWtlZC5tZWRpYVxuXHRcdH0gOiB7fSk7XG5cdH1cbn07XG52YXIgc2NoZWR1bGVSZWJha2UgPSAoZWwpID0+IHtcblx0cmViYWtlQmF0Y2guYWRkKGVsKTtcblx0aWYgKHJlYmFrZVF1ZXVlZCkgcmV0dXJuO1xuXHRyZWJha2VRdWV1ZWQgPSB0cnVlO1xuXHRxdWV1ZU1pY3JvdGFzayhmbHVzaFJlYmFrZSk7XG59O1xudmFyIGludmFsaWRhdGVCYWtlZFN0eWxlcyA9IChyZWFzb24gPSBcInRoZW1lXCIpID0+IHtcblx0Y29uc3QgZmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCgpO1xuXHRpZiAocmVhc29uICE9PSBcImZvcmNlXCIgJiYgZmluZ2VycHJpbnQgPT09IGxhc3RGaW5nZXJwcmludCAmJiBsYXN0RmluZ2VycHJpbnQpIHJldHVybjtcblx0bGFzdEZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7XG5cdGNsZWFyQWxsQ2FjaGUoKTtcblx0Zm9yIChjb25zdCBlbCBvZiBbLi4uYmFrZWRMaXZlXSkge1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0XHRpZiAoIWJha2VkKSB7XG5cdFx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZC5jc3NUZXh0ID0gXCJcIjtcblx0XHRiYWtlZC5maW5nZXJwcmludCA9IFwiXCI7XG5cdFx0c2NoZWR1bGVSZWJha2UoZWwpO1xuXHR9XG59O1xudmFyIGVuc3VyZUJha2VJbnZhbGlkYXRpb24gPSAoKSA9PiB7XG5cdGlmIChpbnZhbGlkYXRpb25SZWFkeSB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0aW52YWxpZGF0aW9uUmVhZHkgPSB0cnVlO1xuXHRsYXN0RmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCgpO1xuXHRyZWdpc3RlclN0eWxlVHJlZUhvb2soKGhvc3QpID0+IHtcblx0XHRpZiAoYmFrZVRoZW1lRmluZ2VycHJpbnQoKSAhPT0gbGFzdEZpbmdlcnByaW50KSB7XG5cdFx0XHRpbnZhbGlkYXRlQmFrZWRTdHlsZXMoXCJzdHlsZS10cmVlXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGJha2VkU3R5bGVzLmhhcyhob3N0KSkgc2NoZWR1bGVSZWJha2UoaG9zdCk7XG5cdH0pO1xuXHR0cnkge1xuXHRcdG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IGludmFsaWRhdGVCYWtlZFN0eWxlcyhcInRoZW1lLWF0dHJcIikpLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbLi4uU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSU11cblx0XHR9KTtcblx0fSBjYXRjaCB7fVxuXHR0cnkge1xuXHRcdChtYXRjaE1lZGlhPy4oXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpKT8uYWRkRXZlbnRMaXN0ZW5lcj8uKFwiY2hhbmdlXCIsICgpID0+IGludmFsaWRhdGVCYWtlZFN0eWxlcyhcImNvbG9yLXNjaGVtZVwiKSk7XG5cdH0gY2F0Y2gge31cbn07XG52YXIgYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gbnVsbDtcblx0aWYgKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXHRlbnN1cmVCYWtlSW52YWxpZGF0aW9uKCk7XG5cdGNvbnN0IGNhdGVnb3JpZXMgPSBub3JtYWxpemVDYXRlZ29yaWVzKG9wdGlvbnMuY2F0ZWdvcmllcyk7XG5cdGNvbnN0IGxheWVyID0gb3B0aW9ucy5sYXllciB8fCBcInV4LWJha2VkXCI7XG5cdGNvbnN0IGNhY2hlTXMgPSBvcHRpb25zLmNhY2hlTXMgPz8gM2U0O1xuXHRjb25zdCBtZWRpYSA9IG9wdGlvbnMubWVkaWEgPT09IHZvaWQgMCA/IEJBS0VfU0NSRUVOX01FRElBIDogb3B0aW9ucy5tZWRpYTtcblx0Y29uc3Qgc2VsZWN0b3IgPSBvcHRpb25zLnNlbGVjdG9yPy50cmltKCkgfHwgZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yKGVsKTtcblx0Y29uc3QgZmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCh2b2lkIDAsIGVsKTtcblx0Y29uc3QgYmFrZWQgPSBlbnN1cmVCYWtlZFJlY29yZChlbCwgc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhKTtcblx0YmFrZWQuZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcblx0Y29uc3QgY2FjaGVkID0gYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpO1xuXHRsZXQgY3NzVGV4dCA9IFwiXCI7XG5cdGlmIChjYWNoZWQgJiYgY2FjaGVkLmZpbmdlcnByaW50ID09PSBmaW5nZXJwcmludCAmJiBjYWNoZWQuY3NzVGV4dCkgY3NzVGV4dCA9IGNhY2hlZC5jc3NUZXh0O1xuXHRlbHNlIHtcblx0XHRjb25zdCBjcyA9IGdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGNzc1RleHQgPSBidWlsZEJha2VkQ3NzVGV4dChzZWxlY3RvciwgY29sbGVjdEJha2VkRGVjbGFyYXRpb25zKGNzLCBjYXRlZ29yaWVzKSwgbGF5ZXIsIG1lZGlhKTtcblx0fVxuXHRpZiAoIWNzc1RleHQpIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0XHRyZXR1cm4gYmFrZWQ7XG5cdH1cblx0d3JpdGVCYWtlZENzcyhiYWtlZCwgY3NzVGV4dCk7XG5cdHJlbWVtYmVyQ2FjaGUoYmFrZWQsIGNhY2hlTXMpO1xuXHRpZiAoaXNFbGVtZW50VmlzaWJsZShlbCkpIHtcblx0XHRhZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdFx0YmFrZWRMaXZlLmFkZChlbCk7XG5cdH0gZWxzZSB7XG5cdFx0dW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdFx0YmFrZWRMaXZlLmRlbGV0ZShlbCk7XG5cdH1cblx0cmV0dXJuIGJha2VkO1xufTtcbnZhciB1bmJha2VDb21wdXRlZFN0eWxlID0gKGVsLCBrZWVwQ2FjaGUgPSB0cnVlKSA9PiB7XG5cdGlmICghZWwpIHJldHVybjtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoIWJha2VkKSByZXR1cm47XG5cdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0YmFrZUlPPy51bm9ic2VydmUoZWwpO1xuXHRpZiAoa2VlcENhY2hlICYmIGJha2VkLmNzc1RleHQpIHJlbWVtYmVyQ2FjaGUoYmFrZWQsIERFRkFVTFRfQ0FDSEVfTVMpO1xuXHRlbHNlIGRyb3BDYWNoZShiYWtlZC5jYWNoZUtleSk7XG5cdGJha2VkU3R5bGVzLmRlbGV0ZShlbCk7XG59O1xudmFyIHJlYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIG9wdGlvbnMpID0+IHtcblx0aWYgKCFlbCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKGJha2VkKSB7XG5cdFx0dW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdFx0YmFrZWQuY3NzVGV4dCA9IFwiXCI7XG5cdFx0ZHJvcENhY2hlKGJha2VkLmNhY2hlS2V5KTtcblx0fVxuXHRyZXR1cm4gYmFrZUNvbXB1dGVkU3R5bGUoZWwsIG9wdGlvbnMgPz8gKGJha2VkID8ge1xuXHRcdGNhdGVnb3JpZXM6IGJha2VkLmNhdGVnb3JpZXMsXG5cdFx0c2VsZWN0b3I6IGJha2VkLnNlbGVjdG9yLFxuXHRcdG1lZGlhOiBiYWtlZC5tZWRpYVxuXHR9IDoge30pKTtcbn07XG52YXIgZ2V0QmFrZWRTdHlsZSA9IChlbCkgPT4gZWwgPyBiYWtlZFN0eWxlcy5nZXQoZWwpIDogdm9pZCAwO1xudmFyIGJha2VTY3JlZW5Db2xvcnMgPSAocm9vdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGNvbnN0IG9wdHMgPSB7XG5cdFx0bWVkaWE6IEJBS0VfU0NSRUVOX01FRElBLFxuXHRcdHBpZXJjZVNoYWRvdzogb3B0aW9ucy5waWVyY2VTaGFkb3cgIT09IGZhbHNlLFxuXHRcdC4uLm9wdGlvbnNcblx0fTtcblx0Y29uc3QgaG9zdHMgPSBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzKHJvb3QpO1xuXHRjb25zdCBleHRyYXMgPSBjb2xsZWN0QmFrZUFsc29Ib3N0cyhyb290LCBvcHRzLmFsc28gPz8gYmFrZUFsc29RdWVyaWVzRm9yKHJvb3QpLCBvcHRzLnBpZXJjZVNoYWRvdyAhPT0gZmFsc2UpO1xuXHRjb25zdCBvdXQgPSBbXTtcblx0Y29uc3QgZm9sbG93ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Zm9yIChjb25zdCBlbCBvZiBob3N0cykge1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZUNvbXB1dGVkU3R5bGUoZWwsIG9wdHMpO1xuXHRcdGlmIChiYWtlZCkgb3V0LnB1c2goYmFrZWQpO1xuXHR9XG5cdGZvciAoY29uc3QgeyBlbCwgc2VsZWN0b3IgfSBvZiBleHRyYXMpIHtcblx0XHRpZiAoaG9zdHMuaW5jbHVkZXMoZWwpKSBjb250aW51ZTtcblx0XHRjb25zdCBiYWtlZCA9IGJha2VDb21wdXRlZFN0eWxlKGVsLCB7XG5cdFx0XHQuLi5vcHRzLFxuXHRcdFx0c2VsZWN0b3Jcblx0XHR9KTtcblx0XHRpZiAoYmFrZWQpIG91dC5wdXNoKGJha2VkKTtcblx0XHRmb2xsb3dlcnMuYWRkKGVsKTtcblx0fVxuXHRpZiAocm9vdCkge1xuXHRcdGNvbnN0IHByZXYgPSBiYWtlZEZvbGxvd2Vycy5nZXQocm9vdCk7XG5cdFx0aWYgKHByZXYpIHtcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgcHJldikgaWYgKCFmb2xsb3dlcnMuaGFzKGVsKSAmJiAhaG9zdHMuaW5jbHVkZXMoZWwpKSB1bmJha2VDb21wdXRlZFN0eWxlKGVsLCB0cnVlKTtcblx0XHR9XG5cdFx0aWYgKGZvbGxvd2Vycy5zaXplKSBiYWtlZEZvbGxvd2Vycy5zZXQocm9vdCwgZm9sbG93ZXJzKTtcblx0XHRlbHNlIGJha2VkRm9sbG93ZXJzLmRlbGV0ZShyb290KTtcblx0fVxuXHRyZXR1cm4gb3V0O1xufTtcbnZhciB1bmJha2VTY3JlZW5Db2xvcnMgPSAocm9vdCwga2VlcENhY2hlID0gdHJ1ZSkgPT4ge1xuXHRpZiAoIXJvb3QpIHJldHVybjtcblx0Y29uc3QgZm9sbG93ZXJzID0gYmFrZWRGb2xsb3dlcnMuZ2V0KHJvb3QpO1xuXHRiYWtlZEZvbGxvd2Vycy5kZWxldGUocm9vdCk7XG5cdGZvciAoY29uc3QgZWwgb2YgY29sbGVjdEJha2VTY3JlZW5Ib3N0cyhyb290KSkgdW5iYWtlQ29tcHV0ZWRTdHlsZShlbCwga2VlcENhY2hlKTtcblx0aWYgKGZvbGxvd2VycykgZm9yIChjb25zdCBlbCBvZiBmb2xsb3dlcnMpIHVuYmFrZUNvbXB1dGVkU3R5bGUoZWwsIGtlZXBDYWNoZSk7XG59O1xudmFyIHNjaGVkdWxlQmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHJ1biA9IChyZXRyeU1pc3MgPSB0cnVlKSA9PiB7XG5cdFx0YmFrZVNjcmVlbkNvbG9ycyhyb290LCBvcHRpb25zKTtcblx0XHRpZiAoIXJldHJ5TWlzcyB8fCAhcm9vdCkgcmV0dXJuO1xuXHRcdGNvbnN0IHF1ZXJpZXMgPSBvcHRpb25zPy5hbHNvID8/IGJha2VBbHNvUXVlcmllc0Zvcihyb290KTtcblx0XHRjb25zdCBwaWVyY2UgPSBvcHRpb25zPy5waWVyY2VTaGFkb3cgIT09IGZhbHNlO1xuXHRcdGlmICghcXVlcmllcy5sZW5ndGgpIHJldHVybjtcblx0XHRpZiAocXVlcmllcy5zb21lKChzZWwpID0+ICEocGllcmNlID8gcXVlcnlGaXJzdERlZXAocm9vdCwgc2VsKSA6IHJvb3QucXVlcnlTZWxlY3RvcihzZWwpKSkgJiYgdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gXCJmdW5jdGlvblwiKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcnVuKGZhbHNlKSk7XG5cdH07XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRydW4oZmFsc2UpO1xuXHRcdHJldHVybjtcblx0fVxuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcnVuKHRydWUpKTtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb21wb25lbnQudHNcbnZhciBzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93ID0gKGJUbykgPT4ge1xuXHRjb25zdCByb290ID0gYlRvPy5zaGFkb3dSb290O1xuXHRpZiAoIXJvb3QpIHJldHVybjtcblx0Y29uc3QgYWRvcHRlZFNoZWV0cyA9IGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlLmdldChiVG8pIHx8IFtdO1xuXHRmb3IgKGNvbnN0IHNoZWV0IG9mIGFkb3B0ZWRTaGVldHMpIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoc2hlZXQpO1xuXHR0cnkge1xuXHRcdGNvbnN0IGxpdmUgPSByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyB8fCBbXTtcblx0XHRyb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFsuLi5hZG9wdGVkU2hlZXRzLmZpbHRlcigocykgPT4gIWxpdmUuaW5jbHVkZXMocykpLCAuLi4vKiBAX19QVVJFX18gKi8gbmV3IFNldChbLi4ubGl2ZV0pXTtcblx0fSBjYXRjaCB7fVxufTtcbnZhciBhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQgPSAoYlRvLCBzaGVldCkgPT4ge1xuXHRsZXQgYWRvcHRlZFNoZWV0cyA9IGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlLmdldChiVG8pO1xuXHRpZiAoIWFkb3B0ZWRTaGVldHMpIGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlLnNldChiVG8sIGFkb3B0ZWRTaGVldHMgPSBbXSk7XG5cdGlmIChzaGVldCAmJiBhZG9wdGVkU2hlZXRzLmluZGV4T2Yoc2hlZXQpIDwgMCkgYWRvcHRlZFNoZWV0cy5wdXNoKHNoZWV0KTtcblx0ZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChzaGVldCk7XG5cdHN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3coYlRvKTtcbn07XG52YXIgZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2sgPSAoYlRvLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBiVG8/LnNoYWRvd1Jvb3Q7XG5cdGlmICghcm9vdCB8fCAhY3NzVGV4dCkgcmV0dXJuIG51bGw7XG5cdGxldCBzdHlsZSA9IHJvb3QucXVlcnlTZWxlY3Rvcj8uKGBzdHlsZVske0hPU1RfQ1NTX0ZBTExCQUNLfV1gKTtcblx0aWYgKCFzdHlsZSkge1xuXHRcdHN0eWxlID0gbG9hZElubGluZVN0eWxlKGNzc1RleHQsIHJvb3QsIFwiXCIpO1xuXHRcdGlmIChzdHlsZSkgc3R5bGUuc2V0QXR0cmlidXRlKEhPU1RfQ1NTX0ZBTExCQUNLLCBcIlwiKTtcblx0fSBlbHNlIGlmIChzdHlsZS50ZXh0Q29udGVudCAhPT0gY3NzVGV4dCkgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0O1xuXHRyZXR1cm4gc3R5bGU7XG59O1xudmFyIHJlaHlkcmF0ZUFkb3B0ZWRTdHlsZVNoZWV0cyA9IChyb290ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQgOiBudWxsKSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCByZXN0b3JlID0gKGhvc3QpID0+IHtcblx0XHRpZiAoIWhvc3Q/LnNoYWRvd1Jvb3QpIHJldHVybjtcblx0XHRlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayhob3N0LCBob3N0Q3NzVGV4dChob3N0KSk7XG5cdFx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhob3N0KTtcblx0fTtcblx0aWYgKHJvb3Qubm9kZVR5cGUgPT09IDEpIHJlc3RvcmUocm9vdCk7XG5cdGNvbnN0IHZpc2l0ID0gKG5vZGUpID0+IHtcblx0XHRsZXQgY2hpbGRyZW4gPSBbXTtcblx0XHR0cnkge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBob3N0ID0gY2hpbGRyZW5baV07XG5cdFx0XHRpZiAoaG9zdC5zaGFkb3dSb290KSB7XG5cdFx0XHRcdHJlc3RvcmUoaG9zdCk7XG5cdFx0XHRcdHZpc2l0KGhvc3Quc2hhZG93Um9vdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHR2aXNpdChyb290KTtcbn07XG52YXIgaG9zdENzc1RleHQgPSAoYlRvKSA9PiB7XG5cdGNvbnN0IHNyYyA9IGJUbz8uc3R5bGVzO1xuXHRpZiAodHlwZW9mIHNyYyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHNyYztcblx0aWYgKHR5cGVvZiBzcmMgPT09IFwiZnVuY3Rpb25cIikgdHJ5IHtcblx0XHRjb25zdCBvdXQgPSBzcmMuY2FsbChiVG8pO1xuXHRcdGlmICh0eXBlb2Ygb3V0ID09PSBcInN0cmluZ1wiKSByZXR1cm4gb3V0O1xuXHRcdHJldHVybiBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KG91dCk7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHNyYyk7XG59O1xudmFyIGVuc3VyZUhvc3RTdHlsZXMgPSAoYlRvKSA9PiB7XG5cdGlmICghYlRvKSByZXR1cm47XG5cdGlmIChiVG8uc3R5bGVzICE9IG51bGwpIGxvYWRDYWNoZWRTdHlsZXMoYlRvLCBiVG8uc3R5bGVzKTtcblx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhiVG8pO1xuXHRlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayhiVG8sIGhvc3RDc3NUZXh0KGJUbykpO1xufTtcbnZhciBzdHlsZUZsdXNoQmF0Y2ggPSBbXTtcbnZhciBzdHlsZUZsdXNoU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgc2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzID0gKGJUbykgPT4ge1xuXHRpZiAoIWJUbyB8fCAhKGJUbyBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IHN0eWxlRmx1c2hQZW5kaW5nLmhhcyhiVG8pKSByZXR1cm47XG5cdHN0eWxlRmx1c2hQZW5kaW5nLmFkZChiVG8pO1xuXHRzdHlsZUZsdXNoQmF0Y2gucHVzaChiVG8pO1xuXHRpZiAoc3R5bGVGbHVzaFNjaGVkdWxlZCkgcmV0dXJuO1xuXHRzdHlsZUZsdXNoU2NoZWR1bGVkID0gdHJ1ZTtcblx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdHN0eWxlRmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBiYXRjaCA9IHN0eWxlRmx1c2hCYXRjaDtcblx0XHRzdHlsZUZsdXNoQmF0Y2ggPSBbXTtcblx0XHRmb3IgKGNvbnN0IGhvc3Qgb2YgYmF0Y2gpIHtcblx0XHRcdHN0eWxlRmx1c2hQZW5kaW5nLmRlbGV0ZShob3N0KTtcblx0XHRcdGlmIChob3N0LmlzQ29ubmVjdGVkKSBlbnN1cmVIb3N0U3R5bGVzKGhvc3QpO1xuXHRcdH1cblx0fSk7XG59O1xucmVnaXN0ZXJTdHlsZVRyZWVIb29rKChlbCkgPT4gc2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzKGVsKSk7XG52YXIgbG9hZENhY2hlZFN0eWxlcyA9IChiVG8sIHNyYykgPT4ge1xuXHRpZiAoIXNyYykgcmV0dXJuIG51bGw7XG5cdGxldCByZXNvbHZlZFNyYyA9IHNyYztcblx0aWYgKHR5cGVvZiBzcmMgPT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdGNvbnN0IHdlYWsgPSBuZXcgV2Vha1JlZihiVG8pO1xuXHRcdHJlc29sdmVkU3JjID0gc3JjLmNhbGwoYlRvLCB3ZWFrKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGNvbnNvbGUud2FybihcIkVycm9yIGNhbGxpbmcgc3R5bGVzIGZ1bmN0aW9uOlwiLCBlKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAocmVzb2x2ZWRTcmMgJiYgdHlwZW9mIENTU1N0eWxlU2hlZXQgIT0gXCJ1bmRlZmluZWRcIiAmJiByZXNvbHZlZFNyYyBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIHtcblx0XHRhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQoYlRvLCByZXNvbHZlZFNyYyk7XG5cdFx0cmV0dXJuIGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgY3NzVGV4dEZvckFkb3B0ZWRTaGVldChyZXNvbHZlZFNyYykpO1xuXHR9XG5cdGlmIChyZXNvbHZlZFNyYyBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRyZXNvbHZlZFNyYy50aGVuKChyZXN1bHQpID0+IHtcblx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0KSBhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQoYlRvLCByZXN1bHQpO1xuXHRcdFx0ZWxzZSBpZiAocmVzdWx0ICE9IG51bGwpIGxvYWRDYWNoZWRTdHlsZXMoYlRvLCByZXN1bHQpO1xuXHRcdH0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRjb25zb2xlLndhcm4oXCJFcnJvciBsb2FkaW5nIGFkb3B0ZWQgc3R5bGVzaGVldDpcIiwgZSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHR5cGVvZiByZXNvbHZlZFNyYyA9PSBcInN0cmluZ1wiIHx8IHJlc29sdmVkU3JjIGluc3RhbmNlb2YgQmxvYiB8fCByZXNvbHZlZFNyYyBpbnN0YW5jZW9mIEZpbGUpIHtcblx0XHRjb25zdCBhZG9wdGVkID0gbG9hZEFzQWRvcHRlZChyZXNvbHZlZFNyYywgXCJcIik7XG5cdFx0aWYgKGFkb3B0ZWQpIHtcblx0XHRcdGNvbnN0IGFkZEFkb3B0ZWRTaGVldCA9IChzaGVldCkgPT4ge1xuXHRcdFx0XHRhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQoYlRvLCBzaGVldCk7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGFkb3B0ZWQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdGFkb3B0ZWQudGhlbigoc2hlZXQpID0+IHtcblx0XHRcdFx0XHRhZGRBZG9wdGVkU2hlZXQoc2hlZXQpO1xuXHRcdFx0XHRcdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgdHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYyA6IGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc2hlZXQpKTtcblx0XHRcdFx0fSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJFcnJvciBsb2FkaW5nIGFkb3B0ZWQgc3R5bGVzaGVldDpcIiwgZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFkZEFkb3B0ZWRTaGVldChhZG9wdGVkKTtcblx0XHRcdFx0cmV0dXJuIGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgdHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYyA6IGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoYWRvcHRlZCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBzb3VyY2UgPSB0eXBlb2Ygc3JjID09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2Ygc3JjID09IFwib2JqZWN0XCIgPyBzdHlsZUVsZW1lbnRDYWNoZSA6IHN0eWxlQ2FjaGU7XG5cdGNvbnN0IGNhY2hlZCA9IHNvdXJjZS5nZXQoc3JjKTtcblx0bGV0IHN0eWxlRWxlbWVudCA9IGNhY2hlZD8uc3R5bGVFbGVtZW50O1xuXHRsZXQgdmFycyA9IGNhY2hlZD8udmFycztcblx0aWYgKCFjYWNoZWQpIHtcblx0XHRsZXQgc3R5bGVzID0gYGA7XG5cdFx0bGV0IHByb3BzID0gW107XG5cdFx0aWYgKHR5cGVvZiByZXNvbHZlZFNyYyA9PSBcInN0cmluZ1wiKSBzdHlsZXMgPSByZXNvbHZlZFNyYyB8fCBcIlwiO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiByZXNvbHZlZFNyYyA9PSBcIm9iamVjdFwiICYmIHJlc29sdmVkU3JjICE9IG51bGwpIHtcblx0XHRcdGlmIChyZXNvbHZlZFNyYyBpbnN0YW5jZW9mIEhUTUxTdHlsZUVsZW1lbnQpIHN0eWxlRWxlbWVudCA9IHJlc29sdmVkU3JjO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHN0eWxlcyA9IHR5cGVvZiByZXNvbHZlZFNyYy5jc3MgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjLmNzcyA6IHR5cGVvZiByZXNvbHZlZFNyYyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMgOiBTdHJpbmcocmVzb2x2ZWRTcmMpO1xuXHRcdFx0XHRwcm9wcyA9IHJlc29sdmVkU3JjPy5wcm9wcyA/PyBwcm9wcztcblx0XHRcdFx0dmFycyA9IHJlc29sdmVkU3JjPy52YXJzID8/IHZhcnM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghc3R5bGVFbGVtZW50ICYmIHN0eWxlcykgc3R5bGVFbGVtZW50ID0gbG9hZElubGluZVN0eWxlKHN0eWxlcywgYlRvLCBcInV4LWxheWVyXCIpO1xuXHRcdHNvdXJjZS5zZXQoc3JjLCB7XG5cdFx0XHRjc3M6IHN0eWxlcyxcblx0XHRcdHByb3BzLFxuXHRcdFx0dmFycyxcblx0XHRcdHN0eWxlRWxlbWVudFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzdHlsZUVsZW1lbnQ7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYmluZC50c1xudmFyIGlzTGlua2VyTGlrZSA9ICh2YWx1ZSkgPT4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJyZWZcIiBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWU/LnVuYmluZCA9PT0gXCJmdW5jdGlvblwiO1xudmFyIGJpbmRXaXRoID0gKGVsLCBwcm9wLCB2YWx1ZSwgaGFuZGxlcikgPT4ge1xuXHRjb25zdCBsaW5rZXIgPSBpc0xpbmtlckxpa2UodmFsdWUpID8gdmFsdWUgOiBudWxsO1xuXHRpZiAobGlua2VyKSB7XG5cdFx0bGlua2VyLmJpbmQ/LigpO1xuXHRcdHZhbHVlID0gbGlua2VyLnJlZjtcblx0fVxuXHRoYW5kbGVyPy4oZWwsIHByb3AsIHZhbHVlKTtcblx0Y29uc3Qgd2VsID0gdG9SZWYoZWwpO1xuXHRjb25zdCB3diA9IHRvUmVmKHZhbHVlKTtcblx0Y29uc3QgdW4gPSBhZmZlY3RlZD8uKFt2YWx1ZSwgXCJ2YWx1ZVwiXSwgKGN1cnIpID0+IHtcblx0XHRjb25zdCBlbGVtZW50UmVmID0gZGVyZWYod2VsKTtcblx0XHRjb25zdCB2YWx1ZVJlZiA9IGRlcmVmKHd2KTtcblx0XHRjb25zdCB2ID0gJGdldFZhbHVlKHZhbHVlUmVmKSA/PyAkZ2V0VmFsdWUoY3Vycik7XG5cdFx0aGFuZGxlcj8uKGVsZW1lbnRSZWYsIHByb3AsIHYpO1xuXHR9KTtcblx0Y29uc3QgdW5zdWIgPSAoKSA9PiB7XG5cdFx0bGlua2VyPy51bmJpbmQ/LigpO1xuXHRcdHVuPy4oKTtcblx0fTtcblx0YWRkVG9DYWxsQ2hhaW4odmFsdWUsIFN5bWJvbC5kaXNwb3NlLCB1bnN1Yik7XG5cdHJldHVybiB1bnN1Yjtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9BbmltYXRhYmxlLnRzXG52YXIgYW5pbWF0YWJsZUlkID0gMDtcbnZhciBvblNjcm9sbCA9IChvID0ge30pID0+ICh7XG5cdGtpbmQ6IFwic2Nyb2xsXCIsXG5cdC4uLm9cbn0pO1xudmFyIG9uVmlldyA9IChvID0ge30pID0+ICh7XG5cdGtpbmQ6IFwidmlld1wiLFxuXHQuLi5vXG59KTtcbnZhciBBbmltYXRhYmxlVmFsdWUgPSBjbGFzcyB7XG5cdFtBTklNQVRBQkxFX0JSQU5EXSA9IHRydWU7XG5cdGlkID0gYW5pbWF0YWJsZUlkKys7XG5cdCNzdGVwcztcblx0I29wdGlvbnM7XG5cdCNjdXJyZW50O1xuXHQjc3Vic2NyaWJlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHQjYXR0YWNobWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHQjcmVzb2x2ZUVsZW1lbnRSZWYodiwgc2VsZikge1xuXHRcdGlmICh2ID09IG51bGwgfHwgdiA9PT0gXCJzZWxmXCIpIHJldHVybiBzZWxmO1xuXHRcdGlmICh2ID09PSBcInJvb3RcIikgcmV0dXJuIHNlbGYub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8/IHNlbGYub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0aWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiB2ICYmICEodiBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdi52YWx1ZSA/PyBzZWxmO1xuXHRcdHJldHVybiB2O1xuXHR9XG5cdCNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsKSB7XG5cdFx0Zm9yIChsZXQgbm9kZSA9IGVsLnBhcmVudEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHMgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuXHRcdFx0aWYgKC8oYXV0b3xzY3JvbGx8b3ZlcmxheSkvLnRlc3Qocy5vdmVyZmxvdyArIHMub3ZlcmZsb3dYICsgcy5vdmVyZmxvd1kpKSByZXR1cm4gbm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsLm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/PyBlbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0fVxuXHQjY3JlYXRlVGltZWxpbmUoZWxlbWVudCwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzO1xuXHRcdGlmIChpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSkge1xuXHRcdFx0Y29uc3QgU2Nyb2xsVGltZWxpbmVDdG9yID0gd2luLlNjcm9sbFRpbWVsaW5lO1xuXHRcdFx0aWYgKHR5cGVvZiBTY3JvbGxUaW1lbGluZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdFx0XHRyZXR1cm4gbmV3IFNjcm9sbFRpbWVsaW5lQ3Rvcih7XG5cdFx0XHRcdHNvdXJjZTogdHJpZ2dlci5zb3VyY2UgPT09IFwibmVhcmVzdFwiIHx8IHRyaWdnZXIuc291cmNlID09IG51bGwgPyB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpIDogdGhpcy4jcmVzb2x2ZUVsZW1lbnRSZWYodHJpZ2dlci5zb3VyY2UsIGVsZW1lbnQpLFxuXHRcdFx0XHRheGlzOiB0cmlnZ2VyLmF4aXMgPz8gXCJibG9ja1wiXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3QgVmlld1RpbWVsaW5lQ3RvciA9IHdpbi5WaWV3VGltZWxpbmU7XG5cdFx0aWYgKHR5cGVvZiBWaWV3VGltZWxpbmVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgVmlld1RpbWVsaW5lQ3Rvcih7XG5cdFx0XHRzdWJqZWN0OiB0cmlnZ2VyLnN1YmplY3QgPyB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnN1YmplY3QsIGVsZW1lbnQpIDogZWxlbWVudCxcblx0XHRcdGF4aXM6IHRyaWdnZXIuYXhpcyA/PyBcImJsb2NrXCIsXG5cdFx0XHRpbnNldDogdHJpZ2dlci5pbnNldFxuXHRcdH0pO1xuXHR9XG5cdCNzdGFydFRpbWVsaW5lRHJpdmVuKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpIHtcblx0XHRjb25zdCB0aW1lbGluZSA9IHRoaXMuI2NyZWF0ZVRpbWVsaW5lKGVsZW1lbnQsIHRyaWdnZXIpO1xuXHRcdGlmICghdGltZWxpbmUpIHJldHVybiB0aGlzLiNzdGFydFRpbWVsaW5lRmFsbGJhY2soZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcik7XG5cdFx0Y29uc3QgdGltaW5nID0gdGhpcy4jYnVpbGRUaW1pbmcoKTtcblx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHtcblx0XHRcdC4uLnRpbWluZyxcblx0XHRcdGR1cmF0aW9uOiBcImF1dG9cIixcblx0XHRcdGRlbGF5OiAwLFxuXHRcdFx0ZW5kRGVsYXk6IDAsXG5cdFx0XHRpdGVyYXRpb25zOiAxLFxuXHRcdFx0ZmlsbDogdGhpcy4jb3B0aW9ucy5maWxsID8/IFwiYm90aFwiLFxuXHRcdFx0dGltZWxpbmVcblx0XHR9KTtcblx0XHRpZiAodHJpZ2dlci5yYW5nZVN0YXJ0KSBhbmltYXRpb24ucmFuZ2VTdGFydCA9IHRyaWdnZXIucmFuZ2VTdGFydDtcblx0XHRpZiAodHJpZ2dlci5yYW5nZUVuZCkgYW5pbWF0aW9uLnJhbmdlRW5kID0gdHJpZ2dlci5yYW5nZUVuZDtcblx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRyZXR1cm4gKCkgPT4gYW5pbWF0aW9uLmNhbmNlbCgpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKHN0ZXBzLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3RlcHMpIHx8IHN0ZXBzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhbmltYXRhYmxlKCkgZXhwZWN0cyBhdCBsZWFzdCAyIHN0ZXBzXCIpO1xuXHRcdHRoaXMuI3N0ZXBzID0gc3RlcHM7XG5cdFx0dGhpcy4jb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy4jY3VycmVudCA9IHRoaXMuI3Jlc29sdmVTdGVwKHN0ZXBzWzBdKTtcblx0fVxuXHQjc3RhcnRUaW1lbGluZUZhbGxiYWNrKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpIHtcblx0XHRjb25zdCBEVVJBVElPTiA9IDFlNDtcblx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHtcblx0XHRcdC4uLnRoaXMuI2J1aWxkVGltaW5nKCksXG5cdFx0XHRkdXJhdGlvbjogRFVSQVRJT04sXG5cdFx0XHRkZWxheTogMCxcblx0XHRcdGl0ZXJhdGlvbnM6IDEsXG5cdFx0XHRmaWxsOiBcImJvdGhcIlxuXHRcdH0pO1xuXHRcdGFuaW1hdGlvbi5wYXVzZSgpO1xuXHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdGNvbnN0IHNjcm9sbGVyID0gaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikgPyB0cmlnZ2VyLnNvdXJjZSA9PT0gXCJuZWFyZXN0XCIgfHwgdHJpZ2dlci5zb3VyY2UgPT0gbnVsbCA/IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCkgOiB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnNvdXJjZSwgZWxlbWVudCkgOiB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpO1xuXHRcdGxldCByYWZJZCA9IDA7XG5cdFx0Y29uc3QgY29tcHV0ZVByb2dyZXNzID0gKCkgPT4ge1xuXHRcdFx0aWYgKGlzVmlld0RyaXZlbih0cmlnZ2VyKSkge1xuXHRcdFx0XHRjb25zdCB2cCA9IHNjcm9sbGVyID09PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8ge1xuXHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRoZWlnaHQ6IGlubmVySGVpZ2h0XG5cdFx0XHRcdH0gOiBzY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IHRvdGFsID0gdnAuaGVpZ2h0ICsgcmVjdC5oZWlnaHQ7XG5cdFx0XHRcdHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCAodnAudG9wICsgdnAuaGVpZ2h0IC0gcmVjdC50b3ApIC8gdG90YWwpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGVsID0gc2Nyb2xsZXI7XG5cdFx0XHRjb25zdCBtYXggPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5jbGllbnRIZWlnaHQ7XG5cdFx0XHRyZXR1cm4gbWF4ID4gMCA/IGVsLnNjcm9sbFRvcCAvIG1heCA6IDA7XG5cdFx0fTtcblx0XHRjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcblx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcblx0XHRcdHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0YW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY29tcHV0ZVByb2dyZXNzKCkgKiBEVVJBVElPTjtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y29uc3QgbGlzdGVuVGFyZ2V0ID0gc2Nyb2xsZXIgPT09IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPyB3aW5kb3cgOiBzY3JvbGxlcjtcblx0XHRsaXN0ZW5UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBvblNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXHRcdG9uU2Nyb2xsKCk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcblx0XHRcdGxpc3RlblRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsKTtcblx0XHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHR9O1xuXHR9XG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jY3VycmVudDtcblx0fVxuXHRzZXQgdmFsdWUobmV4dCkge1xuXHRcdHRoaXMuI2N1cnJlbnQgPSBuZXh0O1xuXHRcdGZvciAoY29uc3QgY2Igb2YgdGhpcy4jc3Vic2NyaWJlcnMpIGNiKG5leHQpO1xuXHR9XG5cdHZhbHVlT2YoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2N1cnJlbnQ7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgdiA9IHRoaXMuI2N1cnJlbnQ7XG5cdFx0cmV0dXJuIHYgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcodik7XG5cdH1cblx0W1N5bWJvbC50b1ByaW1pdGl2ZV0oaGludCkge1xuXHRcdGlmIChoaW50ID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRjb25zdCBuID0gTnVtYmVyKHRoaXMuI2N1cnJlbnQpO1xuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiAwO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpO1xuXHR9XG5cdHN1YnNjcmliZShjYikge1xuXHRcdHRoaXMuI3N1YnNjcmliZXJzLmFkZChjYik7XG5cdFx0cmV0dXJuICgpID0+IHRoaXMuI3N1YnNjcmliZXJzLmRlbGV0ZShjYik7XG5cdH1cblx0Z2V0IG9wdGlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI29wdGlvbnM7XG5cdH1cblx0Z2V0IHN0ZXBzKCkge1xuXHRcdHJldHVybiB0aGlzLiNzdGVwcztcblx0fVxuXHQjcmVzb2x2ZVN0ZXAoc3RlcCkge1xuXHRcdGlmIChzdGVwICE9IG51bGwgJiYgdHlwZW9mIHN0ZXAgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHN0ZXApIHJldHVybiBzdGVwLnZhbHVlO1xuXHRcdHJldHVybiBzdGVwO1xuXHR9XG5cdCNidWlsZEtleWZyYW1lcyhwbGFuKSB7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLiNzdGVwcy5tYXAoKHMpID0+IHRoaXMuI3Jlc29sdmVTdGVwKHMpKTtcblx0XHRjb25zdCBjb3VudCA9IHN0ZXBzLmxlbmd0aDtcblx0XHRjb25zdCBvZmZzZXRzID0gdGhpcy4jb3B0aW9ucy5vZmZzZXRzO1xuXHRcdGNvbnN0IGVhc2luZyA9IHRoaXMuI29wdGlvbnMuZWFzaW5nO1xuXHRcdHJldHVybiBzdGVwcy5tYXAoKHJhdywgaSkgPT4ge1xuXHRcdFx0Y29uc3QgZnJhbWUgPSB7IG9mZnNldDogb2Zmc2V0cz8uW2ldID8/IChjb3VudCA+IDEgPyBpIC8gKGNvdW50IC0gMSkgOiAwKSB9O1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZWFzaW5nKSkge1xuXHRcdFx0XHRpZiAoZWFzaW5nW2ldKSBmcmFtZS5lYXNpbmcgPSBlYXNpbmdbaV07XG5cdFx0XHR9XG5cdFx0XHRsZXQgdmFsdWUgPSByYXc7XG5cdFx0XHRpZiAocGxhbi5tb2RlID09PSBcInByb3BlcnR5XCIgJiYgcGxhbi51bml0ICE9IG51bGwgJiYgdHlwZW9mIHJhdyA9PT0gXCJudW1iZXJcIikgdmFsdWUgPSBgJHtyYXd9JHtwbGFuLnVuaXR9YDtcblx0XHRcdGlmIChwbGFuLm1vZGUgPT09IFwiY3VzdG9tLXByb3BlcnR5XCIgJiYgdHlwZW9mIHJhdyAhPT0gXCJzdHJpbmdcIikgdmFsdWUgPSBTdHJpbmcocmF3KTtcblx0XHRcdGZyYW1lW3BsYW4udGFyZ2V0XSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIGZyYW1lO1xuXHRcdH0pO1xuXHR9XG5cdCNidWlsZFRpbWluZygpIHtcblx0XHRjb25zdCBvID0gdGhpcy4jb3B0aW9ucztcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZHVyYXRpb246IHBhcnNlVGltZShvLmR1cmF0aW9uLCAzMDApLFxuXHRcdFx0ZGVsYXk6IHBhcnNlVGltZShvLmRlbGF5LCAwKSxcblx0XHRcdGVuZERlbGF5OiBvLmVuZERlbGF5ID8/IDAsXG5cdFx0XHRpdGVyYXRpb25zOiBub3JtYWxpemVJdGVyYXRpb25zKG8uaXRlcmF0aW9ucyksXG5cdFx0XHRkaXJlY3Rpb246IG8uZGlyZWN0aW9uID8/IFwibm9ybWFsXCIsXG5cdFx0XHRmaWxsOiBvLmZpbGwgPz8gXCJib3RoXCIsXG5cdFx0XHRjb21wb3NpdGU6IG8uY29tcG9zaXRlLFxuXHRcdFx0ZWFzaW5nOiBBcnJheS5pc0FycmF5KG8uZWFzaW5nKSA/IFwibGluZWFyXCIgOiBvLmVhc2luZyA/PyBcImxpbmVhclwiXG5cdFx0fTtcblx0fVxuXHRhdHRhY2goZWxlbWVudCwgcGxhbikge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB7XG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0YW5pbWF0aW9uOiBudWxsLFxuXHRcdFx0Y2xlYW51cDogKCkgPT4ge31cblx0XHR9O1xuXHRcdGNvbnN0IHRyaWdnZXIgPSB0aGlzLiNvcHRpb25zLnRyaWdnZXIgPz8gXCJtb3VudFwiO1xuXHRcdGxldCBpbm5lcjtcblx0XHRpZiAoaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikgfHwgaXNWaWV3RHJpdmVuKHRyaWdnZXIpKSBpbm5lciA9IHRoaXMuI3N0YXJ0VGltZWxpbmVEcml2ZW4oZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcik7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24/LmNhbmNlbCgpO1xuXHRcdFx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHRoaXMuI2J1aWxkVGltaW5nKCkpO1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRcdFx0dGhpcy4jdHJhY2tQcm9ncmVzcyhhbmltYXRpb24sIHBsYW4pO1xuXHRcdFx0XHRyZXR1cm4gYW5pbWF0aW9uO1xuXHRcdFx0fTtcblx0XHRcdGlubmVyID0gdGhpcy4jd2lyZVRyaWdnZXIoZWxlbWVudCwgYXR0YWNobWVudCwgc3RhcnQpO1xuXHRcdH1cblx0XHR0aGlzLiNhdHRhY2htZW50cy5hZGQoYXR0YWNobWVudCk7XG5cdFx0YXR0YWNobWVudC5jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0aW5uZXIoKTtcblx0XHRcdHRoaXMuI2F0dGFjaG1lbnRzLmRlbGV0ZShhdHRhY2htZW50KTtcblx0XHR9O1xuXHRcdHJldHVybiBhdHRhY2htZW50LmNsZWFudXA7XG5cdH1cblx0I3RyYWNrUHJvZ3Jlc3MoYW5pbWF0aW9uLCBwbGFuKSB7XG5cdFx0YW5pbWF0aW9uLmZpbmlzaGVkLnRoZW4oKCkgPT4ge1xuXHRcdFx0Y29uc3QgbGFzdCA9IHRoaXMuI3Jlc29sdmVTdGVwKHRoaXMuI3N0ZXBzW3RoaXMuI3N0ZXBzLmxlbmd0aCAtIDFdKTtcblx0XHRcdHRoaXMudmFsdWUgPSBsYXN0O1xuXHRcdH0pLmNhdGNoKCgpID0+IHt9KTtcblx0fVxuXHQjd2lyZVRyaWdnZXIoZWxlbWVudCwgYXR0YWNobWVudCwgc3RhcnQpIHtcblx0XHRjb25zdCB0cmlnZ2VyID0gdGhpcy4jb3B0aW9ucy50cmlnZ2VyID8/IFwibW91bnRcIjtcblx0XHRjb25zdCByZXZlcnNlT25FeGl0ID0gdGhpcy4jb3B0aW9ucy5yZXZlcnNlT25FeGl0ID8/IHRydWU7XG5cdFx0Y29uc3QgcGxheUZvcndhcmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQuYW5pbWF0aW9uIHx8IGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXlTdGF0ZSA9PT0gXCJpZGxlXCIpIHN0YXJ0KCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24ucGxheWJhY2tSYXRlID0gTWF0aC5hYnMoYXR0YWNobWVudC5hbmltYXRpb24ucGxheWJhY2tSYXRlIHx8IDEpO1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBwbGF5QmFja3dhcmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQuYW5pbWF0aW9uKSByZXR1cm47XG5cdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5yZXZlcnNlKCk7XG5cdFx0fTtcblx0XHRpZiAodHJpZ2dlciA9PT0gXCJtb3VudFwiKSB7XG5cdFx0XHRzdGFydCgpO1xuXHRcdFx0cmV0dXJuICgpID0+IHt9O1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciA9PT0gXCJtYW51YWxcIikgcmV0dXJuICgpID0+IHt9O1xuXHRcdGlmICh0cmlnZ2VyID09PSBcImhvdmVyXCIgfHwgdHJpZ2dlciA9PT0gXCJmb2N1c1wiKSB7XG5cdFx0XHRjb25zdCBlbnRlciA9IHRyaWdnZXIgPT09IFwiaG92ZXJcIiA/IFwicG9pbnRlcmVudGVyXCIgOiBcImZvY3VzaW5cIjtcblx0XHRcdGNvbnN0IGxlYXZlID0gdHJpZ2dlciA9PT0gXCJob3ZlclwiID8gXCJwb2ludGVybGVhdmVcIiA6IFwiZm9jdXNvdXRcIjtcblx0XHRcdGNvbnN0IG9uRW50ZXIgPSAoKSA9PiBwbGF5Rm9yd2FyZCgpO1xuXHRcdFx0Y29uc3Qgb25MZWF2ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHJldmVyc2VPbkV4aXQpIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlbnRlciwgb25FbnRlcik7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobGVhdmUsIG9uTGVhdmUpO1xuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGVudGVyLCBvbkVudGVyKTtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGxlYXZlLCBvbkxlYXZlKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGxldCBmb3J3YXJkID0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9uQ2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdGZvcndhcmQgPyBwbGF5Rm9yd2FyZCgpIDogcGxheUJhY2t3YXJkKCk7XG5cdFx0XHRcdGZvcndhcmQgPSAhZm9yd2FyZDtcblx0XHRcdH07XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcblx0XHRcdHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwidmlzaWJsZVwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHBsYXlGb3J3YXJkKCk7XG5cdFx0XHRcdGVsc2UgaWYgKHJldmVyc2VPbkV4aXQgJiYgYXR0YWNobWVudC5hbmltYXRpb24pIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fSwgdGhpcy4jb3B0aW9ucy5pbnRlcnNlY3Rpb24pO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcblx0XHRcdHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyICE9IG51bGwgJiYgdHlwZW9mIHRyaWdnZXIgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHRyaWdnZXIpIHtcblx0XHRcdGNvbnN0IGFwcGx5ID0gKHYpID0+IHYgPyBwbGF5Rm9yd2FyZCgpIDogcGxheUJhY2t3YXJkKCk7XG5cdFx0XHRhcHBseSh0cmlnZ2VyLnZhbHVlKTtcblx0XHRcdGNvbnN0IHVuc3Vic2NyaWJlID0gdHlwZW9mIHRyaWdnZXIuc3Vic2NyaWJlID09PSBcImZ1bmN0aW9uXCIgPyB0cmlnZ2VyLnN1YnNjcmliZShhcHBseSkgOiBudWxsO1xuXHRcdFx0cmV0dXJuICgpID0+IHVuc3Vic2NyaWJlPy4oKTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwic2hvd1wiIHx8IHRyaWdnZXIgPT09IFwiaGlkZVwiIHx8IHRyaWdnZXIgPT09IFwicmVtb3ZlXCIpIHtcblx0XHRcdGNvbnN0IGV2ZW50TmFtZSA9IHRyaWdnZXIgPT09IFwic2hvd1wiID8gXCJ1Mi1iZWZvcmUtc2hvd1wiIDogdHJpZ2dlciA9PT0gXCJoaWRlXCIgPyBcInUyLWJlZm9yZS1oaWRlXCIgOiBcInUyLWJlZm9yZS1yZW1vdmVcIjtcblx0XHRcdGNvbnN0IGF0dHIgPSB0cmlnZ2VyID09PSBcInJlbW92ZVwiID8gXCJkYXRhLXJlbW92aW5nXCIgOiBcImRhdGEtaGlkZGVuXCI7XG5cdFx0XHRjb25zdCB3YW50UHJlc2VudCA9IHRyaWdnZXIgIT09IFwic2hvd1wiO1xuXHRcdFx0Y29uc3Qgb25FdmVudCA9IChldikgPT4ge1xuXHRcdFx0XHRpZiAoZXYuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXHRcdFx0XHRwbGF5Rm9yd2FyZCgpO1xuXHRcdFx0fTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG9uRXZlbnQpO1xuXHRcdFx0Y29uc3QgbW8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyKSA9PT0gd2FudFByZXNlbnQpIHBsYXlGb3J3YXJkKCk7XG5cdFx0XHRcdGVsc2UgaWYgKHJldmVyc2VPbkV4aXQgJiYgYXR0YWNobWVudC5hbmltYXRpb24pIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fSk7XG5cdFx0XHRtby5vYnNlcnZlKGVsZW1lbnQsIHtcblx0XHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbYXR0cl1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgb25FdmVudCk7XG5cdFx0XHRcdG1vLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiAoKSA9PiB7fTtcblx0fVxuXHQjZWFjaChmbikge1xuXHRcdGZvciAoY29uc3QgYXQgb2YgdGhpcy4jYXR0YWNobWVudHMpIGlmIChhdC5hbmltYXRpb24pIGZuKGF0LmFuaW1hdGlvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0cGxheSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5wbGF5KCkpO1xuXHR9XG5cdHBhdXNlKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLnBhdXNlKCkpO1xuXHR9XG5cdHJldmVyc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEucmV2ZXJzZSgpKTtcblx0fVxuXHRjYW5jZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEuY2FuY2VsKCkpO1xuXHR9XG5cdGZpbmlzaCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5maW5pc2goKSk7XG5cdH1cblx0c2V0IHBsYXliYWNrUmF0ZShyYXRlKSB7XG5cdFx0dGhpcy4jZWFjaCgoYSkgPT4ge1xuXHRcdFx0YS5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHRcdH0pO1xuXHR9XG5cdGdldCBmaW5pc2hlZCgpIHtcblx0XHRjb25zdCBsaXN0ID0gW107XG5cdFx0dGhpcy4jZWFjaCgoYSkgPT4gbGlzdC5wdXNoKGEuZmluaXNoZWQuY2F0Y2goKCkgPT4ge30pKSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGxpc3QpLnRoZW4oKCkgPT4ge30pO1xuXHR9XG59O1xudmFyIGFuaW1hdGFibGUgPSAoc3RlcHMsIG9wdGlvbnMpID0+IG5ldyBBbmltYXRhYmxlVmFsdWUoc3RlcHMsIG9wdGlvbnMpO1xudmFyIGlzQW5pbWF0YWJsZVZhbHVlID0gKHZhbHVlKSA9PiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZVtBTklNQVRBQkxFX0JSQU5EXSA9PT0gdHJ1ZTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL1N0eWxlcy50c1xudmFyIHN0eWxlVGVtcGxhdGVJZCA9IDA7XG52YXIgcmVhZFJlYWN0aXZlTnVtYmVyID0gKHNsb3QpID0+IHtcblx0Y29uc3QgY3VycmVudCA9IHNsb3QudmFsdWU/LnZhbHVlO1xuXHRjb25zdCBudW1iZXIgPSB0eXBlb2YgY3VycmVudCA9PT0gXCJudW1iZXJcIiA/IGN1cnJlbnQgOiBOdW1iZXIoY3VycmVudCk7XG5cdGlmICghTnVtYmVyLmlzRmluaXRlKG51bWJlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlYWN0aXZlIENTUyB2YWx1ZSBcIiR7U3RyaW5nKGN1cnJlbnQpfVwiIGlzIG5vdCBmaW5pdGVgKTtcblx0cmV0dXJuIG51bWJlcjtcbn07XG52YXIgZ2V0UmVhY3RpdmVJbml0aWFsTnVtYmVyID0gKHZhbHVlKSA9PiB7XG5cdGNvbnN0IG51bWJlciA9IE51bWJlcih2YWx1ZT8udmFsdWUpO1xuXHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiAwO1xufTtcbnZhciByZXBsYWNlVHlwZWRNYXJrZXJzID0gKGNzc1ZhbHVlLCBzbG90cykgPT4ge1xuXHRsZXQgcmVzdWx0ID0gY3NzVmFsdWU7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiBzbG90cykgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cChgdmFyXFxcXChcXFxccyoke2VzY2FwZVJlZ0V4cChzbG90Lm1hcmtlcil9XFxcXHMqXFxcXClgLCBcImdcIiksIFN0cmluZyhzbG90LnZhbHVlKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xudmFyIGlzRGlyZWN0U2xvdFZhbHVlID0gKGNzc1ZhbHVlLCBtYXJrZXIpID0+IHtcblx0Y29uc3QgZXNjYXBlZE1hcmtlciA9IGVzY2FwZVJlZ0V4cChtYXJrZXIpO1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgXnZhclxcXFwoXFxcXHMqJHtlc2NhcGVkTWFya2VyfVxcXFxzKlxcXFwpJGApLnRlc3QoY3NzVmFsdWUudHJpbSgpKTtcbn07XG52YXIgc2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlID0gKHJhdywgdW5pdCkgPT4ge1xuXHRsZXQgdmFsdWUgPSByYXc7XG5cdGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gdmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB2YWx1ZSA9IHZhbHVlLnZhbHVlO1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIHVuaXQgPyBgMCR7dW5pdH1gIDogXCIwXCI7XG5cdGlmICh1bml0ICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gYCR7dmFsdWV9JHt1bml0fWA7XG5cdHJldHVybiBTdHJpbmcodmFsdWUpO1xufTtcbnZhciBpc0RpcmVjdFNsb3RVbml0UHJvZHVjdCA9IChjc3NWYWx1ZSwgbWFya2VyLCB1bml0KSA9PiB7XG5cdGlmICghdW5pdCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBlc2NhcGVkTWFya2VyID0gZXNjYXBlUmVnRXhwKG1hcmtlcik7XG5cdGNvbnN0IGVzY2FwZWRVbml0ID0gZXNjYXBlUmVnRXhwKHVuaXQpO1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgXmNhbGNcXFxcKFxcXFxzKnZhclxcXFwoXFxcXHMqJHtlc2NhcGVkTWFya2VyfVxcXFxzKlxcXFwpXFxcXHMqXFxcXCpcXFxccyoxJHtlc2NhcGVkVW5pdH1cXFxccypcXFxcKSRgLCBcImlcIikudGVzdChjc3NWYWx1ZS50cmltKCkpO1xufTtcbnZhciBzZXRQYXJzZWRUeXBlZFZhbHVlID0gKHN0eWxlTWFwLCBDU1NTdHlsZVZhbHVlQ3RvciwgcHJvcGVydHksIGNzc1ZhbHVlKSA9PiB7XG5cdGlmICh0eXBlb2YgQ1NTU3R5bGVWYWx1ZUN0b3I/LnBhcnNlQWxsID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSBDU1NTdHlsZVZhbHVlQ3Rvci5wYXJzZUFsbChwcm9wZXJ0eSwgY3NzVmFsdWUpO1xuXHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgLi4udmFsdWVzKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3Rvcj8ucGFyc2UgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgQ1NTU3R5bGVWYWx1ZUN0b3IucGFyc2UocHJvcGVydHksIGNzc1ZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgY3NzVmFsdWUpO1xufTtcbnZhciB0b2tlbml6ZU51bWVyaWNDU1MgPSAoc291cmNlKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IFtdO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0d2hpbGUgKGN1cnNvciA8IHNvdXJjZS5sZW5ndGgpIHtcblx0XHRjb25zdCByZXN0ID0gc291cmNlLnNsaWNlKGN1cnNvcik7XG5cdFx0Y29uc3Qgd2hpdGVzcGFjZSA9IC9eXFxzKy8uZXhlYyhyZXN0KTtcblx0XHRpZiAod2hpdGVzcGFjZSkge1xuXHRcdFx0Y3Vyc29yICs9IHdoaXRlc3BhY2VbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhYmxlID0gL152YXJcXChcXHMqKC0tW2EtekEtWjAtOV8tXSspXFxzKlxcKS8uZXhlYyhyZXN0KTtcblx0XHRpZiAodmFyaWFibGUpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJ2YXJpYWJsZVwiLFxuXHRcdFx0XHRtYXJrZXI6IHZhcmlhYmxlWzFdXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvciArPSB2YXJpYWJsZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyID0gL14oPzpcXGQqXFwuXFxkK3xcXGQrXFwuP1xcZCopKD86W2VFXVsrLV0/XFxkKyk/Ly5leGVjKHJlc3QpO1xuXHRcdGlmIChudW1iZXIpIHtcblx0XHRcdGN1cnNvciArPSBudW1iZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29uc3QgdW5pdE1hdGNoID0gL14oJXxbYS16QS1aXSspLy5leGVjKHNvdXJjZS5zbGljZShjdXJzb3IpKTtcblx0XHRcdGNvbnN0IHVuaXQgPSB1bml0TWF0Y2g/LlswXSA/PyBudWxsO1xuXHRcdFx0aWYgKHVuaXRNYXRjaCkgY3Vyc29yICs9IHVuaXRNYXRjaFswXS5sZW5ndGg7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwibnVtYmVyXCIsXG5cdFx0XHRcdHZhbHVlOiBOdW1iZXIobnVtYmVyWzBdKSxcblx0XHRcdFx0dW5pdDogdW5pdCA9PSBudWxsID8gbnVsbCA6IHVuaXQudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IC9eW2EtekEtWl9dW2EtekEtWjAtOV8tXSovLmV4ZWMocmVzdCk7XG5cdFx0aWYgKGlkZW50aWZpZXIpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJpZGVudGlmaWVyXCIsXG5cdFx0XHRcdHZhbHVlOiBpZGVudGlmaWVyWzBdLnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yICs9IGlkZW50aWZpZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IHN5bWJvbCA9IHJlc3RbMF07XG5cdFx0aWYgKHN5bWJvbCA9PT0gXCIrXCIgfHwgc3ltYm9sID09PSBcIi1cIiB8fCBzeW1ib2wgPT09IFwiKlwiIHx8IHN5bWJvbCA9PT0gXCIvXCIgfHwgc3ltYm9sID09PSBcIihcIiB8fCBzeW1ib2wgPT09IFwiKVwiIHx8IHN5bWJvbCA9PT0gXCIsXCIpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJzeW1ib2xcIixcblx0XHRcdFx0dmFsdWU6IHN5bWJvbFxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IrKztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIFR5cGVkIE9NIG51bWVyaWMgdG9rZW4gbmVhciBcIiR7cmVzdH1cImApO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xudmFyIE51bWVyaWNUeXBlZE9NUGFyc2VyID0gY2xhc3Mge1xuXHR0b2tlbnM7XG5cdHdpbjtcblx0cmVhY3RpdmVCeU1hcmtlcjtcblx0dHlwZWRCeU1hcmtlcjtcblx0aW5kZXggPSAwO1xuXHRsZWF2ZXMgPSBbXTtcblx0Y29uc3RydWN0b3IodG9rZW5zLCB3aW4sIHJlYWN0aXZlQnlNYXJrZXIsIHR5cGVkQnlNYXJrZXIpIHtcblx0XHR0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLndpbiA9IHdpbjtcblx0XHR0aGlzLnJlYWN0aXZlQnlNYXJrZXIgPSByZWFjdGl2ZUJ5TWFya2VyO1xuXHRcdHRoaXMudHlwZWRCeU1hcmtlciA9IHR5cGVkQnlNYXJrZXI7XG5cdH1cblx0cGFyc2UoKSB7XG5cdFx0Y29uc3Qgcm9vdCA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRpZiAodGhpcy5pbmRleCAhPT0gdGhpcy50b2tlbnMubGVuZ3RoKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIHRyYWlsaW5nIFR5cGVkIE9NIGV4cHJlc3Npb25cIik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJvb3QsXG5cdFx0XHRsZWF2ZXM6IHRoaXMubGVhdmVzXG5cdFx0fTtcblx0fVxuXHRjdXJyZW50KCkge1xuXHRcdHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0fVxuXHRjb25zdW1lKCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdFx0aWYgKCF0b2tlbikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgVHlwZWQgT00gZXhwcmVzc2lvblwiKTtcblx0XHR0aGlzLmluZGV4Kys7XG5cdFx0cmV0dXJuIHRva2VuO1xuXHR9XG5cdGNvbnN1bWVTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJzeW1ib2xcIiB8fCB0b2tlbi52YWx1ZSAhPT0gc3ltYm9sKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEV4cGVjdGVkIFwiJHtzeW1ib2x9XCJgKTtcblx0fVxuXHRtYXRjaGVzU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50KCk7XG5cdFx0cmV0dXJuIHRva2VuPy5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBzeW1ib2w7XG5cdH1cblx0Y3JlYXRlTWF0aChuYW1lLCAuLi52YWx1ZXMpIHtcblx0XHRjb25zdCBDb25zdHJ1Y3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHRoaXMud2luLCBuYW1lKTtcblx0XHRpZiAodHlwZW9mIENvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bmFtZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdHJldHVybiBuZXcgQ29uc3RydWN0b3IoLi4udmFsdWVzKTtcblx0fVxuXHRwYXJzZVN1bSgpIHtcblx0XHRsZXQgdmFsdWUgPSB0aGlzLnBhcnNlUHJvZHVjdCgpO1xuXHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIrXCIpIHx8IHRoaXMubWF0Y2hlc1N5bWJvbChcIi1cIikpIHtcblx0XHRcdGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0XHRjb25zdCByaWdodCA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBzdW0gb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiK1wiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVByb2R1Y3QoKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiL1wiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBwcm9kdWN0IG9wZXJhdG9yXCIpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLnZhbHVlID09PSBcIipcIikgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhQcm9kdWN0XCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoSW52ZXJ0XCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVVuYXJ5KCkge1xuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCIrXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIi1cIikpIHtcblx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgdGhpcy5wYXJzZVVuYXJ5KCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVByaW1hcnkoKTtcblx0fVxuXHRwYXJzZVByaW1hcnkoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCB0b2tlbi51bml0ID8/IFwibnVtYmVyXCIsIHRva2VuLnZhbHVlKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJ2YXJpYWJsZVwiKSB7XG5cdFx0XHRjb25zdCByZWFjdGl2ZSA9IHRoaXMucmVhY3RpdmVCeU1hcmtlci5nZXQodG9rZW4ubWFya2VyKTtcblx0XHRcdGlmIChyZWFjdGl2ZSkge1xuXHRcdFx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiKlwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNoZWNrcG9pbnQgPSB0aGlzLmluZGV4O1xuXHRcdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHRcdGNvbnN0IHJocyA9IHRoaXMuY3VycmVudCgpO1xuXHRcdFx0XHRcdGlmIChyaHM/LmtpbmQgPT09IFwibnVtYmVyXCIgJiYgcmhzLnZhbHVlID09PSAxICYmIHR5cGVvZiByaHMudW5pdCA9PT0gXCJzdHJpbmdcIiAmJiAoIXJlYWN0aXZlLm11bHRpcGxpZWRCeVVuaXQgfHwgcmVhY3RpdmUubXVsdGlwbGllZEJ5VW5pdCA9PT0gcmhzLnVuaXQudG9Mb3dlckNhc2UoKSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbGVhZiA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCByaHMudW5pdC50b0xvd2VyQ2FzZSgpLCByZWFkUmVhY3RpdmVOdW1iZXIocmVhY3RpdmUpKTtcblx0XHRcdFx0XHRcdHRoaXMubGVhdmVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRzbG90OiByZWFjdGl2ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGxlYWZcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGxlYWY7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuaW5kZXggPSBjaGVja3BvaW50O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGxlYWYgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgXCJudW1iZXJcIiwgcmVhZFJlYWN0aXZlTnVtYmVyKHJlYWN0aXZlKSk7XG5cdFx0XHRcdHRoaXMubGVhdmVzLnB1c2goe1xuXHRcdFx0XHRcdHNsb3Q6IHJlYWN0aXZlLFxuXHRcdFx0XHRcdHZhbHVlOiBsZWFmXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbGVhZjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHR5cGVkID0gdGhpcy50eXBlZEJ5TWFya2VyLmdldCh0b2tlbi5tYXJrZXIpO1xuXHRcdFx0aWYgKHR5cGVkKSByZXR1cm4gdHlwZWQudmFsdWU7XG5cdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVua25vd24gc3R5bGUgc2xvdCBcIiR7dG9rZW4ubWFya2VyfVwiYCk7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIihcIikge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJpZGVudGlmaWVyXCIpIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24odG9rZW4udmFsdWUpO1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgVHlwZWQgT00gbnVtZXJpYyB2YWx1ZVwiKTtcblx0fVxuXHRwYXJzZUZ1bmN0aW9uKG5hbWUpIHtcblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIoXCIpO1xuXHRcdGlmIChuYW1lID09PSBcImNhbGNcIikge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hlc1N5bWJvbChcIilcIikpIHtcblx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiLFwiKSkge1xuXHRcdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJtaW5cIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIm1pbigpIHJlcXVpcmVzIGEgdmFsdWVcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE1pblwiLCAuLi52YWx1ZXMpO1xuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJtYXhcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIm1heCgpIHJlcXVpcmVzIGEgdmFsdWVcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE1heFwiLCAuLi52YWx1ZXMpO1xuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJjbGFtcFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiY2xhbXAoKSByZXF1aXJlcyB0aHJlZSB2YWx1ZXNcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aENsYW1wXCIsIHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0pO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIFR5cGVkIE9NIGZ1bmN0aW9uIFwiJHtuYW1lfVwiYCk7XG5cdH1cbn07XG52YXIgYnVpbGROdW1lcmljVHlwZWRPTVRyZWUgPSAoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cykgPT4ge1xuXHRjb25zdCByZWFjdGl2ZUJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgdHlwZWRCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiByZWFjdGl2ZVNsb3RzKSByZWFjdGl2ZUJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiB0eXBlZFNsb3RzKSB0eXBlZEJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdHJldHVybiBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIodG9rZW5pemVOdW1lcmljQ1NTKGNzc1ZhbHVlKSwgd2luLCByZWFjdGl2ZUJ5TWFya2VyLCB0eXBlZEJ5TWFya2VyKS5wYXJzZSgpO1xufTtcbnZhciBpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkgPSAocHJvcGVydHkpID0+IHtcblx0cmV0dXJuIHByb3BlcnR5LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInRyYW5zZm9ybVwiO1xufTtcbnZhciBidWlsZFRyYW5zZm9ybVR5cGVkT01UcmVlID0gKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gdG9rZW5pemVOdW1lcmljQ1NTKGNzc1ZhbHVlKTtcblx0Y29uc3QgbGVhdmVzID0gW107XG5cdGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcblx0Y29uc3QgcmVhY3RpdmVCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHR5cGVkQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgcmVhY3RpdmVTbG90cykgcmVhY3RpdmVCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgdHlwZWRTbG90cykgdHlwZWRCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRjb25zdCB6ZXJvUHggPSAoKSA9PiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwicHhcIiwgMCk7XG5cdGNvbnN0IG9uZU51bWJlciA9ICgpID0+IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMSk7XG5cdGxldCBpbmRleCA9IDA7XG5cdGNvbnN0IGN1cnJlbnQgPSAoKSA9PiB0b2tlbnNbaW5kZXhdO1xuXHRjb25zdCBjb25zdW1lID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiB0cmFuc2Zvcm0gZXhwcmVzc2lvblwiKTtcblx0XHRpbmRleCsrO1xuXHRcdHJldHVybiB0b2tlbjtcblx0fTtcblx0Y29uc3QgY29uc3VtZVN5bWJvbCA9IChzeW1ib2wpID0+IHtcblx0XHRjb25zdCB0b2tlbiA9IGNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJzeW1ib2xcIiB8fCB0b2tlbi52YWx1ZSAhPT0gc3ltYm9sKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEV4cGVjdGVkIFwiJHtzeW1ib2x9XCJgKTtcblx0fTtcblx0Y29uc3QgcGFyc2VBcmd1bWVudCA9ICgpID0+IHtcblx0XHRjb25zdCBzdGFydCA9IGluZGV4O1xuXHRcdGxldCBkZXB0aCA9IDA7XG5cdFx0d2hpbGUgKGluZGV4IDwgdG9rZW5zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuXHRcdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRcdGRlcHRoKys7XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKVwiKSB7XG5cdFx0XHRcdGlmIChkZXB0aCA9PT0gMCkgYnJlYWs7XG5cdFx0XHRcdGRlcHRoLS07XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiLFwiICYmIGRlcHRoID09PSAwKSBicmVhaztcblx0XHRcdGluZGV4Kys7XG5cdFx0fVxuXHRcdGNvbnN0IHNsaWNlID0gdG9rZW5zLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG5cdFx0aWYgKHNsaWNlLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRW1wdHkgdHJhbnNmb3JtIGZ1bmN0aW9uIGFyZ3VtZW50XCIpO1xuXHRcdGNvbnN0IHRyZWUgPSBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIoc2xpY2UsIHdpbiwgcmVhY3RpdmVCeU1hcmtlciwgdHlwZWRCeU1hcmtlcikucGFyc2UoKTtcblx0XHRsZWF2ZXMucHVzaCguLi50cmVlLmxlYXZlcyk7XG5cdFx0cmV0dXJuIHRyZWUucm9vdDtcblx0fTtcblx0Y29uc3QgcGFyc2VBcmd1bWVudExpc3QgPSAoKSA9PiB7XG5cdFx0Y29uc3QgYXJncyA9IFtdO1xuXHRcdGNvbnN1bWVTeW1ib2woXCIoXCIpO1xuXHRcdGlmICghKGN1cnJlbnQoKT8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiBjdXJyZW50KCk/LnZhbHVlID09PSBcIilcIikpIHtcblx0XHRcdGFyZ3MucHVzaChwYXJzZUFyZ3VtZW50KCkpO1xuXHRcdFx0d2hpbGUgKGN1cnJlbnQoKT8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiBjdXJyZW50KCk/LnZhbHVlID09PSBcIixcIikge1xuXHRcdFx0XHRjb25zdW1lKCk7XG5cdFx0XHRcdGFyZ3MucHVzaChwYXJzZUFyZ3VtZW50KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRyZXR1cm4gYXJncztcblx0fTtcblx0Y29uc3QgY3JlYXRlQ29tcG9uZW50ID0gKG5hbWUsIGFyZ3MpID0+IHtcblx0XHRjb25zdCBjdG9yID0gKGNsYXNzTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgQ3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgY2xhc3NOYW1lKTtcblx0XHRcdGlmICh0eXBlb2YgQ3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2NsYXNzTmFtZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdFx0cmV0dXJuIEN0b3I7XG5cdFx0fTtcblx0XHRzd2l0Y2ggKG5hbWUpIHtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGVcIjoge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdGUgPSBjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgVHJhbnNsYXRlKGFyZ3NbMF0sIHplcm9QeCgpKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAyKSByZXR1cm4gbmV3IFRyYW5zbGF0ZShhcmdzWzBdLCBhcmdzWzFdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAzKSByZXR1cm4gbmV3IFRyYW5zbGF0ZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwidHJhbnNsYXRlKCkgZXhwZWN0cyAxLi4zIGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRleFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKShhcmdzWzBdLCB6ZXJvUHgoKSk7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRleVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKSh6ZXJvUHgoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRlelwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKSh6ZXJvUHgoKSwgemVyb1B4KCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZTNkXCI6XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwidHJhbnNsYXRlM2QoKSBleHBlY3RzIDMgYXJnc1wiKTtcblx0XHRcdFx0cmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRjYXNlIFwic2NhbGVcIjoge1xuXHRcdFx0XHRjb25zdCBTY2FsZSA9IGN0b3IoXCJDU1NTY2FsZVwiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFNjYWxlKGFyZ3NbMF0sIGFyZ3NbMF0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDIpIHJldHVybiBuZXcgU2NhbGUoYXJnc1swXSwgYXJnc1sxXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMykgcmV0dXJuIG5ldyBTY2FsZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwic2NhbGUoKSBleHBlY3RzIDEuLjMgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJzY2FsZXhcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShhcmdzWzBdLCBvbmVOdW1iZXIoKSk7XG5cdFx0XHRjYXNlIFwic2NhbGV5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkob25lTnVtYmVyKCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInNjYWxlelwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKG9uZU51bWJlcigpLCBvbmVOdW1iZXIoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwic2NhbGUzZFwiOlxuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcInNjYWxlM2QoKSBleHBlY3RzIDMgYXJnc1wiKTtcblx0XHRcdFx0cmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGVcIjoge1xuXHRcdFx0XHRjb25zdCBSb3RhdGUgPSBjdG9yKFwiQ1NTUm90YXRlXCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgUm90YXRlKGFyZ3NbMF0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDQpIHJldHVybiBuZXcgUm90YXRlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJyb3RhdGUoKSBleHBlY3RzIDEgb3IgNCBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInJvdGF0ZXhcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkob25lTnVtYmVyKCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZXlcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkoY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgb25lTnVtYmVyKCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZXpcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkoY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgb25lTnVtYmVyKCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZTNkXCI6XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCAhPT0gNCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwicm90YXRlM2QoKSBleHBlY3RzIDQgYXJnc1wiKTtcblx0XHRcdFx0cmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG5cdFx0XHRjYXNlIFwic2tld1wiOiB7XG5cdFx0XHRcdGNvbnN0IFNrZXcgPSBjdG9yKFwiQ1NTU2tld1wiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFNrZXcoYXJnc1swXSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcImRlZ1wiLCAwKSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMikgcmV0dXJuIG5ldyBTa2V3KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJza2V3KCkgZXhwZWN0cyAxLi4yIGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwic2tld3hcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NrZXdYXCIpKShhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJza2V3eVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2tld1lcIikpKGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInBlcnNwZWN0aXZlXCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NQZXJzcGVjdGl2ZVwiKSkoYXJnc1swXSk7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIHRyYW5zZm9ybSBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHRcdH1cblx0fTtcblx0d2hpbGUgKGluZGV4IDwgdG9rZW5zLmxlbmd0aCkge1xuXHRcdGNvbnN0IHRva2VuID0gY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcImlkZW50aWZpZXJcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gbmFtZVwiKTtcblx0XHRjb25zdCBhcmdzID0gcGFyc2VBcmd1bWVudExpc3QoKTtcblx0XHRjb21wb25lbnRzLnB1c2goY3JlYXRlQ29tcG9uZW50KHRva2VuLnZhbHVlLCBhcmdzKSk7XG5cdH1cblx0aWYgKGNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFbXB0eSB0cmFuc2Zvcm0gbGlzdFwiKTtcblx0Y29uc3QgQ1NTVHJhbnNmb3JtVmFsdWVDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU1RyYW5zZm9ybVZhbHVlXCIpO1xuXHRpZiAodHlwZW9mIENTU1RyYW5zZm9ybVZhbHVlQ3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ1NTVHJhbnNmb3JtVmFsdWUgaXMgbm90IHN1cHBvcnRlZFwiKTtcblx0cmV0dXJuIHtcblx0XHRyb290OiBuZXcgQ1NTVHJhbnNmb3JtVmFsdWVDdG9yKGNvbXBvbmVudHMpLFxuXHRcdGxlYXZlc1xuXHR9O1xufTtcbnZhciBidWlsZFR5cGVkT01TdHlsZVZhbHVlID0gKHByb3BlcnR5LCBjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKSA9PiB7XG5cdGlmIChpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkocHJvcGVydHkpKSByZXR1cm4gYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZShjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKTtcblx0cmV0dXJuIGJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpO1xufTtcbnZhciBhZGRNdXRhYmxlTGVhdmVzID0gKHRhcmdldCwgbGVhdmVzKSA9PiB7XG5cdGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGFyZ2V0LmdldChsZWFmLnNsb3QubWFya2VyKTtcblx0XHRpZiAoY3VycmVudCkgY3VycmVudC5wdXNoKGxlYWYpO1xuXHRcdGVsc2UgdGFyZ2V0LnNldChsZWFmLnNsb3QubWFya2VyLCBbbGVhZl0pO1xuXHR9XG59O1xudmFyIGF0dGFjaExlYWZUYXJnZXRzID0gKGxlYXZlcywgcHJvcGVydHksIHJvb3QpID0+IHtcblx0cmV0dXJuIGxlYXZlcy5tYXAoKGxlYWYpID0+ICh7XG5cdFx0c2xvdDogbGVhZi5zbG90LFxuXHRcdHZhbHVlOiBsZWFmLnZhbHVlLFxuXHRcdHByb3BlcnR5LFxuXHRcdHJvb3Rcblx0fSkpO1xufTtcbnZhciBhcHBseVN0eWxlVGVtcGxhdGUgPSAoZWxlbWVudCwgY3NzVGV4dCwgdHlwZWRTbG90cywgcmVhY3RpdmVTbG90cywgdmFyaWFibGVzLCBhbmltYXRhYmxlU2xvdHMpID0+IHtcblx0Y29uc3QgcHJvYmUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdHByb2JlLnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xuXHRhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZShlbGVtZW50LCBcIlwiKTtcblx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudDtcblx0Y29uc3Qgc3R5bGVNYXAgPSB0YXJnZXQuYXR0cmlidXRlU3R5bGVNYXAgPz8gdGFyZ2V0LnN0eWxlTWFwO1xuXHRjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gZ2xvYmFsVGhpcztcblx0Y29uc3QgQ1NTU3R5bGVWYWx1ZUN0b3IgPSB3aW4/LkNTU1N0eWxlVmFsdWUgPz8gZ2xvYmFsVGhpcy5DU1NTdHlsZVZhbHVlO1xuXHRjb25zdCBtdXRhYmxlTGVhdmVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgcmVxdWlyZWRDU1NWYXJpYWJsZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdCBzdWJzY3JpcHRpb25zID0gW107XG5cdGNvbnN0IHByb3BlcnR5TW9kZU93bmVkID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Zm9yIChjb25zdCBzbG90IG9mIGFuaW1hdGFibGVTbG90cykge1xuXHRcdGxldCBwbGFuID0gbnVsbDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2JlLnN0eWxlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb2JlLnN0eWxlLml0ZW0oaSk7XG5cdFx0XHRjb25zdCBwYXJzZWRWYWx1ZSA9IHByb2JlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuXHRcdFx0aWYgKGlzRGlyZWN0U2xvdFZhbHVlKHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlcikpIHtcblx0XHRcdFx0cGxhbiA9IHtcblx0XHRcdFx0XHRtb2RlOiBcInByb3BlcnR5XCIsXG5cdFx0XHRcdFx0dGFyZ2V0OiBwcm9wZXJ0eVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUoc2xvdC52YWx1ZS52YWx1ZSkpO1xuXHRcdFx0XHRwcm9wZXJ0eU1vZGVPd25lZC5hZGQocHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChpc0RpcmVjdFNsb3RVbml0UHJvZHVjdChwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIsIHNsb3QubXVsdGlwbGllZEJ5VW5pdCkpIHtcblx0XHRcdFx0cGxhbiA9IHtcblx0XHRcdFx0XHRtb2RlOiBcInByb3BlcnR5XCIsXG5cdFx0XHRcdFx0dGFyZ2V0OiBwcm9wZXJ0eSxcblx0XHRcdFx0XHR1bml0OiBzbG90Lm11bHRpcGxpZWRCeVVuaXRcblx0XHRcdFx0fTtcblx0XHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgc2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlKHNsb3QudmFsdWUudmFsdWUsIHNsb3QubXVsdGlwbGllZEJ5VW5pdCkpO1xuXHRcdFx0XHRwcm9wZXJ0eU1vZGVPd25lZC5hZGQocHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFwbGFuKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsTnVtYmVyID0gTnVtYmVyKHNsb3QudmFsdWUudmFsdWUpIHx8IDA7XG5cdFx0XHRlbnN1cmVSZWdpc3RlcmVkTnVtYmVyUHJvcGVydHkod2luLCBzbG90Lm1hcmtlciwgaW5pdGlhbE51bWJlcik7XG5cdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHNsb3QubWFya2VyLCBTdHJpbmcoaW5pdGlhbE51bWJlcikpO1xuXHRcdFx0cGxhbiA9IHtcblx0XHRcdFx0bW9kZTogXCJjdXN0b20tcHJvcGVydHlcIixcblx0XHRcdFx0dGFyZ2V0OiBzbG90Lm1hcmtlclxuXHRcdFx0fTtcblx0XHR9XG5cdFx0c3Vic2NyaXB0aW9ucy5wdXNoKHNsb3QudmFsdWUuYXR0YWNoKGVsZW1lbnQsIHBsYW4pKTtcblx0fVxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcHJvYmUuc3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9iZS5zdHlsZS5pdGVtKGluZGV4KTtcblx0XHRpZiAocHJvcGVydHlNb2RlT3duZWQuaGFzKHByb3BlcnR5KSkgY29udGludWU7XG5cdFx0Y29uc3QgcGFyc2VkVmFsdWUgPSBwcm9iZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcblx0XHRjb25zdCBwcmlvcml0eSA9IHByb2JlLnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHkpO1xuXHRcdGNvbnN0IHVzZWRUeXBlZFNsb3RzID0gdHlwZWRTbG90cy5maWx0ZXIoKHNsb3QpID0+IGNvbnRhaW5zTWFya2VyKHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlcikpO1xuXHRcdGNvbnN0IHVzZWRSZWFjdGl2ZVNsb3RzID0gcmVhY3RpdmVTbG90cy5maWx0ZXIoKHNsb3QpID0+IGNvbnRhaW5zTWFya2VyKHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlcikpO1xuXHRcdGlmICh1c2VkVHlwZWRTbG90cy5sZW5ndGggPT09IDAgJiYgdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBwYXJzZWRWYWx1ZSwgcHJpb3JpdHkpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGNhblVzZVR5cGVkT00gPSBzdHlsZU1hcD8uc2V0ICYmICFwcmlvcml0eSAmJiAhcHJvcGVydHkuc3RhcnRzV2l0aChcIi0tXCIpO1xuXHRcdGxldCBhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSBmYWxzZTtcblx0XHRpZiAoY2FuVXNlVHlwZWRPTSAmJiB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPiAwKSB0cnkge1xuXHRcdFx0Y29uc3QgZGlyZWN0U2xvdCA9IHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA9PT0gMSAmJiB1c2VkVHlwZWRTbG90cy5sZW5ndGggPT09IDAgPyB1c2VkUmVhY3RpdmVTbG90c1swXSA6IG51bGw7XG5cdFx0XHRpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RVbml0UHJvZHVjdChwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIsIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCkpIHtcblx0XHRcdFx0Y29uc3QgbGlua2VkVmFsdWUgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCwgcmVhZFJlYWN0aXZlTnVtYmVyKGRpcmVjdFNsb3QpKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBsaW5rZWRWYWx1ZSk7XG5cdFx0XHRcdGFkZE11dGFibGVMZWF2ZXMobXV0YWJsZUxlYXZlcywgYXR0YWNoTGVhZlRhcmdldHMoW3tcblx0XHRcdFx0XHRzbG90OiBkaXJlY3RTbG90LFxuXHRcdFx0XHRcdHZhbHVlOiBsaW5rZWRWYWx1ZVxuXHRcdFx0XHR9XSwgcHJvcGVydHksIGxpbmtlZFZhbHVlKSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VmFsdWUocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyKSkge1xuXHRcdFx0XHRjb25zdCBsaW5rZWRWYWx1ZSA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgcmVhZFJlYWN0aXZlTnVtYmVyKGRpcmVjdFNsb3QpKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBsaW5rZWRWYWx1ZSk7XG5cdFx0XHRcdGFkZE11dGFibGVMZWF2ZXMobXV0YWJsZUxlYXZlcywgYXR0YWNoTGVhZlRhcmdldHMoW3tcblx0XHRcdFx0XHRzbG90OiBkaXJlY3RTbG90LFxuXHRcdFx0XHRcdHZhbHVlOiBsaW5rZWRWYWx1ZVxuXHRcdFx0XHR9XSwgcHJvcGVydHksIGxpbmtlZFZhbHVlKSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB0cmVlID0gYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZShwcm9wZXJ0eSwgcGFyc2VkVmFsdWUsIHdpbiwgdXNlZFJlYWN0aXZlU2xvdHMsIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCB0cmVlLnJvb3QpO1xuXHRcdFx0XHRhZGRNdXRhYmxlTGVhdmVzKG11dGFibGVMZWF2ZXMsIGF0dGFjaExlYWZUYXJnZXRzKHRyZWUubGVhdmVzLCBwcm9wZXJ0eSwgdHJlZS5yb290KSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7fVxuXHRcdGlmIChhcHBsaWVkVGhyb3VnaFR5cGVkT00pIGNvbnRpbnVlO1xuXHRcdGlmIChjYW5Vc2VUeXBlZE9NICYmIHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA9PT0gMCAmJiB1c2VkVHlwZWRTbG90cy5sZW5ndGggPiAwKSB0cnkge1xuXHRcdFx0Y29uc3QgZGlyZWN0U2xvdCA9IHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA9PT0gMSA/IHVzZWRUeXBlZFNsb3RzWzBdIDogbnVsbDtcblx0XHRcdGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFZhbHVlKHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlcikpIHtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBkaXJlY3RTbG90LnZhbHVlKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RVbml0UHJvZHVjdChwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIsIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCkpIHtcblx0XHRcdFx0Y29uc3QgQ1NTTWF0aFByb2R1Y3RDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU01hdGhQcm9kdWN0XCIpO1xuXHRcdFx0XHRpZiAodHlwZW9mIENTU01hdGhQcm9kdWN0Q3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ1NTTWF0aFByb2R1Y3QgaXMgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdFx0Y29uc3QgcHJvZHVjdCA9IG5ldyBDU1NNYXRoUHJvZHVjdEN0b3IoZGlyZWN0U2xvdC52YWx1ZSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQsIDEpKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBwcm9kdWN0KTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUocHJvcGVydHksIHBhcnNlZFZhbHVlLCB3aW4sIFtdLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCB0cmVlLnJvb3QpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRjb25zdCByZWNvbnN0cnVjdGVkID0gcmVwbGFjZVR5cGVkTWFya2VycyhwYXJzZWRWYWx1ZSwgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdFx0XHRcdHNldFBhcnNlZFR5cGVkVmFsdWUoc3R5bGVNYXAsIENTU1N0eWxlVmFsdWVDdG9yLCBwcm9wZXJ0eSwgcmVjb25zdHJ1Y3RlZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0aWYgKGFwcGxpZWRUaHJvdWdoVHlwZWRPTSkgY29udGludWU7XG5cdFx0Y29uc3QgcmVjb25zdHJ1Y3RlZCA9IHJlcGxhY2VUeXBlZE1hcmtlcnMocGFyc2VkVmFsdWUsIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCByZWNvbnN0cnVjdGVkLCBwcmlvcml0eSk7XG5cdFx0Zm9yIChjb25zdCBzbG90IG9mIHVzZWRSZWFjdGl2ZVNsb3RzKSByZXF1aXJlZENTU1ZhcmlhYmxlcy5hZGQoc2xvdC5tYXJrZXIpO1xuXHR9XG5cdGZvciAoY29uc3Qgc2xvdCBvZiByZWFjdGl2ZVNsb3RzKSB7XG5cdFx0Y29uc3QgbGVhdmVzID0gbXV0YWJsZUxlYXZlcy5nZXQoc2xvdC5tYXJrZXIpID8/IFtdO1xuXHRcdGNvbnN0IG5lZWRzQ1NTVmFyaWFibGUgPSByZXF1aXJlZENTU1ZhcmlhYmxlcy5oYXMoc2xvdC5tYXJrZXIpO1xuXHRcdGlmIChsZWF2ZXMubGVuZ3RoID09PSAwICYmICFuZWVkc0NTU1ZhcmlhYmxlKSBjb250aW51ZTtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBiaW5kV2l0aChlbGVtZW50LCBzbG90Lm1hcmtlciwgc2xvdC52YWx1ZSwgZnVuY3Rpb24oLi4uYXJncykge1xuXHRcdFx0aWYgKGxlYXZlcy5sZW5ndGggPiAwKSB0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0VmFsdWUgPSByZWFkUmVhY3RpdmVOdW1iZXIoc2xvdCk7XG5cdFx0XHRcdGNvbnN0IGRpcnR5Um9vdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG5cdFx0XHRcdFx0bGVhZi52YWx1ZS52YWx1ZSA9IG5leHRWYWx1ZTtcblx0XHRcdFx0XHRkaXJ0eVJvb3RzLnNldChsZWFmLnByb3BlcnR5LCBsZWFmLnJvb3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzdHlsZU1hcD8uc2V0KSBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHJvb3RdIG9mIGRpcnR5Um9vdHMpIHN0eWxlTWFwLnNldChwcm9wZXJ0eU5hbWUsIHJvb3QpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0aWYgKG5lZWRzQ1NTVmFyaWFibGUpIGhhbmRsZVN0eWxlQ2hhbmdlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0pO1xuXHRcdHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHR9XG5cdGZvciAoY29uc3QgbmFtZSBvZiByZXF1aXJlZENTU1ZhcmlhYmxlcykge1xuXHRcdGlmIChyZWFjdGl2ZVNsb3RzLnNvbWUoKHNsb3QpID0+IHNsb3QubWFya2VyID09PSBuYW1lKSkgY29udGludWU7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YXJpYWJsZXMuZ2V0KG5hbWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSBjb250aW51ZTtcblx0XHRzdWJzY3JpcHRpb25zLnB1c2goYmluZFdpdGgoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGhhbmRsZVN0eWxlQ2hhbmdlKSk7XG5cdH1cblx0cHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnMpIHN1YnNjcmlwdGlvbj8uKCk7XG5cdH07XG59O1xudmFyIGNvbXBsaWxlU3RhdGljQ1NTVGV4dCA9IChmb3JSZXR1cm4pID0+IHtcblx0Y29uc3QgW2FwcGx5LCBwcm9wZXJ0aWVzLCB2YXJpYWJsZXNdID0gZm9yUmV0dXJuO1xuXHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0YXBwbHkoZWxlbWVudCk7XG5cdHJldHVybiBlbGVtZW50LnN0eWxlLmNzc1RleHQ7XG59O1xudmFyIFMgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdGNvbnN0IHRlbXBsYXRlSWQgPSBzdHlsZVRlbXBsYXRlSWQrKztcblx0Y29uc3QgcHJvcGVydGllcyA9IFtdO1xuXHRjb25zdCB2YXJpYWJsZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCB0eXBlZFNsb3RzID0gW107XG5cdGNvbnN0IHJlYWN0aXZlU2xvdHMgPSBbXTtcblx0Y29uc3QgcGFydHMgPSBbXTtcblx0Y29uc3QgYW5pbWF0YWJsZVNsb3RzID0gW107XG5cdGNvbnN0IGNvbnN1bWVkID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKS5maWxsKDApO1xuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5ncy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRwYXJ0cy5wdXNoKHN0cmluZ3NbaW5kZXhdLnNsaWNlKGNvbnN1bWVkW2luZGV4XSkpO1xuXHRcdGlmIChpbmRleCA+PSB2YWx1ZXMubGVuZ3RoKSBjb250aW51ZTtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpbmRleF07XG5cdFx0Y29uc3QgbmV4dFRleHQgPSBzdHJpbmdzW2luZGV4ICsgMV0gPz8gXCJcIjtcblx0XHRjb25zdCBhdHRhY2hlZFVuaXQgPSByZWFkQXR0YWNoZWRDU1NVbml0KG5leHRUZXh0KTtcblx0XHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgbWFya2VyID0gYC0tZmVzdC10eXBlZC0ke3RlbXBsYXRlSWR9LSR7dHlwZWRTbG90cy5sZW5ndGh9YDtcblx0XHRcdHR5cGVkU2xvdHMucHVzaCh7XG5cdFx0XHRcdG1hcmtlcixcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdG11bHRpcGxpZWRCeVVuaXQ6IGF0dGFjaGVkVW5pdD8ubm9ybWFsaXplZFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYXR0YWNoZWRVbml0KSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYGNhbGModmFyKCR7bWFya2VyfSkgKiAxJHthdHRhY2hlZFVuaXQuYXV0aG9yZWR9KWApO1xuXHRcdFx0XHRjb25zdW1lZFtpbmRleCArIDFdICs9IGF0dGFjaGVkVW5pdC5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgcGFydHMucHVzaChgdmFyKCR7bWFya2VyfSlgKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoaXNBbmltYXRhYmxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRjb25zdCBtYXJrZXIgPSBgLS1mZXN0LWFuaW0tJHt0ZW1wbGF0ZUlkfS0ke2FuaW1hdGFibGVTbG90cy5sZW5ndGh9YDtcblx0XHRcdGlmIChhdHRhY2hlZFVuaXQpIHtcblx0XHRcdFx0cGFydHMucHVzaChgY2FsYyh2YXIoJHttYXJrZXJ9KSAqIDEke2F0dGFjaGVkVW5pdC5hdXRob3JlZH0pYCk7XG5cdFx0XHRcdGNvbnN1bWVkW2luZGV4ICsgMV0gKz0gYXR0YWNoZWRVbml0Lmxlbmd0aDtcblx0XHRcdH0gZWxzZSBwYXJ0cy5wdXNoKGB2YXIoJHttYXJrZXJ9KWApO1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGBAcHJvcGVydHkgJHttYXJrZXJ9IHsgc3ludGF4OiBcIjxudW1iZXI+XCI7IGluaXRpYWwtdmFsdWU6ICR7TnVtYmVyKHZhbHVlLnZhbHVlKSB8fCAwfTsgaW5oZXJpdHM6IGZhbHNlOyB9O2ApO1xuXHRcdFx0YW5pbWF0YWJsZVNsb3RzLnB1c2goe1xuXHRcdFx0XHRtYXJrZXIsXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRtdWx0aXBsaWVkQnlVbml0OiBhdHRhY2hlZFVuaXQ/Lm5vcm1hbGl6ZWRcblx0XHRcdH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IG1hcmtlciA9IGAtLWZlc3QtcmVmLSR7dGVtcGxhdGVJZH0tJHtyZWFjdGl2ZVNsb3RzLmxlbmd0aH1gO1xuXHRcdFx0cmVhY3RpdmVTbG90cy5wdXNoKHtcblx0XHRcdFx0bWFya2VyLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bXVsdGlwbGllZEJ5VW5pdDogYXR0YWNoZWRVbml0Py5ub3JtYWxpemVkXG5cdFx0XHR9KTtcblx0XHRcdGlmIChhdHRhY2hlZFVuaXQpIHtcblx0XHRcdFx0cGFydHMucHVzaChgY2FsYyh2YXIoJHttYXJrZXJ9KSAqIDEke2F0dGFjaGVkVW5pdC5hdXRob3JlZH0pYCk7XG5cdFx0XHRcdGNvbnN1bWVkW2luZGV4ICsgMV0gKz0gYXR0YWNoZWRVbml0Lmxlbmd0aDtcblx0XHRcdH0gZWxzZSBwYXJ0cy5wdXNoKGB2YXIoJHttYXJrZXJ9KWApO1xuXHRcdFx0Y29uc3QgaW5pdGlhbFZhbHVlID0gZ2V0UmVhY3RpdmVJbml0aWFsTnVtYmVyKHZhbHVlKTtcblx0XHRcdHByb3BlcnRpZXMucHVzaChgQHByb3BlcnR5ICR7bWFya2VyfSB7IHN5bnRheDogXCI8bnVtYmVyPlwiOyBpbml0aWFsLXZhbHVlOiAke2luaXRpYWxWYWx1ZX07IGluaGVyaXRzOiB0cnVlOyB9O2ApO1xuXHRcdFx0dmFyaWFibGVzLnNldChtYXJrZXIsIHZhbHVlKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiICYmIHZhbHVlICE9IG51bGwgJiYgU3RyaW5nKHZhbHVlKS50cmltKCkgIT09IFwiXCIpIHBhcnRzLnB1c2goU3RyaW5nKHZhbHVlKSk7XG5cdH1cblx0Y29uc3QgZm9yUmV0dXJuID0gW1xuXHRcdChlbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gYXBwbHlTdHlsZVRlbXBsYXRlKGVsZW1lbnQsIHBhcnRzLmpvaW4oXCJcIiksIHR5cGVkU2xvdHMsIHJlYWN0aXZlU2xvdHMsIHZhcmlhYmxlcywgYW5pbWF0YWJsZVNsb3RzKTtcblx0XHR9LFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0dmFyaWFibGVzXG5cdF07XG5cdGZvclJldHVybltTeW1ib2wudG9TdHJpbmdUYWddID0gKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdGZvclJldHVybltTeW1ib2wudG9QcmltaXRpdmVdID0gKHR5cGUpID0+IHtcblx0XHRpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRcdHJldHVybiBmb3JSZXR1cm5bMF07XG5cdH07XG5cdGZvclJldHVybi50b1N0cmluZyA9ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRmb3JSZXR1cm4udmFsdWVPZiA9ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm9yUmV0dXJuLCBcImNzc1RleHRcIiwge1xuXHRcdGdldDogKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybiksXG5cdFx0c2V0OiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnNvbGUubG9nKFwic2V0IGNzc1RleHRcIiwgdmFsdWUpO1xuXHRcdFx0Y29uc3QgW2FwcGx5LCBwcm9wZXJ0aWVzLCB2YXJpYWJsZXNdID0gZm9yUmV0dXJuO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRhcHBseShlbGVtZW50KTtcblx0XHRcdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHZhbHVlO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGVudW1lcmFibGU6IHRydWVcblx0fSk7XG5cdHJldHVybiBmb3JSZXR1cm47XG59O1xudmFyIGNzcyA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcblx0cmV0dXJuIFMoc3RyaW5ncywgLi4udmFsdWVzKTtcbn07XG52YXIgc3BsaXRJbmxpbmVTdHlsZVBsYWNlaG9sZGVycyA9IChzb3VyY2UsIGF0dHJpYnV0ZXMpID0+IHtcblx0Y29uc3Qgc3RyaW5ncyA9IFtdO1xuXHRjb25zdCB2YWx1ZXMgPSBbXTtcblx0Y29uc3QgcGF0dGVybiA9IC8jXFx7KFxcZCspXFx9L2c7XG5cdGxldCBjdXJzb3IgPSAwO1xuXHRsZXQgbWF0Y2g7XG5cdHdoaWxlICgobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlKSkgIT0gbnVsbCkge1xuXHRcdGNvbnN0IGF0dHJpYnV0ZUluZGV4ID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG5cdFx0aWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhdHRyaWJ1dGVJbmRleCkgfHwgYXR0cmlidXRlSW5kZXggPCAwKSBjb250aW51ZTtcblx0XHRzdHJpbmdzLnB1c2goc291cmNlLnNsaWNlKGN1cnNvciwgbWF0Y2guaW5kZXgpKTtcblx0XHR2YWx1ZXMucHVzaChhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSk7XG5cdFx0Y3Vyc29yID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cdH1cblx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXHRzdHJpbmdzLnB1c2goc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRyZXR1cm4ge1xuXHRcdHN0cmluZ3MsXG5cdFx0dmFsdWVzXG5cdH07XG59O1xudmFyIGpvaW5TdGF0aWNJbmxpbmVTdHlsZSA9IChzdHJpbmdzLCB2YWx1ZXMpID0+IHtcblx0bGV0IHJlc3VsdCA9IHN0cmluZ3NbMF0gPz8gXCJcIjtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlcy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpbmRleF07XG5cdFx0aWYgKHZhbHVlICE9IG51bGwpIHJlc3VsdCArPSBTdHJpbmcodmFsdWUpO1xuXHRcdHJlc3VsdCArPSBzdHJpbmdzW2luZGV4ICsgMV0gPz8gXCJcIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcbnZhciBjb21waWxlSW5saW5lU3R5bGVBdHRyaWJ1dGUgPSAoc291cmNlLCBhdHRyaWJ1dGVzKSA9PiB7XG5cdGNvbnN0IHBhcnNlZCA9IHNwbGl0SW5saW5lU3R5bGVQbGFjZWhvbGRlcnMoc291cmNlLCBhdHRyaWJ1dGVzKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuXHRjb25zdCB7IHN0cmluZ3MsIHZhbHVlcyB9ID0gcGFyc2VkO1xuXHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiAoc3RyaW5nc1swXSA/PyBcIlwiKS50cmltKCkgPT09IFwiXCIgJiYgKHN0cmluZ3NbMV0gPz8gXCJcIikudHJpbSgpID09PSBcIlwiICYmICFpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbih2YWx1ZXNbMF0pICYmICFpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWVzWzBdKSkge1xuXHRcdGlmIChpc1N0eWxlQmluZGluZyh2YWx1ZXNbMF0pKSByZXR1cm4ge1xuXHRcdFx0a2luZDogXCJ0ZW1wbGF0ZVwiLFxuXHRcdFx0YmluZGluZzogdmFsdWVzWzBdXG5cdFx0fTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0a2luZDogXCJkaXJlY3RcIixcblx0XHRcdHZhbHVlOiB2YWx1ZXNbMF1cblx0XHR9O1xuXHR9XG5cdGlmICh2YWx1ZXMuc29tZSgodmFsdWUpID0+IGlzUmVhY3RpdmVTdHlsZVZhbHVlKHZhbHVlKSB8fCBpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSkgcmV0dXJuIHtcblx0XHRraW5kOiBcInRlbXBsYXRlXCIsXG5cdFx0YmluZGluZzogUyhzdHJpbmdzLCAuLi52YWx1ZXMpXG5cdH07XG5cdGlmICh2YWx1ZXMuZXZlcnkoaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24pKSByZXR1cm4ge1xuXHRcdGtpbmQ6IFwic3RhdGljXCIsXG5cdFx0Y3NzVGV4dDogam9pblN0YXRpY0lubGluZVN0eWxlKHN0cmluZ3MsIHZhbHVlcylcblx0fTtcblx0cmV0dXJuIHtcblx0XHRraW5kOiBcInRlbXBsYXRlXCIsXG5cdFx0YmluZGluZzogUyhzdHJpbmdzLCAuLi52YWx1ZXMpXG5cdH07XG59O1xudmFyIGJpbmRTdHlsZSA9IChlbGVtZW50LCBzdHlsZWQpID0+IHtcblx0Y29uc3QgYXBwbHkgPSBBcnJheS5pc0FycmF5KHN0eWxlZCkgPyBzdHlsZWRbMF0gOiBzdHlsZWQ7XG5cdGlmICh0eXBlb2YgYXBwbHkgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuICgpID0+IHt9O1xuXHRjb25zdCByZXN1bHQgPSBhcHBseShlbGVtZW50KTtcblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXN1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmVzdWx0Py51bmJpbmQ/LigpO1xuXHR9O1xufTtcbnZhciBlbnN1cmVSZWdpc3RlcmVkTnVtYmVyUHJvcGVydHkgPSAod2luLCBuYW1lLCBpbml0aWFsVmFsdWUpID0+IHtcblx0aWYgKHJlZ2lzdGVyZWRQcm9wZXJ0aWVzLmhhcyhuYW1lKSkgcmV0dXJuO1xuXHRyZWdpc3RlcmVkUHJvcGVydGllcy5hZGQobmFtZSk7XG5cdHRyeSB7XG5cdFx0KHdpbj8uQ1NTID8/IENTUyk/LnJlZ2lzdGVyUHJvcGVydHk/Lih7XG5cdFx0XHRuYW1lLFxuXHRcdFx0c3ludGF4OiBcIjxudW1iZXI+XCIsXG5cdFx0XHRpbml0aWFsVmFsdWU6IFN0cmluZyhpbml0aWFsVmFsdWUpLFxuXHRcdFx0aW5oZXJpdHM6IGZhbHNlXG5cdFx0fSk7XG5cdH0gY2F0Y2gge31cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9BbmltYXRlLnRzXG52YXIgcGFyc2VQcm9wZXJ0eUxpc3QgPSAob3B0aW9ucywgZXh0cmEpID0+IHtcblx0aWYgKGV4dHJhIGluc3RhbmNlb2YgTWFwICYmIGV4dHJhLnNpemUgPiAwKSByZXR1cm4gQXJyYXkuZnJvbShleHRyYS52YWx1ZXMoKSk7XG5cdGNvbnN0IGZyb21LZXlmcmFtZXMgPSBvcHRpb25zLmtleWZyYW1lcz8ucHJvcGVydGllcztcblx0aWYgKGZyb21LZXlmcmFtZXMgaW5zdGFuY2VvZiBNYXAgJiYgZnJvbUtleWZyYW1lcy5zaXplID4gMCkgcmV0dXJuIEFycmF5LmZyb20oZnJvbUtleWZyYW1lcy52YWx1ZXMoKSk7XG5cdGNvbnN0IGZyb21TdHJpbmcgPSBbXTtcblx0aWYgKHR5cGVvZiBvcHRpb25zLnByb3BlcnRpZXMgPT0gXCJzdHJpbmdcIikge1xuXHRcdGNvbnN0IHByb3BzID0gb3B0aW9ucy5wcm9wZXJ0aWVzPy50cmltPy4oKT8uc3BsaXQ/LihcIjtcIik7XG5cdFx0ZnJvbVN0cmluZy5wdXNoKC4uLkFycmF5LmZyb20ocHJvcHMgfHwgW10pPy5tYXA/LigoJHBhaXIpID0+IHtcblx0XHRcdGlmICgkcGFpcj8uaW5jbHVkZXM/LihcIjpcIikpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAoJHBhaXI/LnNwbGl0Py4oXCI6XCIpID8/IFtdKT8uc2xpY2U/LigxLCAtMSk/LmpvaW4/LihcIjpcIik7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cHJvcGVydHk6ICgkcGFpcj8uWzBdKT8udHJpbT8uKCksXG5cdFx0XHRcdFx0dmFsdWVzOiBbdmFsdWU/LnRyaW0/LigpXVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk/LmZpbHRlcj8uKChhKSA9PiBhICE9IG51bGwpIHx8IFtdKTtcblx0XHRyZXR1cm4gZnJvbVN0cmluZztcblx0fVxuXHRpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnByb3BlcnRpZXMpKSByZXR1cm4gb3B0aW9ucy5wcm9wZXJ0aWVzLm1hcCgoaXRlbSwgaSkgPT4ge1xuXHRcdGlmIChpdGVtICYmIEFycmF5LmlzQXJyYXkoaXRlbS52YWx1ZXMpICYmIGl0ZW0ucHJvcGVydHkpIHJldHVybiBpdGVtO1xuXHRcdGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhpdGVtIHx8IHt9KS5maWx0ZXIoKFtrXSkgPT4gayAhPT0gXCJvZmZzZXRcIiAmJiBrICE9PSBcImVhc2luZ1wiKTtcblx0XHRjb25zdCB2YWx1ZSA9IGVudHJpZXNbMF0/LlsxXTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJvcGVydHk6IGVudHJpZXNbMF0/LlswXSA/PyBgcCR7aX1gLFxuXHRcdFx0dmFsdWVzOiB2YWx1ZSA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXHRcdH07XG5cdH0pO1xuXHRpZiAob3B0aW9ucy5wcm9wZXJ0aWVzICYmIHR5cGVvZiBvcHRpb25zLnByb3BlcnRpZXMgPT09IFwib2JqZWN0XCIpIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRpb25zLnByb3BlcnRpZXMpLm1hcCgoW3Byb3BlcnR5LCB2YWx1ZXNdKSA9PiAoe1xuXHRcdHByb3BlcnR5LFxuXHRcdHZhbHVlczogQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc11cblx0fSkpO1xuXHRyZXR1cm4gZnJvbVN0cmluZztcbn07XG52YXIgcGFyc2VBbmltYXRpb25UZW1wbGF0ZSA9IChzdHJpbmdzLCB2YWx1ZXMpID0+IHtcblx0Y29uc3QgcHJvcGVydGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGxldCBmdWxsVGV4dCA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdGZ1bGxUZXh0ICs9IHN0cmluZ3NbaV07XG5cdFx0aWYgKGkgPCB2YWx1ZXMubGVuZ3RoKSBmdWxsVGV4dCArPSBgX19TTE9UXyR7aX1fX2A7XG5cdH1cblx0Y29uc3QgZGVjbGFyYXRpb25zID0gZnVsbFRleHQuc3BsaXQoXCI7XCIpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcblx0Zm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcblx0XHRjb25zdCBjb2xvbkluZGV4ID0gZGVjbGFyYXRpb24uaW5kZXhPZihcIjpcIik7XG5cdFx0aWYgKGNvbG9uSW5kZXggPT09IC0xKSBjb250aW51ZTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGRlY2xhcmF0aW9uLnNsaWNlKDAsIGNvbG9uSW5kZXgpLnRyaW0oKTtcblx0XHRjb25zdCB2YWx1ZVRleHQgPSBkZWNsYXJhdGlvbi5zbGljZShjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xuXHRcdGNvbnN0IHNsb3RNYXRjaCA9IC9fX1NMT1RfKFxcZCspX18vLmV4ZWModmFsdWVUZXh0KTtcblx0XHRpZiAoIXNsb3RNYXRjaCkgY29udGludWU7XG5cdFx0Y29uc3Qgc2xvdFZhbHVlID0gdmFsdWVzW3BhcnNlSW50KHNsb3RNYXRjaFsxXSwgMTApXTtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc2xvdFZhbHVlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgQVxcYCR7cHJvcGVydHl9XFxgIGV4cGVjdHMgYW4gYXJyYXkgb2YgdmFsdWVzLCBnb3QgJHt0eXBlb2Ygc2xvdFZhbHVlfWApO1xuXHRcdHByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB7XG5cdFx0XHRwcm9wZXJ0eSxcblx0XHRcdHZhbHVlczogc2xvdFZhbHVlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHsgcHJvcGVydGllcyB9O1xufTtcbnZhciBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzID0gKHZhbHVlcykgPT4ge1xuXHRjb25zdCByZXNvbHZlZCA9IFtdO1xuXHRjb25zdCByZWFjdGl2ZUluZGljZXMgPSBbXTtcblx0bGV0IGhhc1JlYWN0aXZlID0gZmFsc2U7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG5cdFx0aWYgKGlzUmVhY3RpdmVTdHlsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0aGFzUmVhY3RpdmUgPSB0cnVlO1xuXHRcdFx0cmVhY3RpdmVJbmRpY2VzLnB1c2goaSk7XG5cdFx0XHRyZXNvbHZlZC5wdXNoKHZhbHVlLnZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHJlc29sdmVkLnB1c2godmFsdWUpO1xuXHRcdGVsc2UgcmVzb2x2ZWQucHVzaCh2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRyZXNvbHZlZCxcblx0XHRoYXNSZWFjdGl2ZSxcblx0XHRyZWFjdGl2ZUluZGljZXNcblx0fTtcbn07XG52YXIgYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMgPSAob3B0aW9ucywgZXh0cmEpID0+IHtcblx0Y29uc3QgZ2xvYmFsT2Zmc2V0cyA9IG9wdGlvbnM/Lm9mZnNldHM7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMsIGV4dHJhKTtcblx0aWYgKHByb3BlcnR5TGlzdC5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGFuaW1hdGFibGUgcHJvcGVydGllcyBmb3VuZCBpbiBBIHRlbXBsYXRlXCIpO1xuXHRjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heCguLi5wcm9wZXJ0eUxpc3QubWFwKChwKSA9PiBwLnZhbHVlcy5sZW5ndGgpKTtcblx0Y29uc3Qgb2Zmc2V0cyA9IChnbG9iYWxPZmZzZXRzPy5sZW5ndGggPiAxID8gZ2xvYmFsT2Zmc2V0cyA6IG51bGwpIHx8IEFycmF5LmZyb20oeyBsZW5ndGg6IG1heExlbmd0aCB9LCAoXywgaSkgPT4gaSAvIChtYXhMZW5ndGggLSAxKSk7XG5cdGNvbnN0IGZyYW1lcyA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZnJhbWUgPSB7IG9mZnNldDogb2Zmc2V0c1tpXSA/PyBpIC8gKG1heExlbmd0aCAtIDEpIH07XG5cdFx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdFx0Y29uc3QgeyByZXNvbHZlZCB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0XHRjb25zdCBrZWJhYlByb3AgPSBjYW1lbFRvS2ViYWIocHJvcC5wcm9wZXJ0eSk7XG5cdFx0XHRsZXQgdmFsdWUgPSByZXNvbHZlZFtNYXRoLm1pbihpLCByZXNvbHZlZC5sZW5ndGggLSAxKV07XG5cdFx0XHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0ZnJhbWVba2ViYWJQcm9wXSA9IHZhbHVlO1xuXHRcdH1cblx0XHRmcmFtZXMucHVzaChmcmFtZSk7XG5cdH1cblx0cmV0dXJuIGZyYW1lcztcbn07XG52YXIgYnVpbGRBbmltYXRpb25UaW1pbmcgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBkdXJhdGlvbiA9IHBhcnNlVGltZShvcHRpb25zLmR1cmF0aW9uID8/IDMwMCk7XG5cdGNvbnN0IGRlbGF5ID0gcGFyc2VUaW1lKG9wdGlvbnMuZGVsYXkgPz8gMCk7XG5cdGNvbnN0IGl0ZXJhdGlvbnMgPSBub3JtYWxpemVJdGVyYXRpb25Db3VudChvcHRpb25zLml0ZXJhdGlvbkNvdW50KTtcblx0cmV0dXJuIHtcblx0XHRkdXJhdGlvbixcblx0XHRkZWxheSxcblx0XHRjb21wb3NpdGU6IG9wdGlvbnMuY29tcG9zaXRlIHx8IFwicmVwbGFjZVwiLFxuXHRcdGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMgPT09IFwiSW5maW5pdHlcIiA/IEluZmluaXR5IDogaXRlcmF0aW9ucyxcblx0XHRmaWxsOiBvcHRpb25zLmZpbGxNb2RlID8/IFwibm9uZVwiLFxuXHRcdGRpcmVjdGlvbjogb3B0aW9ucy5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRlYXNpbmc6IHR5cGVvZiBvcHRpb25zLmVhc2luZyA9PT0gXCJzdHJpbmdcIiA/IG9wdGlvbnMuZWFzaW5nIDogXCJsaW5lYXJcIixcblx0XHR0aW1lbGluZTogb3B0aW9ucy50aW1lbGluZVxuXHR9O1xufTtcbnZhciBjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbiA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMpO1xuXHRjb25zdCBzdWJzY3JpcHRpb25zID0gW107XG5cdGNvbnN0IGZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhvcHRpb25zKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdGNvbnN0IHsgaGFzUmVhY3RpdmUsIHJlYWN0aXZlSW5kaWNlcyB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0aWYgKCFoYXNSZWFjdGl2ZSkgY29udGludWU7XG5cdFx0Zm9yIChjb25zdCBpbmRleCBvZiByZWFjdGl2ZUluZGljZXMpIHtcblx0XHRcdGNvbnN0IHJlYWN0aXZlVmFsdWUgPSBwcm9wLnZhbHVlc1tpbmRleF07XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBiaW5kV2l0aChlbGVtZW50LCBgLS1hbmltLSR7cHJvcC5wcm9wZXJ0eX0tJHtpbmRleH1gLCByZWFjdGl2ZVZhbHVlLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0ZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGltZSA9IGFuaW1hdGlvbi5jdXJyZW50VGltZTtcblx0XHRcdFx0YW5pbWF0aW9uLmVmZmVjdCA9IG5ldyBLZXlmcmFtZUVmZmVjdChlbGVtZW50LCBuZXdGcmFtZXMsIHRpbWluZyk7XG5cdFx0XHRcdGlmIChjdXJyZW50VGltZSAhPT0gbnVsbCkgYW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG5cdFx0XHR9KTtcblx0XHRcdHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHRcdH1cblx0fVxuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHRzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbixcblx0XHRjbGVhbnVwXG5cdH07XG59O1xudmFyIEEgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdHJldHVybiBwYXJzZUFuaW1hdGlvblRlbXBsYXRlKHN0cmluZ3MsIHZhbHVlcyk7XG59O1xudmFyIGRvQW5pbWF0aW9uID0gKGVsZW1lbnQsIGNvbmZpZywga2V5ZnJhbWVzKSA9PiB7XG5cdGNvbnN0IGNhbkFuaW1hdGUgPSBlbGVtZW50ICE9IG51bGwgJiYgdHlwZW9mIGVsZW1lbnQuYW5pbWF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuXHRpZiAoISh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkgJiYgIWNhbkFuaW1hdGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkb0FuaW1hdGlvbiByZXF1aXJlcyBhbiBFbGVtZW50XCIpO1xuXHRpZiAocGFyc2VQcm9wZXJ0eUxpc3QoY29uZmlnLCBrZXlmcmFtZXMpLnNvbWUoKHByb3ApID0+IHtcblx0XHRjb25zdCB7IGhhc1JlYWN0aXZlIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRyZXR1cm4gaGFzUmVhY3RpdmU7XG5cdH0pKSByZXR1cm4gY3JlYXRlUmVhY3RpdmVBbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0Y29uc3QgZnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMoY29uZmlnLCBrZXlmcmFtZXMpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhjb25maWcpO1xuXHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUoZnJhbWVzLCB0aW1pbmcpO1xuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRhbmltYXRpb24sXG5cdFx0Y2xlYW51cFxuXHR9O1xufTtcbnZhciBhbmltYXRlID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcGVydGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlY29yZCA9IG9wdGlvbnMucHJvcGVydGllcztcblx0aWYgKHJlY29yZCA9PSBudWxsIHx8IHR5cGVvZiByZWNvcmQgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheShyZWNvcmQpKSByZXR1cm4gZG9BbmltYXRpb24oZWxlbWVudCwgb3B0aW9ucyk7XG5cdGZvciAoY29uc3QgW3Byb3BlcnR5LCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgYW5pbWF0ZSgpIGV4cGVjdHMgYXJyYXlzIG9mIHZhbHVlcywgZ290ICR7dHlwZW9mIHZhbHVlc30gZm9yICR7cHJvcGVydHl9YCk7XG5cdFx0cHJvcGVydGllcy5zZXQocHJvcGVydHksIHtcblx0XHRcdHByb3BlcnR5LFxuXHRcdFx0dmFsdWVzXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGRvQW5pbWF0aW9uKGVsZW1lbnQsIHsgLi4ub3B0aW9ucyB9LCBwcm9wZXJ0aWVzKTtcbn07XG52YXIgZGVmaW5lQW5pbWF0aW9uID0gKG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIChlbGVtZW50KSA9PiB7XG5cdFx0cmV0dXJuIGRvQW5pbWF0aW9uKGVsZW1lbnQsIG9wdGlvbnMpO1xuXHR9O1xufTtcbnZhciBzZXF1ZW5jZUFuaW1hdGlvbnMgPSBhc3luYyAoZWxlbWVudCwgc2VxdWVuY2UpID0+IHtcblx0Zm9yIChjb25zdCBjb25maWcgb2Ygc2VxdWVuY2UpIHtcblx0XHRjb25zdCB7IGFuaW1hdGlvbiB9ID0gZG9BbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0XHRhd2FpdCBhbmltYXRpb24uZmluaXNoZWQ7XG5cdH1cbn07XG52YXIgcGFyYWxsZWxBbmltYXRpb25zID0gKGVsZW1lbnQsIGFuaW1hdGlvbnMpID0+IHtcblx0Y29uc3QgcmVzdWx0cyA9IGFuaW1hdGlvbnMubWFwKChjb25maWcpID0+IGRvQW5pbWF0aW9uKGVsZW1lbnQsIGNvbmZpZykpO1xuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdHJlc3VsdHMuZm9yRWFjaCgocikgPT4gci5jbGVhbnVwKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbnM6IHJlc3VsdHMubWFwKChyKSA9PiByLmFuaW1hdGlvbiksXG5cdFx0Y2xlYW51cFxuXHR9O1xufTtcbnZhciBzdGFnZ2VyQW5pbWF0aW9uID0gKGVsZW1lbnRzLCBvcHRpb25zLCBzdGFnZ2VyRGVsYXkgPSAxMDApID0+IHtcblx0cmV0dXJuIGVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBkZWxheSA9IHBhcnNlVGltZShvcHRpb25zPy5kZWxheSA/PyAwKSArIGluZGV4ICogc3RhZ2dlckRlbGF5O1xuXHRcdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCB7XG5cdFx0XHQuLi5vcHRpb25zLFxuXHRcdFx0ZGVsYXlcblx0XHR9KTtcblx0fSk7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY3NzLWFuaW1hdGlvbi50c1xudmFyIGlzUmVhY3RpdmVUcmlnZ2VyID0gKHQpID0+IHQgIT0gbnVsbCAmJiB0eXBlb2YgdCA9PT0gXCJvYmplY3RcIiAmJiAhaXNTY3JvbGxEcml2ZW4odCkgJiYgIWlzVmlld0RyaXZlbih0KSAmJiBcInZhbHVlXCIgaW4gdDtcbnZhciBhc1Byb3BlcnR5TGlzdCA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGtmID0gb3B0aW9ucy5rZXlmcmFtZXM/LnByb3BlcnRpZXM7XG5cdGlmIChrZiBpbnN0YW5jZW9mIE1hcCkgcmV0dXJuIEFycmF5LmZyb20oa2YudmFsdWVzKCkpO1xuXHRjb25zdCBwcm9wcyA9IG9wdGlvbnMucHJvcGVydGllcztcblx0aWYgKHR5cGVvZiBwcm9wcyA9PT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcInN0cmluZyBwcm9wZXJ0aWVzIGFyZSBub3QgdXNlZCBvbiB0aGUgQ1NTIGNvbXBpbGUgcGF0aFwiKTtcblx0aWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSByZXR1cm4gcHJvcHMubWFwKChpdGVtLCBpKSA9PiB7XG5cdFx0aWYgKGl0ZW0gJiYgQXJyYXkuaXNBcnJheShpdGVtLnZhbHVlcykgJiYgaXRlbS5wcm9wZXJ0eSkgcmV0dXJuIGl0ZW07XG5cdFx0Y29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGl0ZW0gfHwge30pLmZpbHRlcigoW2tdKSA9PiBrICE9PSBcIm9mZnNldFwiICYmIGsgIT09IFwiZWFzaW5nXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRwcm9wZXJ0eTogZW50cmllc1swXT8uWzBdID8/IGBwJHtpfWAsXG5cdFx0XHR2YWx1ZXM6IGVudHJpZXNbMF0gPyBbZW50cmllc1swXVsxXV0gOiBbXVxuXHRcdH07XG5cdH0pO1xuXHRpZiAocHJvcHMgJiYgdHlwZW9mIHByb3BzID09PSBcIm9iamVjdFwiKSByZXR1cm4gT2JqZWN0LmVudHJpZXMocHJvcHMpLm1hcCgoW3Byb3BlcnR5LCB2YWx1ZXNdKSA9PiAoe1xuXHRcdHByb3BlcnR5LFxuXHRcdHZhbHVlczogQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc11cblx0fSkpO1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gYW5pbWF0YWJsZSBwcm9wZXJ0aWVzXCIpO1xufTtcbnZhciBzZXJpYWxpemVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG5cdGNvbnN0IGlzRWxlbWVudCA9IHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudDtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gdmFsdWUgJiYgIWlzRWxlbWVudCkgcmV0dXJuIFN0cmluZyh2YWx1ZS52YWx1ZSA/PyBcIlwiKTtcblx0cmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59O1xudmFyIGNvbXBpbGVLZXlmcmFtZXNDc3MgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBsaXN0ID0gYXNQcm9wZXJ0eUxpc3Qob3B0aW9ucyk7XG5cdGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KDIsIC4uLmxpc3QubWFwKChwKSA9PiBwLnZhbHVlcy5sZW5ndGgpKTtcblx0Y29uc3Qgb2Zmc2V0cyA9IG9wdGlvbnMub2Zmc2V0cyA/PyBBcnJheS5mcm9tKHsgbGVuZ3RoOiBtYXhMZW5ndGggfSwgKF8sIGkpID0+IGkgLyAobWF4TGVuZ3RoIC0gMSkpO1xuXHRjb25zdCBmcmFtZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGRlY2xzID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9wIG9mIGxpc3QpIHtcblx0XHRcdGNvbnN0IHJhdyA9IHByb3AudmFsdWVzW01hdGgubWluKGksIHByb3AudmFsdWVzLmxlbmd0aCAtIDEpXTtcblx0XHRcdGRlY2xzLnB1c2goYCR7Y2FtZWxUb0tlYmFiKHByb3AucHJvcGVydHkpfTogJHtzZXJpYWxpemVWYWx1ZShyYXcpfWApO1xuXHRcdH1cblx0XHRjb25zdCBwY3QgPSBNYXRoLnJvdW5kKChvZmZzZXRzW2ldID8/IGkgLyAobWF4TGVuZ3RoIC0gMSkpICogMTAwKTtcblx0XHRmcmFtZXMucHVzaChgJHtwY3R9JSB7ICR7ZGVjbHMuam9pbihcIjsgXCIpfTsgfWApO1xuXHR9XG5cdGNvbnN0IGZpbmdlcnByaW50ID0gZnJhbWVzLmpvaW4oXCJ8XCIpO1xuXHRsZXQgaGFzaCA9IDA7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgZmluZ2VycHJpbnQubGVuZ3RoOyBpKyspIGhhc2ggPSBoYXNoICogMzEgKyBmaW5nZXJwcmludC5jaGFyQ29kZUF0KGkpIHwgMDtcblx0Y29uc3QgbmFtZSA9IGBmZXN0LWFuaW0tJHsoaGFzaCA+Pj4gMCkudG9TdHJpbmcoMzYpfWA7XG5cdHJldHVybiB7XG5cdFx0bmFtZSxcblx0XHRjc3NUZXh0OiBgQGtleWZyYW1lcyAke25hbWV9IHtcXG4ke2ZyYW1lcy5qb2luKFwiXFxuXCIpfVxcbn1gLFxuXHRcdGZpbmdlcnByaW50XG5cdH07XG59O1xudmFyIGNvbXBpbGVUcmlnZ2VyQ3NzID0gKHNlbGVjdG9yLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHRyaWdnZXIgPSBvcHRpb25zLnRyaWdnZXIgPz8gXCJtb3VudFwiO1xuXHRpZiAoaXNSZWFjdGl2ZVRyaWdnZXIodHJpZ2dlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWFjdGl2ZSB7IHZhbHVlIH0gdHJpZ2dlciBpcyBub3QgdmFsaWQgb24gdGhlIENTUyBwYXRoXCIpO1xuXHRjb25zdCBjb21waWxlZCA9IGNvbXBpbGVLZXlmcmFtZXNDc3Mob3B0aW9ucyk7XG5cdGNvbnN0IGR1cmF0aW9uID0gYCR7cGFyc2VUaW1lKG9wdGlvbnMuZHVyYXRpb24sIDMwMCl9bXNgO1xuXHRjb25zdCBkZWxheSA9IGAke3BhcnNlVGltZShvcHRpb25zLmRlbGF5LCAwKX1tc2A7XG5cdGNvbnN0IGl0ZXJhdGlvbnMgPSBub3JtYWxpemVJdGVyYXRpb25Db3VudChvcHRpb25zLml0ZXJhdGlvbkNvdW50KTtcblx0Y29uc3QgcHJvcGVydGllcyA9IHtcblx0XHRcImFuaW1hdGlvbi1uYW1lXCI6IGNvbXBpbGVkLm5hbWUsXG5cdFx0XCJhbmltYXRpb24tZHVyYXRpb25cIjogZHVyYXRpb24sXG5cdFx0XCJhbmltYXRpb24tZGVsYXlcIjogZGVsYXksXG5cdFx0XCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50XCI6IGl0ZXJhdGlvbnMgPT09IFwiSW5maW5pdHlcIiB8fCBpdGVyYXRpb25zID09PSBJbmZpbml0eSA/IFwiaW5maW5pdGVcIiA6IFN0cmluZyhpdGVyYXRpb25zKSxcblx0XHRcImFuaW1hdGlvbi1kaXJlY3Rpb25cIjogb3B0aW9ucy5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRcImFuaW1hdGlvbi1maWxsLW1vZGVcIjogb3B0aW9ucy5maWxsTW9kZSA/PyBcIm5vbmVcIixcblx0XHRcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIjogdHlwZW9mIG9wdGlvbnMuZWFzaW5nID09PSBcInN0cmluZ1wiID8gb3B0aW9ucy5lYXNpbmcgOiBcImxpbmVhclwiXG5cdH07XG5cdGlmICh0cmlnZ2VyID09PSBcImhvdmVyXCIpIHtcblx0XHRpZiAob3B0aW9ucy5yZXZlcnNlT25FeGl0KSBwcm9wZXJ0aWVzW1wiYW5pbWF0aW9uLXRyaWdnZXJcIl0gPSBgJHtBTklNX1RSSUdHRVJfTkFNRX0gcGxheS1iYWNrd2FyZHNgO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3RvcjogYCR7c2VsZWN0b3J9OmhvdmVyYCxcblx0XHRcdHByb3BlcnRpZXNcblx0XHR9O1xuXHR9XG5cdGlmICh0cmlnZ2VyID09PSBcImZvY3VzXCIpIHJldHVybiB7XG5cdFx0c2VsZWN0b3I6IGAke3NlbGVjdG9yfTpmb2N1c2AsXG5cdFx0cHJvcGVydGllc1xuXHR9O1xuXHRpZiAodHJpZ2dlciA9PT0gXCJzaG93XCIpIHJldHVybiB7XG5cdFx0c2VsZWN0b3I6IGAke3NlbGVjdG9yfTpub3QoW2RhdGEtaGlkZGVuXSlgLFxuXHRcdHByb3BlcnRpZXNcblx0fTtcblx0aWYgKHRyaWdnZXIgPT09IFwiaGlkZVwiKSByZXR1cm4ge1xuXHRcdHNlbGVjdG9yOiBgJHtzZWxlY3Rvcn1bZGF0YS1oaWRkZW5dYCxcblx0XHRwcm9wZXJ0aWVzXG5cdH07XG5cdGlmICh0cmlnZ2VyID09PSBcInJlbW92ZVwiKSByZXR1cm4ge1xuXHRcdHNlbGVjdG9yOiBgJHtzZWxlY3Rvcn1bZGF0YS1yZW1vdmluZ11gLFxuXHRcdHByb3BlcnRpZXNcblx0fTtcblx0aWYgKHRyaWdnZXIgPT09IFwibWFudWFsXCIpIHtcblx0XHRwcm9wZXJ0aWVzW1wiYW5pbWF0aW9uLXBsYXktc3RhdGVcIl0gPSBcInBhdXNlZFwiO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdHByb3BlcnRpZXNcblx0XHR9O1xuXHR9XG5cdGlmICh0cmlnZ2VyID09PSBcImNsaWNrXCIpIHtcblx0XHRwcm9wZXJ0aWVzW1wiZXZlbnQtdHJpZ2dlclwiXSA9IGAke0FOSU1fVFJJR0dFUl9OQU1FfSBjbGlja2A7XG5cdFx0cHJvcGVydGllc1tcImFuaW1hdGlvbi10cmlnZ2VyXCJdID0gYCR7QU5JTV9UUklHR0VSX05BTUV9IHBsYXlgO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdHByb3BlcnRpZXNcblx0XHR9O1xuXHR9XG5cdGlmICh0cmlnZ2VyID09PSBcInZpc2libGVcIikge1xuXHRcdHByb3BlcnRpZXNbXCJ0aW1lbGluZS10cmlnZ2VyXCJdID0gYCR7QU5JTV9UUklHR0VSX05BTUV9IHZpZXcgY29udGFpbmA7XG5cdFx0cHJvcGVydGllc1tcImFuaW1hdGlvbi10cmlnZ2VyXCJdID0gYCR7QU5JTV9UUklHR0VSX05BTUV9IHBsYXlgO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdHByb3BlcnRpZXNcblx0XHR9O1xuXHR9XG5cdGlmIChpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSB8fCBpc1ZpZXdEcml2ZW4odHJpZ2dlcikpIHtcblx0XHRjb25zdCBraW5kID0gaXNWaWV3RHJpdmVuKHRyaWdnZXIpID8gXCJ2aWV3XCIgOiBcInNjcm9sbFwiO1xuXHRcdHByb3BlcnRpZXNbXCJ0aW1lbGluZS10cmlnZ2VyXCJdID0gYCR7QU5JTV9UUklHR0VSX05BTUV9ICR7a2luZH1gO1xuXHRcdGlmICh0cmlnZ2VyLnJhbmdlU3RhcnQpIHByb3BlcnRpZXNbXCJhbmltYXRpb24tcmFuZ2Utc3RhcnRcIl0gPSB0cmlnZ2VyLnJhbmdlU3RhcnQ7XG5cdFx0aWYgKHRyaWdnZXIucmFuZ2VFbmQpIHByb3BlcnRpZXNbXCJhbmltYXRpb24tcmFuZ2UtZW5kXCJdID0gdHJpZ2dlci5yYW5nZUVuZDtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRwcm9wZXJ0aWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbGVjdG9yLFxuXHRcdHByb3BlcnRpZXNcblx0fTtcbn07XG52YXIgcmVzb2x2ZUNzc0FuaW1hdGlvblRhcmdldCA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0aWYgKHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJiaW5kQ3NzQW5pbWF0aW9uIGRvZXMgbm90IGFjY2VwdCBFbGVtZW50XCIpO1xuXHRpZiAodHlwZW9mIENTU1N0eWxlRGVjbGFyYXRpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgdGFyZ2V0IGluc3RhbmNlb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbikge1xuXHRcdGNvbnN0IHJ1bGUgPSB0YXJnZXQucGFyZW50UnVsZTtcblx0XHRpZiAoIXJ1bGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDU1NTdHlsZURlY2xhcmF0aW9uIGhhcyBubyBwYXJlbnRSdWxlXCIpO1xuXHRcdHJldHVybiByZXNvbHZlQ3NzQW5pbWF0aW9uVGFyZ2V0KHJ1bGUsIG9wdGlvbnMpO1xuXHR9XG5cdGlmICh0eXBlb2YgQ1NTU3R5bGVSdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIHRhcmdldCBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSkge1xuXHRcdGNvbnN0IHNoZWV0ID0gdGFyZ2V0LnBhcmVudFN0eWxlU2hlZXQ7XG5cdFx0aWYgKCFzaGVldCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNTU1N0eWxlUnVsZSBoYXMgbm8gcGFyZW50U3R5bGVTaGVldFwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hlZXQsXG5cdFx0XHRydWxlOiB0YXJnZXQsXG5cdFx0XHRzZWxlY3RvcjogdGFyZ2V0LnNlbGVjdG9yVGV4dFxuXHRcdH07XG5cdH1cblx0aWYgKHR5cGVvZiBDU1NTdHlsZVNoZWV0ICE9PSBcInVuZGVmaW5lZFwiICYmIHRhcmdldCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIHtcblx0XHRjb25zdCBzZWxlY3RvciA9IG9wdGlvbnMuc2VsZWN0b3I7XG5cdFx0aWYgKCFzZWxlY3RvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNTU1N0eWxlU2hlZXQgYmluZCByZXF1aXJlcyBvcHRpb25zLnNlbGVjdG9yXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzaGVldDogdGFyZ2V0LFxuXHRcdFx0cnVsZTogbnVsbCxcblx0XHRcdHNlbGVjdG9yXG5cdFx0fTtcblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmluZENzc0FuaW1hdGlvbiB0YXJnZXQgbXVzdCBiZSBhIENTU1N0eWxlUnVsZSwgQ1NTU3R5bGVTaGVldCwgb3IgQ1NTU3R5bGVEZWNsYXJhdGlvblwiKTtcbn07XG52YXIgZGVjbGFyYXRpb25zVG9UZXh0ID0gKHByb3BlcnRpZXMpID0+IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt2fTtgKS5qb2luKFwiIFwiKTtcbnZhciBiaW5kQ3NzQW5pbWF0aW9uID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBjb21waWxlZCA9IGNvbXBpbGVLZXlmcmFtZXNDc3Mob3B0aW9ucyk7XG5cdGxldCBzaGVldDtcblx0bGV0IHNlbGVjdG9yO1xuXHRpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQuaW5zZXJ0UnVsZSA9PT0gXCJmdW5jdGlvblwiICYmIHRhcmdldC5jc3NSdWxlcyAmJiBvcHRpb25zLnNlbGVjdG9yKSB7XG5cdFx0c2hlZXQgPSB0YXJnZXQ7XG5cdFx0c2VsZWN0b3IgPSBvcHRpb25zLnNlbGVjdG9yO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNzc0FuaW1hdGlvblRhcmdldCh0YXJnZXQsIG9wdGlvbnMpO1xuXHRcdHNoZWV0ID0gcmVzb2x2ZWQuc2hlZXQ7XG5cdFx0c2VsZWN0b3IgPSByZXNvbHZlZC5zZWxlY3Rvcjtcblx0fVxuXHRjb25zdCB0cmlnZ2VyID0gY29tcGlsZVRyaWdnZXJDc3Moc2VsZWN0b3IsIG9wdGlvbnMpO1xuXHRjb25zdCBsYXllciA9IGdldE9yQ3JlYXRlTGF5ZXJSdWxlKHNoZWV0LCBcInV4LWFuaW1cIikgPz8gc2hlZXQ7XG5cdGNvbnN0IGhvc3QgPSBsYXllci5pbnNlcnRSdWxlID8gbGF5ZXIgOiBzaGVldDtcblx0bGV0IGVudHJ5ID0gYW5pbUtleWZyYW1lUmVmcy5nZXQoY29tcGlsZWQuZmluZ2VycHJpbnQpO1xuXHRpZiAoIWVudHJ5KSB7XG5cdFx0aG9zdC5pbnNlcnRSdWxlKGNvbXBpbGVkLmNzc1RleHQsIGhvc3QuY3NzUnVsZXM/Lmxlbmd0aCA/PyAwKTtcblx0XHRjb25zdCBrZXlmcmFtZXNSdWxlID0gaG9zdC5jc3NSdWxlcz8uW2hvc3QuY3NzUnVsZXMubGVuZ3RoIC0gMV07XG5cdFx0ZW50cnkgPSB7XG5cdFx0XHRuYW1lOiBjb21waWxlZC5uYW1lLFxuXHRcdFx0Y291bnQ6IDAsXG5cdFx0XHRrZXlmcmFtZXNSdWxlLFxuXHRcdFx0aG9zdHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksXG5cdFx0XHRob3N0Q291bnRzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpXG5cdFx0fTtcblx0XHRhbmltS2V5ZnJhbWVSZWZzLnNldChjb21waWxlZC5maW5nZXJwcmludCwgZW50cnkpO1xuXHR9IGVsc2UgaWYgKCFlbnRyeS5ob3N0cy5oYXMoaG9zdCkpIHtcblx0XHRob3N0Lmluc2VydFJ1bGUoY29tcGlsZWQuY3NzVGV4dCwgaG9zdC5jc3NSdWxlcz8ubGVuZ3RoID8/IDApO1xuXHRcdGlmICghZW50cnkua2V5ZnJhbWVzUnVsZSkgZW50cnkua2V5ZnJhbWVzUnVsZSA9IGhvc3QuY3NzUnVsZXM/Lltob3N0LmNzc1J1bGVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cdGVudHJ5Lmhvc3RDb3VudHMgPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGVudHJ5LmNvdW50ICs9IDE7XG5cdGVudHJ5Lmhvc3RzLmFkZChob3N0KTtcblx0ZW50cnkuaG9zdENvdW50cy5zZXQoaG9zdCwgKGVudHJ5Lmhvc3RDb3VudHMuZ2V0KGhvc3QpID8/IDApICsgMSk7XG5cdGNvbnN0IGNvbXBhbmlvblRleHQgPSBgJHt0cmlnZ2VyLnNlbGVjdG9yfSB7ICR7ZGVjbGFyYXRpb25zVG9UZXh0KHRyaWdnZXIucHJvcGVydGllcyl9IH1gO1xuXHRjb25zdCBjb21wYW5pb25JbmRleCA9IGhvc3QuaW5zZXJ0UnVsZShjb21wYW5pb25UZXh0LCBob3N0LmNzc1J1bGVzPy5sZW5ndGggPz8gMCk7XG5cdGNvbnN0IGNvbXBhbmlvblJ1bGUgPSBob3N0LmNzc1J1bGVzPy5bY29tcGFuaW9uSW5kZXhdO1xuXHRjb25zdCBkZWxldGVLZXlmcmFtZXNGcm9tID0gKHNoZWV0SG9zdCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXRIb3N0LmNzc1J1bGVzIHx8IFtdKTtcblx0XHRcdGxldCBpZHggPSBydWxlcy5pbmRleE9mKGVudHJ5LmtleWZyYW1lc1J1bGUpO1xuXHRcdFx0aWYgKGlkeCA8IDApIGlkeCA9IHJ1bGVzLmZpbmRJbmRleCgocikgPT4gU3RyaW5nKHI/LmNzc1RleHQgfHwgXCJcIikuaW5jbHVkZXMoYEBrZXlmcmFtZXMgJHtlbnRyeS5uYW1lfWApKTtcblx0XHRcdGlmIChpZHggPj0gMCkgc2hlZXRIb3N0LmRlbGV0ZVJ1bGUoaWR4KTtcblx0XHR9IGNhdGNoIHt9XG5cdH07XG5cdGxldCBkZWFkID0gZmFsc2U7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKGRlYWQpIHJldHVybjtcblx0XHRkZWFkID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaWR4ID0gQXJyYXkuZnJvbShob3N0LmNzc1J1bGVzIHx8IFtdKS5pbmRleE9mKGNvbXBhbmlvblJ1bGUpO1xuXHRcdFx0aWYgKGlkeCA+PSAwKSBob3N0LmRlbGV0ZVJ1bGUoaWR4KTtcblx0XHR9IGNhdGNoIHt9XG5cdFx0ZW50cnkuY291bnQgLT0gMTtcblx0XHRjb25zdCBuZXh0SG9zdENvdW50ID0gKGVudHJ5Lmhvc3RDb3VudHM/LmdldChob3N0KSA/PyAxKSAtIDE7XG5cdFx0aWYgKG5leHRIb3N0Q291bnQgPD0gMCkge1xuXHRcdFx0ZW50cnkuaG9zdENvdW50cz8uZGVsZXRlKGhvc3QpO1xuXHRcdFx0ZW50cnkuaG9zdHMuZGVsZXRlKGhvc3QpO1xuXHRcdFx0ZGVsZXRlS2V5ZnJhbWVzRnJvbShob3N0KTtcblx0XHR9IGVsc2UgZW50cnkuaG9zdENvdW50cz8uc2V0KGhvc3QsIG5leHRIb3N0Q291bnQpO1xuXHRcdGlmIChlbnRyeS5jb3VudCA8PSAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGxlZnRvdmVyIG9mIGVudHJ5Lmhvc3RzKSBkZWxldGVLZXlmcmFtZXNGcm9tKGxlZnRvdmVyKTtcblx0XHRcdGFuaW1LZXlmcmFtZVJlZnMuZGVsZXRlKGNvbXBpbGVkLmZpbmdlcnByaW50KTtcblx0XHR9XG5cdH07XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi9kb20udHMvc3JjL21peGluL09ic2VydmVyLnRzXG52YXIgb25Cb3JkZXJPYnNlcnZlU3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BvbkJvcmRlck9ic2VydmVcIik7XG52YXIgb25Cb3JkZXJPYnNlcnZlID0gZ2xvYmFsVGhpc1tvbkJvcmRlck9ic2VydmVTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBvbkNvbnRlbnRPYnNlcnZlU3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BvbkNvbnRlbnRPYnNlcnZlXCIpO1xudmFyIG9uQ29udGVudE9ic2VydmUgPSBnbG9iYWxUaGlzW29uQ29udGVudE9ic2VydmVTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciB1bndyYXBGcm9tUXVlcnkgPSAoZWxlbWVudCkgPT4ge1xuXHRpZiAodHlwZW9mIGVsZW1lbnQ/LmN1cnJlbnQgPT0gXCJvYmplY3RcIikgZWxlbWVudCA9IGVsZW1lbnQ/LmVsZW1lbnQgPz8gZWxlbWVudD8uY3VycmVudCA/PyAodHlwZW9mIGVsZW1lbnQ/LnNlbGYgPT0gXCJvYmplY3RcIiA/IGVsZW1lbnQ/LnNlbGYgOiBudWxsKSA/PyBlbGVtZW50O1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgbm9ybWFsaXplU2VsZWN0b3IgPSAoc2VsZWN0b3IsIGZhbGxiYWNrID0gXCIqXCIpID0+IHtcblx0aWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbGxiYWNrO1xuXHRyZXR1cm4gc2VsZWN0b3IudHJpbSgpIHx8IGZhbGxiYWNrO1xufTtcbnZhciBzYWZlUXVlcnlTZWxlY3RvckFsbCA9IChlbCwgc2VsZWN0b3IpID0+IHtcblx0aWYgKCFlbCB8fCB0eXBlb2YgZWwucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gW107XG5cdGNvbnN0IHNlbCA9IG5vcm1hbGl6ZVNlbGVjdG9yKHNlbGVjdG9yLCBcIlwiKTtcblx0aWYgKCFzZWwpIHJldHVybiBbXTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbShlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkgfHwgW10pO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG52YXIgc2FmZU1hdGNoZXMgPSAoZWwsIHNlbGVjdG9yKSA9PiB7XG5cdGlmICghZWwgfHwgdHlwZW9mIGVsLm1hdGNoZXMgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBzZWwgPSBub3JtYWxpemVTZWxlY3RvcihzZWxlY3RvciwgXCJcIik7XG5cdGlmICghc2VsKSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZWwubWF0Y2hlcyhzZWwpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgb2JzZXJ2ZUF0dHJpYnV0ZUJ5U2VsZWN0b3IgPSAoZWxlbWVudCwgc2VsZWN0b3IsIGF0dHJpYnV0ZSwgY2IpID0+IHtcblx0Y29uc3Qgc2VsID0gbm9ybWFsaXplU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRjb25zdCBhdHRyaWJ1dGVMaXN0ID0gbmV3IFNldChbLi4uYXR0cmlidXRlLnNwbGl0KFwiLFwiKSB8fCBbYXR0cmlidXRlXV0ubWFwKChzKSA9PiBzLnRyaW0oKSkpO1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbkxpc3QsIG9ic2VydmVyKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbkxpc3QpIGlmIChtdXRhdGlvbi50eXBlID09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdGNvbnN0IGFkZGVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpIHx8IFtdO1xuXHRcdFx0Y29uc3QgcmVtb3ZlZE5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpIHx8IFtdO1xuXHRcdFx0YWRkZWROb2Rlcy5wdXNoKC4uLkFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcyB8fCBbXSkuZmxhdE1hcCgoZWwpID0+IHNhZmVRdWVyeVNlbGVjdG9yQWxsKGVsLCBzZWwpKSk7XG5cdFx0XHRyZW1vdmVkTm9kZXMucHVzaCguLi5BcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2RlcyB8fCBbXSkuZmxhdE1hcCgoZWwpID0+IHNhZmVRdWVyeVNlbGVjdG9yQWxsKGVsLCBzZWwpKSk7XG5cdFx0XHRbLi4ubmV3IFNldChhZGRlZE5vZGVzKV0uZmlsdGVyKChlbCkgPT4gc2FmZU1hdGNoZXMoZWwsIHNlbCkpPy5tYXA/LigodGFyZ2V0KSA9PiB7XG5cdFx0XHRcdGF0dHJpYnV0ZUxpc3QuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0Y2Ioe1xuXHRcdFx0XHRcdFx0dGFyZ2V0LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJhdHRyaWJ1dGVzXCIsXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGUsXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogdGFyZ2V0Py5nZXRBdHRyaWJ1dGU/LihhdHRyaWJ1dGUpXG5cdFx0XHRcdFx0fSwgb2JzZXJ2ZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoc2FmZU1hdGNoZXMobXV0YXRpb24udGFyZ2V0LCBzZWwpICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgJiYgYXR0cmlidXRlTGlzdC5oYXMobXV0YXRpb24uYXR0cmlidXRlTmFtZSkpIGNiKG11dGF0aW9uLCBvYnNlcnZlcik7XG5cdH0pO1xuXHRvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQgPSB1bndyYXBGcm9tUXVlcnkoZWxlbWVudCksIHtcblx0XHRhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSxcblx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdGF0dHJpYnV0ZUZpbHRlcjogWy4uLmF0dHJpYnV0ZUxpc3RdLFxuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdGNoYXJhY3RlckRhdGE6IHRydWVcblx0fSk7XG5cdHNhZmVRdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQsIHNlbCkubWFwKCh0YXJnZXQpID0+IGF0dHJpYnV0ZUxpc3QuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiBjYih7XG5cdFx0dGFyZ2V0LFxuXHRcdHR5cGU6IFwiYXR0cmlidXRlc1wiLFxuXHRcdGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZSxcblx0XHRvbGRWYWx1ZTogdGFyZ2V0Py5nZXRBdHRyaWJ1dGU/LihhdHRyaWJ1dGUpXG5cdH0sIG9ic2VydmVyKSkpO1xuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGlmZWN5Y2xlLnRzXG5pZiAodHlwZW9mIGdsb2JhbFRoaXMuQ3VzdG9tRXZlbnQgIT09IFwiZnVuY3Rpb25cIikge1xuXHRjbGFzcyBQb2x5ZmlsbEN1c3RvbUV2ZW50IHtcblx0XHR0eXBlO1xuXHRcdGRldGFpbDtcblx0XHRidWJibGVzO1xuXHRcdGNhbmNlbGFibGU7XG5cdFx0ZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuXHRcdGNvbnN0cnVjdG9yKHR5cGUsIGluaXQpIHtcblx0XHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cdFx0XHR0aGlzLmRldGFpbCA9IGluaXQ/LmRldGFpbDtcblx0XHRcdHRoaXMuYnViYmxlcyA9ICEhaW5pdD8uYnViYmxlcztcblx0XHRcdHRoaXMuY2FuY2VsYWJsZSA9ICEhaW5pdD8uY2FuY2VsYWJsZTtcblx0XHR9XG5cdFx0cHJldmVudERlZmF1bHQoKSB7XG5cdFx0XHRpZiAodGhpcy5jYW5jZWxhYmxlKSB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRnbG9iYWxUaGlzLkN1c3RvbUV2ZW50ID0gUG9seWZpbGxDdXN0b21FdmVudDtcbn1cbnZhciBoYXNQYXlsb2FkID0gKG9wdGlvbnMpID0+ICEhb3B0aW9ucyAmJiAob3B0aW9ucy5wcm9wZXJ0aWVzICE9IG51bGwgfHwgb3B0aW9ucy5rZXlmcmFtZXMgIT0gbnVsbCk7XG52YXIgcmVkdWNlZCA9IChlbCkgPT4gZWw/Lmhhc0F0dHJpYnV0ZT8uKFwiZGF0YS1pbnN0YW50XCIpIHx8IHR5cGVvZiBtYXRjaE1lZGlhID09PSBcImZ1bmN0aW9uXCIgJiYgbWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpXCIpLm1hdGNoZXM7XG52YXIgZGlzcGF0Y2hMaWZlY3ljbGVFdmVudCA9IChlbCwgdHlwZSkgPT4gZWw/LmRpc3BhdGNoRXZlbnQ/LihuZXcgQ3VzdG9tRXZlbnQodHlwZSwge1xuXHRkZXRhaWw6IHt9LFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlXG59KSkgIT09IGZhbHNlO1xudmFyIHdhaXRFbGVtZW50QW5pbWF0aW9ucyA9IGFzeW5jIChlbCkgPT4ge1xuXHRpZiAocmVkdWNlZChlbCkpIHJldHVybjtcblx0YXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHQoZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPz8gKChjYikgPT4gc2V0VGltZW91dCgoKSA9PiBjYigwKSwgMCkpKSgoKSA9PiByZXNvbHZlKCkpO1xuXHR9KTtcblx0Y29uc3QgbGlzdCA9IHR5cGVvZiBlbD8uZ2V0QW5pbWF0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gZWwuZ2V0QW5pbWF0aW9ucygpIDogW107XG5cdGF3YWl0IFByb21pc2UuYWxsKGxpc3QuZmlsdGVyKChhKSA9PiBhLnBsYXlTdGF0ZSA9PT0gXCJydW5uaW5nXCIgfHwgYS5wbGF5U3RhdGUgPT09IFwicGVuZGluZ1wiKS5tYXAoKGEpID0+IGEuZmluaXNoZWQ/LmNhdGNoPy4oKCkgPT4ge30pID8/IFByb21pc2UucmVzb2x2ZSgpKSk7XG59O1xudmFyIGlzUmVjb3JkUHJvcGVydGllcyA9IChwcm9wZXJ0aWVzKSA9PiAhIXByb3BlcnRpZXMgJiYgdHlwZW9mIHByb3BlcnRpZXMgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydGllcyk7XG52YXIgZmxpZ2h0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIHN0YXJ0UGxheWVyID0gKGVsLCBvcHRpb25zKSA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIChpc1JlY29yZFByb3BlcnRpZXMob3B0aW9ucy5wcm9wZXJ0aWVzKSA/IGFuaW1hdGUoZWwsIG9wdGlvbnMpIDogZG9BbmltYXRpb24oZWwsIG9wdGlvbnMpKT8uYW5pbWF0aW9uID8/IG51bGw7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRpZiAoIShlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgL0VsZW1lbnQvaS50ZXN0KG1zZykpIHx8IHR5cGVvZiBlbC5hbmltYXRlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IGVycjtcblx0XHRyZXR1cm4gZWwuYW5pbWF0ZShidWlsZFdlYkFuaW1hdGlvbktleWZyYW1lcyhvcHRpb25zKSwgYnVpbGRBbmltYXRpb25UaW1pbmcob3B0aW9ucykpO1xuXHR9XG59O1xudmFyIHBsYXkgPSBhc3luYyAoZWwsIG9wdGlvbnMsIGtpbmQsIGJlZm9yZSwgYWZ0ZXIpID0+IHtcblx0aWYgKHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmICEoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSAmJiB0eXBlb2YgZWw/LmFuaW1hdGUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFwcGVhci9kaXNhcHBlYXIgcmVxdWlyZSBhbiBFbGVtZW50XCIpO1xuXHRpZiAoIWRpc3BhdGNoTGlmZWN5Y2xlRXZlbnQoZWwsIGJlZm9yZSkpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgcHJpb3IgPSBmbGlnaHRzLmdldChlbCk7XG5cdGlmIChwcmlvciAmJiBwcmlvci5raW5kICE9PSBraW5kKSBwcmlvci5jYW5jZWwoKTtcblx0bGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXHRsZXQgc2V0dGxlO1xuXHRjb25zdCBhYm9ydGVkID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRzZXR0bGUgPSByZXNvbHZlO1xuXHR9KTtcblx0bGV0IHBsYXllciA9IG51bGw7XG5cdGNvbnN0IGZsaWdodCA9IHtcblx0XHRraW5kLFxuXHRcdGNhbmNlbCgpIHtcblx0XHRcdGlmIChjYW5jZWxsZWQpIHJldHVybjtcblx0XHRcdGNhbmNlbGxlZCA9IHRydWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwbGF5ZXI/LmNhbmNlbD8uKCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRzZXR0bGUoKTtcblx0XHR9XG5cdH07XG5cdGZsaWdodHMuc2V0KGVsLCBmbGlnaHQpO1xuXHR0cnkge1xuXHRcdGlmIChoYXNQYXlsb2FkKG9wdGlvbnMpICYmICFyZWR1Y2VkKGVsKSAmJiB0eXBlb2YgZWwuYW5pbWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRwbGF5ZXIgPSBzdGFydFBsYXllcihlbCwgb3B0aW9ucyk7XG5cdFx0XHRpZiAocGxheWVyPy5maW5pc2hlZCkgYXdhaXQgUHJvbWlzZS5yYWNlKFtQcm9taXNlLnJlc29sdmUocGxheWVyLmZpbmlzaGVkKS5jYXRjaCgoKSA9PiB7fSksIGFib3J0ZWRdKTtcblx0XHR9XG5cdFx0aWYgKGNhbmNlbGxlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdGF3YWl0IFByb21pc2UucmFjZShbd2FpdEVsZW1lbnRBbmltYXRpb25zKGVsKSwgYWJvcnRlZF0pO1xuXHRcdGlmIChjYW5jZWxsZWQpIHJldHVybiBmYWxzZTtcblx0XHRkaXNwYXRjaExpZmVjeWNsZUV2ZW50KGVsLCBhZnRlcik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZmluYWxseSB7XG5cdFx0aWYgKGZsaWdodHMuZ2V0KGVsKSA9PT0gZmxpZ2h0KSBmbGlnaHRzLmRlbGV0ZShlbCk7XG5cdH1cbn07XG52YXIgYXBwZWFyID0gKGVsLCBvcHRpb25zKSA9PiBwbGF5KGVsLCBvcHRpb25zLCBcInNob3dcIiwgXCJ1Mi1iZWZvcmUtc2hvd1wiLCBcInUyLWFwcGVhclwiKTtcbnZhciBkaXNhcHBlYXIgPSAoZWwsIG9wdGlvbnMpID0+IHBsYXkoZWwsIG9wdGlvbnMsIFwiaGlkZVwiLCBcInUyLWJlZm9yZS1oaWRlXCIsIFwidTItaGlkZGVuXCIpO1xudmFyIGRlY29yU2hvdyA9IHtcblx0cHJvcGVydGllczoge1xuXHRcdFwiLS1vcGFjaXR5XCI6IFtcblx0XHRcdDAsXG5cdFx0XHQwLFxuXHRcdFx0MVxuXHRcdF0sXG5cdFx0XCItLXNjYWxlXCI6IFtcblx0XHRcdC44LFxuXHRcdFx0LjgsXG5cdFx0XHQxXG5cdFx0XSxcblx0XHRkaXNwbGF5OiBbXG5cdFx0XHRcIm5vbmVcIixcblx0XHRcdFwibm9uZVwiLFxuXHRcdFx0XCJyZXZlcnQtbGF5ZXJcIlxuXHRcdF0sXG5cdFx0cG9pbnRlckV2ZW50czogW1xuXHRcdFx0XCJub25lXCIsXG5cdFx0XHRcIm5vbmVcIixcblx0XHRcdFwicmV2ZXJ0LWxheWVyXCJcblx0XHRdXG5cdH0sXG5cdGR1cmF0aW9uOiA4MCxcblx0ZWFzaW5nOiBcImxpbmVhclwiXG59O1xudmFyIGRlY29ySGlkZSA9IHtcblx0cHJvcGVydGllczoge1xuXHRcdFwiLS1vcGFjaXR5XCI6IFtcblx0XHRcdDEsXG5cdFx0XHQwLFxuXHRcdFx0MFxuXHRcdF0sXG5cdFx0XCItLXNjYWxlXCI6IFtcblx0XHRcdDEsXG5cdFx0XHQuOCxcblx0XHRcdC44XG5cdFx0XSxcblx0XHRkaXNwbGF5OiBbXG5cdFx0XHRcInJldmVydC1sYXllclwiLFxuXHRcdFx0XCJyZXZlcnQtbGF5ZXJcIixcblx0XHRcdFwibm9uZVwiXG5cdFx0XSxcblx0XHRwb2ludGVyRXZlbnRzOiBbXG5cdFx0XHRcIm5vbmVcIixcblx0XHRcdFwibm9uZVwiLFxuXHRcdFx0XCJub25lXCJcblx0XHRdXG5cdH0sXG5cdGR1cmF0aW9uOiAxMjAsXG5cdGVhc2luZzogXCJsaW5lYXJcIlxufTtcbnZhciBpbml0VmlzaWJpbGl0eSA9IGFzeW5jIChST09UID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuYm9keSA6IG51bGwsIGFuaW1hdGlvbnMpID0+IHtcblx0aWYgKCFST09UKSByZXR1cm47XG5cdG9ic2VydmVBdHRyaWJ1dGVCeVNlbGVjdG9yKFJPT1QsIFwiKlwiLCBcImRhdGEtaGlkZGVuXCIsIChtdXRhdGlvbikgPT4ge1xuXHRcdGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lICE9PSBcImRhdGEtaGlkZGVuXCIpIHJldHVybjtcblx0XHRjb25zdCB0YXJnZXQgPSBtdXRhdGlvbi50YXJnZXQ7XG5cdFx0aWYgKHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhpZGRlblwiKSA9PT0gbXV0YXRpb24ub2xkVmFsdWUpIHJldHVybjtcblx0XHRjb25zdCBoaWRkZW4gPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1oaWRkZW5cIikgIT0gbnVsbDtcblx0XHRjb25zdCBvcHRzID0gaGlkZGVuID8gYW5pbWF0aW9ucz8uZGlzYXBwZWFyIDogYW5pbWF0aW9ucz8uYXBwZWFyO1xuXHRcdFByb21pc2UucmVzb2x2ZShoaWRkZW4gPyBkaXNhcHBlYXIodGFyZ2V0LCBvcHRzKSA6IGFwcGVhcih0YXJnZXQsIG9wdHMpKS5jYXRjaChjb25zb2xlLndhcm4pO1xuXHR9KTtcbn07XG5cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgQSwgQU5JTUFUQUJMRV9CUkFORCwgQU5JTV9MQVlFUiwgQU5JTV9UUklHR0VSX05BTUUsIEFuaW1hdGFibGVWYWx1ZSwgQkFLRV9DQVRFR09SSUVTLCBCQUtFX0xBWUVSLCBCQUtFX1NDUkVFTl9BTFNPLCBCQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSLCBCQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTLCBCQUtFX1NDUkVFTl9DSFJPTUUsIEJBS0VfU0NSRUVOX01FRElBLCBDU1NfQ09MT1JfUFJPUEVSVElFUywgQ1NTX0RJTUVOU0lPTl9VTklUUywgQ1NTX0RJTUVOU0lPTl9VTklUU19MSVNULCBDU1NfTU9USU9OX1BST1BFUlRJRVMsIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMsIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUywgQ1NTX1VOSVRfVE9LRU5fUkUsIERFRkFVTFRfQ0FDSEVfTVMsIERFRkFVTFRfQ0FURUdPUklFUywgSE9TVF9DU1NfRkFMTEJBQ0ssIExBWUVSX05BTUUsIExBWUVSX09QRU4sIE9XTkVSLCBTLCBTVFlMRV9USEVNRV9BVFRSUywgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUywgVVhfSE9TVF9MQVlFUlMsIFVYX1BSRUxPQURfSE9TVF9DU1MsIFZFRUxBX0NBU0NBREVfTEFZRVJTLCBWSUVXRVJfQ1NTX0xBWUVSX09SREVSLCBWSUVXRVJfUlVOVElNRV9MQVlFUlMsIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCwgYWRvcHRlZEFwcGxpZWRUZXh0LCBhZG9wdGVkQmxvYk1hcCwgYWRvcHRlZEZpbGxlZCwgYWRvcHRlZExheWVyTWFwLCBhZG9wdGVkTWFwLCBhZG9wdGVkU2VsZWN0b3JNYXAsIGFkb3B0ZWRTaGFkb3dMYXllck1hcCwgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLCBhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSwgYW5pbUtleWZyYW1lUmVmcywgYW5pbWF0YWJsZSwgYW5pbWF0ZSwgYXBwZWFyLCBhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZSwgYmFrZUFsc29RdWVyaWVzRm9yLCBiYWtlQ29tcHV0ZWRTdHlsZSwgYmFrZVNjcmVlbkNvbG9ycywgYmFrZVRoZW1lRmluZ2VycHJpbnQsIGJha2VkQ2FjaGUsIGJha2VkRm9sbG93ZXJzLCBiYWtlZExpdmUsIGJha2VkU3R5bGVzLCBiaW5kQ3NzQW5pbWF0aW9uLCBiaW5kU3R5bGUsIGJsb2JVUkxNYXAsIGJ1aWxkQW5pbWF0aW9uVGltaW5nLCBidWlsZEJha2VkQ3NzVGV4dCwgYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMsIGNhY2hlQmxvYkNvbnRlbnRNYXAsIGNhY2hlQ29udGVudE1hcCwgY2FjaGVNYXAsIGNvbGxlY3RCYWtlQWxzb0hvc3RzLCBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzLCBjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMsIGNvbXBpbGVJbmxpbmVTdHlsZUF0dHJpYnV0ZSwgY29tcGlsZUtleWZyYW1lc0NzcywgY29tcGlsZVRyaWdnZXJDc3MsIGNvbnRhaW5zTWFya2VyLCBjcmVhdGVTdHlsZUlkLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSwgY3NzLCBjc3NFbXB0eUxheWVyUnVsZSwgY3NzSW1wb3J0V2l0aExheWVyLCBjc3NMYXllckJsb2NrLCBjc3NMYXllck9yZGVyLCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0LCBjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQsIGNzc1VuaXRDb25zdHJ1Y3Rvck5hbWUsIGNzc1VuaXRGYWN0b3J5TmFtZSwgZGVjb3JIaWRlLCBkZWNvclNob3csIGRlZmluZUFuaW1hdGlvbiwgZGlzYXBwZWFyLCBkaXNwYXRjaExpZmVjeWNsZUV2ZW50LCBkb0FuaW1hdGlvbiwgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudCwgZW5zdXJlSG9zdFN0eWxlcywgZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yLCBlc2NhcGVDU1NJZGVudGlmaWVyLCBlc2NhcGVSZWdFeHAsIGZldGNoQW5kQ2FjaGUsIGZldGNoQXNJbmxpbmUsIGdldEFkb3B0ZWRTdHlsZVJ1bGUsIGdldEJha2VkU3R5bGUsIGdldEVsZW1lbnRab29tLCBnZXRPckNyZWF0ZUxheWVyUnVsZSwgZ2V0UGFkZGluZywgZ2V0UHJvcGVydHlWYWx1ZSwgZ2V0UHhWYWx1ZSwgZ2V0U3R5bGVMYXllciwgZ2V0U3R5bGVSdWxlLCBnZXRUcmFuc2Zvcm0sIGdldFRyYW5zZm9ybU9yaWdpbiwgZ2V0V2luZG93Q29uc3RydWN0b3IsIGhhc1R5cGVkT00sIGhhc2gsIGluaXRWaXNpYmlsaXR5LCBpbnZhbGlkYXRlQmFrZWRTdHlsZXMsIGlzQWRvcHRlZFNoZWV0RW1wdHksIGlzQW5pbWF0YWJsZVZhbHVlLCBpc0NvbG9yVG9rZW4sIGlzQ3NzRWxlbWVudCwgaXNDc3NMYXllck5hbWUsIGlzRG9jdW1lbnQsIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCwgaXNFbGVtZW50VmlzaWJsZSwgaXNMYXllckJsb2NrUnVsZSwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlLCBpc1JlYWN0aXZlU3R5bGVWYWx1ZSwgaXNSZWFjdGl2ZVRyaWdnZXIsIGlzU2Nyb2xsRHJpdmVuLCBpc1NoYWRvd1Jvb3QsIGlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uLCBpc1N0eWxlQmluZGluZywgaXNTdHlsZUhvc3QsIGlzU3R5bGVWYWx1ZSwgaXNVbml0VmFsdWUsIGlzVmlld0RyaXZlbiwgbGF5ZXJDb3VudGVyLCBsb2FkQXNBZG9wdGVkLCBsb2FkQmxvYlN0eWxlLCBsb2FkQ2FjaGVkU3R5bGVzLCBsb2FkSW5saW5lU3R5bGUsIGxvYWRTdHlsZVNoZWV0LCBtYWtlSG9zdExheWVyT3JkZXIsIG5vcm1hbGl6ZUNzc0ZvckxheWVyLCBub3JtYWxpemVJdGVyYXRpb25Db3VudCwgbm9ybWFsaXplSXRlcmF0aW9ucywgbm90aWZ5U3R5bGVUcmVlSG9zdHMsIG9ic2VydmVTdHlsZVRyZWUsIG9uU2Nyb2xsLCBvblZpZXcsIHBhcmFsbGVsQW5pbWF0aW9ucywgcGFyc2VMZW5ndGgsIHBhcnNlT3JpZ2luLCBwYXJzZVRpbWUsIHByZWxvYWRTdHlsZSwgcHJvbWlzZU9yRGlyZWN0LCBwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUsIHF1ZXJ5Rmlyc3REZWVwLCByZWFkQXR0YWNoZWRDU1NVbml0LCByZWFkU2hlZXRSdWxlQ291bnQsIHJlYmFrZUJhdGNoLCByZWJha2VDb21wdXRlZFN0eWxlLCByZWdpc3RlclN0eWxlVHJlZUhvb2ssIHJlZ2lzdGVyZWRQcm9wZXJ0aWVzLCByZWh5ZHJhdGVBZG9wdGVkU3R5bGVTaGVldHMsIHJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMsIHJlbW92ZUFkb3B0ZWQsIHJlc29sdmVDc3NBbmltYXRpb25UYXJnZXQsIHNjaGVkdWxlQmFrZVNjcmVlbkNvbG9ycywgc2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzLCBzZXF1ZW5jZUFuaW1hdGlvbnMsIHNldFByb3BlcnR5LCBzZXRTdHlsZUluUnVsZSwgc2V0U3R5bGVQcm9wZXJ0eSwgc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrLCBzZXRTdHlsZVByb3BlcnR5VHlwZWQsIHNldFN0eWxlUnVsZSwgc2V0U3R5bGVSdWxlcywgc2V0U3R5bGVVUkwsIHN0YWdnZXJBbmltYXRpb24sIHN0cmlwQ3NzUHJlYW1ibGUsIHN0eWxlQ2FjaGUsIHN0eWxlRWxlbWVudENhY2hlLCBzdHlsZUZsdXNoUGVuZGluZywgc3R5bGVUcmVlSG9va3MsIHN0eWxlVHJlZU9ic2VydmVkLCBzdHlsZVRyZWVSb290cywgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCwgdW5iYWtlQ29tcHV0ZWRTdHlsZSwgdW5iYWtlU2NyZWVuQ29sb3JzLCB1bndyYXBDc3NMYXllciwgdXJsQ2FuUGFyc2UsIHZlZWxhQ2FzY2FkZU9yZGVyLCB3YWl0RWxlbWVudEFuaW1hdGlvbnMsIHdyYXBDc3NMYXllciB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsYUFBQUMsSUFBVyxnQkFBQUMsSUFBYyxTQUFBQyxJQUFPLHVCQUFBQyxJQUFxQixZQUFBQyxJQUFVLFNBQUFDLElBQU8sZUFBQUMsSUFBYSxTQUFBQyxJQUFPLHFCQUFBQyxVQUF5QjtBQUMzSSxTQUFTLGtCQUFBQyxJQUFnQixZQUFBQyxVQUFnQjtBQUd6QyxJQUFJQyxJQUFTLENBQUNDLEdBQUtDLE1BQVcsV0FBVyxPQUFPLElBQUlELENBQUcsQ0FBQyxNQUFNQyxFQUFPLEdBQ2pFQyxJQUFhSCxFQUFPLHFCQUFxQixNQUFzQixvQkFBSSxRQUFRLENBQUMsR0FDNUVJLElBQVdKLEVBQU8sbUJBQW1CLE1BQXNCLG9CQUFJLElBQUksQ0FBQyxHQUNwRUssSUFBa0JMLEVBQU8sMEJBQTBCLE1BQXNCLG9CQUFJLElBQUksQ0FBQyxHQUNsRk0sS0FBc0JOLEVBQU8sOEJBQThCLE1BQXNCLG9CQUFJLFFBQVEsQ0FB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QUFRO0FBQ1QsR0FDSUMsS0FBaUIsT0FBT0MsSUFBTyxPQUFPLFdBQWEsTUFBYyxTQUFTLE9BQU8sTUFBTXRFLE1BQWU7QUFDekcsRUFBS3NFLEtBQ0xqQyxHQUEyQmlDLEdBQU0sS0FBSyxlQUFlLENBQUM3QixNQUFhO0FBQ2xFLFFBQUlBLEVBQVMsa0JBQWtCLGNBQWU7QUFDOUMsVUFBTXBiLElBQVNvYixFQUFTO0FBQ3hCLFFBQUlwYixFQUFPLGFBQWEsYUFBYSxNQUFNb2IsRUFBUyxTQUFVO0FBQzlELFVBQU04QixJQUFTbGQsRUFBTyxhQUFhLGFBQWEsS0FBSyxNQUMvQytJLElBQU9tVSxJQUFTdkUsR0FBWSxZQUFZQSxHQUFZO0FBQzFELFlBQVEsUUFBUXVFLElBQVNMLEdBQVU3YyxHQUFRK0ksQ0FBSSxJQUFJNlQsR0FBTzVjLEdBQVErSSxDQUFJLENBQUMsRUFBRSxNQUFNLFFBQVEsSUFBSTtBQUFBLEVBQzVGLENBQUM7QUFDRjsiLAogICJuYW1lcyI6IFsiJGF2b2lkVHJpZ2dlciIsICIkZ2V0VmFsdWUiLCAiY2FtZWxUb0tlYmFiIiwgImRlcmVmIiwgImdldE9ySW5zZXJ0Q29tcHV0ZWQiLCAiaGFzVmFsdWUiLCAiaXNWYWwiLCAiaXNWYWx1ZVVuaXQiLCAidG9SZWYiLCAidHJ5U3RyaW5nQXNOdW1iZXIiLCAiYWRkVG9DYWxsQ2hhaW4iLCAiYWZmZWN0ZWQiLCAic2hhcmVkIiwgImtleSIsICJjcmVhdGUiLCAiYmxvYlVSTE1hcCIsICJjYWNoZU1hcCIsICJjYWNoZUNvbnRlbnRNYXAiLCAiY2FjaGVCbG9iQ29udGVudE1hcCIsICJhZG9wdGVkU2VsZWN0b3JNYXAiLCAiYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwIiwgImFkb3B0ZWRMYXllck1hcCIsICJhZG9wdGVkU2hhZG93TGF5ZXJNYXAiLCAiYWRvcHRlZE1hcCIsICJhZG9wdGVkQmxvYk1hcCIsICJhZG9wdGVkQXBwbGllZFRleHQiLCAiYWRvcHRlZEZpbGxlZCIsICJsYXllckNvdW50ZXIiLCAic3R5bGVUcmVlSG9va3MiLCAic3R5bGVUcmVlT2JzZXJ2ZWQiLCAic3R5bGVUcmVlUm9vdHMiLCAiYmFrZWRTdHlsZXMiLCAiYmFrZWRMaXZlIiwgImJha2VkQ2FjaGUiLCAicmViYWtlQmF0Y2giLCAiYmFrZWRGb2xsb3dlcnMiLCAiYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUiLCAic3R5bGVDYWNoZSIsICJzdHlsZUVsZW1lbnRDYWNoZSIsICJzdHlsZUZsdXNoUGVuZGluZyIsICJyZWdpc3RlcmVkUHJvcGVydGllcyIsICJhbmltS2V5ZnJhbWVSZWZzIiwgIkNTU19ESU1FTlNJT05fVU5JVFNfTElTVCIsICJDU1NfRElNRU5TSU9OX1VOSVRTIiwgIkNTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyIsICJDU1NfVU5JVF9UT0tFTl9SRSIsICJDU1NfQ09MT1JfUFJPUEVSVElFUyIsICJDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTIiwgIkNTU19NT1RJT05fUFJPUEVSVElFUyIsICJTVFlMRV9USEVNRV9BVFRSUyIsICJTVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTIiwgIkJBS0VfQ0FURUdPUklFUyIsICJWRUVMQV9DQVNDQURFX0xBWUVSUyIsICJVWF9IT1NUX0xBWUVSUyIsICJWSUVXRVJfUlVOVElNRV9MQVlFUlMiLCAiVklFV0VSX0NTU19MQVlFUl9PUkRFUiIsICJMQVlFUl9OQU1FIiwgIkxBWUVSX09QRU4iLCAiT1dORVIiLCAiSE9TVF9DU1NfRkFMTEJBQ0siLCAiQkFLRV9MQVlFUiIsICJERUZBVUxUX0NBVEVHT1JJRVMiLCAiREVGQVVMVF9DQUNIRV9NUyIsICJCQUtFX1NDUkVFTl9NRURJQSIsICJCQUtFX1NDUkVFTl9DSFJPTUUiLCAiQkFLRV9TQ1JFRU5fQUxTT19FWFBMT1JFUiIsICJCQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTIiwgIkJBS0VfU0NSRUVOX0FMU08iLCAiQU5JTUFUQUJMRV9CUkFORCIsICJBTklNX0xBWUVSIiwgIkFOSU1fVFJJR0dFUl9OQU1FIiwgImhhc1R5cGVkT00iLCAiY3NzVW5pdEZhY3RvcnlOYW1lIiwgInVuaXQiLCAiY3NzVW5pdENvbnN0cnVjdG9yTmFtZSIsICJpc0Nzc0xheWVyTmFtZSIsICJuYW1lIiwgImNzc0VtcHR5TGF5ZXJSdWxlIiwgImxheWVyTmFtZSIsICJzdHJpcENzc1ByZWFtYmxlIiwgImNzcyIsICJvdXQiLCAiaSIsICJuZXh0IiwgImlzTGF5ZXJCbG9ja1J1bGUiLCAicnVsZSIsICJzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0IiwgImNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCIsICJwcm9taXNlT3JEaXJlY3QiLCAicHJvbWlzZSIsICJjYiIsICJpc1NoYWRvd1Jvb3QiLCAidmFsdWUiLCAiaXNEb2N1bWVudCIsICJpc0Nzc0VsZW1lbnQiLCAiZXNjYXBlQ1NTSWRlbnRpZmllciIsICJjaGFyIiwgInN0eWxlSWRDb3VudGVyIiwgImNyZWF0ZVN0eWxlSWQiLCAidXJsQ2FuUGFyc2UiLCAiaGFzaCIsICJzdHJpbmciLCAiaGFzaEJ1ZmZlciIsICJwYXJzZUxlbmd0aCIsICJzaXplIiwgInBhcnNlT3JpZ2luIiwgIm9yaWdpbiIsICJlbGVtZW50IiwgInZhbHVlcyIsICJwYXJzZVRpbWUiLCAidiIsICJmYWxsYmFjayIsICJ0IiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50IiwgImNvdW50IiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbnMiLCAibiIsICJpc1Njcm9sbERyaXZlbiIsICJpc1ZpZXdEcml2ZW4iLCAiaXNTdHlsZUhvc3QiLCAibm9kZSIsICJyZWFkU2hlZXRSdWxlQ291bnQiLCAic2hlZXQiLCAiaXNBZG9wdGVkU2hlZXRFbXB0eSIsICJpc0NvbG9yVG9rZW4iLCAiaXNFbGVtZW50VmlzaWJsZSIsICJlbCIsICJpc1N0eWxlQmluZGluZyIsICJzdHlsZXMiLCAiaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0IiwgImNzc1RleHQiLCAic291cmNlIiwgImNodW5rIiwgImRlY2xhcmF0aW9uIiwgImNvbG9uSW5kZXgiLCAicHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlIiwgInJhdyIsICJhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZSIsICJpc05hdGl2ZUNTU1N0eWxlVmFsdWUiLCAiQ1NTU3R5bGVWYWx1ZUN0b3IiLCAicHJvdG90eXBlIiwgImlzUmVhY3RpdmVTdHlsZVZhbHVlIiwgImlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uIiwgImVzY2FwZVJlZ0V4cCIsICJjb250YWluc01hcmtlciIsICJjc3NWYWx1ZSIsICJtYXJrZXIiLCAicmVhZEF0dGFjaGVkQ1NTVW5pdCIsICJ0ZXh0IiwgIm1hdGNoIiwgImF1dGhvcmVkIiwgIm5vcm1hbGl6ZWQiLCAiZ2V0V2luZG93Q29uc3RydWN0b3IiLCAid2luIiwgImNyZWF0ZVR5cGVkVW5pdFZhbHVlIiwgIkNTU05hbWVzcGFjZSIsICJmYWN0b3J5TmFtZSIsICJmYWN0b3J5IiwgIkNTU1VuaXRWYWx1ZUN0b3IiLCAiaXNTdHlsZVZhbHVlIiwgInZhbCIsICJpc1VuaXRWYWx1ZSIsICJxdWVyeUZpcnN0RGVlcCIsICJyb290IiwgInNlbGVjdG9yIiwgImRpcmVjdCIsICJzY29wZSIsICJoaXQiLCAiaW5uZXIiLCAiY3NzTGF5ZXJPcmRlciIsICJncm91cHMiLCAic2VlbiIsICJuYW1lcyIsICJncm91cCIsICJsaXN0IiwgInZlZWxhQ2FzY2FkZU9yZGVyIiwgIm1ha2VIb3N0TGF5ZXJPcmRlciIsICJleHRyYSIsICJjc3NMYXllckJsb2NrIiwgImJvZHkiLCAid3JhcENzc0xheWVyIiwgIm5vcm1hbGl6ZUNzc0ZvckxheWVyIiwgInRyaW1tZWQiLCAidW53cmFwT3V0ZXJMYXllckJsb2NrIiwgImV4cGVjdGVkTmFtZSIsICJvcGVuIiwgImRlcHRoIiwgImNoIiwgInVud3JhcENzc0xheWVyIiwgInN0cmlwcGVkIiwgImNzc0ltcG9ydFdpdGhMYXllciIsICJ1cmwiLCAibGF5ZXIiLCAiVVhfUFJFTE9BRF9IT1NUX0NTUyIsICJnZXRPckNyZWF0ZUxheWVyUnVsZSIsICJydWxlcyIsICJleGlzdGluZyIsICJydWxlSW5kZXgiLCAiY3JlYXRlZCIsICJ0b2tlbml6ZU51bWVyaWNDU1MkMSIsICJ0b2tlbnMiLCAiY3Vyc29yIiwgInJlc3QiLCAid2hpdGVzcGFjZSIsICJudW1iZXIiLCAidW5pdE1hdGNoIiwgImlkZW50aWZpZXIiLCAic3ltYm9sIiwgIk51bWVyaWNUeXBlZE9NUGFyc2VyJDEiLCAidG9rZW4iLCAiQ29uc3RydWN0b3IiLCAib3BlcmF0b3IiLCAicmlnaHQiLCAicGFyc2VUb1R5cGVkT00iLCAic2V0UHJvcGVydHlJZk5vdEVxdWFsIiwgInN0eWxlUmVmIiwgImtlYmFiIiwgImltcG9ydGFuY2UiLCAic2V0U3R5bGVQcm9wZXJ0eVR5cGVkIiwgInN0eWxlTWFwUmVmIiwgInNldFN0eWxlUHJvcGVydHlGYWxsYmFjayIsICJvbGQiLCAibmV3VmFsIiwgInBhcnNlZCIsICJtYXliZU51bSIsICJzZXRTdHlsZVByb3BlcnR5IiwgImhhbmRsZVN0eWxlQ2hhbmdlIiwgInByb3AiLCAic2V0U3R5bGVJblJ1bGUiLCAiZ2V0U3R5bGVSdWxlIiwgInNldFN0eWxlUnVsZSIsICJwcm9wTmFtZSIsICJwcm9wVmFsdWUiLCAibG9hZFN0eWxlU2hlZXQiLCAiaW5saW5lIiwgImJhc2UiLCAiaW50ZWdyaXR5IiwgImxvYWQiLCAiZmV0Y2hBbmRDYWNoZSIsICJzZXRTdHlsZVVSTCIsICJyZXMiLCAiZXJyb3IiLCAibG9hZEJsb2JTdHlsZSIsICJzdHlsZSIsICJsb2FkSW5saW5lU3R5bGUiLCAicm9vdEVsZW1lbnQiLCAiUExBQ0UiLCAic2V0UHJvcGVydHkiLCAidGFyZ2V0IiwgInByZWxvYWRTdHlsZSIsICJsb2FkQXNBZG9wdGVkIiwgInJlbWVtYmVyQWRvcHRlZFRleHQiLCAiY3NzVGV4dEZvckFkb3B0ZWRTaGVldCIsICJzdG9yZWQiLCAibWFwcGVkIiwgImVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQiLCAiYXBwbHlBZG9wdGVkU3R5bGVUZXh0IiwgIm1lc3NhZ2UiLCAic2hlZXRGb3JCbG9iIiwgImJsb2IiLCAibG9hZEFzQWRvcHRlZFVuc2FmZSIsICJjYWNoZWQiLCAiYXBwbGllZCIsICJsYXllcldyYXBwZWQiLCAicmVtb3ZlQWRvcHRlZCIsICJmZXRjaEFzSW5saW5lIiwgImNvbGxlY3RTdHlsZUhvc3RzIiwgImludG8iLCAiY2hpbGQiLCAibm90aWZ5U3R5bGVUcmVlSG9zdHMiLCAiaG9zdHMiLCAicmVhc29uIiwgImZuIiwgInJlZ2lzdGVyU3R5bGVUcmVlSG9vayIsICJvYnNlcnZlU3R5bGVUcmVlIiwgIm9ic2VydmVyIiwgInJlY29yZHMiLCAicmVjIiwgInNoZWV0cyIsICJyZWh5ZHJhdGVDb25zdHJ1Y3RhYmxlU2hlZXRzIiwgImNhblBhcnNlIiwgImlkeCIsICJnZXRUcmFuc2Zvcm0iLCAibWF0cml4IiwgImdldFRyYW5zZm9ybU9yaWdpbiIsICJjc3NPcmlnaW4iLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJzcmMiLCAiY3MiLCAiZ2V0RWxlbWVudFpvb20iLCAiem9vbSIsICJjdXJyZW50RWxlbWVudCIsICJjdXJyZW50Q1NTWm9vbSIsICJnZXRQeFZhbHVlIiwgImdldFBhZGRpbmciLCAiYXhpcyIsICJzdHlsZUVsZW1lbnQiLCAic2V0U3R5bGVSdWxlcyIsICJjbGFzc2VzIiwgImFyZ3MiLCAiZ2V0U3R5bGVMYXllciIsICJlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IiLCAic3R5bGVJZCIsICJqb2luU2NvcGVkU2VsZWN0b3IiLCAiZmluZFN0eWxlUnVsZSIsICJmdWxsU2VsZWN0b3IiLCAiZXhwZWN0ZWQiLCAicmVxdWVzdGVkIiwgImFjdHVhbCIsICJiYXNpcyIsICJiYXNpc0VsZW1lbnQiLCAic3R5bGVFbGVtZW50R2xvYmFsIiwgInJ1bGVJZCIsICJidXJsIiwgInByb21pc2VkIiwgImdldEFkb3B0ZWRTdHlsZVJ1bGUiLCAiaW5TaGFkb3ciLCAidGFyZ2V0QWRvcHRlZFNoZWV0cyIsICJzZWxlY3RvcktleSIsICJzaGFkb3dNYXAiLCAibGF5ZXJSdWxlIiwgInNoYWRvd0xheWVyTWFwIiwgImxheWVyUnVsZUluZGV4IiwgInIiLCAiaW52YWxpZGF0aW9uUmVhZHkiLCAibGFzdEZpbmdlcnByaW50IiwgInJlYmFrZVF1ZXVlZCIsICJub3JtYWxpemVDYXRlZ29yaWVzIiwgImNhdGVnb3JpZXMiLCAiY2FjaGVLZXlGb3IiLCAibWVkaWEiLCAiYmFrZVRoZW1lRmluZ2VycHJpbnQiLCAicGFydHMiLCAibG9jYWwiLCAidGFrZVByb3AiLCAiQ09MT1JfUFJPUF9TRVQiLCAiYmFrZURlY2xSYW5rIiwgImNvbGxlY3RCYWtlZERlY2xhcmF0aW9ucyIsICJzZXQiLCAiYnVpbGRCYWtlZENzc1RleHQiLCAiZGVjbGFyYXRpb25zIiwgInJvd3MiLCAiYSIsICJiIiwgImJha2VkIiwgImNvbGxlY3RCYWtlU2NyZWVuSG9zdHMiLCAiY2hyb21lIiwgImJha2VBbHNvUXVlcmllc0ZvciIsICJjb2xsZWN0QmFrZUFsc29Ib3N0cyIsICJxdWVyaWVzIiwgInBpZXJjZVNoYWRvdyIsICJyb290U2VsIiwgImZpbmQiLCAic2VsIiwgImdyb3VwZWQiLCAicXVlcnkiLCAicSIsICJzZWxzIiwgImFkb3B0ZWRMaXN0IiwgImFzc2lnbkFkb3B0ZWQiLCAiYWRvcHRTaGVldCIsICJ1bmFkb3B0U2hlZXQiLCAid3JpdGVCYWtlZENzcyIsICJyZW1lbWJlckNhY2hlIiwgImNhY2hlTXMiLCAicHJldiIsICJlbnRyeSIsICJkcm9wQ2FjaGUiLCAiY2FjaGVLZXkiLCAiY2xlYXJBbGxDYWNoZSIsICJwYXJrQmFrZWQiLCAicmVzdW1lQmFrZWQiLCAiZmluZ2VycHJpbnQiLCAiYmFrZUNvbXB1dGVkU3R5bGUiLCAiYmFrZUlPIiwgImVuc3VyZUJha2VJTyIsICJlbnRyaWVzIiwgImVuc3VyZUJha2VkUmVjb3JkIiwgImNhbkNvbnN0cnVjdCIsICJmbHVzaFJlYmFrZSIsICJiYXRjaCIsICJzY2hlZHVsZVJlYmFrZSIsICJpbnZhbGlkYXRlQmFrZWRTdHlsZXMiLCAiZW5zdXJlQmFrZUludmFsaWRhdGlvbiIsICJob3N0IiwgIm9wdGlvbnMiLCAidW5iYWtlQ29tcHV0ZWRTdHlsZSIsICJrZWVwQ2FjaGUiLCAicmViYWtlQ29tcHV0ZWRTdHlsZSIsICJnZXRCYWtlZFN0eWxlIiwgImJha2VTY3JlZW5Db2xvcnMiLCAib3B0cyIsICJleHRyYXMiLCAiZm9sbG93ZXJzIiwgInVuYmFrZVNjcmVlbkNvbG9ycyIsICJzY2hlZHVsZUJha2VTY3JlZW5Db2xvcnMiLCAicnVuIiwgInJldHJ5TWlzcyIsICJwaWVyY2UiLCAic3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyIsICJiVG8iLCAiYWRvcHRlZFNoZWV0cyIsICJsaXZlIiwgInMiLCAiYWRkQWRvcHRlZFNoZWV0VG9FbGVtZW50IiwgImVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrIiwgInJlaHlkcmF0ZUFkb3B0ZWRTdHlsZVNoZWV0cyIsICJyZXN0b3JlIiwgImhvc3RDc3NUZXh0IiwgInZpc2l0IiwgImNoaWxkcmVuIiwgImVuc3VyZUhvc3RTdHlsZXMiLCAibG9hZENhY2hlZFN0eWxlcyIsICJzdHlsZUZsdXNoQmF0Y2giLCAic3R5bGVGbHVzaFNjaGVkdWxlZCIsICJzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMiLCAicmVzb2x2ZWRTcmMiLCAid2VhayIsICJlIiwgInJlc3VsdCIsICJhZG9wdGVkIiwgImFkZEFkb3B0ZWRTaGVldCIsICJ2YXJzIiwgInByb3BzIiwgImlzTGlua2VyTGlrZSIsICJiaW5kV2l0aCIsICJoYW5kbGVyIiwgImxpbmtlciIsICJ3ZWwiLCAid3YiLCAidW4iLCAiY3VyciIsICJlbGVtZW50UmVmIiwgInZhbHVlUmVmIiwgInVuc3ViIiwgImFuaW1hdGFibGVJZCIsICJvblNjcm9sbCIsICJvIiwgIm9uVmlldyIsICJBbmltYXRhYmxlVmFsdWUiLCAiI3N0ZXBzIiwgIiNvcHRpb25zIiwgIiNjdXJyZW50IiwgIiNzdWJzY3JpYmVycyIsICIjYXR0YWNobWVudHMiLCAiI3Jlc29sdmVFbGVtZW50UmVmIiwgInNlbGYiLCAiI2ZpbmROZWFyZXN0U2Nyb2xsZXIiLCAiI2NyZWF0ZVRpbWVsaW5lIiwgInRyaWdnZXIiLCAiU2Nyb2xsVGltZWxpbmVDdG9yIiwgIlZpZXdUaW1lbGluZUN0b3IiLCAiI3N0YXJ0VGltZWxpbmVEcml2ZW4iLCAiYXR0YWNobWVudCIsICJwbGFuIiwgInRpbWVsaW5lIiwgIiNzdGFydFRpbWVsaW5lRmFsbGJhY2siLCAidGltaW5nIiwgIiNidWlsZFRpbWluZyIsICJhbmltYXRpb24iLCAiI2J1aWxkS2V5ZnJhbWVzIiwgInN0ZXBzIiwgIiNyZXNvbHZlU3RlcCIsICJzY3JvbGxlciIsICJyYWZJZCIsICJjb21wdXRlUHJvZ3Jlc3MiLCAidnAiLCAicmVjdCIsICJ0b3RhbCIsICJtYXgiLCAibGlzdGVuVGFyZ2V0IiwgImhpbnQiLCAic3RlcCIsICJvZmZzZXRzIiwgImVhc2luZyIsICJmcmFtZSIsICJzdGFydCIsICIjdHJhY2tQcm9ncmVzcyIsICIjd2lyZVRyaWdnZXIiLCAibGFzdCIsICJyZXZlcnNlT25FeGl0IiwgInBsYXlGb3J3YXJkIiwgInBsYXlCYWNrd2FyZCIsICJlbnRlciIsICJsZWF2ZSIsICJvbkVudGVyIiwgIm9uTGVhdmUiLCAiZm9yd2FyZCIsICJvbkNsaWNrIiwgImFwcGx5IiwgInVuc3Vic2NyaWJlIiwgImV2ZW50TmFtZSIsICJhdHRyIiwgIndhbnRQcmVzZW50IiwgIm9uRXZlbnQiLCAiZXYiLCAibW8iLCAiI2VhY2giLCAiYXQiLCAicmF0ZSIsICJhbmltYXRhYmxlIiwgImlzQW5pbWF0YWJsZVZhbHVlIiwgInN0eWxlVGVtcGxhdGVJZCIsICJyZWFkUmVhY3RpdmVOdW1iZXIiLCAic2xvdCIsICJjdXJyZW50IiwgImdldFJlYWN0aXZlSW5pdGlhbE51bWJlciIsICJyZXBsYWNlVHlwZWRNYXJrZXJzIiwgInNsb3RzIiwgImlzRGlyZWN0U2xvdFZhbHVlIiwgImVzY2FwZWRNYXJrZXIiLCAic2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlIiwgImlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0IiwgImVzY2FwZWRVbml0IiwgInNldFBhcnNlZFR5cGVkVmFsdWUiLCAic3R5bGVNYXAiLCAicHJvcGVydHkiLCAidG9rZW5pemVOdW1lcmljQ1NTIiwgInZhcmlhYmxlIiwgIk51bWVyaWNUeXBlZE9NUGFyc2VyIiwgInJlYWN0aXZlQnlNYXJrZXIiLCAidHlwZWRCeU1hcmtlciIsICJyZWFjdGl2ZSIsICJjaGVja3BvaW50IiwgInJocyIsICJsZWFmIiwgInR5cGVkIiwgImJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlIiwgInJlYWN0aXZlU2xvdHMiLCAidHlwZWRTbG90cyIsICJpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkiLCAiYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZSIsICJsZWF2ZXMiLCAiY29tcG9uZW50cyIsICJ6ZXJvUHgiLCAib25lTnVtYmVyIiwgImluZGV4IiwgImNvbnN1bWUiLCAiY29uc3VtZVN5bWJvbCIsICJwYXJzZUFyZ3VtZW50IiwgInNsaWNlIiwgInRyZWUiLCAicGFyc2VBcmd1bWVudExpc3QiLCAiY3JlYXRlQ29tcG9uZW50IiwgImN0b3IiLCAiY2xhc3NOYW1lIiwgIkN0b3IiLCAiVHJhbnNsYXRlIiwgIlNjYWxlIiwgIlJvdGF0ZSIsICJTa2V3IiwgIkNTU1RyYW5zZm9ybVZhbHVlQ3RvciIsICJidWlsZFR5cGVkT01TdHlsZVZhbHVlIiwgImFkZE11dGFibGVMZWF2ZXMiLCAiYXR0YWNoTGVhZlRhcmdldHMiLCAiYXBwbHlTdHlsZVRlbXBsYXRlIiwgInZhcmlhYmxlcyIsICJhbmltYXRhYmxlU2xvdHMiLCAicHJvYmUiLCAibXV0YWJsZUxlYXZlcyIsICJyZXF1aXJlZENTU1ZhcmlhYmxlcyIsICJzdWJzY3JpcHRpb25zIiwgInByb3BlcnR5TW9kZU93bmVkIiwgInBhcnNlZFZhbHVlIiwgImluaXRpYWxOdW1iZXIiLCAiZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5IiwgInByaW9yaXR5IiwgInVzZWRUeXBlZFNsb3RzIiwgInVzZWRSZWFjdGl2ZVNsb3RzIiwgImNhblVzZVR5cGVkT00iLCAiYXBwbGllZFRocm91Z2hUeXBlZE9NIiwgImRpcmVjdFNsb3QiLCAibGlua2VkVmFsdWUiLCAiQ1NTTWF0aFByb2R1Y3RDdG9yIiwgInByb2R1Y3QiLCAicmVjb25zdHJ1Y3RlZCIsICJuZWVkc0NTU1ZhcmlhYmxlIiwgInN1YnNjcmlwdGlvbiIsICJuZXh0VmFsdWUiLCAiZGlydHlSb290cyIsICJwcm9wZXJ0eU5hbWUiLCAiY29tcGxpbGVTdGF0aWNDU1NUZXh0IiwgImZvclJldHVybiIsICJwcm9wZXJ0aWVzIiwgIlMiLCAic3RyaW5ncyIsICJ0ZW1wbGF0ZUlkIiwgImNvbnN1bWVkIiwgIm5leHRUZXh0IiwgImF0dGFjaGVkVW5pdCIsICJpbml0aWFsVmFsdWUiLCAidHlwZSIsICJzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzIiwgImF0dHJpYnV0ZXMiLCAicGF0dGVybiIsICJhdHRyaWJ1dGVJbmRleCIsICJqb2luU3RhdGljSW5saW5lU3R5bGUiLCAiY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlIiwgImJpbmRTdHlsZSIsICJzdHlsZWQiLCAicGFyc2VQcm9wZXJ0eUxpc3QiLCAiZnJvbUtleWZyYW1lcyIsICJmcm9tU3RyaW5nIiwgIiRwYWlyIiwgIml0ZW0iLCAiayIsICJwYXJzZUFuaW1hdGlvblRlbXBsYXRlIiwgImZ1bGxUZXh0IiwgInZhbHVlVGV4dCIsICJzbG90TWF0Y2giLCAic2xvdFZhbHVlIiwgInByb2Nlc3NBbmltYXRpb25WYWx1ZXMiLCAicmVzb2x2ZWQiLCAicmVhY3RpdmVJbmRpY2VzIiwgImhhc1JlYWN0aXZlIiwgImJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzIiwgImdsb2JhbE9mZnNldHMiLCAicHJvcGVydHlMaXN0IiwgIm1heExlbmd0aCIsICJwIiwgIl8iLCAiZnJhbWVzIiwgImtlYmFiUHJvcCIsICJidWlsZEFuaW1hdGlvblRpbWluZyIsICJkdXJhdGlvbiIsICJkZWxheSIsICJpdGVyYXRpb25zIiwgImNyZWF0ZVJlYWN0aXZlQW5pbWF0aW9uIiwgInJlYWN0aXZlVmFsdWUiLCAibmV3RnJhbWVzIiwgImN1cnJlbnRUaW1lIiwgInN1YiIsICJBIiwgImRvQW5pbWF0aW9uIiwgImNvbmZpZyIsICJrZXlmcmFtZXMiLCAiY2FuQW5pbWF0ZSIsICJhbmltYXRlIiwgInJlY29yZCIsICJkZWZpbmVBbmltYXRpb24iLCAic2VxdWVuY2VBbmltYXRpb25zIiwgInNlcXVlbmNlIiwgInBhcmFsbGVsQW5pbWF0aW9ucyIsICJhbmltYXRpb25zIiwgInJlc3VsdHMiLCAiY2xlYW51cCIsICJzdGFnZ2VyQW5pbWF0aW9uIiwgImVsZW1lbnRzIiwgInN0YWdnZXJEZWxheSIsICJpc1JlYWN0aXZlVHJpZ2dlciIsICJhc1Byb3BlcnR5TGlzdCIsICJrZiIsICJzZXJpYWxpemVWYWx1ZSIsICJpc0VsZW1lbnQiLCAiY29tcGlsZUtleWZyYW1lc0NzcyIsICJkZWNscyIsICJwY3QiLCAiY29tcGlsZVRyaWdnZXJDc3MiLCAiY29tcGlsZWQiLCAia2luZCIsICJyZXNvbHZlQ3NzQW5pbWF0aW9uVGFyZ2V0IiwgImRlY2xhcmF0aW9uc1RvVGV4dCIsICJiaW5kQ3NzQW5pbWF0aW9uIiwgImtleWZyYW1lc1J1bGUiLCAiY29tcGFuaW9uVGV4dCIsICJjb21wYW5pb25JbmRleCIsICJjb21wYW5pb25SdWxlIiwgImRlbGV0ZUtleWZyYW1lc0Zyb20iLCAic2hlZXRIb3N0IiwgImRlYWQiLCAibmV4dEhvc3RDb3VudCIsICJsZWZ0b3ZlciIsICJvbkJvcmRlck9ic2VydmVTeW1ib2wiLCAib25Cb3JkZXJPYnNlcnZlIiwgIm9uQ29udGVudE9ic2VydmVTeW1ib2wiLCAib25Db250ZW50T2JzZXJ2ZSIsICJ1bndyYXBGcm9tUXVlcnkiLCAibm9ybWFsaXplU2VsZWN0b3IiLCAic2FmZVF1ZXJ5U2VsZWN0b3JBbGwiLCAic2FmZU1hdGNoZXMiLCAib2JzZXJ2ZUF0dHJpYnV0ZUJ5U2VsZWN0b3IiLCAiYXR0cmlidXRlIiwgImF0dHJpYnV0ZUxpc3QiLCAibXV0YXRpb25MaXN0IiwgIm11dGF0aW9uIiwgImFkZGVkTm9kZXMiLCAicmVtb3ZlZE5vZGVzIiwgIlBvbHlmaWxsQ3VzdG9tRXZlbnQiLCAiaW5pdCIsICJoYXNQYXlsb2FkIiwgInJlZHVjZWQiLCAiZGlzcGF0Y2hMaWZlY3ljbGVFdmVudCIsICJ3YWl0RWxlbWVudEFuaW1hdGlvbnMiLCAicmVzb2x2ZSIsICJpc1JlY29yZFByb3BlcnRpZXMiLCAiZmxpZ2h0cyIsICJzdGFydFBsYXllciIsICJlcnIiLCAibXNnIiwgInBsYXkiLCAiYmVmb3JlIiwgImFmdGVyIiwgInByaW9yIiwgImNhbmNlbGxlZCIsICJzZXR0bGUiLCAiYWJvcnRlZCIsICJwbGF5ZXIiLCAiZmxpZ2h0IiwgImFwcGVhciIsICJkaXNhcHBlYXIiLCAiZGVjb3JTaG93IiwgImRlY29ySGlkZSIsICJpbml0VmlzaWJpbGl0eSIsICJST09UIiwgImhpZGRlbiJdCn0K
|