@launchdarkly/o11y 1.4.1 → 1.5.0
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/CHANGELOG.md +14 -0
- package/dist/LDObserve-o8Ro1UV8.js +160 -0
- package/dist/LDObserve-o8Ro1UV8.js.map +1 -0
- package/dist/LDObserve.d.ts +44 -0
- package/dist/LDObserve.js +1 -1
- package/dist/{common-D8kkCWo3.js → common-1QcQF8EE.js} +513 -498
- package/dist/{common-D8kkCWo3.js.map → common-1QcQF8EE.js.map} +1 -1
- package/dist/index.d.ts +85 -0
- package/dist/index.js +209 -207
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +113 -113
- package/dist/index.umd.js.map +1 -1
- package/dist/{observe-BCebRa17.js → observe-TWCqC5wb.js} +2072 -1967
- package/dist/observe-TWCqC5wb.js.map +1 -0
- package/dist/observe.d.ts +73 -0
- package/dist/observe.js +3 -3
- package/dist/{record-DG2IcHxO.js → record-Bgkzgi9x.js} +489 -487
- package/dist/record-Bgkzgi9x.js.map +1 -0
- package/dist/record.d.ts +369 -0
- package/dist/record.js +2 -2
- package/package.json +1 -1
- package/dist/LDObserve-BQr7RYVC.js +0 -130
- package/dist/LDObserve-BQr7RYVC.js.map +0 -1
- package/dist/observe-BCebRa17.js.map +0 -1
- package/dist/record-DG2IcHxO.js.map +0 -1
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
1
|
+
var $l = Object.defineProperty, ql = Object.defineProperties;
|
|
2
|
+
var eo = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var St = Object.getOwnPropertySymbols;
|
|
4
4
|
var Ps = Object.prototype.hasOwnProperty, Es = Object.prototype.propertyIsEnumerable;
|
|
5
5
|
var Bs = (e) => {
|
|
6
6
|
throw TypeError(e);
|
|
7
7
|
};
|
|
8
|
-
var si = (e, t, s) => t in e ?
|
|
8
|
+
var si = (e, t, s) => t in e ? $l(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s, K = (e, t) => {
|
|
9
9
|
for (var s in t || (t = {}))
|
|
10
10
|
Ps.call(t, s) && si(e, s, t[s]);
|
|
11
11
|
if (St)
|
|
12
12
|
for (var s of St(t))
|
|
13
13
|
Es.call(t, s) && si(e, s, t[s]);
|
|
14
14
|
return e;
|
|
15
|
-
}, me = (e, t) =>
|
|
15
|
+
}, me = (e, t) => ql(e, eo(t));
|
|
16
16
|
var st = (e, t) => {
|
|
17
17
|
var s = {};
|
|
18
18
|
for (var l in e)
|
|
@@ -40,16 +40,16 @@ var fe = (e, t, s) => new Promise((l, c) => {
|
|
|
40
40
|
}, b = (m) => m.done ? l(m.value) : Promise.resolve(m.value).then(u, f);
|
|
41
41
|
b((s = s.apply(e, t)).next());
|
|
42
42
|
});
|
|
43
|
-
import { z as Bn, A as
|
|
44
|
-
import { L as
|
|
45
|
-
import { LDRecord as
|
|
46
|
-
const
|
|
43
|
+
import { z as Bn, A as to, a as Le, S as Ye, d as Be, g as ri, r as _s, G as ni, b as io, c as so, o as ro, q as no, m as $s, e as li, f as rt, F as qs, V as lo, P as oo, h as ao, t as co, H as er, M as uo, i as ho, s as po, L as mo, B as fo, C as tr, D as bo, E as yo, p as Zo, l as ir, v as go, I as So, y as Xo, J as sr, K as Ro, N as Go, O as Vo, Q as Wo, R as Io, T as wo, U as Co } from "./common-1QcQF8EE.js";
|
|
44
|
+
import { L as xo, s as vo, i as Me, a as Jt } from "./buffer-CwCRPuMA.js";
|
|
45
|
+
import { LDRecord as Lo } from "./LDRecord.js";
|
|
46
|
+
const ko = {
|
|
47
47
|
key: "_sid"
|
|
48
|
-
},
|
|
49
|
-
const t =
|
|
48
|
+
}, Jo = "rrweb/sequential-id@1", Yo = (e) => {
|
|
49
|
+
const t = ko;
|
|
50
50
|
let s = 0;
|
|
51
51
|
return {
|
|
52
|
-
name:
|
|
52
|
+
name: Jo,
|
|
53
53
|
eventProcessor(l) {
|
|
54
54
|
return Object.assign(l, {
|
|
55
55
|
[t.key]: ++s
|
|
@@ -58,12 +58,12 @@ const Lo = {
|
|
|
58
58
|
options: t
|
|
59
59
|
};
|
|
60
60
|
};
|
|
61
|
-
var
|
|
61
|
+
var Qn = /* @__PURE__ */ ((e) => (e[e.DomContentLoaded = 0] = "DomContentLoaded", e[e.Load = 1] = "Load", e[e.FullSnapshot = 2] = "FullSnapshot", e[e.IncrementalSnapshot = 3] = "IncrementalSnapshot", e[e.Meta = 4] = "Meta", e[e.Custom = 5] = "Custom", e[e.Plugin = 6] = "Plugin", e[e.Asset = 7] = "Asset", e))(Qn || {}), No = Object.defineProperty, To = (e, t, s) => t in e ? No(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s, L = (e, t, s) => To(e, typeof t != "symbol" ? t + "" : t, s), rr, Uo = Object.defineProperty, Ko = (e, t, s) => t in e ? Uo(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s, nr = (e, t, s) => Ko(e, typeof t != "symbol" ? t + "" : t, s), pe = /* @__PURE__ */ ((e) => (e[e.Document = 0] = "Document", e[e.DocumentType = 1] = "DocumentType", e[e.Element = 2] = "Element", e[e.Text = 3] = "Text", e[e.CDATA = 4] = "CDATA", e[e.Comment = 5] = "Comment", e))(pe || {});
|
|
62
62
|
const Xt = /* @__PURE__ */ new Map(), lr = /* @__PURE__ */ new WeakSet();
|
|
63
63
|
function or(e) {
|
|
64
64
|
return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
|
|
65
65
|
}
|
|
66
|
-
function
|
|
66
|
+
function Fo(e) {
|
|
67
67
|
if (lr.has(e))
|
|
68
68
|
return;
|
|
69
69
|
lr.add(e);
|
|
@@ -112,7 +112,7 @@ const ar = {
|
|
|
112
112
|
ShadowRoot: ["getSelection"],
|
|
113
113
|
Element: [],
|
|
114
114
|
MutationObserver: ["constructor"]
|
|
115
|
-
}, Rt = {},
|
|
115
|
+
}, Rt = {}, Dn = {}, Mo = () => !!globalThis.Zone;
|
|
116
116
|
function Vs(e) {
|
|
117
117
|
if (Rt[e])
|
|
118
118
|
return Rt[e];
|
|
@@ -129,7 +129,7 @@ function Vs(e) {
|
|
|
129
129
|
return typeof s[b] == "function" && ((m = s[b]) == null ? void 0 : m.toString().includes("[native code]"));
|
|
130
130
|
}
|
|
131
131
|
));
|
|
132
|
-
if (c && f && !
|
|
132
|
+
if (c && f && !Mo())
|
|
133
133
|
return Rt[e] = t.prototype, t.prototype;
|
|
134
134
|
try {
|
|
135
135
|
const b = document.createElement("iframe");
|
|
@@ -140,7 +140,7 @@ function Vs(e) {
|
|
|
140
140
|
if (!h)
|
|
141
141
|
return b.remove(), s;
|
|
142
142
|
const d = navigator.userAgent;
|
|
143
|
-
return d.includes("Safari") && !d.includes("Chrome") ? (b.classList.add("rr-block"), b.setAttribute("__rrwebUntaintedMutationObserver", ""),
|
|
143
|
+
return d.includes("Safari") && !d.includes("Chrome") ? (b.classList.add("rr-block"), b.setAttribute("__rrwebUntaintedMutationObserver", ""), Dn[e] = () => b.remove()) : b.remove(), Rt[e] = h;
|
|
144
144
|
} catch (b) {
|
|
145
145
|
return s;
|
|
146
146
|
}
|
|
@@ -160,7 +160,7 @@ function Te(e, t, s) {
|
|
|
160
160
|
return f ? (oi[c] = f, f.call(t)) : t[s];
|
|
161
161
|
}
|
|
162
162
|
const ai = {};
|
|
163
|
-
function
|
|
163
|
+
function jn(e, t, s) {
|
|
164
164
|
const l = `${e}.${String(s)}`;
|
|
165
165
|
if (ai[l])
|
|
166
166
|
return ai[l].bind(
|
|
@@ -169,53 +169,53 @@ function Dn(e, t, s) {
|
|
|
169
169
|
const u = Vs(e)[s];
|
|
170
170
|
return typeof u != "function" ? t[s] : (ai[l] = u, u.bind(t));
|
|
171
171
|
}
|
|
172
|
-
function
|
|
172
|
+
function zo(e) {
|
|
173
173
|
return Te("Node", e, "ownerDocument");
|
|
174
174
|
}
|
|
175
|
-
function
|
|
175
|
+
function Ho(e) {
|
|
176
176
|
return Te("Node", e, "childNodes");
|
|
177
177
|
}
|
|
178
|
-
function
|
|
178
|
+
function Oo(e) {
|
|
179
179
|
return Te("Node", e, "parentNode");
|
|
180
180
|
}
|
|
181
|
-
function
|
|
181
|
+
function Po(e) {
|
|
182
182
|
return Te("Node", e, "parentElement");
|
|
183
183
|
}
|
|
184
|
-
function
|
|
184
|
+
function Eo(e) {
|
|
185
185
|
return Te("Node", e, "textContent");
|
|
186
186
|
}
|
|
187
|
-
function
|
|
188
|
-
return
|
|
189
|
-
}
|
|
190
|
-
function Bo(e) {
|
|
191
|
-
return Dn("Node", e, "getRootNode")();
|
|
187
|
+
function Bo(e, t) {
|
|
188
|
+
return jn("Node", e, "contains")(t);
|
|
192
189
|
}
|
|
193
190
|
function Qo(e) {
|
|
194
|
-
return
|
|
191
|
+
return jn("Node", e, "getRootNode")();
|
|
195
192
|
}
|
|
196
193
|
function Do(e) {
|
|
197
|
-
return e
|
|
194
|
+
return !e || !("host" in e) ? null : Te("ShadowRoot", e, "host");
|
|
198
195
|
}
|
|
199
196
|
function jo(e) {
|
|
197
|
+
return e.styleSheets;
|
|
198
|
+
}
|
|
199
|
+
function Ao(e) {
|
|
200
200
|
return !e || !("shadowRoot" in e) ? null : Te("Element", e, "shadowRoot");
|
|
201
201
|
}
|
|
202
|
-
function
|
|
202
|
+
function _o(e, t) {
|
|
203
203
|
return Te("Element", e, "querySelector")(t);
|
|
204
204
|
}
|
|
205
|
-
function
|
|
205
|
+
function $o(e, t) {
|
|
206
206
|
return Te("Element", e, "querySelectorAll")(t);
|
|
207
207
|
}
|
|
208
|
-
function
|
|
208
|
+
function qo() {
|
|
209
209
|
var e;
|
|
210
210
|
return [
|
|
211
211
|
Vs("MutationObserver").constructor,
|
|
212
|
-
(e =
|
|
212
|
+
(e = Dn.MutationObserver) != null ? e : () => {
|
|
213
213
|
}
|
|
214
214
|
];
|
|
215
215
|
}
|
|
216
|
-
let
|
|
217
|
-
/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString()) || (
|
|
218
|
-
function
|
|
216
|
+
let An = Date.now;
|
|
217
|
+
/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString()) || (An = () => (/* @__PURE__ */ new Date()).getTime());
|
|
218
|
+
function ea(e, t, s) {
|
|
219
219
|
try {
|
|
220
220
|
if (!(t in e))
|
|
221
221
|
return () => {
|
|
@@ -235,24 +235,24 @@ function qo(e, t, s) {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
const be = {
|
|
238
|
-
ownerDocument:
|
|
239
|
-
childNodes:
|
|
240
|
-
parentNode:
|
|
241
|
-
parentElement:
|
|
242
|
-
textContent:
|
|
243
|
-
contains:
|
|
244
|
-
getRootNode:
|
|
245
|
-
host:
|
|
246
|
-
styleSheets:
|
|
247
|
-
shadowRoot:
|
|
248
|
-
querySelector:
|
|
249
|
-
querySelectorAll:
|
|
250
|
-
nowTimestamp:
|
|
251
|
-
mutationObserverCtor:
|
|
252
|
-
patch:
|
|
253
|
-
wrapCanvasContextDrawImage:
|
|
238
|
+
ownerDocument: zo,
|
|
239
|
+
childNodes: Ho,
|
|
240
|
+
parentNode: Oo,
|
|
241
|
+
parentElement: Po,
|
|
242
|
+
textContent: Eo,
|
|
243
|
+
contains: Bo,
|
|
244
|
+
getRootNode: Qo,
|
|
245
|
+
host: Do,
|
|
246
|
+
styleSheets: jo,
|
|
247
|
+
shadowRoot: Ao,
|
|
248
|
+
querySelector: _o,
|
|
249
|
+
querySelectorAll: $o,
|
|
250
|
+
nowTimestamp: An,
|
|
251
|
+
mutationObserverCtor: qo,
|
|
252
|
+
patch: ea,
|
|
253
|
+
wrapCanvasContextDrawImage: Fo
|
|
254
254
|
};
|
|
255
|
-
function
|
|
255
|
+
function _n(e) {
|
|
256
256
|
return e.nodeType === e.ELEMENT_NODE;
|
|
257
257
|
}
|
|
258
258
|
function ot(e) {
|
|
@@ -266,13 +266,13 @@ function ot(e) {
|
|
|
266
266
|
function at(e) {
|
|
267
267
|
return Object.prototype.toString.call(e) === "[object ShadowRoot]";
|
|
268
268
|
}
|
|
269
|
-
function
|
|
269
|
+
function ta(e) {
|
|
270
270
|
return e.includes(" background-clip: text;") && !e.includes(" -webkit-background-clip: text;") && (e = e.replace(
|
|
271
271
|
/\sbackground-clip:\s*text;/g,
|
|
272
272
|
" -webkit-background-clip: text; background-clip: text;"
|
|
273
273
|
)), e;
|
|
274
274
|
}
|
|
275
|
-
function
|
|
275
|
+
function ia(e) {
|
|
276
276
|
const { cssText: t } = e;
|
|
277
277
|
if (t.split('"').length < 3) return t;
|
|
278
278
|
const s = ["@import", `url(${JSON.stringify(e.href)})`];
|
|
@@ -287,41 +287,41 @@ function fs(e) {
|
|
|
287
287
|
!s && e.ownerNode && (s = e.ownerNode.baseURI);
|
|
288
288
|
const l = Array.from(
|
|
289
289
|
t,
|
|
290
|
-
(c) =>
|
|
290
|
+
(c) => $n(c, s)
|
|
291
291
|
).join("");
|
|
292
|
-
return
|
|
292
|
+
return ta(l);
|
|
293
293
|
} catch (t) {
|
|
294
294
|
return null;
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
|
-
function
|
|
298
|
-
if (
|
|
297
|
+
function $n(e, t) {
|
|
298
|
+
if (qn(e)) {
|
|
299
299
|
let s;
|
|
300
300
|
try {
|
|
301
301
|
s = // for same-origin stylesheets,
|
|
302
302
|
// we can access the imported stylesheet rules directly
|
|
303
303
|
fs(e.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement
|
|
304
|
-
|
|
304
|
+
ia(e);
|
|
305
305
|
} catch (l) {
|
|
306
306
|
s = e.cssText;
|
|
307
307
|
}
|
|
308
308
|
return e.styleSheet.href ? Kt(s, e.styleSheet.href) : s;
|
|
309
309
|
} else {
|
|
310
310
|
let s = e.cssText;
|
|
311
|
-
return
|
|
311
|
+
return ra(e) && e.selectorText.includes(":") && (s = sa(s)), t ? Kt(s, t) : s;
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
|
-
function
|
|
314
|
+
function sa(e) {
|
|
315
315
|
const t = /(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;
|
|
316
316
|
return e.replace(t, "$1\\$2");
|
|
317
317
|
}
|
|
318
|
-
function
|
|
318
|
+
function qn(e) {
|
|
319
319
|
return "styleSheet" in e;
|
|
320
320
|
}
|
|
321
|
-
function
|
|
321
|
+
function ra(e) {
|
|
322
322
|
return "selectorText" in e;
|
|
323
323
|
}
|
|
324
|
-
class
|
|
324
|
+
class el {
|
|
325
325
|
constructor() {
|
|
326
326
|
nr(this, "idNodeMap", /* @__PURE__ */ new Map()), nr(this, "nodeMetaMap", /* @__PURE__ */ new WeakMap());
|
|
327
327
|
}
|
|
@@ -370,8 +370,8 @@ class qn {
|
|
|
370
370
|
this.idNodeMap = /* @__PURE__ */ new Map(), this.nodeMetaMap = /* @__PURE__ */ new WeakMap();
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
|
-
function
|
|
374
|
-
return new
|
|
373
|
+
function na() {
|
|
374
|
+
return new el();
|
|
375
375
|
}
|
|
376
376
|
function Tt({
|
|
377
377
|
element: e,
|
|
@@ -383,7 +383,7 @@ function Tt({
|
|
|
383
383
|
maskInputFn: f
|
|
384
384
|
}) {
|
|
385
385
|
let b = c || "";
|
|
386
|
-
return
|
|
386
|
+
return sl({
|
|
387
387
|
maskInputOptions: t,
|
|
388
388
|
tagName: s,
|
|
389
389
|
type: l,
|
|
@@ -394,7 +394,7 @@ function Qe(e) {
|
|
|
394
394
|
return e.toLowerCase();
|
|
395
395
|
}
|
|
396
396
|
const ur = "__rrweb_original__";
|
|
397
|
-
function
|
|
397
|
+
function la(e) {
|
|
398
398
|
const t = e.getContext("2d");
|
|
399
399
|
if (!t) return !0;
|
|
400
400
|
const s = 50;
|
|
@@ -421,7 +421,7 @@ function Ut(e) {
|
|
|
421
421
|
Qe(t)
|
|
422
422
|
) : null;
|
|
423
423
|
}
|
|
424
|
-
function
|
|
424
|
+
function tl(e, t) {
|
|
425
425
|
var u;
|
|
426
426
|
let s;
|
|
427
427
|
try {
|
|
@@ -432,24 +432,24 @@ function el(e, t) {
|
|
|
432
432
|
const l = /\.([0-9a-z]+)(?:$)/i, c = s.pathname.match(l);
|
|
433
433
|
return (u = c == null ? void 0 : c[1]) != null ? u : null;
|
|
434
434
|
}
|
|
435
|
-
function
|
|
435
|
+
function oa(e) {
|
|
436
436
|
let t = "";
|
|
437
437
|
return e.indexOf("//") > -1 ? t = e.split("/").slice(0, 3).join("/") : t = e.split("/")[0], t = t.split("?")[0], t;
|
|
438
438
|
}
|
|
439
|
-
const
|
|
439
|
+
const aa = /url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm, ca = /^(?:[a-z+]+:)?\/\//i, ua = /^www\..*/i, da = /^(data:)([^,]*),(.*)/i;
|
|
440
440
|
function Kt(e, t) {
|
|
441
441
|
return (e || "").replace(
|
|
442
|
-
|
|
442
|
+
aa,
|
|
443
443
|
(s, l, c, u, f, b) => {
|
|
444
444
|
const m = c || f || b, h = l || u || "";
|
|
445
445
|
if (!m)
|
|
446
446
|
return s;
|
|
447
|
-
if (
|
|
447
|
+
if (ca.test(m) || ua.test(m))
|
|
448
448
|
return `url(${h}${m}${h})`;
|
|
449
|
-
if (
|
|
449
|
+
if (da.test(m))
|
|
450
450
|
return `url(${h}${m}${h})`;
|
|
451
451
|
if (m[0] === "/")
|
|
452
|
-
return `url(${h}${
|
|
452
|
+
return `url(${h}${oa(t) + m}${h})`;
|
|
453
453
|
const d = m.split("#")[0], r = m.substring(d.length), n = t.split("#")[0].split("/"), i = d.split("/");
|
|
454
454
|
n.pop();
|
|
455
455
|
for (const o of i)
|
|
@@ -461,7 +461,7 @@ function Kt(e, t) {
|
|
|
461
461
|
function Gt(e, t = !1) {
|
|
462
462
|
return t ? e.replace(/(\/\*[^*]*\*\/)|[\s;]/g, "") : e.replace(/(\/\*[^*]*\*\/)|[\s;]/g, "").replace(/0px/g, "0");
|
|
463
463
|
}
|
|
464
|
-
function
|
|
464
|
+
function ha(e, t, s = !1) {
|
|
465
465
|
const l = Array.from(t.childNodes), c = [];
|
|
466
466
|
let u = 0;
|
|
467
467
|
if (l.length > 1 && e && typeof e == "string") {
|
|
@@ -527,8 +527,8 @@ function da(e, t, s = !1) {
|
|
|
527
527
|
}
|
|
528
528
|
return c.push(e), c;
|
|
529
529
|
}
|
|
530
|
-
function
|
|
531
|
-
return
|
|
530
|
+
function pa(e, t) {
|
|
531
|
+
return ha(e, t).join("/* rr_split */");
|
|
532
532
|
}
|
|
533
533
|
function Ws(e) {
|
|
534
534
|
return e = e.replace(/[^ -~]+/g, ""), e = (e == null ? void 0 : e.split(" ").map((t) => t ? Math.random().toString(20).substring(2, t.length + 2) : "").join(" ")) || "", e;
|
|
@@ -536,25 +536,25 @@ function Ws(e) {
|
|
|
536
536
|
function bs(e) {
|
|
537
537
|
return e === "img" || e === "video" || e === "audio" || e === "source";
|
|
538
538
|
}
|
|
539
|
-
const
|
|
539
|
+
const ma = new RegExp(
|
|
540
540
|
/[a-zA-Z0-9.!#$%&'*+=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*/
|
|
541
|
-
),
|
|
541
|
+
), fa = new RegExp(/[0-9]{9,16}/), ba = new RegExp(/[0-9]{3}-?[0-9]{2}-?[0-9]{4}/), ya = new RegExp(
|
|
542
542
|
/[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,6}/
|
|
543
|
-
),
|
|
543
|
+
), Za = new RegExp(/[0-9]{4}-?[0-9]{4}-?[0-9]{4}-?[0-9]{4}/), ga = new RegExp(
|
|
544
544
|
/[0-9]{1,5}.?[0-9]{0,3}\s[a-zA-Z]{2,30}\s[a-zA-Z]{2,15}/
|
|
545
|
-
),
|
|
546
|
-
pa,
|
|
545
|
+
), Sa = new RegExp(/(?:[0-9]{1,3}.){3}[0-9]{1,3}/), Xa = [
|
|
547
546
|
ma,
|
|
548
547
|
fa,
|
|
549
548
|
ba,
|
|
550
549
|
ya,
|
|
551
550
|
Za,
|
|
552
|
-
ga
|
|
551
|
+
ga,
|
|
552
|
+
Sa
|
|
553
553
|
];
|
|
554
|
-
function
|
|
555
|
-
return e ?
|
|
554
|
+
function il(e) {
|
|
555
|
+
return e ? Xa.some((t) => t.test(e)) : !1;
|
|
556
556
|
}
|
|
557
|
-
const
|
|
557
|
+
const sl = ({
|
|
558
558
|
maskInputOptions: e,
|
|
559
559
|
tagName: t,
|
|
560
560
|
type: s,
|
|
@@ -563,20 +563,20 @@ const il = ({
|
|
|
563
563
|
const c = s && s.toLowerCase();
|
|
564
564
|
return l !== "true" && (!!e[t.toLowerCase()] || !!(c && e[c]));
|
|
565
565
|
};
|
|
566
|
-
let
|
|
567
|
-
const
|
|
568
|
-
function
|
|
569
|
-
return
|
|
566
|
+
let Ra = 1;
|
|
567
|
+
const Ga = new RegExp("[^a-z0-9-_:]"), ht = -2;
|
|
568
|
+
function rl() {
|
|
569
|
+
return Ra++;
|
|
570
570
|
}
|
|
571
|
-
function
|
|
571
|
+
function Va(e) {
|
|
572
572
|
if (e instanceof HTMLFormElement)
|
|
573
573
|
return "form";
|
|
574
574
|
const t = Qe(e.tagName);
|
|
575
|
-
return
|
|
575
|
+
return Ga.test(t) ? "div" : t;
|
|
576
576
|
}
|
|
577
577
|
let Ae, dr;
|
|
578
|
-
const
|
|
579
|
-
function
|
|
578
|
+
const Wa = /^[^ \t\n\r\u000c]+/, Ia = /^[, \t\n\r\u000c]+/;
|
|
579
|
+
function wa(e, t) {
|
|
580
580
|
if (t.trim() === "")
|
|
581
581
|
return t;
|
|
582
582
|
let s = 0;
|
|
@@ -586,8 +586,8 @@ function Ia(e, t) {
|
|
|
586
586
|
return b ? (f = b[0], s += f.length, f) : "";
|
|
587
587
|
}
|
|
588
588
|
const c = [];
|
|
589
|
-
for (; l(
|
|
590
|
-
let u = l(
|
|
589
|
+
for (; l(Ia), !(s >= t.length); ) {
|
|
590
|
+
let u = l(Wa);
|
|
591
591
|
if (u.slice(-1) === ",")
|
|
592
592
|
u = qe(e, u.substring(0, u.length - 1)), c.push(u);
|
|
593
593
|
else {
|
|
@@ -615,7 +615,7 @@ const hr = /* @__PURE__ */ new WeakMap();
|
|
|
615
615
|
function qe(e, t) {
|
|
616
616
|
return !t || t.trim() === "" ? t : Is(e, t);
|
|
617
617
|
}
|
|
618
|
-
function
|
|
618
|
+
function Ca(e) {
|
|
619
619
|
return !!(e.tagName === "svg" || e.ownerSVGElement);
|
|
620
620
|
}
|
|
621
621
|
function Is(e, t) {
|
|
@@ -626,10 +626,10 @@ function Is(e, t) {
|
|
|
626
626
|
return t;
|
|
627
627
|
return s.setAttribute("href", t), s.href;
|
|
628
628
|
}
|
|
629
|
-
function
|
|
630
|
-
return l && (s === "src" || s === "href" && !(t === "use" && l[0] === "#") || s === "xlink:href" && l[0] !== "#" || s === "background" && ["table", "td", "th"].includes(t) ? qe(e, l) : s === "srcset" ?
|
|
629
|
+
function nl(e, t, s, l) {
|
|
630
|
+
return l && (s === "src" || s === "href" && !(t === "use" && l[0] === "#") || s === "xlink:href" && l[0] !== "#" || s === "background" && ["table", "td", "th"].includes(t) ? qe(e, l) : s === "srcset" ? wa(e, l) : s === "style" ? Kt(l, Is(e)) : t === "object" && s === "data" ? qe(e, l) : l);
|
|
631
631
|
}
|
|
632
|
-
function
|
|
632
|
+
function ll(e, t, s) {
|
|
633
633
|
return ["video", "audio"].includes(e) && t === "autoplay";
|
|
634
634
|
}
|
|
635
635
|
function pr(e, t, s) {
|
|
@@ -660,9 +660,9 @@ function Ft(e, t, s) {
|
|
|
660
660
|
}
|
|
661
661
|
return s ? Ft(be.parentNode(e), t, s) : !1;
|
|
662
662
|
}
|
|
663
|
-
function
|
|
663
|
+
function ol(e, t, s, l) {
|
|
664
664
|
let c;
|
|
665
|
-
if (
|
|
665
|
+
if (_n(e)) {
|
|
666
666
|
if (c = e, !be.childNodes(c).length)
|
|
667
667
|
return !1;
|
|
668
668
|
} else {
|
|
@@ -685,7 +685,7 @@ function ll(e, t, s, l) {
|
|
|
685
685
|
}
|
|
686
686
|
return !1;
|
|
687
687
|
}
|
|
688
|
-
function
|
|
688
|
+
function xa(e, t, s) {
|
|
689
689
|
const l = e.contentWindow;
|
|
690
690
|
if (!l)
|
|
691
691
|
return;
|
|
@@ -709,7 +709,7 @@ function Ca(e, t, s) {
|
|
|
709
709
|
return setTimeout(t, 0), e.addEventListener("load", t);
|
|
710
710
|
e.addEventListener("load", t);
|
|
711
711
|
}
|
|
712
|
-
function
|
|
712
|
+
function va(e, t, s) {
|
|
713
713
|
let l = !1, c;
|
|
714
714
|
try {
|
|
715
715
|
c = e.sheet;
|
|
@@ -724,7 +724,7 @@ function xa(e, t, s) {
|
|
|
724
724
|
clearTimeout(u), l = !0, t();
|
|
725
725
|
});
|
|
726
726
|
}
|
|
727
|
-
function
|
|
727
|
+
function La(e, t) {
|
|
728
728
|
const {
|
|
729
729
|
doc: s,
|
|
730
730
|
mirror: l,
|
|
@@ -744,7 +744,7 @@ function va(e, t) {
|
|
|
744
744
|
newlyAddedElement: X = !1,
|
|
745
745
|
cssCaptured: Z = !1,
|
|
746
746
|
privacySetting: S
|
|
747
|
-
} = t, G =
|
|
747
|
+
} = t, G = ka(s, l);
|
|
748
748
|
switch (e.nodeType) {
|
|
749
749
|
case e.DOCUMENT_NODE:
|
|
750
750
|
return e.compatMode !== "CSS1Compat" ? {
|
|
@@ -765,7 +765,7 @@ function va(e, t) {
|
|
|
765
765
|
rootId: G
|
|
766
766
|
};
|
|
767
767
|
case e.ELEMENT_NODE:
|
|
768
|
-
return
|
|
768
|
+
return Ya(e, {
|
|
769
769
|
doc: s,
|
|
770
770
|
blockClass: c,
|
|
771
771
|
blockSelector: u,
|
|
@@ -783,7 +783,7 @@ function va(e, t) {
|
|
|
783
783
|
rootId: G
|
|
784
784
|
});
|
|
785
785
|
case e.TEXT_NODE:
|
|
786
|
-
return
|
|
786
|
+
return Ja(e, {
|
|
787
787
|
doc: s,
|
|
788
788
|
needsMask: f,
|
|
789
789
|
maskTextFn: d,
|
|
@@ -807,18 +807,18 @@ function va(e, t) {
|
|
|
807
807
|
return !1;
|
|
808
808
|
}
|
|
809
809
|
}
|
|
810
|
-
function
|
|
810
|
+
function ka(e, t) {
|
|
811
811
|
if (!t.hasNode(e)) return;
|
|
812
812
|
const s = t.getId(e);
|
|
813
813
|
return s === 1 ? void 0 : s;
|
|
814
814
|
}
|
|
815
|
-
function
|
|
815
|
+
function Ja(e, t) {
|
|
816
816
|
var s;
|
|
817
817
|
const { needsMask: l, maskTextFn: c, privacySetting: u, rootId: f, cssCaptured: b } = t, m = be.parentNode(e), h = m && m.tagName;
|
|
818
818
|
let d = "";
|
|
819
819
|
const r = h === "STYLE" ? !0 : void 0, n = h === "SCRIPT" ? !0 : void 0;
|
|
820
820
|
n ? d = "SCRIPT_PLACEHOLDER" : b || (d = be.textContent(e), r && d && (d = Kt(d, Is(t.doc)))), !r && !n && d && l && (d = c ? c(d, be.parentElement(e)) : d.replace(/[\S]/g, "*"));
|
|
821
|
-
const i = u === "strict", o = (s = e.parentElement) == null ? void 0 : s.getAttribute("data-hl-record"), a = u === "default" &&
|
|
821
|
+
const i = u === "strict", o = (s = e.parentElement) == null ? void 0 : s.getAttribute("data-hl-record"), a = u === "default" && il(d);
|
|
822
822
|
return (i || a) && !o && h && !(/* @__PURE__ */ new Set([
|
|
823
823
|
"HEAD",
|
|
824
824
|
"TITLE",
|
|
@@ -833,7 +833,7 @@ function ka(e, t) {
|
|
|
833
833
|
rootId: f
|
|
834
834
|
};
|
|
835
835
|
}
|
|
836
|
-
function
|
|
836
|
+
function Ya(e, t) {
|
|
837
837
|
const {
|
|
838
838
|
doc: s,
|
|
839
839
|
blockClass: l,
|
|
@@ -853,11 +853,11 @@ function Ja(e, t) {
|
|
|
853
853
|
} = t;
|
|
854
854
|
let X = pr(e, l, c);
|
|
855
855
|
const Z = pr(e, m, null), S = a === "strict";
|
|
856
|
-
let G =
|
|
856
|
+
let G = Va(e), g = {};
|
|
857
857
|
const y = e.attributes.length;
|
|
858
858
|
for (let V = 0; V < y; V++) {
|
|
859
859
|
const W = e.attributes[V];
|
|
860
|
-
|
|
860
|
+
ll(G, W.name) || (g[W.name] = nl(
|
|
861
861
|
s,
|
|
862
862
|
G,
|
|
863
863
|
Qe(W.name),
|
|
@@ -873,7 +873,7 @@ function Ja(e, t) {
|
|
|
873
873
|
let V = fs(
|
|
874
874
|
e.sheet
|
|
875
875
|
);
|
|
876
|
-
V && (e.childNodes.length > 1 && (V =
|
|
876
|
+
V && (e.childNodes.length > 1 && (V = pa(V, e)), g._cssText = V);
|
|
877
877
|
}
|
|
878
878
|
if (["input", "textarea", "select"].includes(G)) {
|
|
879
879
|
const V = e.value, W = e.checked;
|
|
@@ -889,7 +889,7 @@ function Ja(e, t) {
|
|
|
889
889
|
}
|
|
890
890
|
if (G === "option" && (e.selected && !f.select ? g.selected = !0 : delete g.selected), G === "dialog" && e.open && (g.rr_open_mode = e.matches("dialog:modal") ? "modal" : "non-modal"), G === "canvas" && n) {
|
|
891
891
|
if (e.__context === "2d")
|
|
892
|
-
|
|
892
|
+
la(e);
|
|
893
893
|
else if (!("__context" in e)) {
|
|
894
894
|
const V = e.toDataURL(
|
|
895
895
|
h.type,
|
|
@@ -969,7 +969,7 @@ function Ja(e, t) {
|
|
|
969
969
|
tagName: G,
|
|
970
970
|
attributes: g,
|
|
971
971
|
childNodes: [],
|
|
972
|
-
isSVG:
|
|
972
|
+
isSVG: Ca(e) || void 0,
|
|
973
973
|
needBlock: X,
|
|
974
974
|
needMask: Z,
|
|
975
975
|
rootId: p,
|
|
@@ -979,7 +979,7 @@ function Ja(e, t) {
|
|
|
979
979
|
function re(e) {
|
|
980
980
|
return e == null ? "" : e.toLowerCase();
|
|
981
981
|
}
|
|
982
|
-
function
|
|
982
|
+
function al(e) {
|
|
983
983
|
return e === !0 || e === "all" ? {
|
|
984
984
|
script: !0,
|
|
985
985
|
comment: !0,
|
|
@@ -996,14 +996,14 @@ function ol(e) {
|
|
|
996
996
|
headTitleMutations: e === "all"
|
|
997
997
|
} : e || {};
|
|
998
998
|
}
|
|
999
|
-
function
|
|
999
|
+
function Na(e, t) {
|
|
1000
1000
|
if (t.comment && e.type === pe.Comment)
|
|
1001
1001
|
return !0;
|
|
1002
1002
|
if (e.type === pe.Element) {
|
|
1003
1003
|
if (t.script && // script tag
|
|
1004
1004
|
(e.tagName === "script" || // (module)preload link
|
|
1005
1005
|
e.tagName === "link" && (e.attributes.rel === "preload" && e.attributes.as === "script" || e.attributes.rel === "modulepreload") || // prefetch link
|
|
1006
|
-
e.tagName === "link" && e.attributes.rel === "prefetch" && typeof e.attributes.href == "string" &&
|
|
1006
|
+
e.tagName === "link" && e.attributes.rel === "prefetch" && typeof e.attributes.href == "string" && tl(e.attributes.href) === "js"))
|
|
1007
1007
|
return !0;
|
|
1008
1008
|
if (t.headFavicon && (e.tagName === "link" && e.attributes.rel === "shortcut icon" || e.tagName === "meta" && (re(e.attributes.name).match(
|
|
1009
1009
|
/^msapplication-tile(image|color)$/
|
|
@@ -1056,13 +1056,13 @@ function et(e, t) {
|
|
|
1056
1056
|
privacySetting: W
|
|
1057
1057
|
} = t;
|
|
1058
1058
|
let { needsMask: v } = t, { preserveWhiteSpace: x = !0 } = t;
|
|
1059
|
-
v || (v =
|
|
1059
|
+
v || (v = ol(
|
|
1060
1060
|
e,
|
|
1061
1061
|
f,
|
|
1062
1062
|
b,
|
|
1063
1063
|
v === void 0
|
|
1064
1064
|
));
|
|
1065
|
-
const D =
|
|
1065
|
+
const D = La(e, {
|
|
1066
1066
|
doc: s,
|
|
1067
1067
|
mirror: l,
|
|
1068
1068
|
blockClass: c,
|
|
@@ -1085,7 +1085,7 @@ function et(e, t) {
|
|
|
1085
1085
|
if (!D)
|
|
1086
1086
|
return console.warn(e, "not serialized"), null;
|
|
1087
1087
|
let E;
|
|
1088
|
-
l.hasNode(e) ? E = l.getId(e) :
|
|
1088
|
+
l.hasNode(e) ? E = l.getId(e) : Na(D, i) || !x && D.type === pe.Text && !D.textContent.replace(/^\s+|\s+$/gm, "").length ? E = ht : E = rl();
|
|
1089
1089
|
const w = Object.assign(D, { id: E });
|
|
1090
1090
|
if (l.add(e, w), E === ht)
|
|
1091
1091
|
return null;
|
|
@@ -1138,14 +1138,14 @@ function et(e, t) {
|
|
|
1138
1138
|
}
|
|
1139
1139
|
}
|
|
1140
1140
|
let j = null;
|
|
1141
|
-
if (
|
|
1141
|
+
if (_n(e) && (j = be.shadowRoot(e)))
|
|
1142
1142
|
for (const ne of Array.from(be.childNodes(j))) {
|
|
1143
1143
|
const C = et(ne, M);
|
|
1144
1144
|
C && (at(j) && (C.isShadow = !0), w.childNodes.push(C));
|
|
1145
1145
|
}
|
|
1146
1146
|
}
|
|
1147
1147
|
const B = be.parentNode(e);
|
|
1148
|
-
return B && ot(B) && at(B) && (w.isShadow = !0), w.type === pe.Element && w.tagName === "iframe" &&
|
|
1148
|
+
return B && ot(B) && at(B) && (w.isShadow = !0), w.type === pe.Element && w.tagName === "iframe" && xa(
|
|
1149
1149
|
e,
|
|
1150
1150
|
() => {
|
|
1151
1151
|
const M = e.contentDocument;
|
|
@@ -1184,7 +1184,7 @@ function et(e, t) {
|
|
|
1184
1184
|
}
|
|
1185
1185
|
},
|
|
1186
1186
|
G
|
|
1187
|
-
), w.type === pe.Element && w.tagName === "link" && typeof w.attributes.rel == "string" && (w.attributes.rel === "stylesheet" || w.attributes.rel === "preload" && typeof w.attributes.href == "string" &&
|
|
1187
|
+
), w.type === pe.Element && w.tagName === "link" && typeof w.attributes.rel == "string" && (w.attributes.rel === "stylesheet" || w.attributes.rel === "preload" && typeof w.attributes.href == "string" && tl(w.attributes.href) === "css") && va(
|
|
1188
1188
|
e,
|
|
1189
1189
|
() => {
|
|
1190
1190
|
if (g) {
|
|
@@ -1224,9 +1224,9 @@ function et(e, t) {
|
|
|
1224
1224
|
y
|
|
1225
1225
|
), w;
|
|
1226
1226
|
}
|
|
1227
|
-
function
|
|
1227
|
+
function Ta(e, t) {
|
|
1228
1228
|
const {
|
|
1229
|
-
mirror: s = new
|
|
1229
|
+
mirror: s = new el(),
|
|
1230
1230
|
blockClass: l = "highlight-block",
|
|
1231
1231
|
blockSelector: c = null,
|
|
1232
1232
|
maskTextClass: u = "highlight-mask",
|
|
@@ -1267,7 +1267,7 @@ function Na(e, t) {
|
|
|
1267
1267
|
password: !0
|
|
1268
1268
|
} : r === !1 ? {
|
|
1269
1269
|
password: !0
|
|
1270
|
-
} : r, V =
|
|
1270
|
+
} : r, V = al(o);
|
|
1271
1271
|
return et(e, {
|
|
1272
1272
|
doc: e,
|
|
1273
1273
|
mirror: s,
|
|
@@ -1296,7 +1296,7 @@ function Na(e, t) {
|
|
|
1296
1296
|
privacySetting: R
|
|
1297
1297
|
});
|
|
1298
1298
|
}
|
|
1299
|
-
function
|
|
1299
|
+
function Ua(e) {
|
|
1300
1300
|
if (Object.prototype.hasOwnProperty.call(e, "__esModule")) return e;
|
|
1301
1301
|
var t = e.default;
|
|
1302
1302
|
if (typeof t == "function") {
|
|
@@ -1316,7 +1316,7 @@ function Ta(e) {
|
|
|
1316
1316
|
}), s;
|
|
1317
1317
|
}
|
|
1318
1318
|
var Vt = { exports: {} }, mr;
|
|
1319
|
-
function
|
|
1319
|
+
function Ka() {
|
|
1320
1320
|
if (mr) return Vt.exports;
|
|
1321
1321
|
mr = 1;
|
|
1322
1322
|
var e = String, t = function() {
|
|
@@ -1324,15 +1324,15 @@ function Ua() {
|
|
|
1324
1324
|
};
|
|
1325
1325
|
return Vt.exports = t(), Vt.exports.createColors = t, Vt.exports;
|
|
1326
1326
|
}
|
|
1327
|
-
const
|
|
1327
|
+
const Fa = {}, Ma = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1328
1328
|
__proto__: null,
|
|
1329
|
-
default:
|
|
1330
|
-
}, Symbol.toStringTag, { value: "Module" })), xe = /* @__PURE__ */
|
|
1329
|
+
default: Fa
|
|
1330
|
+
}, Symbol.toStringTag, { value: "Module" })), xe = /* @__PURE__ */ Ua(Ma);
|
|
1331
1331
|
var ci, fr;
|
|
1332
1332
|
function ws() {
|
|
1333
1333
|
if (fr) return ci;
|
|
1334
1334
|
fr = 1;
|
|
1335
|
-
let e = /* @__PURE__ */
|
|
1335
|
+
let e = /* @__PURE__ */ Ka(), t = xe;
|
|
1336
1336
|
class s extends Error {
|
|
1337
1337
|
constructor(c, u, f, b, m, h) {
|
|
1338
1338
|
super(c), this.name = "CssSyntaxError", this.reason = c, m && (this.file = m), b && (this.source = b), h && (this.plugin = h), typeof u != "undefined" && typeof f != "undefined" && (typeof u == "number" ? (this.line = u, this.column = f) : (this.line = u.line, this.column = u.column, this.endLine = f.line, this.endColumn = f.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, s);
|
|
@@ -1380,7 +1380,7 @@ function ws() {
|
|
|
1380
1380
|
return ci = s, s.default = s, ci;
|
|
1381
1381
|
}
|
|
1382
1382
|
var ui, br;
|
|
1383
|
-
function
|
|
1383
|
+
function cl() {
|
|
1384
1384
|
if (br) return ui;
|
|
1385
1385
|
br = 1;
|
|
1386
1386
|
const e = /(<)(\/?style\b)/gi, t = /(<)(!--)/g, s = /[\t\n\f\r "#'()/;[\\\]{}]/;
|
|
@@ -1614,7 +1614,7 @@ var di, yr;
|
|
|
1614
1614
|
function Ot() {
|
|
1615
1615
|
if (yr) return di;
|
|
1616
1616
|
yr = 1;
|
|
1617
|
-
let e =
|
|
1617
|
+
let e = cl();
|
|
1618
1618
|
function t(s, l) {
|
|
1619
1619
|
new e(l).stringify(s);
|
|
1620
1620
|
}
|
|
@@ -1628,7 +1628,7 @@ var hi, gr;
|
|
|
1628
1628
|
function Et() {
|
|
1629
1629
|
if (gr) return hi;
|
|
1630
1630
|
gr = 1;
|
|
1631
|
-
let e = ws(), t =
|
|
1631
|
+
let e = ws(), t = cl(), s = Ot(), { isClean: l, my: c } = Pt();
|
|
1632
1632
|
function u(m, h) {
|
|
1633
1633
|
let d = new m.constructor(), r = [[m, d, h]];
|
|
1634
1634
|
for (; r.length > 0; ) {
|
|
@@ -2228,7 +2228,7 @@ function xs() {
|
|
|
2228
2228
|
}, yi = l, l.default = l, yi;
|
|
2229
2229
|
}
|
|
2230
2230
|
var Zi, Wr;
|
|
2231
|
-
function
|
|
2231
|
+
function za() {
|
|
2232
2232
|
if (Wr) return Zi;
|
|
2233
2233
|
Wr = 1;
|
|
2234
2234
|
let e = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
@@ -2245,7 +2245,7 @@ function Ma() {
|
|
|
2245
2245
|
} }, Zi;
|
|
2246
2246
|
}
|
|
2247
2247
|
var gi, Ir;
|
|
2248
|
-
function
|
|
2248
|
+
function ul() {
|
|
2249
2249
|
if (Ir) return gi;
|
|
2250
2250
|
Ir = 1;
|
|
2251
2251
|
let { existsSync: e, readFileSync: t, realpathSync: s } = xe, { dirname: l, isAbsolute: c, join: u, relative: f, sep: b } = xe, { SourceMapConsumer: m, SourceMapGenerator: h } = xe;
|
|
@@ -2357,7 +2357,7 @@ var Si, wr;
|
|
|
2357
2357
|
function Dt() {
|
|
2358
2358
|
if (wr) return Si;
|
|
2359
2359
|
wr = 1;
|
|
2360
|
-
let { nanoid: e } = /* @__PURE__ */
|
|
2360
|
+
let { nanoid: e } = /* @__PURE__ */ za(), { isAbsolute: t, resolve: s } = xe, { SourceMapConsumer: l, SourceMapGenerator: c } = xe, { fileURLToPath: u, pathToFileURL: f } = xe, b = ws(), m = ul(), h = xe, d = Symbol("lineToIndexCache"), r = !!(l && c), n = !!(s && t);
|
|
2361
2361
|
function i(a) {
|
|
2362
2362
|
if (a[d]) return a[d];
|
|
2363
2363
|
let p = a.css.split(`
|
|
@@ -2537,7 +2537,7 @@ function yt() {
|
|
|
2537
2537
|
}, Xi = l, l.default = l, e.registerRoot(l), Xi;
|
|
2538
2538
|
}
|
|
2539
2539
|
var Ri, xr;
|
|
2540
|
-
function
|
|
2540
|
+
function dl() {
|
|
2541
2541
|
if (xr) return Ri;
|
|
2542
2542
|
xr = 1;
|
|
2543
2543
|
let e = {
|
|
@@ -2563,7 +2563,7 @@ var Gi, vr;
|
|
|
2563
2563
|
function vs() {
|
|
2564
2564
|
if (vr) return Gi;
|
|
2565
2565
|
vr = 1;
|
|
2566
|
-
let e = Oe(), t =
|
|
2566
|
+
let e = Oe(), t = dl();
|
|
2567
2567
|
class s extends e {
|
|
2568
2568
|
get selectors() {
|
|
2569
2569
|
return t.comma(this.selector);
|
|
@@ -2579,10 +2579,10 @@ function vs() {
|
|
|
2579
2579
|
return Gi = s, s.default = s, e.registerRule(s), Gi;
|
|
2580
2580
|
}
|
|
2581
2581
|
var Vi, Lr;
|
|
2582
|
-
function
|
|
2582
|
+
function Ha() {
|
|
2583
2583
|
if (Lr) return Vi;
|
|
2584
2584
|
Lr = 1;
|
|
2585
|
-
let e = Cs(), t = Bt(), s = Qt(), l = Dt(), c =
|
|
2585
|
+
let e = Cs(), t = Bt(), s = Qt(), l = Dt(), c = ul(), u = yt(), f = vs();
|
|
2586
2586
|
function b(d, r) {
|
|
2587
2587
|
return d.inputs ? d.inputs.map((n) => {
|
|
2588
2588
|
let i = me(K({}, n), { __proto__: l.prototype });
|
|
@@ -2646,7 +2646,7 @@ function za() {
|
|
|
2646
2646
|
return Vi = h, h.default = h, Vi;
|
|
2647
2647
|
}
|
|
2648
2648
|
var Wi, kr;
|
|
2649
|
-
function
|
|
2649
|
+
function hl() {
|
|
2650
2650
|
if (kr) return Wi;
|
|
2651
2651
|
kr = 1;
|
|
2652
2652
|
let { dirname: e, relative: t, resolve: s, sep: l } = xe, { SourceMapConsumer: c, SourceMapGenerator: u } = xe, { pathToFileURL: f } = xe, b = Dt(), m = !!(c && u), h = !!(e && s && t && l);
|
|
@@ -2823,7 +2823,7 @@ function dl() {
|
|
|
2823
2823
|
return Wi = d, Wi;
|
|
2824
2824
|
}
|
|
2825
2825
|
var Ii, Jr;
|
|
2826
|
-
function
|
|
2826
|
+
function Oa() {
|
|
2827
2827
|
if (Jr) return Ii;
|
|
2828
2828
|
Jr = 1;
|
|
2829
2829
|
const e = 39, t = 34, s = 92, l = 47, c = 10, u = 32, f = 12, b = 9, m = 13, h = 91, d = 93, r = 40, n = 41, i = 123, o = 125, a = 59, p = 42, X = 58, Z = 64, S = /[\t\n\f\r "#'()/;[\\\]{}]/g, G = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, g = /.[\r\n"'(/\\]/, y = /[\da-f]/i;
|
|
@@ -2933,10 +2933,10 @@ function Ha() {
|
|
|
2933
2933
|
}, Ii;
|
|
2934
2934
|
}
|
|
2935
2935
|
var wi, Yr;
|
|
2936
|
-
function
|
|
2936
|
+
function Pa() {
|
|
2937
2937
|
if (Yr) return wi;
|
|
2938
2938
|
Yr = 1;
|
|
2939
|
-
let e = Cs(), t = Bt(), s = Qt(), l = yt(), c = vs(), u =
|
|
2939
|
+
let e = Cs(), t = Bt(), s = Qt(), l = yt(), c = vs(), u = Oa();
|
|
2940
2940
|
const f = {
|
|
2941
2941
|
empty: !0,
|
|
2942
2942
|
space: !0
|
|
@@ -3258,7 +3258,7 @@ var Ci, Nr;
|
|
|
3258
3258
|
function Ls() {
|
|
3259
3259
|
if (Nr) return Ci;
|
|
3260
3260
|
Nr = 1;
|
|
3261
|
-
let e = Oe(), t = Dt(), s =
|
|
3261
|
+
let e = Oe(), t = Dt(), s = Pa();
|
|
3262
3262
|
function l(c, u) {
|
|
3263
3263
|
let f = new t(c, u), b = new s(f);
|
|
3264
3264
|
try {
|
|
@@ -3274,7 +3274,7 @@ You tried to parse Less with the standard CSS parser; try again with the postcss
|
|
|
3274
3274
|
return Ci = l, l.default = l, e.registerParse(l), Ci;
|
|
3275
3275
|
}
|
|
3276
3276
|
var xi, Tr;
|
|
3277
|
-
function
|
|
3277
|
+
function pl() {
|
|
3278
3278
|
if (Tr) return xi;
|
|
3279
3279
|
Tr = 1;
|
|
3280
3280
|
let e = Oe(), { my: t } = Pt();
|
|
@@ -3301,7 +3301,7 @@ var vi, Ur;
|
|
|
3301
3301
|
function ks() {
|
|
3302
3302
|
if (Ur) return vi;
|
|
3303
3303
|
Ur = 1;
|
|
3304
|
-
let e =
|
|
3304
|
+
let e = pl();
|
|
3305
3305
|
class t {
|
|
3306
3306
|
get content() {
|
|
3307
3307
|
return this.css;
|
|
@@ -3324,7 +3324,7 @@ function ks() {
|
|
|
3324
3324
|
return vi = t, t.default = t, vi;
|
|
3325
3325
|
}
|
|
3326
3326
|
var Li, Kr;
|
|
3327
|
-
function
|
|
3327
|
+
function ml() {
|
|
3328
3328
|
if (Kr) return Li;
|
|
3329
3329
|
Kr = 1;
|
|
3330
3330
|
let e = {};
|
|
@@ -3333,10 +3333,10 @@ function pl() {
|
|
|
3333
3333
|
}, Li;
|
|
3334
3334
|
}
|
|
3335
3335
|
var ki, Fr;
|
|
3336
|
-
function
|
|
3336
|
+
function fl() {
|
|
3337
3337
|
if (Fr) return ki;
|
|
3338
3338
|
Fr = 1;
|
|
3339
|
-
let e = Oe(), t = xs(), s =
|
|
3339
|
+
let e = Oe(), t = xs(), s = hl(), l = Ls(), c = ks(), u = yt(), f = Ot(), { isClean: b, my: m } = Pt(), h = ml();
|
|
3340
3340
|
const d = {
|
|
3341
3341
|
atrule: "AtRule",
|
|
3342
3342
|
comment: "Comment",
|
|
@@ -3709,10 +3709,10 @@ function ml() {
|
|
|
3709
3709
|
}, ki = S, S.default = S, u.registerLazyResult(S), t.registerLazyResult(S), ki;
|
|
3710
3710
|
}
|
|
3711
3711
|
var Ji, Mr;
|
|
3712
|
-
function
|
|
3712
|
+
function Ea() {
|
|
3713
3713
|
if (Mr) return Ji;
|
|
3714
3714
|
Mr = 1;
|
|
3715
|
-
let e =
|
|
3715
|
+
let e = hl(), t = Ls(), s = ks(), l = Ot(), c = ml();
|
|
3716
3716
|
class u {
|
|
3717
3717
|
get content() {
|
|
3718
3718
|
return this.result.css;
|
|
@@ -3793,10 +3793,10 @@ function Pa() {
|
|
|
3793
3793
|
return Ji = u, u.default = u, Ji;
|
|
3794
3794
|
}
|
|
3795
3795
|
var Yi, zr;
|
|
3796
|
-
function
|
|
3796
|
+
function Ba() {
|
|
3797
3797
|
if (zr) return Yi;
|
|
3798
3798
|
zr = 1;
|
|
3799
|
-
let e = xs(), t =
|
|
3799
|
+
let e = xs(), t = fl(), s = Ea(), l = yt();
|
|
3800
3800
|
class c {
|
|
3801
3801
|
constructor(f = []) {
|
|
3802
3802
|
this.version = "8.5.26", this.plugins = this.normalize(f);
|
|
@@ -3829,10 +3829,10 @@ function Ea() {
|
|
|
3829
3829
|
return Yi = c, c.default = c, l.registerProcessor(c), e.registerProcessor(c), Yi;
|
|
3830
3830
|
}
|
|
3831
3831
|
var Ni, Hr;
|
|
3832
|
-
function
|
|
3832
|
+
function Qa() {
|
|
3833
3833
|
if (Hr) return Ni;
|
|
3834
3834
|
Hr = 1;
|
|
3835
|
-
let e = Cs(), t = Bt(), s = Oe(), l = ws(), c = Qt(), u = xs(), f =
|
|
3835
|
+
let e = Cs(), t = Bt(), s = Oe(), l = ws(), c = Qt(), u = xs(), f = Ha(), b = Dt(), m = fl(), h = dl(), d = Et(), r = Ls(), n = Ba(), i = ks(), o = yt(), a = vs(), p = Ot(), X = pl();
|
|
3836
3836
|
function Z(...S) {
|
|
3837
3837
|
return S.length === 1 && Array.isArray(S[0]) && (S = S[0]), new n(S);
|
|
3838
3838
|
}
|
|
@@ -3859,10 +3859,10 @@ https://www.w3ctech.com/topic/2226`
|
|
|
3859
3859
|
}, R;
|
|
3860
3860
|
}, Z.stringify = p, Z.parse = r, Z.fromJSON = f, Z.list = h, Z.comment = (S) => new t(S), Z.atRule = (S) => new e(S), Z.decl = (S) => new c(S), Z.rule = (S) => new a(S), Z.root = (S) => new o(S), Z.document = (S) => new u(S), Z.CssSyntaxError = l, Z.Declaration = c, Z.Container = s, Z.Processor = n, Z.Document = u, Z.Comment = t, Z.Warning = X, Z.AtRule = e, Z.Result = i, Z.Input = b, Z.Rule = a, Z.Root = o, Z.Node = d, m.registerPostcss(Z), Ni = Z, Z.default = Z, Ni;
|
|
3861
3861
|
}
|
|
3862
|
-
|
|
3863
|
-
var
|
|
3862
|
+
Qa();
|
|
3863
|
+
var Da = Object.defineProperty, ja = (e, t, s) => t in e ? Da(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s, Ie = (e, t, s) => ja(e, typeof t != "symbol" ? t + "" : t, s);
|
|
3864
3864
|
Date.now().toString();
|
|
3865
|
-
function
|
|
3865
|
+
function Aa(e) {
|
|
3866
3866
|
if (Object.prototype.hasOwnProperty.call(e, "__esModule")) return e;
|
|
3867
3867
|
var t = e.default;
|
|
3868
3868
|
if (typeof t == "function") {
|
|
@@ -3882,7 +3882,7 @@ function ja(e) {
|
|
|
3882
3882
|
}), s;
|
|
3883
3883
|
}
|
|
3884
3884
|
var It = { exports: {} }, Or;
|
|
3885
|
-
function
|
|
3885
|
+
function _a() {
|
|
3886
3886
|
if (Or) return It.exports;
|
|
3887
3887
|
Or = 1;
|
|
3888
3888
|
var e = String, t = function() {
|
|
@@ -3890,15 +3890,15 @@ function Aa() {
|
|
|
3890
3890
|
};
|
|
3891
3891
|
return It.exports = t(), It.exports.createColors = t, It.exports;
|
|
3892
3892
|
}
|
|
3893
|
-
const
|
|
3893
|
+
const $a = {}, qa = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3894
3894
|
__proto__: null,
|
|
3895
|
-
default:
|
|
3896
|
-
}, Symbol.toStringTag, { value: "Module" })), ve = /* @__PURE__ */
|
|
3895
|
+
default: $a
|
|
3896
|
+
}, Symbol.toStringTag, { value: "Module" })), ve = /* @__PURE__ */ Aa(qa);
|
|
3897
3897
|
var Ti, Pr;
|
|
3898
3898
|
function Js() {
|
|
3899
3899
|
if (Pr) return Ti;
|
|
3900
3900
|
Pr = 1;
|
|
3901
|
-
let e = /* @__PURE__ */
|
|
3901
|
+
let e = /* @__PURE__ */ _a(), t = ve;
|
|
3902
3902
|
class s extends Error {
|
|
3903
3903
|
constructor(c, u, f, b, m, h) {
|
|
3904
3904
|
super(c), this.name = "CssSyntaxError", this.reason = c, m && (this.file = m), b && (this.source = b), h && (this.plugin = h), typeof u != "undefined" && typeof f != "undefined" && (typeof u == "number" ? (this.line = u, this.column = f) : (this.line = u.line, this.column = u.column, this.endLine = f.line, this.endColumn = f.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, s);
|
|
@@ -3946,7 +3946,7 @@ function Js() {
|
|
|
3946
3946
|
return Ti = s, s.default = s, Ti;
|
|
3947
3947
|
}
|
|
3948
3948
|
var Ui, Er;
|
|
3949
|
-
function
|
|
3949
|
+
function bl() {
|
|
3950
3950
|
if (Er) return Ui;
|
|
3951
3951
|
Er = 1;
|
|
3952
3952
|
const e = /(<)(\/?style\b)/gi, t = /(<)(!--)/g, s = /[\t\n\f\r "#'()/;[\\\]{}]/;
|
|
@@ -4180,7 +4180,7 @@ var Ki, Br;
|
|
|
4180
4180
|
function jt() {
|
|
4181
4181
|
if (Br) return Ki;
|
|
4182
4182
|
Br = 1;
|
|
4183
|
-
let e =
|
|
4183
|
+
let e = bl();
|
|
4184
4184
|
function t(s, l) {
|
|
4185
4185
|
new e(l).stringify(s);
|
|
4186
4186
|
}
|
|
@@ -4194,7 +4194,7 @@ var Fi, Dr;
|
|
|
4194
4194
|
function _t() {
|
|
4195
4195
|
if (Dr) return Fi;
|
|
4196
4196
|
Dr = 1;
|
|
4197
|
-
let e = Js(), t =
|
|
4197
|
+
let e = Js(), t = bl(), s = jt(), { isClean: l, my: c } = At();
|
|
4198
4198
|
function u(m, h) {
|
|
4199
4199
|
let d = new m.constructor(), r = [[m, d, h]];
|
|
4200
4200
|
for (; r.length > 0; ) {
|
|
@@ -4794,7 +4794,7 @@ function Ns() {
|
|
|
4794
4794
|
}, Pi = l, l.default = l, Pi;
|
|
4795
4795
|
}
|
|
4796
4796
|
var Ei, en;
|
|
4797
|
-
function
|
|
4797
|
+
function ec() {
|
|
4798
4798
|
if (en) return Ei;
|
|
4799
4799
|
en = 1;
|
|
4800
4800
|
let e = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
@@ -4811,7 +4811,7 @@ function qa() {
|
|
|
4811
4811
|
} }, Ei;
|
|
4812
4812
|
}
|
|
4813
4813
|
var Bi, tn;
|
|
4814
|
-
function
|
|
4814
|
+
function yl() {
|
|
4815
4815
|
if (tn) return Bi;
|
|
4816
4816
|
tn = 1;
|
|
4817
4817
|
let { existsSync: e, readFileSync: t, realpathSync: s } = ve, { dirname: l, isAbsolute: c, join: u, relative: f, sep: b } = ve, { SourceMapConsumer: m, SourceMapGenerator: h } = ve;
|
|
@@ -4923,7 +4923,7 @@ var Qi, sn;
|
|
|
4923
4923
|
function ei() {
|
|
4924
4924
|
if (sn) return Qi;
|
|
4925
4925
|
sn = 1;
|
|
4926
|
-
let { nanoid: e } = /* @__PURE__ */
|
|
4926
|
+
let { nanoid: e } = /* @__PURE__ */ ec(), { isAbsolute: t, resolve: s } = ve, { SourceMapConsumer: l, SourceMapGenerator: c } = ve, { fileURLToPath: u, pathToFileURL: f } = ve, b = Js(), m = yl(), h = ve, d = Symbol("lineToIndexCache"), r = !!(l && c), n = !!(s && t);
|
|
4927
4927
|
function i(a) {
|
|
4928
4928
|
if (a[d]) return a[d];
|
|
4929
4929
|
let p = a.css.split(`
|
|
@@ -5103,7 +5103,7 @@ function Zt() {
|
|
|
5103
5103
|
}, Di = l, l.default = l, e.registerRoot(l), Di;
|
|
5104
5104
|
}
|
|
5105
5105
|
var ji, nn;
|
|
5106
|
-
function
|
|
5106
|
+
function Zl() {
|
|
5107
5107
|
if (nn) return ji;
|
|
5108
5108
|
nn = 1;
|
|
5109
5109
|
let e = {
|
|
@@ -5129,7 +5129,7 @@ var Ai, ln;
|
|
|
5129
5129
|
function Ts() {
|
|
5130
5130
|
if (ln) return Ai;
|
|
5131
5131
|
ln = 1;
|
|
5132
|
-
let e = Pe(), t =
|
|
5132
|
+
let e = Pe(), t = Zl();
|
|
5133
5133
|
class s extends e {
|
|
5134
5134
|
get selectors() {
|
|
5135
5135
|
return t.comma(this.selector);
|
|
@@ -5145,10 +5145,10 @@ function Ts() {
|
|
|
5145
5145
|
return Ai = s, s.default = s, e.registerRule(s), Ai;
|
|
5146
5146
|
}
|
|
5147
5147
|
var _i, on;
|
|
5148
|
-
function
|
|
5148
|
+
function tc() {
|
|
5149
5149
|
if (on) return _i;
|
|
5150
5150
|
on = 1;
|
|
5151
|
-
let e = Ys(), t = $t(), s = qt(), l = ei(), c =
|
|
5151
|
+
let e = Ys(), t = $t(), s = qt(), l = ei(), c = yl(), u = Zt(), f = Ts();
|
|
5152
5152
|
function b(d, r) {
|
|
5153
5153
|
return d.inputs ? d.inputs.map((n) => {
|
|
5154
5154
|
let i = me(K({}, n), { __proto__: l.prototype });
|
|
@@ -5212,7 +5212,7 @@ function ec() {
|
|
|
5212
5212
|
return _i = h, h.default = h, _i;
|
|
5213
5213
|
}
|
|
5214
5214
|
var $i, an;
|
|
5215
|
-
function
|
|
5215
|
+
function gl() {
|
|
5216
5216
|
if (an) return $i;
|
|
5217
5217
|
an = 1;
|
|
5218
5218
|
let { dirname: e, relative: t, resolve: s, sep: l } = ve, { SourceMapConsumer: c, SourceMapGenerator: u } = ve, { pathToFileURL: f } = ve, b = ei(), m = !!(c && u), h = !!(e && s && t && l);
|
|
@@ -5389,7 +5389,7 @@ function Zl() {
|
|
|
5389
5389
|
return $i = d, $i;
|
|
5390
5390
|
}
|
|
5391
5391
|
var qi, cn;
|
|
5392
|
-
function
|
|
5392
|
+
function ic() {
|
|
5393
5393
|
if (cn) return qi;
|
|
5394
5394
|
cn = 1;
|
|
5395
5395
|
const e = 39, t = 34, s = 92, l = 47, c = 10, u = 32, f = 12, b = 9, m = 13, h = 91, d = 93, r = 40, n = 41, i = 123, o = 125, a = 59, p = 42, X = 58, Z = 64, S = /[\t\n\f\r "#'()/;[\\\]{}]/g, G = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, g = /.[\r\n"'(/\\]/, y = /[\da-f]/i;
|
|
@@ -5499,10 +5499,10 @@ function tc() {
|
|
|
5499
5499
|
}, qi;
|
|
5500
5500
|
}
|
|
5501
5501
|
var es, un;
|
|
5502
|
-
function
|
|
5502
|
+
function sc() {
|
|
5503
5503
|
if (un) return es;
|
|
5504
5504
|
un = 1;
|
|
5505
|
-
let e = Ys(), t = $t(), s = qt(), l = Zt(), c = Ts(), u =
|
|
5505
|
+
let e = Ys(), t = $t(), s = qt(), l = Zt(), c = Ts(), u = ic();
|
|
5506
5506
|
const f = {
|
|
5507
5507
|
empty: !0,
|
|
5508
5508
|
space: !0
|
|
@@ -5824,7 +5824,7 @@ var ts, dn;
|
|
|
5824
5824
|
function Us() {
|
|
5825
5825
|
if (dn) return ts;
|
|
5826
5826
|
dn = 1;
|
|
5827
|
-
let e = Pe(), t = ei(), s =
|
|
5827
|
+
let e = Pe(), t = ei(), s = sc();
|
|
5828
5828
|
function l(c, u) {
|
|
5829
5829
|
let f = new t(c, u), b = new s(f);
|
|
5830
5830
|
try {
|
|
@@ -5840,7 +5840,7 @@ You tried to parse Less with the standard CSS parser; try again with the postcss
|
|
|
5840
5840
|
return ts = l, l.default = l, e.registerParse(l), ts;
|
|
5841
5841
|
}
|
|
5842
5842
|
var is, hn;
|
|
5843
|
-
function
|
|
5843
|
+
function Sl() {
|
|
5844
5844
|
if (hn) return is;
|
|
5845
5845
|
hn = 1;
|
|
5846
5846
|
let e = Pe(), { my: t } = At();
|
|
@@ -5867,7 +5867,7 @@ var ss, pn;
|
|
|
5867
5867
|
function Ks() {
|
|
5868
5868
|
if (pn) return ss;
|
|
5869
5869
|
pn = 1;
|
|
5870
|
-
let e =
|
|
5870
|
+
let e = Sl();
|
|
5871
5871
|
class t {
|
|
5872
5872
|
get content() {
|
|
5873
5873
|
return this.css;
|
|
@@ -5890,7 +5890,7 @@ function Ks() {
|
|
|
5890
5890
|
return ss = t, t.default = t, ss;
|
|
5891
5891
|
}
|
|
5892
5892
|
var rs, mn;
|
|
5893
|
-
function
|
|
5893
|
+
function Xl() {
|
|
5894
5894
|
if (mn) return rs;
|
|
5895
5895
|
mn = 1;
|
|
5896
5896
|
let e = {};
|
|
@@ -5899,10 +5899,10 @@ function Sl() {
|
|
|
5899
5899
|
}, rs;
|
|
5900
5900
|
}
|
|
5901
5901
|
var ns, fn;
|
|
5902
|
-
function
|
|
5902
|
+
function Rl() {
|
|
5903
5903
|
if (fn) return ns;
|
|
5904
5904
|
fn = 1;
|
|
5905
|
-
let e = Pe(), t = Ns(), s =
|
|
5905
|
+
let e = Pe(), t = Ns(), s = gl(), l = Us(), c = Ks(), u = Zt(), f = jt(), { isClean: b, my: m } = At(), h = Xl();
|
|
5906
5906
|
const d = {
|
|
5907
5907
|
atrule: "AtRule",
|
|
5908
5908
|
comment: "Comment",
|
|
@@ -6275,10 +6275,10 @@ function Xl() {
|
|
|
6275
6275
|
}, ns = S, S.default = S, u.registerLazyResult(S), t.registerLazyResult(S), ns;
|
|
6276
6276
|
}
|
|
6277
6277
|
var ls, bn;
|
|
6278
|
-
function
|
|
6278
|
+
function rc() {
|
|
6279
6279
|
if (bn) return ls;
|
|
6280
6280
|
bn = 1;
|
|
6281
|
-
let e =
|
|
6281
|
+
let e = gl(), t = Us(), s = Ks(), l = jt(), c = Xl();
|
|
6282
6282
|
class u {
|
|
6283
6283
|
get content() {
|
|
6284
6284
|
return this.result.css;
|
|
@@ -6359,10 +6359,10 @@ function sc() {
|
|
|
6359
6359
|
return ls = u, u.default = u, ls;
|
|
6360
6360
|
}
|
|
6361
6361
|
var os, yn;
|
|
6362
|
-
function
|
|
6362
|
+
function nc() {
|
|
6363
6363
|
if (yn) return os;
|
|
6364
6364
|
yn = 1;
|
|
6365
|
-
let e = Ns(), t =
|
|
6365
|
+
let e = Ns(), t = Rl(), s = rc(), l = Zt();
|
|
6366
6366
|
class c {
|
|
6367
6367
|
constructor(f = []) {
|
|
6368
6368
|
this.version = "8.5.26", this.plugins = this.normalize(f);
|
|
@@ -6395,10 +6395,10 @@ function rc() {
|
|
|
6395
6395
|
return os = c, c.default = c, l.registerProcessor(c), e.registerProcessor(c), os;
|
|
6396
6396
|
}
|
|
6397
6397
|
var as, Zn;
|
|
6398
|
-
function
|
|
6398
|
+
function lc() {
|
|
6399
6399
|
if (Zn) return as;
|
|
6400
6400
|
Zn = 1;
|
|
6401
|
-
let e = Ys(), t = $t(), s = Pe(), l = Js(), c = qt(), u = Ns(), f =
|
|
6401
|
+
let e = Ys(), t = $t(), s = Pe(), l = Js(), c = qt(), u = Ns(), f = tc(), b = ei(), m = Rl(), h = Zl(), d = _t(), r = Us(), n = nc(), i = Ks(), o = Zt(), a = Ts(), p = jt(), X = Sl();
|
|
6402
6402
|
function Z(...S) {
|
|
6403
6403
|
return S.length === 1 && Array.isArray(S[0]) && (S = S[0]), new n(S);
|
|
6404
6404
|
}
|
|
@@ -6425,7 +6425,7 @@ https://www.w3ctech.com/topic/2226`
|
|
|
6425
6425
|
}, R;
|
|
6426
6426
|
}, Z.stringify = p, Z.parse = r, Z.fromJSON = f, Z.list = h, Z.comment = (S) => new t(S), Z.atRule = (S) => new e(S), Z.decl = (S) => new c(S), Z.rule = (S) => new a(S), Z.root = (S) => new o(S), Z.document = (S) => new u(S), Z.CssSyntaxError = l, Z.Declaration = c, Z.Container = s, Z.Processor = n, Z.Document = u, Z.Comment = t, Z.Warning = X, Z.AtRule = e, Z.Result = i, Z.Input = b, Z.Rule = a, Z.Root = o, Z.Node = d, m.registerPostcss(Z), as = Z, Z.default = Z, as;
|
|
6427
6427
|
}
|
|
6428
|
-
|
|
6428
|
+
lc();
|
|
6429
6429
|
class Fs {
|
|
6430
6430
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
6431
6431
|
constructor(...t) {
|
|
@@ -6476,7 +6476,7 @@ const Ct = /* @__PURE__ */ new Map(), gn = /* @__PURE__ */ new WeakSet();
|
|
|
6476
6476
|
function Sn(e) {
|
|
6477
6477
|
return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
|
|
6478
6478
|
}
|
|
6479
|
-
function
|
|
6479
|
+
function oc(e) {
|
|
6480
6480
|
if (gn.has(e))
|
|
6481
6481
|
return;
|
|
6482
6482
|
gn.add(e);
|
|
@@ -6525,7 +6525,7 @@ const Xn = {
|
|
|
6525
6525
|
ShadowRoot: ["getSelection"],
|
|
6526
6526
|
Element: [],
|
|
6527
6527
|
MutationObserver: ["constructor"]
|
|
6528
|
-
}, xt = {},
|
|
6528
|
+
}, xt = {}, Gl = {}, ac = () => !!globalThis.Zone;
|
|
6529
6529
|
function Ms(e) {
|
|
6530
6530
|
if (xt[e])
|
|
6531
6531
|
return xt[e];
|
|
@@ -6542,7 +6542,7 @@ function Ms(e) {
|
|
|
6542
6542
|
return typeof s[b] == "function" && ((m = s[b]) == null ? void 0 : m.toString().includes("[native code]"));
|
|
6543
6543
|
}
|
|
6544
6544
|
));
|
|
6545
|
-
if (c && f && !
|
|
6545
|
+
if (c && f && !ac())
|
|
6546
6546
|
return xt[e] = t.prototype, t.prototype;
|
|
6547
6547
|
try {
|
|
6548
6548
|
const b = document.createElement("iframe");
|
|
@@ -6553,7 +6553,7 @@ function Ms(e) {
|
|
|
6553
6553
|
if (!h)
|
|
6554
6554
|
return b.remove(), s;
|
|
6555
6555
|
const d = navigator.userAgent;
|
|
6556
|
-
return d.includes("Safari") && !d.includes("Chrome") ? (b.classList.add("rr-block"), b.setAttribute("__rrwebUntaintedMutationObserver", ""),
|
|
6556
|
+
return d.includes("Safari") && !d.includes("Chrome") ? (b.classList.add("rr-block"), b.setAttribute("__rrwebUntaintedMutationObserver", ""), Gl[e] = () => b.remove()) : b.remove(), xt[e] = h;
|
|
6557
6557
|
} catch (b) {
|
|
6558
6558
|
return s;
|
|
6559
6559
|
}
|
|
@@ -6573,7 +6573,7 @@ function Ue(e, t, s) {
|
|
|
6573
6573
|
return f ? (cs[c] = f, f.call(t)) : t[s];
|
|
6574
6574
|
}
|
|
6575
6575
|
const us = {};
|
|
6576
|
-
function
|
|
6576
|
+
function Vl(e, t, s) {
|
|
6577
6577
|
const l = `${e}.${String(s)}`;
|
|
6578
6578
|
if (us[l])
|
|
6579
6579
|
return us[l].bind(
|
|
@@ -6582,47 +6582,47 @@ function Gl(e, t, s) {
|
|
|
6582
6582
|
const u = Ms(e)[s];
|
|
6583
6583
|
return typeof u != "function" ? t[s] : (us[l] = u, u.bind(t));
|
|
6584
6584
|
}
|
|
6585
|
-
function
|
|
6585
|
+
function cc(e) {
|
|
6586
6586
|
return Ue("Node", e, "ownerDocument");
|
|
6587
6587
|
}
|
|
6588
|
-
function
|
|
6588
|
+
function uc(e) {
|
|
6589
6589
|
return Ue("Node", e, "childNodes");
|
|
6590
6590
|
}
|
|
6591
|
-
function
|
|
6591
|
+
function dc(e) {
|
|
6592
6592
|
return Ue("Node", e, "parentNode");
|
|
6593
6593
|
}
|
|
6594
|
-
function
|
|
6594
|
+
function hc(e) {
|
|
6595
6595
|
return Ue("Node", e, "parentElement");
|
|
6596
6596
|
}
|
|
6597
|
-
function
|
|
6597
|
+
function pc(e) {
|
|
6598
6598
|
return Ue("Node", e, "textContent");
|
|
6599
6599
|
}
|
|
6600
|
-
function
|
|
6601
|
-
return
|
|
6602
|
-
}
|
|
6603
|
-
function mc(e) {
|
|
6604
|
-
return Gl("Node", e, "getRootNode")();
|
|
6600
|
+
function mc(e, t) {
|
|
6601
|
+
return Vl("Node", e, "contains")(t);
|
|
6605
6602
|
}
|
|
6606
6603
|
function fc(e) {
|
|
6607
|
-
return
|
|
6604
|
+
return Vl("Node", e, "getRootNode")();
|
|
6608
6605
|
}
|
|
6609
6606
|
function bc(e) {
|
|
6610
|
-
return e
|
|
6607
|
+
return !e || !("host" in e) ? null : Ue("ShadowRoot", e, "host");
|
|
6611
6608
|
}
|
|
6612
6609
|
function yc(e) {
|
|
6610
|
+
return e.styleSheets;
|
|
6611
|
+
}
|
|
6612
|
+
function Zc(e) {
|
|
6613
6613
|
return !e || !("shadowRoot" in e) ? null : Ue("Element", e, "shadowRoot");
|
|
6614
6614
|
}
|
|
6615
|
-
function
|
|
6615
|
+
function gc(e, t) {
|
|
6616
6616
|
return Ue("Element", e, "querySelector")(t);
|
|
6617
6617
|
}
|
|
6618
|
-
function
|
|
6618
|
+
function Sc(e, t) {
|
|
6619
6619
|
return Ue("Element", e, "querySelectorAll")(t);
|
|
6620
6620
|
}
|
|
6621
|
-
function
|
|
6621
|
+
function Wl() {
|
|
6622
6622
|
var e;
|
|
6623
6623
|
return [
|
|
6624
6624
|
Ms("MutationObserver").constructor,
|
|
6625
|
-
(e =
|
|
6625
|
+
(e = Gl.MutationObserver) != null ? e : () => {
|
|
6626
6626
|
}
|
|
6627
6627
|
];
|
|
6628
6628
|
}
|
|
@@ -6648,22 +6648,22 @@ function je(e, t, s) {
|
|
|
6648
6648
|
}
|
|
6649
6649
|
}
|
|
6650
6650
|
const Q = {
|
|
6651
|
-
ownerDocument:
|
|
6652
|
-
childNodes:
|
|
6653
|
-
parentNode:
|
|
6654
|
-
parentElement:
|
|
6655
|
-
textContent:
|
|
6656
|
-
contains:
|
|
6657
|
-
getRootNode:
|
|
6658
|
-
host:
|
|
6659
|
-
styleSheets:
|
|
6660
|
-
shadowRoot:
|
|
6661
|
-
querySelector:
|
|
6662
|
-
querySelectorAll:
|
|
6651
|
+
ownerDocument: cc,
|
|
6652
|
+
childNodes: uc,
|
|
6653
|
+
parentNode: dc,
|
|
6654
|
+
parentElement: hc,
|
|
6655
|
+
textContent: pc,
|
|
6656
|
+
contains: mc,
|
|
6657
|
+
getRootNode: fc,
|
|
6658
|
+
host: bc,
|
|
6659
|
+
styleSheets: yc,
|
|
6660
|
+
shadowRoot: Zc,
|
|
6661
|
+
querySelector: gc,
|
|
6662
|
+
querySelectorAll: Sc,
|
|
6663
6663
|
nowTimestamp: pt,
|
|
6664
|
-
mutationObserverCtor:
|
|
6664
|
+
mutationObserverCtor: Wl,
|
|
6665
6665
|
patch: je,
|
|
6666
|
-
wrapCanvasContextDrawImage:
|
|
6666
|
+
wrapCanvasContextDrawImage: oc
|
|
6667
6667
|
};
|
|
6668
6668
|
function Se(e, t, s = document) {
|
|
6669
6669
|
const l = { capture: !0 };
|
|
@@ -6720,7 +6720,7 @@ function ti(e, t, s, l, c = window) {
|
|
|
6720
6720
|
}
|
|
6721
6721
|
), () => ti(e, t, u || {}, !0);
|
|
6722
6722
|
}
|
|
6723
|
-
function
|
|
6723
|
+
function Il(e) {
|
|
6724
6724
|
var t, s, l, c;
|
|
6725
6725
|
const u = e.document;
|
|
6726
6726
|
return {
|
|
@@ -6728,16 +6728,16 @@ function Wl(e) {
|
|
|
6728
6728
|
top: u.scrollingElement ? u.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : (u == null ? void 0 : u.documentElement.scrollTop) || (u == null ? void 0 : u.body) && ((l = Q.parentElement(u.body)) == null ? void 0 : l.scrollTop) || ((c = u == null ? void 0 : u.body) == null ? void 0 : c.scrollTop) || 0
|
|
6729
6729
|
};
|
|
6730
6730
|
}
|
|
6731
|
-
function
|
|
6731
|
+
function wl() {
|
|
6732
6732
|
return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;
|
|
6733
6733
|
}
|
|
6734
|
-
function
|
|
6734
|
+
function Cl() {
|
|
6735
6735
|
return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;
|
|
6736
6736
|
}
|
|
6737
|
-
function
|
|
6737
|
+
function xl(e) {
|
|
6738
6738
|
return e ? e.nodeType === e.ELEMENT_NODE ? e : Q.parentElement(e) : null;
|
|
6739
6739
|
}
|
|
6740
|
-
const
|
|
6740
|
+
const Xc = (e) => {
|
|
6741
6741
|
try {
|
|
6742
6742
|
if (e instanceof HTMLElement)
|
|
6743
6743
|
return e.tagName === "CANVAS";
|
|
@@ -6749,7 +6749,7 @@ const Sc = (e) => {
|
|
|
6749
6749
|
function ye(e, t, s, l) {
|
|
6750
6750
|
if (!e)
|
|
6751
6751
|
return !1;
|
|
6752
|
-
const c =
|
|
6752
|
+
const c = xl(e);
|
|
6753
6753
|
if (!c)
|
|
6754
6754
|
return !1;
|
|
6755
6755
|
try {
|
|
@@ -6760,37 +6760,37 @@ function ye(e, t, s, l) {
|
|
|
6760
6760
|
}
|
|
6761
6761
|
return !!(s && (c.matches(s) || l && c.closest(s) !== null));
|
|
6762
6762
|
}
|
|
6763
|
-
function
|
|
6763
|
+
function Rc(e, t) {
|
|
6764
6764
|
return t.getId(e) !== -1;
|
|
6765
6765
|
}
|
|
6766
6766
|
function ds(e, t, s) {
|
|
6767
6767
|
return e.tagName === "TITLE" && s.headTitleMutations ? !0 : t.getId(e) === ht;
|
|
6768
6768
|
}
|
|
6769
|
-
function
|
|
6769
|
+
function vl(e, t) {
|
|
6770
6770
|
if (ot(e))
|
|
6771
6771
|
return !1;
|
|
6772
6772
|
const s = t.getId(e);
|
|
6773
6773
|
if (!t.has(s))
|
|
6774
6774
|
return !0;
|
|
6775
6775
|
const l = Q.parentNode(e);
|
|
6776
|
-
return l && l.nodeType === e.DOCUMENT_NODE ? !1 : l ?
|
|
6776
|
+
return l && l.nodeType === e.DOCUMENT_NODE ? !1 : l ? vl(l, t) : !0;
|
|
6777
6777
|
}
|
|
6778
6778
|
function ys(e) {
|
|
6779
6779
|
return !!e.changedTouches;
|
|
6780
6780
|
}
|
|
6781
|
-
function
|
|
6781
|
+
function Gc(e = window) {
|
|
6782
6782
|
"NodeList" in e && !e.NodeList.prototype.forEach && (e.NodeList.prototype.forEach = Array.prototype.forEach), "DOMTokenList" in e && !e.DOMTokenList.prototype.forEach && (e.DOMTokenList.prototype.forEach = Array.prototype.forEach);
|
|
6783
6783
|
}
|
|
6784
|
-
function
|
|
6784
|
+
function Ll(e, t) {
|
|
6785
6785
|
return !!(e.nodeName === "IFRAME" && t.getMeta(e));
|
|
6786
6786
|
}
|
|
6787
|
-
function
|
|
6787
|
+
function kl(e, t) {
|
|
6788
6788
|
return !!(e.nodeName === "LINK" && e.nodeType === e.ELEMENT_NODE && e.getAttribute && e.getAttribute("rel") === "stylesheet" && t.getMeta(e));
|
|
6789
6789
|
}
|
|
6790
6790
|
function Zs(e) {
|
|
6791
6791
|
return e ? e instanceof Fs && "shadowRoot" in e ? !!e.shadowRoot : !!Q.shadowRoot(e) : !1;
|
|
6792
6792
|
}
|
|
6793
|
-
class
|
|
6793
|
+
class Vc {
|
|
6794
6794
|
constructor() {
|
|
6795
6795
|
L(this, "id", 1), L(this, "styleIDMap", /* @__PURE__ */ new WeakMap()), L(this, "idStyleMap", /* @__PURE__ */ new Map());
|
|
6796
6796
|
}
|
|
@@ -6819,32 +6819,32 @@ class Gc {
|
|
|
6819
6819
|
return this.id++;
|
|
6820
6820
|
}
|
|
6821
6821
|
}
|
|
6822
|
-
function
|
|
6822
|
+
function Jl(e) {
|
|
6823
6823
|
var t;
|
|
6824
6824
|
let s = null;
|
|
6825
6825
|
return "getRootNode" in e && ((t = Q.getRootNode(e)) == null ? void 0 : t.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && Q.host(Q.getRootNode(e)) && (s = Q.host(Q.getRootNode(e))), s;
|
|
6826
6826
|
}
|
|
6827
|
-
function
|
|
6827
|
+
function Wc(e) {
|
|
6828
6828
|
let t = e, s;
|
|
6829
|
-
for (; s =
|
|
6829
|
+
for (; s = Jl(t); )
|
|
6830
6830
|
t = s;
|
|
6831
6831
|
return t;
|
|
6832
6832
|
}
|
|
6833
|
-
function
|
|
6833
|
+
function Ic(e) {
|
|
6834
6834
|
const t = Q.ownerDocument(e);
|
|
6835
6835
|
if (!t) return !1;
|
|
6836
|
-
const s =
|
|
6836
|
+
const s = Wc(e);
|
|
6837
6837
|
return Q.contains(t, s);
|
|
6838
6838
|
}
|
|
6839
|
-
function
|
|
6839
|
+
function Yl(e) {
|
|
6840
6840
|
const t = Q.ownerDocument(e);
|
|
6841
|
-
return t ? Q.contains(t, e) ||
|
|
6841
|
+
return t ? Q.contains(t, e) || Ic(e) : !1;
|
|
6842
6842
|
}
|
|
6843
|
-
var q = /* @__PURE__ */ ((e) => (e[e.DomContentLoaded = 0] = "DomContentLoaded", e[e.Load = 1] = "Load", e[e.FullSnapshot = 2] = "FullSnapshot", e[e.IncrementalSnapshot = 3] = "IncrementalSnapshot", e[e.Meta = 4] = "Meta", e[e.Custom = 5] = "Custom", e[e.Plugin = 6] = "Plugin", e[e.Asset = 7] = "Asset", e))(q || {}), A = /* @__PURE__ */ ((e) => (e[e.Mutation = 0] = "Mutation", e[e.MouseMove = 1] = "MouseMove", e[e.MouseInteraction = 2] = "MouseInteraction", e[e.Scroll = 3] = "Scroll", e[e.ViewportResize = 4] = "ViewportResize", e[e.Input = 5] = "Input", e[e.TouchMove = 6] = "TouchMove", e[e.MediaInteraction = 7] = "MediaInteraction", e[e.StyleSheetRule = 8] = "StyleSheetRule", e[e.CanvasMutation = 9] = "CanvasMutation", e[e.Font = 10] = "Font", e[e.Log = 11] = "Log", e[e.Drag = 12] = "Drag", e[e.StyleDeclaration = 13] = "StyleDeclaration", e[e.Selection = 14] = "Selection", e[e.AdoptedStyleSheet = 15] = "AdoptedStyleSheet", e[e.CustomElement = 16] = "CustomElement", e))(A || {}), Xe = /* @__PURE__ */ ((e) => (e[e.MouseUp = 0] = "MouseUp", e[e.MouseDown = 1] = "MouseDown", e[e.Click = 2] = "Click", e[e.ContextMenu = 3] = "ContextMenu", e[e.DblClick = 4] = "DblClick", e[e.Focus = 5] = "Focus", e[e.Blur = 6] = "Blur", e[e.TouchStart = 7] = "TouchStart", e[e.TouchMove_Departed = 8] = "TouchMove_Departed", e[e.TouchEnd = 9] = "TouchEnd", e[e.TouchCancel = 10] = "TouchCancel", e))(Xe || {}), ze = /* @__PURE__ */ ((e) => (e[e.Mouse = 0] = "Mouse", e[e.Pen = 1] = "Pen", e[e.Touch = 2] = "Touch", e))(ze || {}), it = /* @__PURE__ */ ((e) => (e[e["2D"] = 0] = "2D", e[e.WebGL = 1] = "WebGL", e[e.WebGL2 = 2] = "WebGL2", e))(it || {}), $e = /* @__PURE__ */ ((e) => (e[e.Play = 0] = "Play", e[e.Pause = 1] = "Pause", e[e.Seeked = 2] = "Seeked", e[e.VolumeChange = 3] = "VolumeChange", e[e.RateChange = 4] = "RateChange", e))($e || {}),
|
|
6843
|
+
var q = /* @__PURE__ */ ((e) => (e[e.DomContentLoaded = 0] = "DomContentLoaded", e[e.Load = 1] = "Load", e[e.FullSnapshot = 2] = "FullSnapshot", e[e.IncrementalSnapshot = 3] = "IncrementalSnapshot", e[e.Meta = 4] = "Meta", e[e.Custom = 5] = "Custom", e[e.Plugin = 6] = "Plugin", e[e.Asset = 7] = "Asset", e))(q || {}), A = /* @__PURE__ */ ((e) => (e[e.Mutation = 0] = "Mutation", e[e.MouseMove = 1] = "MouseMove", e[e.MouseInteraction = 2] = "MouseInteraction", e[e.Scroll = 3] = "Scroll", e[e.ViewportResize = 4] = "ViewportResize", e[e.Input = 5] = "Input", e[e.TouchMove = 6] = "TouchMove", e[e.MediaInteraction = 7] = "MediaInteraction", e[e.StyleSheetRule = 8] = "StyleSheetRule", e[e.CanvasMutation = 9] = "CanvasMutation", e[e.Font = 10] = "Font", e[e.Log = 11] = "Log", e[e.Drag = 12] = "Drag", e[e.StyleDeclaration = 13] = "StyleDeclaration", e[e.Selection = 14] = "Selection", e[e.AdoptedStyleSheet = 15] = "AdoptedStyleSheet", e[e.CustomElement = 16] = "CustomElement", e))(A || {}), Xe = /* @__PURE__ */ ((e) => (e[e.MouseUp = 0] = "MouseUp", e[e.MouseDown = 1] = "MouseDown", e[e.Click = 2] = "Click", e[e.ContextMenu = 3] = "ContextMenu", e[e.DblClick = 4] = "DblClick", e[e.Focus = 5] = "Focus", e[e.Blur = 6] = "Blur", e[e.TouchStart = 7] = "TouchStart", e[e.TouchMove_Departed = 8] = "TouchMove_Departed", e[e.TouchEnd = 9] = "TouchEnd", e[e.TouchCancel = 10] = "TouchCancel", e))(Xe || {}), ze = /* @__PURE__ */ ((e) => (e[e.Mouse = 0] = "Mouse", e[e.Pen = 1] = "Pen", e[e.Touch = 2] = "Touch", e))(ze || {}), it = /* @__PURE__ */ ((e) => (e[e["2D"] = 0] = "2D", e[e.WebGL = 1] = "WebGL", e[e.WebGL2 = 2] = "WebGL2", e))(it || {}), $e = /* @__PURE__ */ ((e) => (e[e.Play = 0] = "Play", e[e.Pause = 1] = "Pause", e[e.Seeked = 2] = "Seeked", e[e.VolumeChange = 3] = "VolumeChange", e[e.RateChange = 4] = "RateChange", e))($e || {}), Nl = /* @__PURE__ */ ((e) => (e[e.Document = 0] = "Document", e[e.DocumentType = 1] = "DocumentType", e[e.Element = 2] = "Element", e[e.Text = 3] = "Text", e[e.CDATA = 4] = "CDATA", e[e.Comment = 5] = "Comment", e))(Nl || {});
|
|
6844
6844
|
function Vn(e) {
|
|
6845
6845
|
return "__ln" in e;
|
|
6846
6846
|
}
|
|
6847
|
-
class
|
|
6847
|
+
class wc {
|
|
6848
6848
|
constructor() {
|
|
6849
6849
|
L(this, "length", 0), L(this, "head", null), L(this, "tail", null);
|
|
6850
6850
|
}
|
|
@@ -6878,21 +6878,21 @@ class Ic {
|
|
|
6878
6878
|
}
|
|
6879
6879
|
}
|
|
6880
6880
|
const Wn = (e, t) => `${e}@${t}`;
|
|
6881
|
-
class
|
|
6881
|
+
class Cc {
|
|
6882
6882
|
constructor() {
|
|
6883
6883
|
L(this, "frozen", !1), L(this, "locked", !1), L(this, "texts", []), L(this, "attributes", []), L(this, "attributeMap", /* @__PURE__ */ new WeakMap()), L(this, "removes", []), L(this, "mapRemoves", []), L(this, "movedMap", {}), L(this, "addedSet", /* @__PURE__ */ new Set()), L(this, "movedSet", /* @__PURE__ */ new Set()), L(this, "droppedSet", /* @__PURE__ */ new Set()), L(this, "removesSubTreeCache", /* @__PURE__ */ new Set()), L(this, "mutationCb"), L(this, "blockClass"), L(this, "blockSelector"), L(this, "maskTextClass"), L(this, "maskTextSelector"), L(this, "inlineStylesheet"), L(this, "maskInputOptions"), L(this, "maskTextFn"), L(this, "maskInputFn"), L(this, "keepIframeSrcFn"), L(this, "recordCanvas"), L(this, "inlineImages"), L(this, "inlineVideos"), L(this, "privacySetting"), L(this, "slimDOMOptions"), L(this, "dataURLOptions"), L(this, "doc"), L(this, "mirror"), L(this, "iframeManager"), L(this, "stylesheetManager"), L(this, "shadowDomManager"), L(this, "canvasManager"), L(this, "processedNodeManager"), L(this, "unattachedDoc"), L(this, "processMutations", (t) => {
|
|
6884
6884
|
t.forEach(this.processMutation), this.emit();
|
|
6885
6885
|
}), L(this, "emit", () => {
|
|
6886
6886
|
if (this.frozen || this.locked)
|
|
6887
6887
|
return;
|
|
6888
|
-
const t = [], s = /* @__PURE__ */ new Set(), l = new
|
|
6888
|
+
const t = [], s = /* @__PURE__ */ new Set(), l = new wc(), c = (m) => {
|
|
6889
6889
|
let h = m, d = ht;
|
|
6890
6890
|
for (; d === ht; )
|
|
6891
6891
|
h = h && h.nextSibling, d = h && this.mirror.getId(h);
|
|
6892
6892
|
return d;
|
|
6893
6893
|
}, u = (m) => {
|
|
6894
6894
|
const h = Q.parentNode(m);
|
|
6895
|
-
if (!h || !
|
|
6895
|
+
if (!h || !Yl(m))
|
|
6896
6896
|
return;
|
|
6897
6897
|
let d = !1;
|
|
6898
6898
|
if (m.nodeType === Node.TEXT_NODE) {
|
|
@@ -6901,7 +6901,7 @@ class wc {
|
|
|
6901
6901
|
return;
|
|
6902
6902
|
o === "STYLE" && this.addedSet.has(h) && (d = !0);
|
|
6903
6903
|
}
|
|
6904
|
-
const r = ot(h) ? this.mirror.getId(
|
|
6904
|
+
const r = ot(h) ? this.mirror.getId(Jl(m)) : this.mirror.getId(h), n = c(m);
|
|
6905
6905
|
if (r === -1 || n === -1)
|
|
6906
6906
|
return l.addNode(m);
|
|
6907
6907
|
const i = et(m, {
|
|
@@ -6924,7 +6924,7 @@ class wc {
|
|
|
6924
6924
|
inlineVideos: this.inlineVideos,
|
|
6925
6925
|
privacySetting: this.privacySetting,
|
|
6926
6926
|
onSerialize: (o) => {
|
|
6927
|
-
|
|
6927
|
+
Ll(o, this.mirror) && this.iframeManager.addIframe(o), kl(o, this.mirror) && this.stylesheetManager.trackLinkElement(
|
|
6928
6928
|
o
|
|
6929
6929
|
), Zs(m) && this.shadowDomManager.addShadowRoot(Q.shadowRoot(m), this.doc);
|
|
6930
6930
|
},
|
|
@@ -6991,7 +6991,7 @@ class wc {
|
|
|
6991
6991
|
const r = m.node, n = Q.parentNode(r);
|
|
6992
6992
|
n && n.tagName === "TEXTAREA" && this.genTextAreaValueMutation(n);
|
|
6993
6993
|
let i = m.value;
|
|
6994
|
-
const o = this.privacySetting === "strict", a = this.privacySetting === "default" &&
|
|
6994
|
+
const o = this.privacySetting === "strict", a = this.privacySetting === "default" && il(i), p = (d = (h = m.node) == null ? void 0 : h.parentElement) == null ? void 0 : d.getAttribute("data-hl-record");
|
|
6995
6995
|
return (o || a) && !p && i && (i = Ws(i)), {
|
|
6996
6996
|
id: this.mirror.getId(r),
|
|
6997
6997
|
value: i
|
|
@@ -7039,13 +7039,13 @@ class wc {
|
|
|
7039
7039
|
case "characterData": {
|
|
7040
7040
|
const s = Q.textContent(t.target);
|
|
7041
7041
|
!ye(t.target, this.blockClass, this.blockSelector, !1) && s !== t.oldValue && this.texts.push({
|
|
7042
|
-
value:
|
|
7042
|
+
value: ol(
|
|
7043
7043
|
t.target,
|
|
7044
7044
|
this.maskTextClass,
|
|
7045
7045
|
this.maskTextSelector,
|
|
7046
7046
|
!0
|
|
7047
7047
|
// checkAncestors
|
|
7048
|
-
) && s ? this.maskTextFn ? this.maskTextFn(s,
|
|
7048
|
+
) && s ? this.maskTextFn ? this.maskTextFn(s, xl(t.target)) : s.replace(/[\S]/g, "*") : s,
|
|
7049
7049
|
node: t.target
|
|
7050
7050
|
});
|
|
7051
7051
|
break;
|
|
@@ -7078,7 +7078,7 @@ class wc {
|
|
|
7078
7078
|
attributes: {},
|
|
7079
7079
|
styleDiff: {},
|
|
7080
7080
|
_unchangedStyles: {}
|
|
7081
|
-
}, this.attributes.push(u), this.attributeMap.set(t.target, u)), l === "type" && s.tagName === "INPUT" && (t.oldValue || "").toLowerCase() === "password" && s.setAttribute("data-rr-is-password", "true"), !
|
|
7081
|
+
}, this.attributes.push(u), this.attributeMap.set(t.target, u)), l === "type" && s.tagName === "INPUT" && (t.oldValue || "").toLowerCase() === "password" && s.setAttribute("data-rr-is-password", "true"), !ll(s.tagName, l)) {
|
|
7082
7082
|
if (t.target.tagName === "INPUT") {
|
|
7083
7083
|
const b = t.target;
|
|
7084
7084
|
if (b.type === "password") {
|
|
@@ -7086,7 +7086,7 @@ class wc {
|
|
|
7086
7086
|
break;
|
|
7087
7087
|
}
|
|
7088
7088
|
}
|
|
7089
|
-
if (u.attributes[l] =
|
|
7089
|
+
if (u.attributes[l] = nl(
|
|
7090
7090
|
this.doc,
|
|
7091
7091
|
Qe(s.tagName),
|
|
7092
7092
|
Qe(l),
|
|
@@ -7119,11 +7119,11 @@ class wc {
|
|
|
7119
7119
|
}
|
|
7120
7120
|
t.addedNodes.forEach((s) => this.genAdds(s, t.target)), t.removedNodes.forEach((s) => {
|
|
7121
7121
|
const l = this.mirror.getId(s), c = ot(t.target) ? this.mirror.getId(Q.host(t.target)) : this.mirror.getId(t.target);
|
|
7122
|
-
ye(t.target, this.blockClass, this.blockSelector, !1) || ds(s, this.mirror, this.slimDOMOptions) || !
|
|
7122
|
+
ye(t.target, this.blockClass, this.blockSelector, !1) || ds(s, this.mirror, this.slimDOMOptions) || !Rc(s, this.mirror) || (this.addedSet.has(s) ? (gs(this.addedSet, s), this.droppedSet.add(s)) : this.addedSet.has(t.target) && l === -1 || vl(t.target, this.mirror) || (this.movedSet.has(s) && this.movedMap[Wn(l, c)] ? gs(this.movedSet, s) : (this.removes.push({
|
|
7123
7123
|
parentId: c,
|
|
7124
7124
|
id: l,
|
|
7125
7125
|
isShadow: ot(t.target) && at(t.target) ? !0 : void 0
|
|
7126
|
-
}),
|
|
7126
|
+
}), xc(s, this.removesSubTreeCache))), this.mapRemoves.push(s));
|
|
7127
7127
|
});
|
|
7128
7128
|
break;
|
|
7129
7129
|
}
|
|
@@ -7195,7 +7195,7 @@ class wc {
|
|
|
7195
7195
|
function gs(e, t) {
|
|
7196
7196
|
e.delete(t), Q.childNodes(t).forEach((s) => gs(e, s));
|
|
7197
7197
|
}
|
|
7198
|
-
function
|
|
7198
|
+
function xc(e, t) {
|
|
7199
7199
|
const s = [e];
|
|
7200
7200
|
for (; s.length; ) {
|
|
7201
7201
|
const l = s.pop();
|
|
@@ -7203,24 +7203,24 @@ function Cc(e, t) {
|
|
|
7203
7203
|
}
|
|
7204
7204
|
}
|
|
7205
7205
|
function In(e, t, s) {
|
|
7206
|
-
return e.size === 0 ? !1 :
|
|
7206
|
+
return e.size === 0 ? !1 : vc(e, t);
|
|
7207
7207
|
}
|
|
7208
|
-
function
|
|
7208
|
+
function vc(e, t, s) {
|
|
7209
7209
|
const l = Q.parentNode(t);
|
|
7210
7210
|
return l ? e.has(l) : !1;
|
|
7211
7211
|
}
|
|
7212
7212
|
function wn(e, t) {
|
|
7213
|
-
return e.size === 0 ? !1 :
|
|
7213
|
+
return e.size === 0 ? !1 : Tl(e, t);
|
|
7214
7214
|
}
|
|
7215
|
-
function
|
|
7215
|
+
function Tl(e, t) {
|
|
7216
7216
|
const s = Q.parentNode(t);
|
|
7217
|
-
return s ? e.has(s) ? !0 :
|
|
7217
|
+
return s ? e.has(s) ? !0 : Tl(e, s) : !1;
|
|
7218
7218
|
}
|
|
7219
7219
|
let ct;
|
|
7220
|
-
function
|
|
7220
|
+
function Lc(e) {
|
|
7221
7221
|
ct = e;
|
|
7222
7222
|
}
|
|
7223
|
-
function
|
|
7223
|
+
function kc() {
|
|
7224
7224
|
ct = void 0;
|
|
7225
7225
|
}
|
|
7226
7226
|
const _ = (e) => ct ? (...s) => {
|
|
@@ -7244,10 +7244,10 @@ function gt(e) {
|
|
|
7244
7244
|
}
|
|
7245
7245
|
return e && e.target;
|
|
7246
7246
|
}
|
|
7247
|
-
function
|
|
7248
|
-
const s = new
|
|
7247
|
+
function Ul(e, t) {
|
|
7248
|
+
const s = new Cc();
|
|
7249
7249
|
Ee.push(s), s.init(e);
|
|
7250
|
-
const [l, c] =
|
|
7250
|
+
const [l, c] = Wl(), u = new l(
|
|
7251
7251
|
_(s.processMutations.bind(s))
|
|
7252
7252
|
);
|
|
7253
7253
|
return u.observe(t, {
|
|
@@ -7259,7 +7259,7 @@ function Tl(e, t) {
|
|
|
7259
7259
|
subtree: !0
|
|
7260
7260
|
}), [u, c];
|
|
7261
7261
|
}
|
|
7262
|
-
function
|
|
7262
|
+
function Jc({
|
|
7263
7263
|
mousemoveCb: e,
|
|
7264
7264
|
sampling: t,
|
|
7265
7265
|
doc: s,
|
|
@@ -7308,7 +7308,7 @@ function kc({
|
|
|
7308
7308
|
d.forEach((r) => r());
|
|
7309
7309
|
});
|
|
7310
7310
|
}
|
|
7311
|
-
function
|
|
7311
|
+
function Yc({
|
|
7312
7312
|
mouseInteractionCb: e,
|
|
7313
7313
|
doc: t,
|
|
7314
7314
|
mirror: s,
|
|
@@ -7324,7 +7324,7 @@ function Jc({
|
|
|
7324
7324
|
const h = (d) => (r) => {
|
|
7325
7325
|
const n = gt(r);
|
|
7326
7326
|
if (ye(n, l, c, !0) || // We ignore canvas elements for rage click detection because we cannot infer what inside the canvas is getting interacted with.
|
|
7327
|
-
|
|
7327
|
+
Xc(n))
|
|
7328
7328
|
return;
|
|
7329
7329
|
let i = null, o = d;
|
|
7330
7330
|
if ("pointerType" in r) {
|
|
@@ -7376,7 +7376,7 @@ function Jc({
|
|
|
7376
7376
|
b.forEach((d) => d());
|
|
7377
7377
|
});
|
|
7378
7378
|
}
|
|
7379
|
-
function
|
|
7379
|
+
function Kl({
|
|
7380
7380
|
scrollCb: e,
|
|
7381
7381
|
doc: t,
|
|
7382
7382
|
mirror: s,
|
|
@@ -7392,7 +7392,7 @@ function Ul({
|
|
|
7392
7392
|
return;
|
|
7393
7393
|
const h = s.getId(m);
|
|
7394
7394
|
if (m === t && t.defaultView) {
|
|
7395
|
-
const d =
|
|
7395
|
+
const d = Il(t.defaultView);
|
|
7396
7396
|
e({
|
|
7397
7397
|
id: h,
|
|
7398
7398
|
x: d.left,
|
|
@@ -7410,12 +7410,12 @@ function Ul({
|
|
|
7410
7410
|
);
|
|
7411
7411
|
return Se("scroll", f, t);
|
|
7412
7412
|
}
|
|
7413
|
-
function
|
|
7413
|
+
function Nc({ viewportResizeCb: e }, { win: t }) {
|
|
7414
7414
|
let s = -1, l = -1;
|
|
7415
7415
|
const c = _(
|
|
7416
7416
|
mt(
|
|
7417
7417
|
_(() => {
|
|
7418
|
-
const u =
|
|
7418
|
+
const u = wl(), f = Cl();
|
|
7419
7419
|
(s !== u || l !== f) && (e({
|
|
7420
7420
|
width: Number(f),
|
|
7421
7421
|
height: Number(u)
|
|
@@ -7426,8 +7426,8 @@ function Yc({ viewportResizeCb: e }, { win: t }) {
|
|
|
7426
7426
|
);
|
|
7427
7427
|
return Se("resize", c, t);
|
|
7428
7428
|
}
|
|
7429
|
-
const
|
|
7430
|
-
function
|
|
7429
|
+
const Tc = ["INPUT", "TEXTAREA", "SELECT"], Cn = /* @__PURE__ */ new WeakMap();
|
|
7430
|
+
function Uc({
|
|
7431
7431
|
inputCb: e,
|
|
7432
7432
|
doc: t,
|
|
7433
7433
|
mirror: s,
|
|
@@ -7443,11 +7443,11 @@ function Tc({
|
|
|
7443
7443
|
function r(Z) {
|
|
7444
7444
|
let S = gt(Z);
|
|
7445
7445
|
const G = Z.isTrusted, g = S && S.tagName;
|
|
7446
|
-
if (S && g === "OPTION" && (S = Q.parentElement(S)), !S || !g ||
|
|
7446
|
+
if (S && g === "OPTION" && (S = Q.parentElement(S)), !S || !g || Tc.indexOf(g) < 0 || ye(S, l, c, !0) || S.classList.contains(u) || f && S.matches(f))
|
|
7447
7447
|
return;
|
|
7448
7448
|
let y = S.value, R = !1;
|
|
7449
7449
|
const I = Ut(S) || "", V = S.getAttribute("data-hl-record");
|
|
7450
|
-
I === "radio" || I === "checkbox" ? R = S.checked :
|
|
7450
|
+
I === "radio" || I === "checkbox" ? R = S.checked : sl({
|
|
7451
7451
|
maskInputOptions: b,
|
|
7452
7452
|
type: I,
|
|
7453
7453
|
tagName: g,
|
|
@@ -7552,8 +7552,8 @@ function He(e, t, s) {
|
|
|
7552
7552
|
function Ke(e, t, s, l) {
|
|
7553
7553
|
e[t] === s && (e[t] = l);
|
|
7554
7554
|
}
|
|
7555
|
-
const
|
|
7556
|
-
function
|
|
7555
|
+
const Kc = 5;
|
|
7556
|
+
function Fc({
|
|
7557
7557
|
styleSheetRuleCb: e,
|
|
7558
7558
|
mirror: t,
|
|
7559
7559
|
stylesheetManager: s,
|
|
@@ -7758,7 +7758,7 @@ function Kc({
|
|
|
7758
7758
|
};
|
|
7759
7759
|
let j = 0;
|
|
7760
7760
|
const ne = (k) => {
|
|
7761
|
-
j >=
|
|
7761
|
+
j >= Kc || (j += 1, k.insertRule || (g = u.CSSStyleSheet.prototype.insertRule, G = X(g), u.CSSStyleSheet.prototype.insertRule = G), k.deleteRule || (W = u.CSSStyleSheet.prototype.deleteRule, V = Z(W), u.CSSStyleSheet.prototype.deleteRule = V));
|
|
7762
7762
|
}, C = (k) => {
|
|
7763
7763
|
for (let J = 0; J < l.styleSheets.length; J++) {
|
|
7764
7764
|
const N = l.styleSheets[J];
|
|
@@ -7775,7 +7775,7 @@ function Kc({
|
|
|
7775
7775
|
}
|
|
7776
7776
|
const O = f.get(N);
|
|
7777
7777
|
if (!O) {
|
|
7778
|
-
if (Array.from(T).some(($) =>
|
|
7778
|
+
if (Array.from(T).some(($) => qn($))) {
|
|
7779
7779
|
b.add(N);
|
|
7780
7780
|
continue;
|
|
7781
7781
|
}
|
|
@@ -7849,7 +7849,7 @@ function Kc({
|
|
|
7849
7849
|
});
|
|
7850
7850
|
});
|
|
7851
7851
|
}
|
|
7852
|
-
function
|
|
7852
|
+
function Fl({
|
|
7853
7853
|
mirror: e,
|
|
7854
7854
|
stylesheetManager: t
|
|
7855
7855
|
}, s) {
|
|
@@ -7889,7 +7889,7 @@ function Kl({
|
|
|
7889
7889
|
});
|
|
7890
7890
|
}));
|
|
7891
7891
|
}
|
|
7892
|
-
function
|
|
7892
|
+
function Mc({
|
|
7893
7893
|
styleDeclarationCb: e,
|
|
7894
7894
|
mirror: t,
|
|
7895
7895
|
ignoreCSSAttributes: s,
|
|
@@ -7950,7 +7950,7 @@ function Fc({
|
|
|
7950
7950
|
c.CSSStyleDeclaration.prototype.setProperty = u, c.CSSStyleDeclaration.prototype.removeProperty = f;
|
|
7951
7951
|
});
|
|
7952
7952
|
}
|
|
7953
|
-
function
|
|
7953
|
+
function zc({
|
|
7954
7954
|
mediaInteractionCb: e,
|
|
7955
7955
|
blockClass: t,
|
|
7956
7956
|
blockSelector: s,
|
|
@@ -7988,7 +7988,7 @@ function Mc({
|
|
|
7988
7988
|
b.forEach((m) => m());
|
|
7989
7989
|
});
|
|
7990
7990
|
}
|
|
7991
|
-
function
|
|
7991
|
+
function Hc({ fontCb: e, doc: t }) {
|
|
7992
7992
|
const s = t.defaultView;
|
|
7993
7993
|
if (!s)
|
|
7994
7994
|
return () => {
|
|
@@ -8028,7 +8028,7 @@ function zc({ fontCb: e, doc: t }) {
|
|
|
8028
8028
|
l.forEach((b) => b());
|
|
8029
8029
|
});
|
|
8030
8030
|
}
|
|
8031
|
-
function
|
|
8031
|
+
function Oc(e) {
|
|
8032
8032
|
const { doc: t, mirror: s, blockClass: l, blockSelector: c, selectionCb: u } = e;
|
|
8033
8033
|
let f = !0;
|
|
8034
8034
|
const b = _(() => {
|
|
@@ -8049,7 +8049,7 @@ function Hc(e) {
|
|
|
8049
8049
|
});
|
|
8050
8050
|
return b(), Se("selectionchange", b);
|
|
8051
8051
|
}
|
|
8052
|
-
function
|
|
8052
|
+
function Pc({
|
|
8053
8053
|
doc: e,
|
|
8054
8054
|
customElementCb: t
|
|
8055
8055
|
}) {
|
|
@@ -8074,7 +8074,7 @@ function Oc({
|
|
|
8074
8074
|
}
|
|
8075
8075
|
);
|
|
8076
8076
|
}
|
|
8077
|
-
function
|
|
8077
|
+
function Ec(e, t) {
|
|
8078
8078
|
const {
|
|
8079
8079
|
mutationCb: s,
|
|
8080
8080
|
mousemoveCb: l,
|
|
@@ -8118,27 +8118,27 @@ function Pc(e, t) {
|
|
|
8118
8118
|
t.customElement && t.customElement(...a), o(...a);
|
|
8119
8119
|
};
|
|
8120
8120
|
}
|
|
8121
|
-
function
|
|
8121
|
+
function Bc(e, t = {}) {
|
|
8122
8122
|
const s = e.doc.defaultView;
|
|
8123
8123
|
if (!s)
|
|
8124
8124
|
return () => {
|
|
8125
8125
|
};
|
|
8126
|
-
|
|
8126
|
+
Ec(e, t);
|
|
8127
8127
|
let l, c = () => {
|
|
8128
8128
|
};
|
|
8129
|
-
e.recordDOM && ([l, c] =
|
|
8130
|
-
const u =
|
|
8129
|
+
e.recordDOM && ([l, c] = Ul(e, e.doc));
|
|
8130
|
+
const u = Jc(e), f = Yc(e), b = Kl(e), m = Nc(e, {
|
|
8131
8131
|
win: s
|
|
8132
|
-
}), h =
|
|
8132
|
+
}), h = Uc(e), d = zc(e);
|
|
8133
8133
|
let r = () => {
|
|
8134
8134
|
}, n = () => {
|
|
8135
8135
|
}, i = () => {
|
|
8136
8136
|
}, o = () => {
|
|
8137
8137
|
};
|
|
8138
|
-
e.recordDOM && (r =
|
|
8138
|
+
e.recordDOM && (r = Fc(e, { win: s }), n = Fl(e, e.doc), i = Mc(e, {
|
|
8139
8139
|
win: s
|
|
8140
|
-
}), e.collectFonts && (o =
|
|
8141
|
-
const a =
|
|
8140
|
+
}), e.collectFonts && (o = Hc(e)));
|
|
8141
|
+
const a = Oc(e), p = Pc(e), X = [];
|
|
8142
8142
|
for (const Z of e.plugins)
|
|
8143
8143
|
X.push(
|
|
8144
8144
|
Z.observer(Z.callback, s, Z.options)
|
|
@@ -8196,9 +8196,9 @@ class xn {
|
|
|
8196
8196
|
return s || (s = /* @__PURE__ */ new Map(), this.iframeRemoteIdToIdMap.set(t, s)), s;
|
|
8197
8197
|
}
|
|
8198
8198
|
}
|
|
8199
|
-
class
|
|
8199
|
+
class Qc {
|
|
8200
8200
|
constructor(t) {
|
|
8201
|
-
L(this, "iframes", /* @__PURE__ */ new WeakMap()), L(this, "crossOriginIframeMap", /* @__PURE__ */ new WeakMap()), L(this, "crossOriginIframeMirror", new xn(
|
|
8201
|
+
L(this, "iframes", /* @__PURE__ */ new WeakMap()), L(this, "crossOriginIframeMap", /* @__PURE__ */ new WeakMap()), L(this, "crossOriginIframeMirror", new xn(rl)), L(this, "crossOriginIframeStyleMirror"), L(this, "crossOriginIframeRootIdMap", /* @__PURE__ */ new WeakMap()), L(this, "mirror"), L(this, "mutationCb"), L(this, "wrappedEmit"), L(this, "loadListener"), L(this, "stylesheetManager"), L(this, "recordCrossOriginIframes"), this.mutationCb = t.mutationCb, this.wrappedEmit = t.wrappedEmit, this.stylesheetManager = t.stylesheetManager, this.recordCrossOriginIframes = t.recordCrossOriginIframes, this.crossOriginIframeStyleMirror = new xn(
|
|
8202
8202
|
this.stylesheetManager.styleMirror.generateId.bind(
|
|
8203
8203
|
this.stylesheetManager.styleMirror
|
|
8204
8204
|
)
|
|
@@ -8356,12 +8356,12 @@ class Bc {
|
|
|
8356
8356
|
});
|
|
8357
8357
|
}
|
|
8358
8358
|
patchRootIdOnNode(t, s) {
|
|
8359
|
-
t.type !==
|
|
8359
|
+
t.type !== Nl.Document && !t.rootId && (t.rootId = s), "childNodes" in t && t.childNodes.forEach((l) => {
|
|
8360
8360
|
this.patchRootIdOnNode(l, s);
|
|
8361
8361
|
});
|
|
8362
8362
|
}
|
|
8363
8363
|
}
|
|
8364
|
-
class
|
|
8364
|
+
class Dc {
|
|
8365
8365
|
constructor(t) {
|
|
8366
8366
|
L(this, "shadowDoms", /* @__PURE__ */ new WeakSet()), L(this, "mutationCb"), L(this, "scrollCb"), L(this, "bypassOptions"), L(this, "mirror"), L(this, "restoreHandlers", []), this.mutationCb = t.mutationCb, this.scrollCb = t.scrollCb, this.bypassOptions = t.bypassOptions, this.mirror = t.mirror, this.init();
|
|
8367
8367
|
}
|
|
@@ -8371,7 +8371,7 @@ class Qc {
|
|
|
8371
8371
|
addShadowRoot(t, s) {
|
|
8372
8372
|
if (!at(t) || this.shadowDoms.has(t)) return;
|
|
8373
8373
|
this.shadowDoms.add(t);
|
|
8374
|
-
const [l] =
|
|
8374
|
+
const [l] = Ul(
|
|
8375
8375
|
me(K({}, this.bypassOptions), {
|
|
8376
8376
|
doc: s,
|
|
8377
8377
|
mutationCb: this.mutationCb,
|
|
@@ -8381,7 +8381,7 @@ class Qc {
|
|
|
8381
8381
|
t
|
|
8382
8382
|
);
|
|
8383
8383
|
this.restoreHandlers.push(() => l.disconnect()), this.restoreHandlers.push(
|
|
8384
|
-
|
|
8384
|
+
Kl(me(K({}, this.bypassOptions), {
|
|
8385
8385
|
scrollCb: this.scrollCb,
|
|
8386
8386
|
// https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813
|
|
8387
8387
|
// scroll is not allowed to pass the boundary, so we need to listen the shadow document
|
|
@@ -8393,7 +8393,7 @@ class Qc {
|
|
|
8393
8393
|
t.adoptedStyleSheets,
|
|
8394
8394
|
this.mirror.getId(Q.host(t))
|
|
8395
8395
|
), this.restoreHandlers.push(
|
|
8396
|
-
|
|
8396
|
+
Fl(
|
|
8397
8397
|
{
|
|
8398
8398
|
mirror: this.mirror,
|
|
8399
8399
|
stylesheetManager: this.bypassOptions.stylesheetManager
|
|
@@ -8424,7 +8424,7 @@ class Qc {
|
|
|
8424
8424
|
function(c) {
|
|
8425
8425
|
return function(u) {
|
|
8426
8426
|
const f = c.call(this, u), b = Q.shadowRoot(this);
|
|
8427
|
-
return b &&
|
|
8427
|
+
return b && Yl(this) && l.addShadowRoot(b, s), f;
|
|
8428
8428
|
};
|
|
8429
8429
|
}
|
|
8430
8430
|
)
|
|
@@ -8439,24 +8439,24 @@ class Qc {
|
|
|
8439
8439
|
}), this.restoreHandlers = [], this.shadowDoms = /* @__PURE__ */ new WeakSet();
|
|
8440
8440
|
}
|
|
8441
8441
|
}
|
|
8442
|
-
var tt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
|
|
8442
|
+
var tt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", jc = typeof Uint8Array == "undefined" ? [] : new Uint8Array(256);
|
|
8443
8443
|
for (var kt = 0; kt < tt.length; kt++)
|
|
8444
|
-
|
|
8445
|
-
var
|
|
8444
|
+
jc[tt.charCodeAt(kt)] = kt;
|
|
8445
|
+
var Ac = function(e) {
|
|
8446
8446
|
var t = new Uint8Array(e), s, l = t.length, c = "";
|
|
8447
8447
|
for (s = 0; s < l; s += 3)
|
|
8448
8448
|
c += tt[t[s] >> 2], c += tt[(t[s] & 3) << 4 | t[s + 1] >> 4], c += tt[(t[s + 1] & 15) << 2 | t[s + 2] >> 6], c += tt[t[s + 2] & 63];
|
|
8449
8449
|
return l % 3 === 2 ? c = c.substring(0, c.length - 1) + "=" : l % 3 === 1 && (c = c.substring(0, c.length - 2) + "=="), c;
|
|
8450
8450
|
};
|
|
8451
8451
|
const vn = /* @__PURE__ */ new Map();
|
|
8452
|
-
function
|
|
8452
|
+
function _c(e, t) {
|
|
8453
8453
|
let s = vn.get(e);
|
|
8454
8454
|
return s || (s = /* @__PURE__ */ new Map(), vn.set(e, s)), s.has(t) || s.set(t, []), s.get(t);
|
|
8455
8455
|
}
|
|
8456
|
-
const
|
|
8457
|
-
if (!e || !(
|
|
8456
|
+
const Ml = (e, t, s) => {
|
|
8457
|
+
if (!e || !(Hl(e, t) || typeof e == "object"))
|
|
8458
8458
|
return;
|
|
8459
|
-
const l = e.constructor.name, c =
|
|
8459
|
+
const l = e.constructor.name, c = _c(s, l);
|
|
8460
8460
|
let u = c.indexOf(e);
|
|
8461
8461
|
return u === -1 && (u = c.length, c.push(e)), u;
|
|
8462
8462
|
};
|
|
@@ -8476,7 +8476,7 @@ function Yt(e, t, s) {
|
|
|
8476
8476
|
// value instanceof SharedArrayBuffer ||
|
|
8477
8477
|
e instanceof ArrayBuffer
|
|
8478
8478
|
) {
|
|
8479
|
-
const l = e.constructor.name, c =
|
|
8479
|
+
const l = e.constructor.name, c = Ac(e);
|
|
8480
8480
|
return {
|
|
8481
8481
|
rr_type: l,
|
|
8482
8482
|
base64: c
|
|
@@ -8509,8 +8509,8 @@ function Yt(e, t, s) {
|
|
|
8509
8509
|
rr_type: e.constructor.name,
|
|
8510
8510
|
args: [Yt(e.data, t, s), e.width, e.height]
|
|
8511
8511
|
};
|
|
8512
|
-
if (
|
|
8513
|
-
const l = e.constructor.name, c =
|
|
8512
|
+
if (Hl(e, t) || typeof e == "object") {
|
|
8513
|
+
const l = e.constructor.name, c = Ml(e, t, s);
|
|
8514
8514
|
return {
|
|
8515
8515
|
rr_type: l,
|
|
8516
8516
|
index: c
|
|
@@ -8520,7 +8520,7 @@ function Yt(e, t, s) {
|
|
|
8520
8520
|
}
|
|
8521
8521
|
return e;
|
|
8522
8522
|
}
|
|
8523
|
-
const
|
|
8523
|
+
const zl = (e, t, s) => e.map((l) => Yt(l, t, s)), Hl = (e, t) => !![
|
|
8524
8524
|
"WebGLActiveInfo",
|
|
8525
8525
|
"WebGLBuffer",
|
|
8526
8526
|
"WebGLFramebuffer",
|
|
@@ -8538,7 +8538,7 @@ const Ml = (e, t, s) => e.map((l) => Yt(l, t, s)), zl = (e, t) => !![
|
|
|
8538
8538
|
).find(
|
|
8539
8539
|
(c) => e instanceof t[c]
|
|
8540
8540
|
);
|
|
8541
|
-
function
|
|
8541
|
+
function $c(e, t, s, l) {
|
|
8542
8542
|
const c = [], u = Object.getOwnPropertyNames(
|
|
8543
8543
|
t.CanvasRenderingContext2D.prototype
|
|
8544
8544
|
);
|
|
@@ -8552,7 +8552,7 @@ function _c(e, t, s, l) {
|
|
|
8552
8552
|
function(m) {
|
|
8553
8553
|
return function(...h) {
|
|
8554
8554
|
return ye(this.canvas, s, l, !0) || setTimeout(() => {
|
|
8555
|
-
const d =
|
|
8555
|
+
const d = zl(h, t, this);
|
|
8556
8556
|
e(this.canvas, {
|
|
8557
8557
|
type: it["2D"],
|
|
8558
8558
|
property: f,
|
|
@@ -8584,7 +8584,7 @@ function _c(e, t, s, l) {
|
|
|
8584
8584
|
c.forEach((f) => f());
|
|
8585
8585
|
};
|
|
8586
8586
|
}
|
|
8587
|
-
function
|
|
8587
|
+
function qc(e) {
|
|
8588
8588
|
return e === "experimental-webgl" ? "webgl" : e;
|
|
8589
8589
|
}
|
|
8590
8590
|
function Ln(e, t, s, l) {
|
|
@@ -8596,7 +8596,7 @@ function Ln(e, t, s, l) {
|
|
|
8596
8596
|
function(f) {
|
|
8597
8597
|
return function(b, ...m) {
|
|
8598
8598
|
if (!ye(this, t, s, !0)) {
|
|
8599
|
-
const h =
|
|
8599
|
+
const h = qc(b);
|
|
8600
8600
|
if ("__context" in this || (this.__context = h), l && ["webgl", "webgl2"].includes(h))
|
|
8601
8601
|
if (m[0] && typeof m[0] == "object") {
|
|
8602
8602
|
const d = m[0];
|
|
@@ -8639,8 +8639,8 @@ function kn(e, t, s, l, c, u) {
|
|
|
8639
8639
|
function(d) {
|
|
8640
8640
|
return function(...r) {
|
|
8641
8641
|
const n = d.apply(this, r);
|
|
8642
|
-
if (
|
|
8643
|
-
const i =
|
|
8642
|
+
if (Ml(n, u, this), "tagName" in this.canvas && !ye(this.canvas, l, c, !0)) {
|
|
8643
|
+
const i = zl(r, u, this), o = {
|
|
8644
8644
|
type: t,
|
|
8645
8645
|
property: m,
|
|
8646
8646
|
args: i
|
|
@@ -8667,7 +8667,7 @@ function kn(e, t, s, l, c, u) {
|
|
|
8667
8667
|
}
|
|
8668
8668
|
return f;
|
|
8669
8669
|
}
|
|
8670
|
-
function
|
|
8670
|
+
function eu(e, t, s, l) {
|
|
8671
8671
|
const c = [];
|
|
8672
8672
|
return typeof t.WebGLRenderingContext != "undefined" && c.push(
|
|
8673
8673
|
...kn(
|
|
@@ -8691,7 +8691,7 @@ function qc(e, t, s, l) {
|
|
|
8691
8691
|
c.forEach((u) => u());
|
|
8692
8692
|
};
|
|
8693
8693
|
}
|
|
8694
|
-
const
|
|
8694
|
+
const Ol = `(function() {
|
|
8695
8695
|
"use strict";
|
|
8696
8696
|
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
8697
8697
|
var lookup = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
|
|
@@ -8791,8 +8791,8 @@ const Hl = `(function() {
|
|
|
8791
8791
|
};
|
|
8792
8792
|
})();
|
|
8793
8793
|
//# sourceMappingURL=image-bitmap-data-url-worker-DwtK8A0z.js.map
|
|
8794
|
-
`, Jn = typeof self != "undefined" && self.Blob && new Blob([
|
|
8795
|
-
function
|
|
8794
|
+
`, Jn = typeof self != "undefined" && self.Blob && new Blob([Ol], { type: "text/javascript;charset=utf-8" });
|
|
8795
|
+
function tu(e) {
|
|
8796
8796
|
let t;
|
|
8797
8797
|
try {
|
|
8798
8798
|
if (t = Jn && (self.URL || self.webkitURL).createObjectURL(Jn), !t) throw "";
|
|
@@ -8804,7 +8804,7 @@ function eu(e) {
|
|
|
8804
8804
|
}), s;
|
|
8805
8805
|
} catch (s) {
|
|
8806
8806
|
return new Worker(
|
|
8807
|
-
"data:text/javascript;charset=utf-8," + encodeURIComponent(
|
|
8807
|
+
"data:text/javascript;charset=utf-8," + encodeURIComponent(Ol),
|
|
8808
8808
|
{
|
|
8809
8809
|
name: e == null ? void 0 : e.name
|
|
8810
8810
|
}
|
|
@@ -8813,7 +8813,7 @@ function eu(e) {
|
|
|
8813
8813
|
t && (self.URL || self.webkitURL).revokeObjectURL(t);
|
|
8814
8814
|
}
|
|
8815
8815
|
}
|
|
8816
|
-
class
|
|
8816
|
+
class iu {
|
|
8817
8817
|
constructor(t) {
|
|
8818
8818
|
L(this, "pendingCanvasMutations", /* @__PURE__ */ new Map()), L(this, "rafStamps", { latestId: 0, invokeId: null }), L(this, "mirror"), L(this, "logger"), L(this, "worker"), L(this, "snapshotInProgressMap", /* @__PURE__ */ new Map()), L(this, "lastSnapshotTime", /* @__PURE__ */ new Map()), L(this, "options"), L(this, "mutationCb"), L(this, "resetObservers"), L(this, "frozen", !1), L(this, "locked", !1), L(this, "processMutation", (r, n) => {
|
|
8819
8819
|
(this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId || !this.rafStamps.invokeId) && (this.rafStamps.invokeId = this.rafStamps.latestId), this.pendingCanvasMutations.has(r) || this.pendingCanvasMutations.set(r, []), this.pendingCanvasMutations.get(r).push(n);
|
|
@@ -8829,7 +8829,7 @@ class tu {
|
|
|
8829
8829
|
initialSnapshotDelay: h,
|
|
8830
8830
|
dataURLOptions: d
|
|
8831
8831
|
} = t;
|
|
8832
|
-
this.mutationCb = t.mutationCb, this.mirror = t.mirror, this.logger = t.logger, this.worker = new
|
|
8832
|
+
this.mutationCb = t.mutationCb, this.mirror = t.mirror, this.logger = t.logger, this.worker = new tu(), this.worker.onmessage = (r) => {
|
|
8833
8833
|
const { id: n } = r.data;
|
|
8834
8834
|
if (this.snapshotInProgressMap.set(n, !1), !("base64" in r.data)) {
|
|
8835
8835
|
this.debug(null, "canvas worker received empty message", {
|
|
@@ -9106,12 +9106,12 @@ class tu {
|
|
|
9106
9106
|
s,
|
|
9107
9107
|
l,
|
|
9108
9108
|
!1
|
|
9109
|
-
), u =
|
|
9109
|
+
), u = $c(
|
|
9110
9110
|
this.processMutation.bind(this),
|
|
9111
9111
|
t,
|
|
9112
9112
|
s,
|
|
9113
9113
|
l
|
|
9114
|
-
), f =
|
|
9114
|
+
), f = eu(
|
|
9115
9115
|
this.processMutation.bind(this),
|
|
9116
9116
|
t,
|
|
9117
9117
|
s,
|
|
@@ -9150,9 +9150,9 @@ class tu {
|
|
|
9150
9150
|
this.mutationCb({ id: s, type: u, commands: c }), this.pendingCanvasMutations.delete(t);
|
|
9151
9151
|
}
|
|
9152
9152
|
}
|
|
9153
|
-
class
|
|
9153
|
+
class su {
|
|
9154
9154
|
constructor(t) {
|
|
9155
|
-
L(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet()), L(this, "mutationCb"), L(this, "adoptedStyleSheetCb"), L(this, "styleMirror", new
|
|
9155
|
+
L(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet()), L(this, "mutationCb"), L(this, "adoptedStyleSheetCb"), L(this, "styleMirror", new Vc()), this.mutationCb = t.mutationCb, this.adoptedStyleSheetCb = t.adoptedStyleSheetCb;
|
|
9156
9156
|
}
|
|
9157
9157
|
attachLinkElement(t, s) {
|
|
9158
9158
|
"_cssText" in s.attributes && this.mutationCb({
|
|
@@ -9181,7 +9181,7 @@ class iu {
|
|
|
9181
9181
|
this.styleMirror.has(u) ? f = this.styleMirror.getId(u) : (f = this.styleMirror.add(u), c.push({
|
|
9182
9182
|
styleId: f,
|
|
9183
9183
|
rules: Array.from(u.rules || CSSRule, (b, m) => ({
|
|
9184
|
-
rule:
|
|
9184
|
+
rule: $n(b, u.href),
|
|
9185
9185
|
index: m
|
|
9186
9186
|
}))
|
|
9187
9187
|
})), l.styleIds.push(f);
|
|
@@ -9195,7 +9195,7 @@ class iu {
|
|
|
9195
9195
|
trackStylesheetInLinkElement(t) {
|
|
9196
9196
|
}
|
|
9197
9197
|
}
|
|
9198
|
-
class
|
|
9198
|
+
class ru {
|
|
9199
9199
|
constructor() {
|
|
9200
9200
|
L(this, "nodeMap", /* @__PURE__ */ new WeakMap()), L(this, "active", !1);
|
|
9201
9201
|
}
|
|
@@ -9220,7 +9220,7 @@ try {
|
|
|
9220
9220
|
} catch (e) {
|
|
9221
9221
|
console.debug("Unable to override Array.from", e);
|
|
9222
9222
|
}
|
|
9223
|
-
const we =
|
|
9223
|
+
const we = na();
|
|
9224
9224
|
function Ne(e = {}) {
|
|
9225
9225
|
var t;
|
|
9226
9226
|
const {
|
|
@@ -9259,7 +9259,7 @@ function Ne(e = {}) {
|
|
|
9259
9259
|
errorHandler: F,
|
|
9260
9260
|
logger: B
|
|
9261
9261
|
} = e, M = K(K({}, e.dataURLOptions), typeof ((t = e.sampling) == null ? void 0 : t.canvas) == "object" ? e.sampling.canvas.dataURLOptions : void 0);
|
|
9262
|
-
|
|
9262
|
+
Lc(F);
|
|
9263
9263
|
const j = R ? window.parent === window : !0;
|
|
9264
9264
|
let ne = !1;
|
|
9265
9265
|
if (!j)
|
|
@@ -9291,8 +9291,8 @@ function Ne(e = {}) {
|
|
|
9291
9291
|
textarea: !0,
|
|
9292
9292
|
select: !0,
|
|
9293
9293
|
password: !0
|
|
9294
|
-
} : i !== void 0 ? i : { password: !0 }, oe =
|
|
9295
|
-
|
|
9294
|
+
} : i !== void 0 ? i : { password: !0 }, oe = al(o);
|
|
9295
|
+
Gc();
|
|
9296
9296
|
let ee, de = 0;
|
|
9297
9297
|
const k = (P) => {
|
|
9298
9298
|
for (const he of D || [])
|
|
@@ -9346,10 +9346,10 @@ function Ne(e = {}) {
|
|
|
9346
9346
|
data: K({
|
|
9347
9347
|
source: A.AdoptedStyleSheet
|
|
9348
9348
|
}, P)
|
|
9349
|
-
}), T = new
|
|
9349
|
+
}), T = new su({
|
|
9350
9350
|
mutationCb: J,
|
|
9351
9351
|
adoptedStyleSheetCb: z
|
|
9352
|
-
}), O = new
|
|
9352
|
+
}), O = new Qc({
|
|
9353
9353
|
mirror: we,
|
|
9354
9354
|
mutationCb: J,
|
|
9355
9355
|
stylesheetManager: T,
|
|
@@ -9362,8 +9362,8 @@ function Ne(e = {}) {
|
|
|
9362
9362
|
crossOriginIframeMirror: O.crossOriginIframeMirror,
|
|
9363
9363
|
crossOriginIframeStyleMirror: O.crossOriginIframeStyleMirror
|
|
9364
9364
|
});
|
|
9365
|
-
const $ = new
|
|
9366
|
-
ut = new
|
|
9365
|
+
const $ = new ru(), ue = typeof (S == null ? void 0 : S.canvas) == "object" ? S.canvas : { fps: S == null ? void 0 : S.canvas };
|
|
9366
|
+
ut = new iu({
|
|
9367
9367
|
recordCanvas: y,
|
|
9368
9368
|
recordLocalVideos: v,
|
|
9369
9369
|
recordRemoteVideos: x,
|
|
@@ -9381,7 +9381,7 @@ function Ne(e = {}) {
|
|
|
9381
9381
|
maxSnapshotDimension: ue.maxSnapshotDimension,
|
|
9382
9382
|
logger: B
|
|
9383
9383
|
});
|
|
9384
|
-
const Re = new
|
|
9384
|
+
const Re = new Dc({
|
|
9385
9385
|
mutationCb: J,
|
|
9386
9386
|
scrollCb: N,
|
|
9387
9387
|
bypassOptions: {
|
|
@@ -9416,13 +9416,13 @@ function Ne(e = {}) {
|
|
|
9416
9416
|
type: q.Meta,
|
|
9417
9417
|
data: {
|
|
9418
9418
|
href: window.location.href,
|
|
9419
|
-
width:
|
|
9420
|
-
height:
|
|
9419
|
+
width: Cl(),
|
|
9420
|
+
height: wl()
|
|
9421
9421
|
}
|
|
9422
9422
|
},
|
|
9423
9423
|
P
|
|
9424
9424
|
), T.reset(), Re.init(), Ee.forEach((se) => se.lock());
|
|
9425
|
-
const he =
|
|
9425
|
+
const he = Ta(document, {
|
|
9426
9426
|
mirror: we,
|
|
9427
9427
|
blockClass: u,
|
|
9428
9428
|
blockSelector: f,
|
|
@@ -9439,7 +9439,7 @@ function Ne(e = {}) {
|
|
|
9439
9439
|
inlineVideos: x,
|
|
9440
9440
|
privacySetting: w,
|
|
9441
9441
|
onSerialize: (se) => {
|
|
9442
|
-
|
|
9442
|
+
Ll(se, we) && O.addIframe(se), kl(se, we) && T.trackLinkElement(se), Zs(se) && Re.addShadowRoot(Q.shadowRoot(se), document);
|
|
9443
9443
|
},
|
|
9444
9444
|
onIframeLoad: (se, ae) => {
|
|
9445
9445
|
O.attachIframe(se, ae), Re.observeAttachShadow(se);
|
|
@@ -9456,7 +9456,7 @@ function Ne(e = {}) {
|
|
|
9456
9456
|
type: q.FullSnapshot,
|
|
9457
9457
|
data: {
|
|
9458
9458
|
node: he,
|
|
9459
|
-
initialOffset:
|
|
9459
|
+
initialOffset: Il(window)
|
|
9460
9460
|
}
|
|
9461
9461
|
},
|
|
9462
9462
|
P
|
|
@@ -9468,7 +9468,7 @@ function Ne(e = {}) {
|
|
|
9468
9468
|
try {
|
|
9469
9469
|
const P = [], he = (ae) => {
|
|
9470
9470
|
var Ge;
|
|
9471
|
-
return _(
|
|
9471
|
+
return _(Bc)(
|
|
9472
9472
|
{
|
|
9473
9473
|
mutationCb: J,
|
|
9474
9474
|
mousemoveCb: (ie, ii) => ce({
|
|
@@ -9618,7 +9618,7 @@ function Ne(e = {}) {
|
|
|
9618
9618
|
} catch (Ge) {
|
|
9619
9619
|
String(Ge).toLowerCase().includes("cross-origin") || console.warn(Ge);
|
|
9620
9620
|
}
|
|
9621
|
-
}), $.destroy(), zt = !1,
|
|
9621
|
+
}), $.destroy(), zt = !1, kc();
|
|
9622
9622
|
};
|
|
9623
9623
|
} catch (P) {
|
|
9624
9624
|
console.warn(P);
|
|
@@ -9651,7 +9651,7 @@ var Yn;
|
|
|
9651
9651
|
(function(e) {
|
|
9652
9652
|
e[e.NotStarted = 0] = "NotStarted", e[e.Running = 1] = "Running", e[e.Stopped = 2] = "Stopped";
|
|
9653
9653
|
})(Yn || (Yn = {}));
|
|
9654
|
-
const { addCustomEvent: Nn } = Ne,
|
|
9654
|
+
const { addCustomEvent: Nn } = Ne, nu = (e, t, s) => {
|
|
9655
9655
|
switch (e) {
|
|
9656
9656
|
case "strict":
|
|
9657
9657
|
return [!0, void 0];
|
|
@@ -9660,7 +9660,7 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9660
9660
|
case "none":
|
|
9661
9661
|
return [!!t, me(K({}, s), { password: !0 })];
|
|
9662
9662
|
}
|
|
9663
|
-
},
|
|
9663
|
+
}, lu = (e, t) => e === "strict" ? "strict" : (t != null ? t : e === "default") ? "default" : "none", ou = (e) => {
|
|
9664
9664
|
const t = (l) => {
|
|
9665
9665
|
if (l.target) {
|
|
9666
9666
|
const c = l.target, u = Bn(c);
|
|
@@ -9668,7 +9668,7 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9668
9668
|
}
|
|
9669
9669
|
}, s = { capture: !0 };
|
|
9670
9670
|
return window.addEventListener("click", t, s), () => window.removeEventListener("click", t, s);
|
|
9671
|
-
},
|
|
9671
|
+
}, au = (e) => {
|
|
9672
9672
|
const t = (s) => {
|
|
9673
9673
|
if (s.target) {
|
|
9674
9674
|
const l = Bn(s.target);
|
|
@@ -9676,7 +9676,7 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9676
9676
|
}
|
|
9677
9677
|
};
|
|
9678
9678
|
return window.addEventListener("focusin", t), () => window.removeEventListener("focusin", t);
|
|
9679
|
-
},
|
|
9679
|
+
}, cu = (e) => {
|
|
9680
9680
|
let t, s;
|
|
9681
9681
|
if (typeof document.hidden != "undefined" ? (t = "hidden", s = "visibilitychange") : typeof document.msHidden != "undefined" ? (t = "msHidden", s = "msvisibilitychange") : typeof document.webkitHidden != "undefined" && (t = "webkitHidden", s = "webkitvisibilitychange"), s === void 0)
|
|
9682
9682
|
return () => {
|
|
@@ -9691,7 +9691,7 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9691
9691
|
document.addEventListener(s, c);
|
|
9692
9692
|
const u = s;
|
|
9693
9693
|
return () => document.removeEventListener(u, c);
|
|
9694
|
-
},
|
|
9694
|
+
}, uu = (e) => {
|
|
9695
9695
|
e(window.location.href);
|
|
9696
9696
|
var t = XMLHttpRequest.prototype.send;
|
|
9697
9697
|
XMLHttpRequest.prototype.send = function(u) {
|
|
@@ -9731,7 +9731,7 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9731
9731
|
};
|
|
9732
9732
|
hs(f) && e(f);
|
|
9733
9733
|
}
|
|
9734
|
-
return window.addEventListener("storage", s),
|
|
9734
|
+
return window.addEventListener("storage", s), to(({ keyName: u }) => {
|
|
9735
9735
|
s({
|
|
9736
9736
|
key: u
|
|
9737
9737
|
});
|
|
@@ -9763,21 +9763,21 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9763
9763
|
} catch (c) {
|
|
9764
9764
|
return !1;
|
|
9765
9765
|
}
|
|
9766
|
-
const s =
|
|
9766
|
+
const s = du(t), l = Le(
|
|
9767
9767
|
Ye.SEGMENT_LAST_SENT_HASH_KEY
|
|
9768
9768
|
);
|
|
9769
9769
|
return l === void 0 ? (Be(Ye.SEGMENT_LAST_SENT_HASH_KEY, s), !0) : s !== l ? (Be(Ye.SEGMENT_LAST_SENT_HASH_KEY, s), !0) : !1;
|
|
9770
|
-
},
|
|
9770
|
+
}, du = (e) => {
|
|
9771
9771
|
var t = 0, s = e.length, l = 0;
|
|
9772
9772
|
if (s > 0) for (; l < s; ) t = (t << 5) - t + e.charCodeAt(l++) | 0;
|
|
9773
9773
|
return t.toString();
|
|
9774
|
-
},
|
|
9775
|
-
const s =
|
|
9774
|
+
}, hu = (e, t) => {
|
|
9775
|
+
const s = pu(e);
|
|
9776
9776
|
let l = [];
|
|
9777
9777
|
const c = !1, u = !0, f = [];
|
|
9778
9778
|
for (let m = 0; m < s.length; m++) {
|
|
9779
9779
|
let h = s[m].split("+");
|
|
9780
|
-
l = [], h.length > 1 && (l =
|
|
9780
|
+
l = [], h.length > 1 && (l = bu(Pl, h)), h = h[h.length - 1], h = h === "*" ? "*" : fu(h), h in Ce || (Ce[h] = []);
|
|
9781
9781
|
const d = {
|
|
9782
9782
|
mods: l,
|
|
9783
9783
|
shortcut: s[m],
|
|
@@ -9790,8 +9790,8 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9790
9790
|
};
|
|
9791
9791
|
Ce[h].push(d), f.push({ key: h, handler: d });
|
|
9792
9792
|
}
|
|
9793
|
-
const b = (m) =>
|
|
9794
|
-
return
|
|
9793
|
+
const b = (m) => gu(m);
|
|
9794
|
+
return yu(document, "keydown", b), () => {
|
|
9795
9795
|
document.removeEventListener("keydown", b);
|
|
9796
9796
|
for (const { key: m, handler: h } of f) {
|
|
9797
9797
|
const d = Ce[m], r = d ? d.indexOf(h) : -1;
|
|
@@ -9800,7 +9800,7 @@ const { addCustomEvent: Nn } = Ne, ru = (e, t, s) => {
|
|
|
9800
9800
|
};
|
|
9801
9801
|
};
|
|
9802
9802
|
let Ze = [];
|
|
9803
|
-
function
|
|
9803
|
+
function pu(e) {
|
|
9804
9804
|
typeof e != "string" && (e = ""), e = e.replace(/\s/g, "");
|
|
9805
9805
|
const t = e.split(",");
|
|
9806
9806
|
let s = t.lastIndexOf("");
|
|
@@ -9808,7 +9808,7 @@ function hu(e) {
|
|
|
9808
9808
|
t[s - 1] += ",", t.splice(s, 1), s = t.lastIndexOf("");
|
|
9809
9809
|
return t;
|
|
9810
9810
|
}
|
|
9811
|
-
const Ce = {}, ps = typeof navigator != "undefined" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1,
|
|
9811
|
+
const Ce = {}, ps = typeof navigator != "undefined" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1, mu = {
|
|
9812
9812
|
backspace: 8,
|
|
9813
9813
|
tab: 9,
|
|
9814
9814
|
clear: 12,
|
|
@@ -9872,7 +9872,7 @@ const Ce = {}, ps = typeof navigator != "undefined" ? navigator.userAgent.toLowe
|
|
|
9872
9872
|
18: !1,
|
|
9873
9873
|
17: !1,
|
|
9874
9874
|
91: !1
|
|
9875
|
-
},
|
|
9875
|
+
}, Pl = {
|
|
9876
9876
|
// shiftKey
|
|
9877
9877
|
"⇧": 16,
|
|
9878
9878
|
shift: 16,
|
|
@@ -9888,23 +9888,23 @@ const Ce = {}, ps = typeof navigator != "undefined" ? navigator.userAgent.toLowe
|
|
|
9888
9888
|
"⌘": 91,
|
|
9889
9889
|
cmd: 91,
|
|
9890
9890
|
command: 91
|
|
9891
|
-
},
|
|
9891
|
+
}, fu = (e) => (
|
|
9892
9892
|
// @ts-expect-error
|
|
9893
|
-
|
|
9894
|
-
|
|
9893
|
+
mu[e.toLowerCase()] || // @ts-expect-error
|
|
9894
|
+
Pl[e.toLowerCase()] || e.toUpperCase().charCodeAt(0)
|
|
9895
9895
|
);
|
|
9896
|
-
function
|
|
9896
|
+
function bu(e, t) {
|
|
9897
9897
|
const s = t.slice(0, t.length - 1);
|
|
9898
9898
|
for (let l = 0; l < s.length; l++)
|
|
9899
9899
|
s[l] = e[s[l].toLowerCase()];
|
|
9900
9900
|
return s;
|
|
9901
9901
|
}
|
|
9902
|
-
function
|
|
9902
|
+
function yu(e, t, s) {
|
|
9903
9903
|
e.addEventListener ? e.addEventListener(t, s, !1) : e.attachEvent && e.attachEvent(`on${t}`, () => {
|
|
9904
9904
|
s(window.event);
|
|
9905
9905
|
});
|
|
9906
9906
|
}
|
|
9907
|
-
function
|
|
9907
|
+
function Zu(e, t, s) {
|
|
9908
9908
|
let l;
|
|
9909
9909
|
if (t.scope === s || t.scope === "all") {
|
|
9910
9910
|
l = t.mods.length > 0;
|
|
@@ -9915,7 +9915,7 @@ function yu(e, t, s) {
|
|
|
9915
9915
|
(t.mods.length === 0 && !ge[16] && !ge[18] && !ge[17] && !ge[91] || l || t.shortcut === "*") && t.method(e, t) === !1 && (e.preventDefault ? e.preventDefault() : e.returnValue = !1, e.stopPropagation && e.stopPropagation(), e.cancelBubble && (e.cancelBubble = !0));
|
|
9916
9916
|
}
|
|
9917
9917
|
}
|
|
9918
|
-
function
|
|
9918
|
+
function gu(e) {
|
|
9919
9919
|
const t = Ce["*"];
|
|
9920
9920
|
let s = e.keyCode || e.which || e.charCode;
|
|
9921
9921
|
if ((s === 93 || s === 224) && (s = 91), Ze.indexOf(s) === -1 && s !== 229 && Ze.push(s), ["ctrlKey", "altKey", "shiftKey", "metaKey"].forEach((l) => {
|
|
@@ -9932,20 +9932,20 @@ function Zu(e) {
|
|
|
9932
9932
|
e.type === "keyup" && Ce[s][l].keyup) && Ce[s][l].key
|
|
9933
9933
|
) {
|
|
9934
9934
|
const c = Ce[s][l];
|
|
9935
|
-
|
|
9935
|
+
Zu(e, c, "all");
|
|
9936
9936
|
}
|
|
9937
9937
|
}
|
|
9938
9938
|
}
|
|
9939
9939
|
}
|
|
9940
|
-
const Kn = "iframe parent ready", Fn = "iframe ok", ft = "highlightLogs",
|
|
9940
|
+
const Kn = "iframe parent ready", Fn = "iframe ok", ft = "highlightLogs", Su = (e) => {
|
|
9941
9941
|
let t = Le(ft) || "";
|
|
9942
9942
|
t = t + "[" + (/* @__PURE__ */ new Date()).getTime() + "] " + e + `
|
|
9943
9943
|
`, Be(ft, t);
|
|
9944
|
-
},
|
|
9944
|
+
}, Xu = () => Le(ft) || "", Ru = (e) => {
|
|
9945
9945
|
if (!e)
|
|
9946
9946
|
return;
|
|
9947
9947
|
let t = Le(ft) || "";
|
|
9948
|
-
t && (t.startsWith(e) ? (t = t.slice(e.length), Be(ft, t)) :
|
|
9948
|
+
t && (t.startsWith(e) ? (t = t.slice(e.length), Be(ft, t)) : Su(
|
|
9949
9949
|
"Unable to clear logs " + e.replace(`
|
|
9950
9950
|
`, " ") + " from " + t.replace(`
|
|
9951
9951
|
`, " ")
|
|
@@ -10020,16 +10020,16 @@ var We = Uint8Array, Ve = Uint16Array, zs = Int32Array, Hs = new We([
|
|
|
10020
10020
|
/* unused */
|
|
10021
10021
|
0,
|
|
10022
10022
|
0
|
|
10023
|
-
]), Mn = new We([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]),
|
|
10023
|
+
]), Mn = new We([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), El = function(e, t) {
|
|
10024
10024
|
for (var s = new Ve(31), l = 0; l < 31; ++l)
|
|
10025
10025
|
s[l] = t += 1 << e[l - 1];
|
|
10026
10026
|
for (var c = new zs(s[30]), l = 1; l < 30; ++l)
|
|
10027
10027
|
for (var u = s[l]; u < s[l + 1]; ++u)
|
|
10028
10028
|
c[u] = u - s[l] << 5 | l;
|
|
10029
10029
|
return { b: s, r: c };
|
|
10030
|
-
},
|
|
10031
|
-
|
|
10032
|
-
var
|
|
10030
|
+
}, Bl = El(Hs, 2), Gu = Bl.b, Ss = Bl.r;
|
|
10031
|
+
Gu[28] = 258, Ss[258] = 28;
|
|
10032
|
+
var Vu = El(Os, 0), zn = Vu.r, Xs = new Ve(32768);
|
|
10033
10033
|
for (var le = 0; le < 32768; ++le) {
|
|
10034
10034
|
var Fe = (le & 43690) >> 1 | (le & 21845) << 1;
|
|
10035
10035
|
Fe = (Fe & 52428) >> 2 | (Fe & 13107) << 2, Fe = (Fe & 61680) >> 4 | (Fe & 3855) << 4, Xs[le] = ((Fe & 65280) >> 8 | (Fe & 255) << 8) >> 1;
|
|
@@ -10064,9 +10064,9 @@ for (var le = 280; le < 288; ++le)
|
|
|
10064
10064
|
var Ht = new We(32);
|
|
10065
10065
|
for (var le = 0; le < 32; ++le)
|
|
10066
10066
|
Ht[le] = 5;
|
|
10067
|
-
var
|
|
10067
|
+
var Wu = /* @__PURE__ */ dt(De, 9, 0), Iu = /* @__PURE__ */ dt(Ht, 5, 0), Ql = function(e) {
|
|
10068
10068
|
return (e + 7) / 8 | 0;
|
|
10069
|
-
},
|
|
10069
|
+
}, Dl = function(e, t, s) {
|
|
10070
10070
|
return (s == null || s > e.length) && (s = e.length), new We(e.subarray(t, s));
|
|
10071
10071
|
}, ke = function(e, t, s) {
|
|
10072
10072
|
s <<= t & 7;
|
|
@@ -10081,7 +10081,7 @@ var Vu = /* @__PURE__ */ dt(De, 9, 0), Wu = /* @__PURE__ */ dt(Ht, 5, 0), Bl = f
|
|
|
10081
10081
|
e[l] && s.push({ s: l, f: e[l] });
|
|
10082
10082
|
var c = s.length, u = s.slice();
|
|
10083
10083
|
if (!c)
|
|
10084
|
-
return { t:
|
|
10084
|
+
return { t: Al, l: 0 };
|
|
10085
10085
|
if (c == 1) {
|
|
10086
10086
|
var f = new We(s[0].s + 1);
|
|
10087
10087
|
return f[s[0].s] = 1, { t: f, l: 1 };
|
|
@@ -10146,8 +10146,8 @@ var Vu = /* @__PURE__ */ dt(De, 9, 0), Wu = /* @__PURE__ */ dt(Ht, 5, 0), Bl = f
|
|
|
10146
10146
|
for (var s = 0, l = 0; l < t.length; ++l)
|
|
10147
10147
|
s += e[l] * t[l];
|
|
10148
10148
|
return s;
|
|
10149
|
-
},
|
|
10150
|
-
var l = s.length, c =
|
|
10149
|
+
}, jl = function(e, t, s) {
|
|
10150
|
+
var l = s.length, c = Ql(t + 2);
|
|
10151
10151
|
e[c] = l & 255, e[c + 1] = l >> 8, e[c + 2] = e[c] ^ 255, e[c + 3] = e[c + 1] ^ 255;
|
|
10152
10152
|
for (var u = 0; u < l; ++u)
|
|
10153
10153
|
e[c + u + 4] = s[u];
|
|
@@ -10162,7 +10162,7 @@ var Vu = /* @__PURE__ */ dt(De, 9, 0), Wu = /* @__PURE__ */ dt(Ht, 5, 0), Bl = f
|
|
|
10162
10162
|
;
|
|
10163
10163
|
var D = h + 5 << 3, E = lt(c, De) + lt(u, Ht) + f, w = lt(c, n) + lt(u, a) + f + 14 + 3 * x + lt(R, W) + 2 * R[16] + 3 * R[17] + 7 * R[18];
|
|
10164
10164
|
if (m >= 0 && D <= E && D <= w)
|
|
10165
|
-
return
|
|
10165
|
+
return jl(t, d, e.subarray(m, m + h));
|
|
10166
10166
|
var te, Y, F, B;
|
|
10167
10167
|
if (ke(t, d, 1 + (w < E)), d += 2, w < E) {
|
|
10168
10168
|
te = dt(n, i, 0), Y = n, F = dt(a, p, 0), B = a;
|
|
@@ -10177,7 +10177,7 @@ var Vu = /* @__PURE__ */ dt(De, 9, 0), Wu = /* @__PURE__ */ dt(Ht, 5, 0), Bl = f
|
|
|
10177
10177
|
ke(t, d, M[oe]), d += W[oe], oe > 15 && (ke(t, d, C[I] >> 5 & 127), d += C[I] >> 12);
|
|
10178
10178
|
}
|
|
10179
10179
|
} else
|
|
10180
|
-
te =
|
|
10180
|
+
te = Wu, Y = De, F = Iu, B = Ht;
|
|
10181
10181
|
for (var I = 0; I < b; ++I) {
|
|
10182
10182
|
var ee = l[I];
|
|
10183
10183
|
if (ee > 255) {
|
|
@@ -10189,11 +10189,11 @@ var Vu = /* @__PURE__ */ dt(De, 9, 0), Wu = /* @__PURE__ */ dt(Ht, 5, 0), Bl = f
|
|
|
10189
10189
|
nt(t, d, te[ee]), d += Y[ee];
|
|
10190
10190
|
}
|
|
10191
10191
|
return nt(t, d, te[256]), d + Y[256];
|
|
10192
|
-
},
|
|
10192
|
+
}, wu = /* @__PURE__ */ new zs([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), Al = /* @__PURE__ */ new We(0), Cu = function(e, t, s, l, c, u) {
|
|
10193
10193
|
var f = u.z || e.length, b = new We(l + f + 5 * (1 + Math.ceil(f / 7e3)) + c), m = b.subarray(l, b.length - c), h = u.l, d = (u.r || 0) & 7;
|
|
10194
10194
|
if (t) {
|
|
10195
10195
|
d && (m[0] = u.r >> 3);
|
|
10196
|
-
for (var r =
|
|
10196
|
+
for (var r = wu[t - 1], n = r >> 13, i = r & 8191, o = (1 << s) - 1, a = u.p || new Ve(32768), p = u.h || new Ve(o + 1), X = Math.ceil(s / 3), Z = 2 * X, S = function($) {
|
|
10197
10197
|
return (e[$] ^ e[$ + 1] << X ^ e[$ + 2] << Z) & o;
|
|
10198
10198
|
}, G = new zs(25e3), g = new Ve(288), y = new Ve(32), R = 0, I = 0, V = u.i || 0, W = 0, v = u.w || 0, x = 0; V + 2 < f; ++V) {
|
|
10199
10199
|
var D = S(V), E = V & 32767, w = p[D];
|
|
@@ -10237,62 +10237,62 @@ var Vu = /* @__PURE__ */ dt(De, 9, 0), Wu = /* @__PURE__ */ dt(Ht, 5, 0), Bl = f
|
|
|
10237
10237
|
} else {
|
|
10238
10238
|
for (var V = u.w || 0; V < f + h; V += 65535) {
|
|
10239
10239
|
var O = V + 65535;
|
|
10240
|
-
O >= f && (m[d / 8 | 0] = h, O = f), d =
|
|
10240
|
+
O >= f && (m[d / 8 | 0] = h, O = f), d = jl(m, d + 1, e.subarray(V, O));
|
|
10241
10241
|
}
|
|
10242
10242
|
u.i = f;
|
|
10243
10243
|
}
|
|
10244
|
-
return
|
|
10245
|
-
},
|
|
10244
|
+
return Dl(b, 0, l + Ql(d) + c);
|
|
10245
|
+
}, xu = /* @__PURE__ */ function() {
|
|
10246
10246
|
for (var e = new Int32Array(256), t = 0; t < 256; ++t) {
|
|
10247
10247
|
for (var s = t, l = 9; --l; )
|
|
10248
10248
|
s = (s & 1 && -306674912) ^ s >>> 1;
|
|
10249
10249
|
e[t] = s;
|
|
10250
10250
|
}
|
|
10251
10251
|
return e;
|
|
10252
|
-
}(),
|
|
10252
|
+
}(), vu = function() {
|
|
10253
10253
|
var e = -1;
|
|
10254
10254
|
return {
|
|
10255
10255
|
p: function(t) {
|
|
10256
10256
|
for (var s = e, l = 0; l < t.length; ++l)
|
|
10257
|
-
s =
|
|
10257
|
+
s = xu[s & 255 ^ t[l]] ^ s >>> 8;
|
|
10258
10258
|
e = s;
|
|
10259
10259
|
},
|
|
10260
10260
|
d: function() {
|
|
10261
10261
|
return ~e;
|
|
10262
10262
|
}
|
|
10263
10263
|
};
|
|
10264
|
-
},
|
|
10264
|
+
}, Lu = function(e, t, s, l, c) {
|
|
10265
10265
|
if (!c && (c = { l: 1 }, t.dictionary)) {
|
|
10266
10266
|
var u = t.dictionary.subarray(-32768), f = new We(u.length + e.length);
|
|
10267
10267
|
f.set(u), f.set(e, u.length), e = f, c.w = u.length;
|
|
10268
10268
|
}
|
|
10269
|
-
return
|
|
10269
|
+
return Cu(e, t.level == null ? 6 : t.level, t.mem == null ? c.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(e.length))) * 1.5) : 20 : 12 + t.mem, s, l, c);
|
|
10270
10270
|
}, Gs = function(e, t, s) {
|
|
10271
10271
|
for (; s; ++t)
|
|
10272
10272
|
e[t] = s, s >>>= 8;
|
|
10273
|
-
},
|
|
10273
|
+
}, ku = function(e, t) {
|
|
10274
10274
|
var s = t.filename;
|
|
10275
10275
|
if (e[0] = 31, e[1] = 139, e[2] = 8, e[8] = t.level < 2 ? 4 : t.level == 9 ? 2 : 0, e[9] = 3, t.mtime != 0 && Gs(e, 4, Math.floor(new Date(t.mtime || Date.now()) / 1e3)), s) {
|
|
10276
10276
|
e[3] = 8;
|
|
10277
10277
|
for (var l = 0; l <= s.length; ++l)
|
|
10278
10278
|
e[l + 10] = s.charCodeAt(l);
|
|
10279
10279
|
}
|
|
10280
|
-
},
|
|
10280
|
+
}, Ju = function(e) {
|
|
10281
10281
|
return 10 + (e.filename ? e.filename.length + 1 : 0);
|
|
10282
10282
|
};
|
|
10283
|
-
function
|
|
10283
|
+
function Yu(e, t) {
|
|
10284
10284
|
t || (t = {});
|
|
10285
|
-
var s =
|
|
10285
|
+
var s = vu(), l = e.length;
|
|
10286
10286
|
s.p(e);
|
|
10287
|
-
var c =
|
|
10288
|
-
return
|
|
10287
|
+
var c = Lu(e, t, Ju(t), 8), u = c.length;
|
|
10288
|
+
return ku(c, t), Gs(c, u - 8, s.d()), Gs(c, u - 4, l), c;
|
|
10289
10289
|
}
|
|
10290
|
-
var Pn = typeof TextEncoder != "undefined" && /* @__PURE__ */ new TextEncoder(),
|
|
10290
|
+
var Pn = typeof TextEncoder != "undefined" && /* @__PURE__ */ new TextEncoder(), Nu = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
|
|
10291
10291
|
try {
|
|
10292
|
-
|
|
10292
|
+
Nu.decode(Al, { stream: !0 });
|
|
10293
10293
|
} catch (e) {
|
|
10294
10294
|
}
|
|
10295
|
-
function
|
|
10295
|
+
function Tu(e, t) {
|
|
10296
10296
|
var s;
|
|
10297
10297
|
if (Pn)
|
|
10298
10298
|
return Pn.encode(e);
|
|
@@ -10306,11 +10306,11 @@ function Nu(e, t) {
|
|
|
10306
10306
|
var m = e.charCodeAt(s);
|
|
10307
10307
|
m < 128 || t ? f(m) : m < 2048 ? (f(192 | m >> 6), f(128 | m & 63)) : m > 55295 && m < 57344 ? (m = 65536 + (m & 1047552) | e.charCodeAt(++s) & 1023, f(240 | m >> 18), f(128 | m >> 12 & 63), f(128 | m >> 6 & 63), f(128 | m & 63)) : (f(224 | m >> 12), f(128 | m >> 6 & 63), f(128 | m & 63));
|
|
10308
10308
|
}
|
|
10309
|
-
return
|
|
10309
|
+
return Dl(c, 0, u);
|
|
10310
10310
|
}
|
|
10311
|
-
function
|
|
10311
|
+
function Uu(e) {
|
|
10312
10312
|
return fe(this, null, function* () {
|
|
10313
|
-
const t =
|
|
10313
|
+
const t = Tu(JSON.stringify(e)), s = Yu(t), l = yield new Promise((c) => {
|
|
10314
10314
|
const u = new FileReader();
|
|
10315
10315
|
u.onload = () => c(u.result), u.readAsDataURL(new Blob([new Uint8Array(s)]));
|
|
10316
10316
|
});
|
|
@@ -10321,8 +10321,8 @@ function Tu(e) {
|
|
|
10321
10321
|
};
|
|
10322
10322
|
});
|
|
10323
10323
|
}
|
|
10324
|
-
const Al = "dmFyIFFyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxYcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgV3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIG9uPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYW49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgbXQ9KEYsQiwkKT0+QiBpbiBGP1FyKEYsQix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6JH0pOkZbQl09JCxEPShGLEIpPT57Zm9yKHZhciAkIGluIEJ8fChCPXt9KSlvbi5jYWxsKEIsJCkmJm10KEYsJCxCWyRdKTtpZigkZSlmb3IodmFyICQgb2YgJGUoQikpYW4uY2FsbChCLCQpJiZtdChGLCQsQlskXSk7cmV0dXJuIEZ9LFVlPShGLEIpPT5YcihGLFdyKEIpKTt2YXIgdmU9KEYsQik9Pnt2YXIgJD17fTtmb3IodmFyIGVlIGluIEYpb24uY2FsbChGLGVlKSYmQi5pbmRleE9mKGVlKTwwJiYoJFtlZV09RltlZV0pO2lmKEYhPW51bGwmJiRlKWZvcih2YXIgZWUgb2YgJGUoRikpQi5pbmRleE9mKGVlKTwwJiZhbi5jYWxsKEYsZWUpJiYoJFtlZV09RltlZV0pO3JldHVybiAkfTt2YXIgeXQ9KEYsQiwkKT0+bXQoRix0eXBlb2YgQiE9InN5bWJvbCI/QisiIjpCLCQpO3ZhciBKPShGLEIsJCk9Pm5ldyBQcm9taXNlKChlZSxPZSk9Pnt2YXIgVmU9c2U9Pnt0cnl7RWUoJC5uZXh0KHNlKSl9Y2F0Y2goX2Upe09lKF9lKX19LGxlPXNlPT57dHJ5e0VlKCQudGhyb3coc2UpKX1jYXRjaChfZSl7T2UoX2UpfX0sRWU9c2U9PnNlLmRvbmU/ZWUoc2UudmFsdWUpOlByb21pc2UucmVzb2x2ZShzZS52YWx1ZSkudGhlbihWZSxsZSk7RWUoKCQ9JC5hcHBseShGLEIpKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IEY9SlNPTixCPWU9PmUudG9VcHBlckNhc2UoKSwkPWU9Pntjb25zdCB0PXt9O3JldHVybiBlLmZvckVhY2goKG4saSk9Pnt0W2ldPW59KSx0fSxlZT0oZSx0LG4pPT5lLmRvY3VtZW50P2U6e2RvY3VtZW50OmUsdmFyaWFibGVzOnQscmVxdWVzdEhlYWRlcnM6bixzaWduYWw6dm9pZCAwfSxPZT0oZSx0LG4pPT5lLnF1ZXJ5P2U6e3F1ZXJ5OmUsdmFyaWFibGVzOnQscmVxdWVzdEhlYWRlcnM6bixzaWduYWw6dm9pZCAwfSxWZT0oZSx0KT0+ZS5kb2N1bWVudHM/ZTp7ZG9jdW1lbnRzOmUscmVxdWVzdEhlYWRlcnM6dCxzaWduYWw6dm9pZCAwfTtmdW5jdGlvbiBsZShlLHQpe2lmKCEhIWUpdGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIEVlKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsfWZ1bmN0aW9uIHNlKGUsdCl7aWYoISEhZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW52YXJpYW50IHRyaWdnZXJlZC4iKX1jb25zdCBfZT0vXHJcbnxbXG5ccl0vZztmdW5jdGlvbiBxZShlLHQpe2xldCBuPTAsaT0xO2Zvcihjb25zdCByIG9mIGUuYm9keS5tYXRjaEFsbChfZSkpe2lmKHR5cGVvZiByLmluZGV4PT0ibnVtYmVyInx8c2UoITEpLHIuaW5kZXg+PXQpYnJlYWs7bj1yLmluZGV4K3JbMF0ubGVuZ3RoLGkrPTF9cmV0dXJue2xpbmU6aSxjb2x1bW46dCsxLW59fWZ1bmN0aW9uIGNuKGUpe3JldHVybiBndChlLnNvdXJjZSxxZShlLnNvdXJjZSxlLnN0YXJ0KSl9ZnVuY3Rpb24gZ3QoZSx0KXtjb25zdCBuPWUubG9jYXRpb25PZmZzZXQuY29sdW1uLTEsaT0iIi5wYWRTdGFydChuKStlLmJvZHkscj10LmxpbmUtMSxzPWUubG9jYXRpb25PZmZzZXQubGluZS0xLG89dC5saW5lK3MsYz10LmxpbmU9PT0xP246MCxoPXQuY29sdW1uK2MsZD1gJHtlLm5hbWV9OiR7b306JHtofQpgLHU9aS5zcGxpdCgvXHJcbnxbXG5ccl0vZykseT11W3JdO2lmKHkubGVuZ3RoPjEyMCl7Y29uc3Qgdj1NYXRoLmZsb29yKGgvODApLFQ9aCU4MCxtPVtdO2ZvcihsZXQgTj0wO048eS5sZW5ndGg7Tis9ODApbS5wdXNoKHkuc2xpY2UoTixOKzgwKSk7cmV0dXJuIGQrdnQoW1tgJHtvfSB8YCxtWzBdXSwuLi5tLnNsaWNlKDEsdisxKS5tYXAoTj0+WyJ8IixOXSksWyJ8IiwiXiIucGFkU3RhcnQoVCldLFsifCIsbVt2KzFdXV0pfXJldHVybiBkK3Z0KFtbYCR7by0xfSB8YCx1W3ItMV1dLFtgJHtvfSB8YCx5XSxbInwiLCJeIi5wYWRTdGFydChoKV0sW2Ake28rMX0gfGAsdVtyKzFdXV0pfWZ1bmN0aW9uIHZ0KGUpe2NvbnN0IHQ9ZS5maWx0ZXIoKFtpLHJdKT0+ciE9PXZvaWQgMCksbj1NYXRoLm1heCguLi50Lm1hcCgoW2ldKT0+aS5sZW5ndGgpKTtyZXR1cm4gdC5tYXAoKFtpLHJdKT0+aS5wYWRTdGFydChuKSsocj8iICIrcjoiIikpLmpvaW4oYApgKX1mdW5jdGlvbiB1bihlKXtjb25zdCB0PWVbMF07cmV0dXJuIHQ9PW51bGx8fCJraW5kImluIHR8fCJsZW5ndGgiaW4gdD97bm9kZXM6dCxzb3VyY2U6ZVsxXSxwb3NpdGlvbnM6ZVsyXSxwYXRoOmVbM10sb3JpZ2luYWxFcnJvcjplWzRdLGV4dGVuc2lvbnM6ZVs1XX06dH1jbGFzcyBqZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsLi4ubil7dmFyIGkscixzO2NvbnN0e25vZGVzOm8sc291cmNlOmMscG9zaXRpb25zOmgscGF0aDpkLG9yaWdpbmFsRXJyb3I6dSxleHRlbnNpb25zOnl9PXVuKG4pO3N1cGVyKHQpLHRoaXMubmFtZT0iR3JhcGhRTEVycm9yIix0aGlzLnBhdGg9ZCE9bnVsbD9kOnZvaWQgMCx0aGlzLm9yaWdpbmFsRXJyb3I9dSE9bnVsbD91OnZvaWQgMCx0aGlzLm5vZGVzPUV0KEFycmF5LmlzQXJyYXkobyk/bzpvP1tvXTp2b2lkIDApO2NvbnN0IHY9RXQoKGk9dGhpcy5ub2Rlcyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm1hcChtPT5tLmxvYykuZmlsdGVyKG09Pm0hPW51bGwpKTt0aGlzLnNvdXJjZT1jIT1udWxsP2M6dj09bnVsbHx8KHI9dlswXSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnNvdXJjZSx0aGlzLnBvc2l0aW9ucz1oIT1udWxsP2g6dj09bnVsbD92b2lkIDA6di5tYXAobT0+bS5zdGFydCksdGhpcy5sb2NhdGlvbnM9aCYmYz9oLm1hcChtPT5xZShjLG0pKTp2PT1udWxsP3ZvaWQgMDp2Lm1hcChtPT5xZShtLnNvdXJjZSxtLnN0YXJ0KSk7Y29uc3QgVD1FZSh1PT1udWxsP3ZvaWQgMDp1LmV4dGVuc2lvbnMpP3U9PW51bGw/dm9pZCAwOnUuZXh0ZW5zaW9uczp2b2lkIDA7dGhpcy5leHRlbnNpb25zPShzPXkhPW51bGw/eTpUKSE9PW51bGwmJnMhPT12b2lkIDA/czpPYmplY3QuY3JlYXRlKG51bGwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse21lc3NhZ2U6e3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITB9LG5hbWU6e2VudW1lcmFibGU6ITF9LG5vZGVzOntlbnVtZXJhYmxlOiExfSxzb3VyY2U6e2VudW1lcmFibGU6ITF9LHBvc2l0aW9uczp7ZW51bWVyYWJsZTohMX0sb3JpZ2luYWxFcnJvcjp7ZW51bWVyYWJsZTohMX19KSx1IT1udWxsJiZ1LnN0YWNrP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGFjayIse3ZhbHVlOnUuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxqZSk6T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YWNrIix7dmFsdWU6RXJyb3IoKS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJHcmFwaFFMRXJyb3IifXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5tZXNzYWdlO2lmKHRoaXMubm9kZXMpZm9yKGNvbnN0IG4gb2YgdGhpcy5ub2RlcyluLmxvYyYmKHQrPWAKCmArY24obi5sb2MpKTtlbHNlIGlmKHRoaXMuc291cmNlJiZ0aGlzLmxvY2F0aW9ucylmb3IoY29uc3QgbiBvZiB0aGlzLmxvY2F0aW9ucyl0Kz1gCgpgK2d0KHRoaXMuc291cmNlLG4pO3JldHVybiB0fXRvSlNPTigpe2NvbnN0IHQ9e21lc3NhZ2U6dGhpcy5tZXNzYWdlfTtyZXR1cm4gdGhpcy5sb2NhdGlvbnMhPW51bGwmJih0LmxvY2F0aW9ucz10aGlzLmxvY2F0aW9ucyksdGhpcy5wYXRoIT1udWxsJiYodC5wYXRoPXRoaXMucGF0aCksdGhpcy5leHRlbnNpb25zIT1udWxsJiZPYmplY3Qua2V5cyh0aGlzLmV4dGVuc2lvbnMpLmxlbmd0aD4wJiYodC5leHRlbnNpb25zPXRoaXMuZXh0ZW5zaW9ucyksdH19ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MD92b2lkIDA6ZX1mdW5jdGlvbiBHKGUsdCxuKXtyZXR1cm4gbmV3IGplKGBTeW50YXggRXJyb3I6ICR7bn1gLHtzb3VyY2U6ZSxwb3NpdGlvbnM6W3RdfSl9Y2xhc3MgbG57Y29uc3RydWN0b3IodCxuLGkpe3RoaXMuc3RhcnQ9dC5zdGFydCx0aGlzLmVuZD1uLmVuZCx0aGlzLnN0YXJ0VG9rZW49dCx0aGlzLmVuZFRva2VuPW4sdGhpcy5zb3VyY2U9aX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJMb2NhdGlvbiJ9dG9KU09OKCl7cmV0dXJue3N0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kfX19Y2xhc3MgX3R7Y29uc3RydWN0b3IodCxuLGkscixzLG8pe3RoaXMua2luZD10LHRoaXMuc3RhcnQ9bix0aGlzLmVuZD1pLHRoaXMubGluZT1yLHRoaXMuY29sdW1uPXMsdGhpcy52YWx1ZT1vLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlRva2VuIn10b0pTT04oKXtyZXR1cm57a2luZDp0aGlzLmtpbmQsdmFsdWU6dGhpcy52YWx1ZSxsaW5lOnRoaXMubGluZSxjb2x1bW46dGhpcy5jb2x1bW59fX1jb25zdCBidD17TmFtZTpbXSxEb2N1bWVudDpbImRlZmluaXRpb25zIl0sT3BlcmF0aW9uRGVmaW5pdGlvbjpbIm5hbWUiLCJ2YXJpYWJsZURlZmluaXRpb25zIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLFZhcmlhYmxlRGVmaW5pdGlvbjpbInZhcmlhYmxlIiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImRpcmVjdGl2ZXMiXSxWYXJpYWJsZTpbIm5hbWUiXSxTZWxlY3Rpb25TZXQ6WyJzZWxlY3Rpb25zIl0sRmllbGQ6WyJhbGlhcyIsIm5hbWUiLCJhcmd1bWVudHMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sQXJndW1lbnQ6WyJuYW1lIiwidmFsdWUiXSxGcmFnbWVudFNwcmVhZDpbIm5hbWUiLCJkaXJlY3RpdmVzIl0sSW5saW5lRnJhZ21lbnQ6WyJ0eXBlQ29uZGl0aW9uIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEZyYWdtZW50RGVmaW5pdGlvbjpbIm5hbWUiLCJ2YXJpYWJsZURlZmluaXRpb25zIiwidHlwZUNvbmRpdGlvbiIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxJbnRWYWx1ZTpbXSxGbG9hdFZhbHVlOltdLFN0cmluZ1ZhbHVlOltdLEJvb2xlYW5WYWx1ZTpbXSxOdWxsVmFsdWU6W10sRW51bVZhbHVlOltdLExpc3RWYWx1ZTpbInZhbHVlcyJdLE9iamVjdFZhbHVlOlsiZmllbGRzIl0sT2JqZWN0RmllbGQ6WyJuYW1lIiwidmFsdWUiXSxEaXJlY3RpdmU6WyJuYW1lIiwiYXJndW1lbnRzIl0sTmFtZWRUeXBlOlsibmFtZSJdLExpc3RUeXBlOlsidHlwZSJdLE5vbk51bGxUeXBlOlsidHlwZSJdLFNjaGVtYURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsImRpcmVjdGl2ZXMiLCJvcGVyYXRpb25UeXBlcyJdLE9wZXJhdGlvblR5cGVEZWZpbml0aW9uOlsidHlwZSJdLFNjYWxhclR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyJdLE9iamVjdFR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxGaWVsZERlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJhcmd1bWVudHMiLCJ0eXBlIiwiZGlyZWN0aXZlcyJdLElucHV0VmFsdWVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImRpcmVjdGl2ZXMiXSxJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sVW5pb25UeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJ0eXBlcyJdLEVudW1UeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJ2YWx1ZXMiXSxFbnVtVmFsdWVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyJdLElucHV0T2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRGlyZWN0aXZlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsImxvY2F0aW9ucyJdLFNjaGVtYUV4dGVuc2lvbjpbImRpcmVjdGl2ZXMiLCJvcGVyYXRpb25UeXBlcyJdLFNjYWxhclR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyJdLE9iamVjdFR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sVW5pb25UeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJ0eXBlcyJdLEVudW1UeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJ2YWx1ZXMiXSxJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdfSxobj1uZXcgU2V0KE9iamVjdC5rZXlzKGJ0KSk7ZnVuY3Rpb24gVHQoZSl7Y29uc3QgdD1lPT1udWxsP3ZvaWQgMDplLmtpbmQ7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmaG4uaGFzKHQpfXZhciBoZTsoZnVuY3Rpb24oZSl7ZS5RVUVSWT0icXVlcnkiLGUuTVVUQVRJT049Im11dGF0aW9uIixlLlNVQlNDUklQVElPTj0ic3Vic2NyaXB0aW9uIn0pKGhlfHwoaGU9e30pKTt2YXIgR2U7KGZ1bmN0aW9uKGUpe2UuUVVFUlk9IlFVRVJZIixlLk1VVEFUSU9OPSJNVVRBVElPTiIsZS5TVUJTQ1JJUFRJT049IlNVQlNDUklQVElPTiIsZS5GSUVMRD0iRklFTEQiLGUuRlJBR01FTlRfREVGSU5JVElPTj0iRlJBR01FTlRfREVGSU5JVElPTiIsZS5GUkFHTUVOVF9TUFJFQUQ9IkZSQUdNRU5UX1NQUkVBRCIsZS5JTkxJTkVfRlJBR01FTlQ9IklOTElORV9GUkFHTUVOVCIsZS5WQVJJQUJMRV9ERUZJTklUSU9OPSJWQVJJQUJMRV9ERUZJTklUSU9OIixlLlNDSEVNQT0iU0NIRU1BIixlLlNDQUxBUj0iU0NBTEFSIixlLk9CSkVDVD0iT0JKRUNUIixlLkZJRUxEX0RFRklOSVRJT049IkZJRUxEX0RFRklOSVRJT04iLGUuQVJHVU1FTlRfREVGSU5JVElPTj0iQVJHVU1FTlRfREVGSU5JVElPTiIsZS5JTlRFUkZBQ0U9IklOVEVSRkFDRSIsZS5VTklPTj0iVU5JT04iLGUuRU5VTT0iRU5VTSIsZS5FTlVNX1ZBTFVFPSJFTlVNX1ZBTFVFIixlLklOUFVUX09CSkVDVD0iSU5QVVRfT0JKRUNUIixlLklOUFVUX0ZJRUxEX0RFRklOSVRJT049IklOUFVUX0ZJRUxEX0RFRklOSVRJT04ifSkoR2V8fChHZT17fSkpO3ZhciBiOyhmdW5jdGlvbihlKXtlLk5BTUU9Ik5hbWUiLGUuRE9DVU1FTlQ9IkRvY3VtZW50IixlLk9QRVJBVElPTl9ERUZJTklUSU9OPSJPcGVyYXRpb25EZWZpbml0aW9uIixlLlZBUklBQkxFX0RFRklOSVRJT049IlZhcmlhYmxlRGVmaW5pdGlvbiIsZS5TRUxFQ1RJT05fU0VUPSJTZWxlY3Rpb25TZXQiLGUuRklFTEQ9IkZpZWxkIixlLkFSR1VNRU5UPSJBcmd1bWVudCIsZS5GUkFHTUVOVF9TUFJFQUQ9IkZyYWdtZW50U3ByZWFkIixlLklOTElORV9GUkFHTUVOVD0iSW5saW5lRnJhZ21lbnQiLGUuRlJBR01FTlRfREVGSU5JVElPTj0iRnJhZ21lbnREZWZpbml0aW9uIixlLlZBUklBQkxFPSJWYXJpYWJsZSIsZS5JTlQ9IkludFZhbHVlIixlLkZMT0FUPSJGbG9hdFZhbHVlIixlLlNUUklORz0iU3RyaW5nVmFsdWUiLGUuQk9PTEVBTj0iQm9vbGVhblZhbHVlIixlLk5VTEw9Ik51bGxWYWx1ZSIsZS5FTlVNPSJFbnVtVmFsdWUiLGUuTElTVD0iTGlzdFZhbHVlIixlLk9CSkVDVD0iT2JqZWN0VmFsdWUiLGUuT0JKRUNUX0ZJRUxEPSJPYmplY3RGaWVsZCIsZS5ESVJFQ1RJVkU9IkRpcmVjdGl2ZSIsZS5OQU1FRF9UWVBFPSJOYW1lZFR5cGUiLGUuTElTVF9UWVBFPSJMaXN0VHlwZSIsZS5OT05fTlVMTF9UWVBFPSJOb25OdWxsVHlwZSIsZS5TQ0hFTUFfREVGSU5JVElPTj0iU2NoZW1hRGVmaW5pdGlvbiIsZS5PUEVSQVRJT05fVFlQRV9ERUZJTklUSU9OPSJPcGVyYXRpb25UeXBlRGVmaW5pdGlvbiIsZS5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OPSJTY2FsYXJUeXBlRGVmaW5pdGlvbiIsZS5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OPSJPYmplY3RUeXBlRGVmaW5pdGlvbiIsZS5GSUVMRF9ERUZJTklUSU9OPSJGaWVsZERlZmluaXRpb24iLGUuSU5QVVRfVkFMVUVfREVGSU5JVElPTj0iSW5wdXRWYWx1ZURlZmluaXRpb24iLGUuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTj0iSW50ZXJmYWNlVHlwZURlZmluaXRpb24iLGUuVU5JT05fVFlQRV9ERUZJTklUSU9OPSJVbmlvblR5cGVEZWZpbml0aW9uIixlLkVOVU1fVFlQRV9ERUZJTklUSU9OPSJFbnVtVHlwZURlZmluaXRpb24iLGUuRU5VTV9WQUxVRV9ERUZJTklUSU9OPSJFbnVtVmFsdWVEZWZpbml0aW9uIixlLklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT049IklucHV0T2JqZWN0VHlwZURlZmluaXRpb24iLGUuRElSRUNUSVZFX0RFRklOSVRJT049IkRpcmVjdGl2ZURlZmluaXRpb24iLGUuU0NIRU1BX0VYVEVOU0lPTj0iU2NoZW1hRXh0ZW5zaW9uIixlLlNDQUxBUl9UWVBFX0VYVEVOU0lPTj0iU2NhbGFyVHlwZUV4dGVuc2lvbiIsZS5PQkpFQ1RfVFlQRV9FWFRFTlNJT049Ik9iamVjdFR5cGVFeHRlbnNpb24iLGUuSU5URVJGQUNFX1RZUEVfRVhURU5TSU9OPSJJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uIixlLlVOSU9OX1RZUEVfRVhURU5TSU9OPSJVbmlvblR5cGVFeHRlbnNpb24iLGUuRU5VTV9UWVBFX0VYVEVOU0lPTj0iRW51bVR5cGVFeHRlbnNpb24iLGUuSU5QVVRfT0JKRUNUX1RZUEVfRVhURU5TSU9OPSJJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24ifSkoYnx8KGI9e30pKTtmdW5jdGlvbiB6ZShlKXtyZXR1cm4gZT09PTl8fGU9PT0zMn1mdW5jdGlvbiBiZShlKXtyZXR1cm4gZT49NDgmJmU8PTU3fWZ1bmN0aW9uIE50KGUpe3JldHVybiBlPj05NyYmZTw9MTIyfHxlPj02NSYmZTw9OTB9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIE50KGUpfHxlPT09OTV9ZnVuY3Rpb24gZm4oZSl7cmV0dXJuIE50KGUpfHxiZShlKXx8ZT09PTk1fWZ1bmN0aW9uIGRuKGUpe3ZhciB0O2xldCBuPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGk9bnVsbCxyPS0xO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcztjb25zdCBjPWVbb10saD1wbihjKTtoIT09Yy5sZW5ndGgmJihpPShzPWkpIT09bnVsbCYmcyE9PXZvaWQgMD9zOm8scj1vLG8hPT0wJiZoPG4mJihuPWgpKX1yZXR1cm4gZS5tYXAoKG8sYyk9PmM9PT0wP286by5zbGljZShuKSkuc2xpY2UoKHQ9aSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6MCxyKzEpfWZ1bmN0aW9uIHBuKGUpe2xldCB0PTA7Zm9yKDt0PGUubGVuZ3RoJiZ6ZShlLmNoYXJDb2RlQXQodCkpOykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gbW4oZSx0KXtjb25zdCBuPWUucmVwbGFjZSgvIiIiL2csJ1xcIiIiJyksaT1uLnNwbGl0KC9cclxufFtcblxyXS9nKSxyPWkubGVuZ3RoPT09MSxzPWkubGVuZ3RoPjEmJmkuc2xpY2UoMSkuZXZlcnkoVD0+VC5sZW5ndGg9PT0wfHx6ZShULmNoYXJDb2RlQXQoMCkpKSxvPW4uZW5kc1dpdGgoJ1xcIiIiJyksYz1lLmVuZHNXaXRoKCciJykmJiFvLGg9ZS5lbmRzV2l0aCgiXFwiKSxkPWN8fGgsdT0hcnx8ZS5sZW5ndGg+NzB8fGR8fHN8fG87bGV0IHk9IiI7Y29uc3Qgdj1yJiZ6ZShlLmNoYXJDb2RlQXQoMCkpO3JldHVybih1JiYhdnx8cykmJih5Kz1gCmApLHkrPW4sKHV8fGQpJiYoeSs9YApgKSwnIiIiJyt5KyciIiInfXZhciBsOyhmdW5jdGlvbihlKXtlLlNPRj0iPFNPRj4iLGUuRU9GPSI8RU9GPiIsZS5CQU5HPSIhIixlLkRPTExBUj0iJCIsZS5BTVA9IiYiLGUuUEFSRU5fTD0iKCIsZS5QQVJFTl9SPSIpIixlLlNQUkVBRD0iLi4uIixlLkNPTE9OPSI6IixlLkVRVUFMUz0iPSIsZS5BVD0iQCIsZS5CUkFDS0VUX0w9IlsiLGUuQlJBQ0tFVF9SPSJdIixlLkJSQUNFX0w9InsiLGUuUElQRT0ifCIsZS5CUkFDRV9SPSJ9IixlLk5BTUU9Ik5hbWUiLGUuSU5UPSJJbnQiLGUuRkxPQVQ9IkZsb2F0IixlLlNUUklORz0iU3RyaW5nIixlLkJMT0NLX1NUUklORz0iQmxvY2tTdHJpbmciLGUuQ09NTUVOVD0iQ29tbWVudCJ9KShsfHwobD17fSkpO2NsYXNzIHlue2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49bmV3IF90KGwuU09GLDAsMCwwLDApO3RoaXMuc291cmNlPXQsdGhpcy5sYXN0VG9rZW49bix0aGlzLnRva2VuPW4sdGhpcy5saW5lPTEsdGhpcy5saW5lU3RhcnQ9MH1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJMZXhlciJ9YWR2YW5jZSgpe3JldHVybiB0aGlzLmxhc3RUb2tlbj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sb29rYWhlYWQoKX1sb29rYWhlYWQoKXtsZXQgdD10aGlzLnRva2VuO2lmKHQua2luZCE9PWwuRU9GKWRvIGlmKHQubmV4dCl0PXQubmV4dDtlbHNle2NvbnN0IG49dm4odGhpcyx0LmVuZCk7dC5uZXh0PW4sbi5wcmV2PXQsdD1ufXdoaWxlKHQua2luZD09PWwuQ09NTUVOVCk7cmV0dXJuIHR9fWZ1bmN0aW9uIGduKGUpe3JldHVybiBlPT09bC5CQU5HfHxlPT09bC5ET0xMQVJ8fGU9PT1sLkFNUHx8ZT09PWwuUEFSRU5fTHx8ZT09PWwuUEFSRU5fUnx8ZT09PWwuU1BSRUFEfHxlPT09bC5DT0xPTnx8ZT09PWwuRVFVQUxTfHxlPT09bC5BVHx8ZT09PWwuQlJBQ0tFVF9MfHxlPT09bC5CUkFDS0VUX1J8fGU9PT1sLkJSQUNFX0x8fGU9PT1sLlBJUEV8fGU9PT1sLkJSQUNFX1J9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGU+PTAmJmU8PTU1Mjk1fHxlPj01NzM0NCYmZTw9MTExNDExMX1mdW5jdGlvbiB3ZShlLHQpe3JldHVybiBBdChlLmNoYXJDb2RlQXQodCkpJiZJdChlLmNoYXJDb2RlQXQodCsxKSl9ZnVuY3Rpb24gQXQoZSl7cmV0dXJuIGU+PTU1Mjk2JiZlPD01NjMxOX1mdW5jdGlvbiBJdChlKXtyZXR1cm4gZT49NTYzMjAmJmU8PTU3MzQzfWZ1bmN0aW9uIGNlKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LmNvZGVQb2ludEF0KHQpO2lmKG49PT12b2lkIDApcmV0dXJuIGwuRU9GO2lmKG4+PTMyJiZuPD0xMjYpe2NvbnN0IGk9U3RyaW5nLmZyb21Db2RlUG9pbnQobik7cmV0dXJuIGk9PT0nIic/YCciJ2A6YCIke2l9ImB9cmV0dXJuIlUrIituLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnBhZFN0YXJ0KDQsIjAiKX1mdW5jdGlvbiBVKGUsdCxuLGkscil7Y29uc3Qgcz1lLmxpbmUsbz0xK24tZS5saW5lU3RhcnQ7cmV0dXJuIG5ldyBfdCh0LG4saSxzLG8scil9ZnVuY3Rpb24gdm4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10O2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7c3dpdGNoKHMpe2Nhc2UgNjUyNzk6Y2FzZSA5OmNhc2UgMzI6Y2FzZSA0NDorK3I7Y29udGludWU7Y2FzZSAxMDorK3IsKytlLmxpbmUsZS5saW5lU3RhcnQ9cjtjb250aW51ZTtjYXNlIDEzOm4uY2hhckNvZGVBdChyKzEpPT09MTA/cis9MjorK3IsKytlLmxpbmUsZS5saW5lU3RhcnQ9cjtjb250aW51ZTtjYXNlIDM1OnJldHVybiBFbihlLHIpO2Nhc2UgMzM6cmV0dXJuIFUoZSxsLkJBTkcscixyKzEpO2Nhc2UgMzY6cmV0dXJuIFUoZSxsLkRPTExBUixyLHIrMSk7Y2FzZSAzODpyZXR1cm4gVShlLGwuQU1QLHIscisxKTtjYXNlIDQwOnJldHVybiBVKGUsbC5QQVJFTl9MLHIscisxKTtjYXNlIDQxOnJldHVybiBVKGUsbC5QQVJFTl9SLHIscisxKTtjYXNlIDQ2OmlmKG4uY2hhckNvZGVBdChyKzEpPT09NDYmJm4uY2hhckNvZGVBdChyKzIpPT09NDYpcmV0dXJuIFUoZSxsLlNQUkVBRCxyLHIrMyk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gVShlLGwuQ09MT04scixyKzEpO2Nhc2UgNjE6cmV0dXJuIFUoZSxsLkVRVUFMUyxyLHIrMSk7Y2FzZSA2NDpyZXR1cm4gVShlLGwuQVQscixyKzEpO2Nhc2UgOTE6cmV0dXJuIFUoZSxsLkJSQUNLRVRfTCxyLHIrMSk7Y2FzZSA5MzpyZXR1cm4gVShlLGwuQlJBQ0tFVF9SLHIscisxKTtjYXNlIDEyMzpyZXR1cm4gVShlLGwuQlJBQ0VfTCxyLHIrMSk7Y2FzZSAxMjQ6cmV0dXJuIFUoZSxsLlBJUEUscixyKzEpO2Nhc2UgMTI1OnJldHVybiBVKGUsbC5CUkFDRV9SLHIscisxKTtjYXNlIDM0OnJldHVybiBuLmNoYXJDb2RlQXQocisxKT09PTM0JiZuLmNoYXJDb2RlQXQocisyKT09PTM0P0FuKGUscik6Ym4oZSxyKX1pZihiZShzKXx8cz09PTQ1KXJldHVybiBfbihlLHIscyk7aWYoeHQocykpcmV0dXJuIEluKGUscik7dGhyb3cgRyhlLnNvdXJjZSxyLHM9PT0zOT9gVW5leHBlY3RlZCBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyICgnKSwgZGlkIHlvdSBtZWFuIHRvIHVzZSBhIGRvdWJsZSBxdW90ZSAoIik/YDpmZShzKXx8d2UobixyKT9gVW5leHBlY3RlZCBjaGFyYWN0ZXI6ICR7Y2UoZSxyKX0uYDpgSW52YWxpZCBjaGFyYWN0ZXI6ICR7Y2UoZSxyKX0uYCl9cmV0dXJuIFUoZSxsLkVPRixpLGkpfWZ1bmN0aW9uIEVuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxO2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7aWYocz09PTEwfHxzPT09MTMpYnJlYWs7aWYoZmUocykpKytyO2Vsc2UgaWYod2UobixyKSlyKz0yO2Vsc2UgYnJlYWt9cmV0dXJuIFUoZSxsLkNPTU1FTlQsdCxyLG4uc2xpY2UodCsxLHIpKX1mdW5jdGlvbiBfbihlLHQsbil7Y29uc3QgaT1lLnNvdXJjZS5ib2R5O2xldCByPXQscz1uLG89ITE7aWYocz09PTQ1JiYocz1pLmNoYXJDb2RlQXQoKytyKSkscz09PTQ4KXtpZihzPWkuY2hhckNvZGVBdCgrK3IpLGJlKHMpKXRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBudW1iZXIsIHVuZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgMDogJHtjZShlLHIpfS5gKX1lbHNlIHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpO2lmKHM9PT00NiYmKG89ITAscz1pLmNoYXJDb2RlQXQoKytyKSxyPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKSksKHM9PT02OXx8cz09PTEwMSkmJihvPSEwLHM9aS5jaGFyQ29kZUF0KCsrciksKHM9PT00M3x8cz09PTQ1KSYmKHM9aS5jaGFyQ29kZUF0KCsrcikpLHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpKSxzPT09NDZ8fHh0KHMpKXRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBudW1iZXIsIGV4cGVjdGVkIGRpZ2l0IGJ1dCBnb3Q6ICR7Y2UoZSxyKX0uYCk7cmV0dXJuIFUoZSxvP2wuRkxPQVQ6bC5JTlQsdCxyLGkuc2xpY2UodCxyKSl9ZnVuY3Rpb24gSGUoZSx0LG4pe2lmKCFiZShuKSl0aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAke2NlKGUsdCl9LmApO2NvbnN0IGk9ZS5zb3VyY2UuYm9keTtsZXQgcj10KzE7Zm9yKDtiZShpLmNoYXJDb2RlQXQocikpOykrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzEscz1yLG89IiI7Zm9yKDtyPGk7KXtjb25zdCBjPW4uY2hhckNvZGVBdChyKTtpZihjPT09MzQpcmV0dXJuIG8rPW4uc2xpY2UocyxyKSxVKGUsbC5TVFJJTkcsdCxyKzEsbyk7aWYoYz09PTkyKXtvKz1uLnNsaWNlKHMscik7Y29uc3QgaD1uLmNoYXJDb2RlQXQocisxKT09PTExNz9uLmNoYXJDb2RlQXQocisyKT09PTEyMz9UbihlLHIpOk5uKGUscik6eG4oZSxyKTtvKz1oLnZhbHVlLHIrPWguc2l6ZSxzPXI7Y29udGludWV9aWYoYz09PTEwfHxjPT09MTMpYnJlYWs7aWYoZmUoYykpKytyO2Vsc2UgaWYod2UobixyKSlyKz0yO2Vsc2UgdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAke2NlKGUscil9LmApfXRocm93IEcoZS5zb3VyY2UsciwiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBUbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keTtsZXQgaT0wLHI9Mztmb3IoO3I8MTI7KXtjb25zdCBzPW4uY2hhckNvZGVBdCh0K3IrKyk7aWYocz09PTEyNSl7aWYocjw1fHwhZmUoaSkpYnJlYWs7cmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLHNpemU6cn19aWYoaT1pPDw0fFRlKHMpLGk8MClicmVha310aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2U6ICIke24uc2xpY2UodCx0K3IpfSIuYCl9ZnVuY3Rpb24gTm4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1TdChuLHQrMik7aWYoZmUoaSkpcmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLHNpemU6Nn07aWYoQXQoaSkmJm4uY2hhckNvZGVBdCh0KzYpPT09OTImJm4uY2hhckNvZGVBdCh0KzcpPT09MTE3KXtjb25zdCByPVN0KG4sdCs4KTtpZihJdChyKSlyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSxyKSxzaXplOjEyfX10aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2U6ICIke24uc2xpY2UodCx0KzYpfSIuYCl9ZnVuY3Rpb24gU3QoZSx0KXtyZXR1cm4gVGUoZS5jaGFyQ29kZUF0KHQpKTw8MTJ8VGUoZS5jaGFyQ29kZUF0KHQrMSkpPDw4fFRlKGUuY2hhckNvZGVBdCh0KzIpKTw8NHxUZShlLmNoYXJDb2RlQXQodCszKSl9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz9lLTQ4OmU+PTY1JiZlPD03MD9lLTU1OmU+PTk3JiZlPD0xMDI/ZS04NzotMX1mdW5jdGlvbiB4bihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keTtzd2l0Y2gobi5jaGFyQ29kZUF0KHQrMSkpe2Nhc2UgMzQ6cmV0dXJue3ZhbHVlOiciJyxzaXplOjJ9O2Nhc2UgOTI6cmV0dXJue3ZhbHVlOiJcXCIsc2l6ZToyfTtjYXNlIDQ3OnJldHVybnt2YWx1ZToiLyIsc2l6ZToyfTtjYXNlIDk4OnJldHVybnt2YWx1ZToiXGIiLHNpemU6Mn07Y2FzZSAxMDI6cmV0dXJue3ZhbHVlOiJcZiIsc2l6ZToyfTtjYXNlIDExMDpyZXR1cm57dmFsdWU6YApgLHNpemU6Mn07Y2FzZSAxMTQ6cmV0dXJue3ZhbHVlOiJcciIsc2l6ZToyfTtjYXNlIDExNjpyZXR1cm57dmFsdWU6IgkiLHNpemU6Mn19dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2U6ICIke24uc2xpY2UodCx0KzIpfSIuYCl9ZnVuY3Rpb24gQW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj1lLmxpbmVTdGFydCxzPXQrMyxvPXMsYz0iIjtjb25zdCBoPVtdO2Zvcig7czxpOyl7Y29uc3QgZD1uLmNoYXJDb2RlQXQocyk7aWYoZD09PTM0JiZuLmNoYXJDb2RlQXQocysxKT09PTM0JiZuLmNoYXJDb2RlQXQocysyKT09PTM0KXtjKz1uLnNsaWNlKG8scyksaC5wdXNoKGMpO2NvbnN0IHU9VShlLGwuQkxPQ0tfU1RSSU5HLHQscyszLGRuKGgpLmpvaW4oYApgKSk7cmV0dXJuIGUubGluZSs9aC5sZW5ndGgtMSxlLmxpbmVTdGFydD1yLHV9aWYoZD09PTkyJiZuLmNoYXJDb2RlQXQocysxKT09PTM0JiZuLmNoYXJDb2RlQXQocysyKT09PTM0JiZuLmNoYXJDb2RlQXQocyszKT09PTM0KXtjKz1uLnNsaWNlKG8scyksbz1zKzEscys9NDtjb250aW51ZX1pZihkPT09MTB8fGQ9PT0xMyl7Yys9bi5zbGljZShvLHMpLGgucHVzaChjKSxkPT09MTMmJm4uY2hhckNvZGVBdChzKzEpPT09MTA/cys9MjorK3MsYz0iIixvPXMscj1zO2NvbnRpbnVlfWlmKGZlKGQpKSsrcztlbHNlIGlmKHdlKG4scykpcys9MjtlbHNlIHRocm93IEcoZS5zb3VyY2UscyxgSW52YWxpZCBjaGFyYWN0ZXIgd2l0aGluIFN0cmluZzogJHtjZShlLHMpfS5gKX10aHJvdyBHKGUuc291cmNlLHMsIlVudGVybWluYXRlZCBzdHJpbmcuIil9ZnVuY3Rpb24gSW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzE7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtpZihmbihzKSkrK3I7ZWxzZSBicmVha31yZXR1cm4gVShlLGwuTkFNRSx0LHIsbi5zbGljZSh0LHIpKX1jb25zdCBTbj0xMCxPdD0yO2Z1bmN0aW9uIFllKGUpe3JldHVybiBEZShlLFtdKX1mdW5jdGlvbiBEZShlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBKU09OLnN0cmluZ2lmeShlKTtjYXNlImZ1bmN0aW9uIjpyZXR1cm4gZS5uYW1lP2BbZnVuY3Rpb24gJHtlLm5hbWV9XWA6IltmdW5jdGlvbl0iO2Nhc2Uib2JqZWN0IjpyZXR1cm4gT24oZSx0KTtkZWZhdWx0OnJldHVybiBTdHJpbmcoZSl9fWZ1bmN0aW9uIE9uKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKHQuaW5jbHVkZXMoZSkpcmV0dXJuIltDaXJjdWxhcl0iO2NvbnN0IG49Wy4uLnQsZV07aWYod24oZSkpe2NvbnN0IGk9ZS50b0pTT04oKTtpZihpIT09ZSlyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2k6RGUoaSxuKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGtuKGUsbik7cmV0dXJuIERuKGUsbil9ZnVuY3Rpb24gd24oZSl7cmV0dXJuIHR5cGVvZiBlLnRvSlNPTj09ImZ1bmN0aW9uIn1mdW5jdGlvbiBEbihlLHQpe2NvbnN0IG49T2JqZWN0LmVudHJpZXMoZSk7cmV0dXJuIG4ubGVuZ3RoPT09MD8ie30iOnQubGVuZ3RoPk90PyJbIitDbihlKSsiXSI6InsgIituLm1hcCgoW3Isc10pPT5yKyI6ICIrRGUocyx0KSkuam9pbigiLCAiKSsiIH0ifWZ1bmN0aW9uIGtuKGUsdCl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiJbXSI7aWYodC5sZW5ndGg+T3QpcmV0dXJuIltBcnJheV0iO2NvbnN0IG49TWF0aC5taW4oU24sZS5sZW5ndGgpLGk9ZS5sZW5ndGgtbixyPVtdO2ZvcihsZXQgcz0wO3M8bjsrK3Mpci5wdXNoKERlKGVbc10sdCkpO3JldHVybiBpPT09MT9yLnB1c2goIi4uLiAxIG1vcmUgaXRlbSIpOmk+MSYmci5wdXNoKGAuLi4gJHtpfSBtb3JlIGl0ZW1zYCksIlsiK3Iuam9pbigiLCAiKSsiXSJ9ZnVuY3Rpb24gQ24oZSl7Y29uc3QgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkucmVwbGFjZSgvXlxbb2JqZWN0IC8sIiIpLnJlcGxhY2UoL10kLywiIik7aWYodD09PSJPYmplY3QiJiZ0eXBlb2YgZS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIil7Y29uc3Qgbj1lLmNvbnN0cnVjdG9yLm5hbWU7aWYodHlwZW9mIG49PSJzdHJpbmciJiZuIT09IiIpcmV0dXJuIG59cmV0dXJuIHR9Y29uc3QgUm49Z2xvYmFsVGhpcy5wcm9jZXNzJiZwcm9jZXNzLmVudi5OT0RFX0VOVj09PSJwcm9kdWN0aW9uIj9mdW5jdGlvbih0LG4pe3JldHVybiB0IGluc3RhbmNlb2Ygbn06ZnVuY3Rpb24odCxuKXtpZih0IGluc3RhbmNlb2YgbilyZXR1cm4hMDtpZih0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsKXt2YXIgaTtjb25zdCByPW4ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10scz1TeW1ib2wudG9TdHJpbmdUYWcgaW4gdD90W1N5bWJvbC50b1N0cmluZ1RhZ106KGk9dC5jb25zdHJ1Y3Rvcik9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm5hbWU7aWYocj09PXMpe2NvbnN0IG89WWUodCk7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXNlICR7cn0gIiR7b30iIGZyb20gYW5vdGhlciBtb2R1bGUgb3IgcmVhbG0uCgpFbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiAiZ3JhcGhxbCIgaW4gdGhlIG5vZGVfbW9kdWxlcwpkaXJlY3RvcnkuIElmIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiAiZ3JhcGhxbCIgYXJlIHRoZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIKcmVsaWVkIG9uIG1vZHVsZXMsIHVzZSAicmVzb2x1dGlvbnMiIHRvIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGluc3RhbGxlZC4KCmh0dHBzOi8veWFybnBrZy5jb20vZW4vZG9jcy9zZWxlY3RpdmUtdmVyc2lvbi1yZXNvbHV0aW9ucwoKRHVwbGljYXRlICJncmFwaHFsIiBtb2R1bGVzIGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgc2luY2UgZGlmZmVyZW50CnZlcnNpb25zIG1heSBoYXZlIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMgYW5kIGJlaGF2aW9yLiBUaGUgZGF0YSBmcm9tIG9uZQp2ZXJzaW9uIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIGZyb20gYW5vdGhlciBjb3VsZCBwcm9kdWNlIGNvbmZ1c2luZyBhbmQKc3B1cmlvdXMgcmVzdWx0cy5gKX19cmV0dXJuITF9O2NsYXNzIHd0e2NvbnN0cnVjdG9yKHQsbj0iR3JhcGhRTCByZXF1ZXN0IixpPXtsaW5lOjEsY29sdW1uOjF9KXt0eXBlb2YgdD09InN0cmluZyJ8fGxlKCExLGBCb2R5IG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkOiAke1llKHQpfS5gKSx0aGlzLmJvZHk9dCx0aGlzLm5hbWU9bix0aGlzLmxvY2F0aW9uT2Zmc2V0PWksdGhpcy5sb2NhdGlvbk9mZnNldC5saW5lPjB8fGxlKCExLCJsaW5lIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZS4iKSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbj4wfHxsZSghMSwiY29sdW1uIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZS4iKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJTb3VyY2UifX1mdW5jdGlvbiBMbihlKXtyZXR1cm4gUm4oZSx3dCl9ZnVuY3Rpb24gRHQoZSx0KXtjb25zdCBuPW5ldyBQbihlLHQpLGk9bi5wYXJzZURvY3VtZW50KCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJ0b2tlbkNvdW50Iix7ZW51bWVyYWJsZTohMSx2YWx1ZTpuLnRva2VuQ291bnR9KSxpfWNsYXNzIFBue2NvbnN0cnVjdG9yKHQsbj17fSl7Y29uc3QgaT1Mbih0KT90Om5ldyB3dCh0KTt0aGlzLl9sZXhlcj1uZXcgeW4oaSksdGhpcy5fb3B0aW9ucz1uLHRoaXMuX3Rva2VuQ291bnRlcj0wfWdldCB0b2tlbkNvdW50KCl7cmV0dXJuIHRoaXMuX3Rva2VuQ291bnRlcn1wYXJzZU5hbWUoKXtjb25zdCB0PXRoaXMuZXhwZWN0VG9rZW4obC5OQU1FKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5OQU1FLHZhbHVlOnQudmFsdWV9KX1wYXJzZURvY3VtZW50KCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLkRPQ1VNRU5ULGRlZmluaXRpb25zOnRoaXMubWFueShsLlNPRix0aGlzLnBhcnNlRGVmaW5pdGlvbixsLkVPRil9KX1wYXJzZURlZmluaXRpb24oKXtpZih0aGlzLnBlZWsobC5CUkFDRV9MKSlyZXR1cm4gdGhpcy5wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKTtjb25zdCB0PXRoaXMucGVla0Rlc2NyaXB0aW9uKCksbj10P3RoaXMuX2xleGVyLmxvb2thaGVhZCgpOnRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PWwuTkFNRSl7c3dpdGNoKG4udmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYURlZmluaXRpb24oKTtjYXNlInNjYWxhciI6cmV0dXJuIHRoaXMucGFyc2VTY2FsYXJUeXBlRGVmaW5pdGlvbigpO2Nhc2UidHlwZSI6cmV0dXJuIHRoaXMucGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVEZWZpbml0aW9uKCk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHRoaXMucGFyc2VVbmlvblR5cGVEZWZpbml0aW9uKCk7Y2FzZSJlbnVtIjpyZXR1cm4gdGhpcy5wYXJzZUVudW1UeXBlRGVmaW5pdGlvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbigpO2Nhc2UiZGlyZWN0aXZlIjpyZXR1cm4gdGhpcy5wYXJzZURpcmVjdGl2ZURlZmluaXRpb24oKX1pZih0KXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLHRoaXMuX2xleGVyLnRva2VuLnN0YXJ0LCJVbmV4cGVjdGVkIGRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbnMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uIHR5cGUgZGVmaW5pdGlvbnMuIik7c3dpdGNoKG4udmFsdWUpe2Nhc2UicXVlcnkiOmNhc2UibXV0YXRpb24iOmNhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4gdGhpcy5wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKTtjYXNlImZyYWdtZW50IjpyZXR1cm4gdGhpcy5wYXJzZUZyYWdtZW50RGVmaW5pdGlvbigpO2Nhc2UiZXh0ZW5kIjpyZXR1cm4gdGhpcy5wYXJzZVR5cGVTeXN0ZW1FeHRlbnNpb24oKX19dGhyb3cgdGhpcy51bmV4cGVjdGVkKG4pfXBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47aWYodGhpcy5wZWVrKGwuQlJBQ0VfTCkpcmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOmhlLlFVRVJZLG5hbWU6dm9pZCAwLHZhcmlhYmxlRGVmaW5pdGlvbnM6W10sZGlyZWN0aXZlczpbXSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSk7Y29uc3Qgbj10aGlzLnBhcnNlT3BlcmF0aW9uVHlwZSgpO2xldCBpO3JldHVybiB0aGlzLnBlZWsobC5OQU1FKSYmKGk9dGhpcy5wYXJzZU5hbWUoKSksdGhpcy5ub2RlKHQse2tpbmQ6Yi5PUEVSQVRJT05fREVGSU5JVElPTixvcGVyYXRpb246bixuYW1lOmksdmFyaWFibGVEZWZpbml0aW9uczp0aGlzLnBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZU9wZXJhdGlvblR5cGUoKXtjb25zdCB0PXRoaXMuZXhwZWN0VG9rZW4obC5OQU1FKTtzd2l0Y2godC52YWx1ZSl7Y2FzZSJxdWVyeSI6cmV0dXJuIGhlLlFVRVJZO2Nhc2UibXV0YXRpb24iOnJldHVybiBoZS5NVVRBVElPTjtjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIGhlLlNVQlNDUklQVElPTn10aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9cGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCx0aGlzLnBhcnNlVmFyaWFibGVEZWZpbml0aW9uLGwuUEFSRU5fUil9cGFyc2VWYXJpYWJsZURlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOmIuVkFSSUFCTEVfREVGSU5JVElPTix2YXJpYWJsZTp0aGlzLnBhcnNlVmFyaWFibGUoKSx0eXBlOih0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pLHRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCkpLGRlZmF1bHRWYWx1ZTp0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpP3RoaXMucGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpOnZvaWQgMCxkaXJlY3RpdmVzOnRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKX0pfXBhcnNlVmFyaWFibGUoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuRE9MTEFSKSx0aGlzLm5vZGUodCx7a2luZDpiLlZBUklBQkxFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKX0pfXBhcnNlU2VsZWN0aW9uU2V0KCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLlNFTEVDVElPTl9TRVQsc2VsZWN0aW9uczp0aGlzLm1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VTZWxlY3Rpb24sbC5CUkFDRV9SKX0pfXBhcnNlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMucGVlayhsLlNQUkVBRCk/dGhpcy5wYXJzZUZyYWdtZW50KCk6dGhpcy5wYXJzZUZpZWxkKCl9cGFyc2VGaWVsZCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlTmFtZSgpO2xldCBpLHI7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkNPTE9OKT8oaT1uLHI9dGhpcy5wYXJzZU5hbWUoKSk6cj1uLHRoaXMubm9kZSh0LHtraW5kOmIuRklFTEQsYWxpYXM6aSxuYW1lOnIsYXJndW1lbnRzOnRoaXMucGFyc2VBcmd1bWVudHMoITEpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBlZWsobC5CUkFDRV9MKT90aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCk6dm9pZCAwfSl9cGFyc2VBcmd1bWVudHModCl7Y29uc3Qgbj10P3RoaXMucGFyc2VDb25zdEFyZ3VtZW50OnRoaXMucGFyc2VBcmd1bWVudDtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLG4sbC5QQVJFTl9SKX1wYXJzZUFyZ3VtZW50KHQ9ITEpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW4saT10aGlzLnBhcnNlTmFtZSgpO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pLHRoaXMubm9kZShuLHtraW5kOmIuQVJHVU1FTlQsbmFtZTppLHZhbHVlOnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCl9KX1wYXJzZUNvbnN0QXJndW1lbnQoKXtyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50KCEwKX1wYXJzZUZyYWdtZW50KCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdFRva2VuKGwuU1BSRUFEKTtjb25zdCBuPXRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJvbiIpO3JldHVybiFuJiZ0aGlzLnBlZWsobC5OQU1FKT90aGlzLm5vZGUodCx7a2luZDpiLkZSQUdNRU5UX1NQUkVBRCxuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKX0pOnRoaXMubm9kZSh0LHtraW5kOmIuSU5MSU5FX0ZSQUdNRU5ULHR5cGVDb25kaXRpb246bj90aGlzLnBhcnNlTmFtZWRUeXBlKCk6dm9pZCAwLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZUZyYWdtZW50RGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0S2V5d29yZCgiZnJhZ21lbnQiKSx0aGlzLl9vcHRpb25zLmFsbG93TGVnYWN5RnJhZ21lbnRWYXJpYWJsZXM9PT0hMD90aGlzLm5vZGUodCx7a2luZDpiLkZSQUdNRU5UX0RFRklOSVRJT04sbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksdmFyaWFibGVEZWZpbml0aW9uczp0aGlzLnBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpLHR5cGVDb25kaXRpb246KHRoaXMuZXhwZWN0S2V5d29yZCgib24iKSx0aGlzLnBhcnNlTmFtZWRUeXBlKCkpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KTp0aGlzLm5vZGUodCx7a2luZDpiLkZSQUdNRU5UX0RFRklOSVRJT04sbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksdHlwZUNvbmRpdGlvbjoodGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpLHRoaXMucGFyc2VOYW1lZFR5cGUoKSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlRnJhZ21lbnROYW1lKCl7aWYodGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0ib24iKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLnBhcnNlTmFtZSgpfXBhcnNlVmFsdWVMaXRlcmFsKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47c3dpdGNoKG4ua2luZCl7Y2FzZSBsLkJSQUNLRVRfTDpyZXR1cm4gdGhpcy5wYXJzZUxpc3QodCk7Y2FzZSBsLkJSQUNFX0w6cmV0dXJuIHRoaXMucGFyc2VPYmplY3QodCk7Y2FzZSBsLklOVDpyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUobix7a2luZDpiLklOVCx2YWx1ZTpuLnZhbHVlfSk7Y2FzZSBsLkZMT0FUOnJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZShuLHtraW5kOmIuRkxPQVQsdmFsdWU6bi52YWx1ZX0pO2Nhc2UgbC5TVFJJTkc6Y2FzZSBsLkJMT0NLX1NUUklORzpyZXR1cm4gdGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwoKTtjYXNlIGwuTkFNRTpzd2l0Y2godGhpcy5hZHZhbmNlTGV4ZXIoKSxuLnZhbHVlKXtjYXNlInRydWUiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpiLkJPT0xFQU4sdmFsdWU6ITB9KTtjYXNlImZhbHNlIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6Yi5CT09MRUFOLHZhbHVlOiExfSk7Y2FzZSJudWxsIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6Yi5OVUxMfSk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6Yi5FTlVNLHZhbHVlOm4udmFsdWV9KX1jYXNlIGwuRE9MTEFSOmlmKHQpaWYodGhpcy5leHBlY3RUb2tlbihsLkRPTExBUiksdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PWwuTkFNRSl7Y29uc3QgaT10aGlzLl9sZXhlci50b2tlbi52YWx1ZTt0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBVbmV4cGVjdGVkIHZhcmlhYmxlICIkJHtpfSIgaW4gY29uc3RhbnQgdmFsdWUuYCl9ZWxzZSB0aHJvdyB0aGlzLnVuZXhwZWN0ZWQobik7cmV0dXJuIHRoaXMucGFyc2VWYXJpYWJsZSgpO2RlZmF1bHQ6dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9fXBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKXtyZXR1cm4gdGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCghMCl9cGFyc2VTdHJpbmdMaXRlcmFsKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUodCx7a2luZDpiLlNUUklORyx2YWx1ZTp0LnZhbHVlLGJsb2NrOnQua2luZD09PWwuQkxPQ0tfU1RSSU5HfSl9cGFyc2VMaXN0KHQpe2NvbnN0IG49KCk9PnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCk7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLkxJU1QsdmFsdWVzOnRoaXMuYW55KGwuQlJBQ0tFVF9MLG4sbC5CUkFDS0VUX1IpfSl9cGFyc2VPYmplY3QodCl7Y29uc3Qgbj0oKT0+dGhpcy5wYXJzZU9iamVjdEZpZWxkKHQpO3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6Yi5PQkpFQ1QsZmllbGRzOnRoaXMuYW55KGwuQlJBQ0VfTCxuLGwuQlJBQ0VfUil9KX1wYXJzZU9iamVjdEZpZWxkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW4saT10aGlzLnBhcnNlTmFtZSgpO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pLHRoaXMubm9kZShuLHtraW5kOmIuT0JKRUNUX0ZJRUxELG5hbWU6aSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpfSl9cGFyc2VEaXJlY3RpdmVzKHQpe2NvbnN0IG49W107Zm9yKDt0aGlzLnBlZWsobC5BVCk7KW4ucHVzaCh0aGlzLnBhcnNlRGlyZWN0aXZlKHQpKTtyZXR1cm4gbn1wYXJzZUNvbnN0RGlyZWN0aXZlcygpe3JldHVybiB0aGlzLnBhcnNlRGlyZWN0aXZlcyghMCl9cGFyc2VEaXJlY3RpdmUodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkFUKSx0aGlzLm5vZGUobix7a2luZDpiLkRJUkVDVElWRSxuYW1lOnRoaXMucGFyc2VOYW1lKCksYXJndW1lbnRzOnRoaXMucGFyc2VBcmd1bWVudHModCl9KX1wYXJzZVR5cGVSZWZlcmVuY2UoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO2xldCBuO2lmKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkJSQUNLRVRfTCkpe2NvbnN0IGk9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKTt0aGlzLmV4cGVjdFRva2VuKGwuQlJBQ0tFVF9SKSxuPXRoaXMubm9kZSh0LHtraW5kOmIuTElTVF9UWVBFLHR5cGU6aX0pfWVsc2Ugbj10aGlzLnBhcnNlTmFtZWRUeXBlKCk7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkJBTkcpP3RoaXMubm9kZSh0LHtraW5kOmIuTk9OX05VTExfVFlQRSx0eXBlOm59KTpufXBhcnNlTmFtZWRUeXBlKCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLk5BTUVEX1RZUEUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpfSl9cGVla0Rlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMucGVlayhsLlNUUklORyl8fHRoaXMucGVlayhsLkJMT0NLX1NUUklORyl9cGFyc2VEZXNjcmlwdGlvbigpe2lmKHRoaXMucGVla0Rlc2NyaXB0aW9uKCkpcmV0dXJuIHRoaXMucGFyc2VTdHJpbmdMaXRlcmFsKCl9cGFyc2VTY2hlbWFEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgic2NoZW1hIik7Y29uc3QgaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLm1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbixsLkJSQUNFX1IpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLlNDSEVNQV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sZGlyZWN0aXZlczppLG9wZXJhdGlvblR5cGVzOnJ9KX1wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VPcGVyYXRpb25UeXBlKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lZFR5cGUoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5PUEVSQVRJT05fVFlQRV9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLHR5cGU6aX0pfXBhcnNlU2NhbGFyVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzY2FsYXIiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuU0NBTEFSX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnJ9KX1wYXJzZU9iamVjdFR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgidHlwZSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHM9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLG89dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGludGVyZmFjZXM6cixkaXJlY3RpdmVzOnMsZmllbGRzOm99KX1wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCl7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJpbXBsZW1lbnRzIik/dGhpcy5kZWxpbWl0ZWRNYW55KGwuQU1QLHRoaXMucGFyc2VOYW1lZFR5cGUpOltdfXBhcnNlRmllbGRzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUZpZWxkRGVmaW5pdGlvbixsLkJSQUNFX1IpfXBhcnNlRmllbGREZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VBcmd1bWVudERlZnMoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IHM9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSxvPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5GSUVMRF9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGFyZ3VtZW50czpyLHR5cGU6cyxkaXJlY3RpdmVzOm99KX1wYXJzZUFyZ3VtZW50RGVmcygpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsdGhpcy5wYXJzZUlucHV0VmFsdWVEZWYsbC5QQVJFTl9SKX1wYXJzZUlucHV0VmFsdWVEZWYoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlTmFtZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3Qgcj10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpO2xldCBzO3RoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUykmJihzPXRoaXMucGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpKTtjb25zdCBvPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5JTlBVVF9WQUxVRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLHR5cGU6cixkZWZhdWx0VmFsdWU6cyxkaXJlY3RpdmVzOm99KX1wYXJzZUludGVyZmFjZVR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW50ZXJmYWNlIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksbz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksaW50ZXJmYWNlczpyLGRpcmVjdGl2ZXM6cyxmaWVsZHM6b30pfXBhcnNlVW5pb25UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInVuaW9uIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZVVuaW9uTWVtYmVyVHlwZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5VTklPTl9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLHR5cGVzOnN9KX1wYXJzZVVuaW9uTWVtYmVyVHlwZXMoKXtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKT90aGlzLmRlbGltaXRlZE1hbnkobC5QSVBFLHRoaXMucGFyc2VOYW1lZFR5cGUpOltdfXBhcnNlRW51bVR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiZW51bSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLkVOVU1fVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cix2YWx1ZXM6c30pfXBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VFbnVtVmFsdWVEZWZpbml0aW9uLGwuQlJBQ0VfUil9cGFyc2VFbnVtVmFsdWVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZUVudW1WYWx1ZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5FTlVNX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyfSl9cGFyc2VFbnVtVmFsdWVOYW1lKCl7aWYodGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0idHJ1ZSJ8fHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09ImZhbHNlInx8dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0ibnVsbCIpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2UsdGhpcy5fbGV4ZXIudG9rZW4uc3RhcnQsYCR7a2UodGhpcy5fbGV4ZXIudG9rZW4pfSBpcyByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIGFuIGVudW0gdmFsdWUuYCk7cmV0dXJuIHRoaXMucGFyc2VOYW1lKCl9cGFyc2VJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW5wdXQiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsZmllbGRzOnN9KX1wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUlucHV0VmFsdWVEZWYsbC5CUkFDRV9SKX1wYXJzZVR5cGVTeXN0ZW1FeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLmxvb2thaGVhZCgpO2lmKHQua2luZD09PWwuTkFNRSlzd2l0Y2godC52YWx1ZSl7Y2FzZSJzY2hlbWEiOnJldHVybiB0aGlzLnBhcnNlU2NoZW1hRXh0ZW5zaW9uKCk7Y2FzZSJzY2FsYXIiOnJldHVybiB0aGlzLnBhcnNlU2NhbGFyVHlwZUV4dGVuc2lvbigpO2Nhc2UidHlwZSI6cmV0dXJuIHRoaXMucGFyc2VPYmplY3RUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJpbnRlcmZhY2UiOnJldHVybiB0aGlzLnBhcnNlSW50ZXJmYWNlVHlwZUV4dGVuc2lvbigpO2Nhc2UidW5pb24iOnJldHVybiB0aGlzLnBhcnNlVW5pb25UeXBlRXh0ZW5zaW9uKCk7Y2FzZSJlbnVtIjpyZXR1cm4gdGhpcy5wYXJzZUVudW1UeXBlRXh0ZW5zaW9uKCk7Y2FzZSJpbnB1dCI6cmV0dXJuIHRoaXMucGFyc2VJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24oKX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9cGFyc2VTY2hlbWFFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJzY2hlbWEiKTtjb25zdCBuPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxpPXRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24sbC5CUkFDRV9SKTtpZihuLmxlbmd0aD09PTAmJmkubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5TQ0hFTUFfRVhURU5TSU9OLGRpcmVjdGl2ZXM6bixvcGVyYXRpb25UeXBlczppfSl9cGFyc2VTY2FsYXJUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgic2NhbGFyIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO2lmKGkubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5TQ0FMQVJfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aX0pfXBhcnNlT2JqZWN0VHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInR5cGUiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTAmJnMubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5PQkpFQ1RfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGludGVyZmFjZXM6aSxkaXJlY3RpdmVzOnIsZmllbGRzOnN9KX1wYXJzZUludGVyZmFjZVR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJpbnRlcmZhY2UiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTAmJnMubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5JTlRFUkZBQ0VfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGludGVyZmFjZXM6aSxkaXJlY3RpdmVzOnIsZmllbGRzOnN9KX1wYXJzZVVuaW9uVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInVuaW9uIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZVVuaW9uTWVtYmVyVHlwZXMoKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5VTklPTl9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLHR5cGVzOnJ9KX1wYXJzZUVudW1UeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiZW51bSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLkVOVU1fVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSx2YWx1ZXM6cn0pfXBhcnNlSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiaW5wdXQiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuSU5QVVRfT0JKRUNUX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KX1wYXJzZURpcmVjdGl2ZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJkaXJlY3RpdmUiKSx0aGlzLmV4cGVjdFRva2VuKGwuQVQpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VBcmd1bWVudERlZnMoKSxzPXRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJyZXBlYXRhYmxlIik7dGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpO2NvbnN0IG89dGhpcy5wYXJzZURpcmVjdGl2ZUxvY2F0aW9ucygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLkRJUkVDVElWRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGFyZ3VtZW50czpyLHJlcGVhdGFibGU6cyxsb2NhdGlvbnM6b30pfXBhcnNlRGlyZWN0aXZlTG9jYXRpb25zKCl7cmV0dXJuIHRoaXMuZGVsaW1pdGVkTWFueShsLlBJUEUsdGhpcy5wYXJzZURpcmVjdGl2ZUxvY2F0aW9uKX1wYXJzZURpcmVjdGl2ZUxvY2F0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VOYW1lKCk7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdlLG4udmFsdWUpKXJldHVybiBuO3Rocm93IHRoaXMudW5leHBlY3RlZCh0KX1ub2RlKHQsbil7cmV0dXJuIHRoaXMuX29wdGlvbnMubm9Mb2NhdGlvbiE9PSEwJiYobi5sb2M9bmV3IGxuKHQsdGhpcy5fbGV4ZXIubGFzdFRva2VuLHRoaXMuX2xleGVyLnNvdXJjZSkpLG59cGVlayh0KXtyZXR1cm4gdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PXR9ZXhwZWN0VG9rZW4odCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT10KXJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLG47dGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRXhwZWN0ZWQgJHtrdCh0KX0sIGZvdW5kICR7a2Uobil9LmApfWV4cGVjdE9wdGlvbmFsVG9rZW4odCl7cmV0dXJuIHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT10Pyh0aGlzLmFkdmFuY2VMZXhlcigpLCEwKTohMX1leHBlY3RLZXl3b3JkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09bC5OQU1FJiZuLnZhbHVlPT09dCl0aGlzLmFkdmFuY2VMZXhlcigpO2Vsc2UgdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRXhwZWN0ZWQgIiR7dH0iLCBmb3VuZCAke2tlKG4pfS5gKX1leHBlY3RPcHRpb25hbEtleXdvcmQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gbi5raW5kPT09bC5OQU1FJiZuLnZhbHVlPT09dD8odGhpcy5hZHZhbmNlTGV4ZXIoKSwhMCk6ITF9dW5leHBlY3RlZCh0KXtjb25zdCBuPXQhPW51bGw/dDp0aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgVW5leHBlY3RlZCAke2tlKG4pfS5gKX1hbnkodCxuLGkpe3RoaXMuZXhwZWN0VG9rZW4odCk7Y29uc3Qgcj1bXTtmb3IoOyF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSk7KXIucHVzaChuLmNhbGwodGhpcykpO3JldHVybiByfW9wdGlvbmFsTWFueSh0LG4saSl7aWYodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKHQpKXtjb25zdCByPVtdO2RvIHIucHVzaChuLmNhbGwodGhpcykpO3doaWxlKCF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSkpO3JldHVybiByfXJldHVybltdfW1hbnkodCxuLGkpe3RoaXMuZXhwZWN0VG9rZW4odCk7Y29uc3Qgcj1bXTtkbyByLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSghdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpKTtyZXR1cm4gcn1kZWxpbWl0ZWRNYW55KHQsbil7dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKHQpO2NvbnN0IGk9W107ZG8gaS5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKHQpKTtyZXR1cm4gaX1hZHZhbmNlTGV4ZXIoKXtjb25zdHttYXhUb2tlbnM6dH09dGhpcy5fb3B0aW9ucyxuPXRoaXMuX2xleGVyLmFkdmFuY2UoKTtpZihuLmtpbmQhPT1sLkVPRiYmKCsrdGhpcy5fdG9rZW5Db3VudGVyLHQhPT12b2lkIDAmJnRoaXMuX3Rva2VuQ291bnRlcj50KSl0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBEb2N1bWVudCBjb250YWlucyBtb3JlIHRoYXQgJHt0fSB0b2tlbnMuIFBhcnNpbmcgYWJvcnRlZC5gKX19ZnVuY3Rpb24ga2UoZSl7Y29uc3QgdD1lLnZhbHVlO3JldHVybiBrdChlLmtpbmQpKyh0IT1udWxsP2AgIiR7dH0iYDoiIil9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIGduKGUpP2AiJHtlfSJgOmV9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuYCIke2UucmVwbGFjZShNbixCbil9ImB9Y29uc3QgTW49L1tceDAwLVx4MWZceDIyXHg1Y1x4N2YtXHg5Zl0vZztmdW5jdGlvbiBCbihlKXtyZXR1cm4gJG5bZS5jaGFyQ29kZUF0KDApXX1jb25zdCAkbj1bIlxcdTAwMDAiLCJcXHUwMDAxIiwiXFx1MDAwMiIsIlxcdTAwMDMiLCJcXHUwMDA0IiwiXFx1MDAwNSIsIlxcdTAwMDYiLCJcXHUwMDA3IiwiXFxiIiwiXFx0IiwiXFxuIiwiXFx1MDAwQiIsIlxcZiIsIlxcciIsIlxcdTAwMEUiLCJcXHUwMDBGIiwiXFx1MDAxMCIsIlxcdTAwMTEiLCJcXHUwMDEyIiwiXFx1MDAxMyIsIlxcdTAwMTQiLCJcXHUwMDE1IiwiXFx1MDAxNiIsIlxcdTAwMTciLCJcXHUwMDE4IiwiXFx1MDAxOSIsIlxcdTAwMUEiLCJcXHUwMDFCIiwiXFx1MDAxQyIsIlxcdTAwMUQiLCJcXHUwMDFFIiwiXFx1MDAxRiIsIiIsIiIsJ1xcIicsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIlxcXFwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJcXHUwMDdGIiwiXFx1MDA4MCIsIlxcdTAwODEiLCJcXHUwMDgyIiwiXFx1MDA4MyIsIlxcdTAwODQiLCJcXHUwMDg1IiwiXFx1MDA4NiIsIlxcdTAwODciLCJcXHUwMDg4IiwiXFx1MDA4OSIsIlxcdTAwOEEiLCJcXHUwMDhCIiwiXFx1MDA4QyIsIlxcdTAwOEQiLCJcXHUwMDhFIiwiXFx1MDA4RiIsIlxcdTAwOTAiLCJcXHUwMDkxIiwiXFx1MDA5MiIsIlxcdTAwOTMiLCJcXHUwMDk0IiwiXFx1MDA5NSIsIlxcdTAwOTYiLCJcXHUwMDk3IiwiXFx1MDA5OCIsIlxcdTAwOTkiLCJcXHUwMDlBIiwiXFx1MDA5QiIsIlxcdTAwOUMiLCJcXHUwMDlEIiwiXFx1MDA5RSIsIlxcdTAwOUYiXSxVbj1PYmplY3QuZnJlZXplKHt9KTtmdW5jdGlvbiBWbihlLHQsbj1idCl7Y29uc3QgaT1uZXcgTWFwO2Zvcihjb25zdCBMIG9mIE9iamVjdC52YWx1ZXMoYikpaS5zZXQoTCxxbih0LEwpKTtsZXQgcixzPUFycmF5LmlzQXJyYXkoZSksbz1bZV0sYz0tMSxoPVtdLGQ9ZSx1LHk7Y29uc3Qgdj1bXSxUPVtdO2Rve2MrKztjb25zdCBMPWM9PT1vLmxlbmd0aCxxPUwmJmgubGVuZ3RoIT09MDtpZihMKXtpZih1PVQubGVuZ3RoPT09MD92b2lkIDA6dlt2Lmxlbmd0aC0xXSxkPXkseT1ULnBvcCgpLHEpaWYocyl7ZD1kLnNsaWNlKCk7bGV0IEU9MDtmb3IoY29uc3RbdyxrXW9mIGgpe2NvbnN0IFA9dy1FO2s9PT1udWxsPyhkLnNwbGljZShQLDEpLEUrKyk6ZFtQXT1rfX1lbHNle2Q9RCh7fSxkKTtmb3IoY29uc3RbRSx3XW9mIGgpZFtFXT13fWM9ci5pbmRleCxvPXIua2V5cyxoPXIuZWRpdHMscz1yLmluQXJyYXkscj1yLnByZXZ9ZWxzZSBpZih5KXtpZih1PXM/YzpvW2NdLGQ9eVt1XSxkPT1udWxsKWNvbnRpbnVlO3YucHVzaCh1KX1sZXQgZztpZighQXJyYXkuaXNBcnJheShkKSl7dmFyIG0sTjtUdChkKXx8bGUoITEsYEludmFsaWQgQVNUIE5vZGU6ICR7WWUoZCl9LmApO2NvbnN0IEU9TD8obT1pLmdldChkLmtpbmQpKT09PW51bGx8fG09PT12b2lkIDA/dm9pZCAwOm0ubGVhdmU6KE49aS5nZXQoZC5raW5kKSk9PT1udWxsfHxOPT09dm9pZCAwP3ZvaWQgMDpOLmVudGVyO2lmKGc9RT09bnVsbD92b2lkIDA6RS5jYWxsKHQsZCx1LHksdixUKSxnPT09VW4pYnJlYWs7aWYoZz09PSExKXtpZighTCl7di5wb3AoKTtjb250aW51ZX19ZWxzZSBpZihnIT09dm9pZCAwJiYoaC5wdXNoKFt1LGddKSwhTCkpaWYoVHQoZykpZD1nO2Vsc2V7di5wb3AoKTtjb250aW51ZX19aWYoZz09PXZvaWQgMCYmcSYmaC5wdXNoKFt1LGRdKSxMKXYucG9wKCk7ZWxzZXt2YXIgUjtyPXtpbkFycmF5OnMsaW5kZXg6YyxrZXlzOm8sZWRpdHM6aCxwcmV2OnJ9LHM9QXJyYXkuaXNBcnJheShkKSxvPXM/ZDooUj1uW2Qua2luZF0pIT09bnVsbCYmUiE9PXZvaWQgMD9SOltdLGM9LTEsaD1bXSx5JiZULnB1c2goeSkseT1kfX13aGlsZShyIT09dm9pZCAwKTtyZXR1cm4gaC5sZW5ndGghPT0wP2hbaC5sZW5ndGgtMV1bMV06ZX1mdW5jdGlvbiBxbihlLHQpe2NvbnN0IG49ZVt0XTtyZXR1cm4gdHlwZW9mIG49PSJvYmplY3QiP246dHlwZW9mIG49PSJmdW5jdGlvbiI/e2VudGVyOm4sbGVhdmU6dm9pZCAwfTp7ZW50ZXI6ZS5lbnRlcixsZWF2ZTplLmxlYXZlfX1mdW5jdGlvbiBqbihlKXtyZXR1cm4gVm4oZSx6bil9Y29uc3QgR249ODAsem49e05hbWU6e2xlYXZlOmU9PmUudmFsdWV9LFZhcmlhYmxlOntsZWF2ZTplPT4iJCIrZS5uYW1lfSxEb2N1bWVudDp7bGVhdmU6ZT0+cChlLmRlZmluaXRpb25zLGAKCmApfSxPcGVyYXRpb25EZWZpbml0aW9uOntsZWF2ZShlKXtjb25zdCB0PU8oIigiLHAoZS52YXJpYWJsZURlZmluaXRpb25zLCIsICIpLCIpIiksbj1wKFtlLm9wZXJhdGlvbixwKFtlLm5hbWUsdF0pLHAoZS5kaXJlY3RpdmVzLCIgIildLCIgIik7cmV0dXJuKG49PT0icXVlcnkiPyIiOm4rIiAiKStlLnNlbGVjdGlvblNldH19LFZhcmlhYmxlRGVmaW5pdGlvbjp7bGVhdmU6KHt2YXJpYWJsZTplLHR5cGU6dCxkZWZhdWx0VmFsdWU6bixkaXJlY3RpdmVzOml9KT0+ZSsiOiAiK3QrTygiID0gIixuKStPKCIgIixwKGksIiAiKSl9LFNlbGVjdGlvblNldDp7bGVhdmU6KHtzZWxlY3Rpb25zOmV9KT0+cmUoZSl9LEZpZWxkOntsZWF2ZSh7YWxpYXM6ZSxuYW1lOnQsYXJndW1lbnRzOm4sZGlyZWN0aXZlczppLHNlbGVjdGlvblNldDpyfSl7Y29uc3Qgcz1PKCIiLGUsIjogIikrdDtsZXQgbz1zK08oIigiLHAobiwiLCAiKSwiKSIpO3JldHVybiBvLmxlbmd0aD5HbiYmKG89cytPKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApKSxwKFtvLHAoaSwiICIpLHJdLCIgIil9fSxBcmd1bWVudDp7bGVhdmU6KHtuYW1lOmUsdmFsdWU6dH0pPT5lKyI6ICIrdH0sRnJhZ21lbnRTcHJlYWQ6e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dH0pPT4iLi4uIitlK08oIiAiLHAodCwiICIpKX0sSW5saW5lRnJhZ21lbnQ6e2xlYXZlOih7dHlwZUNvbmRpdGlvbjplLGRpcmVjdGl2ZXM6dCxzZWxlY3Rpb25TZXQ6bn0pPT5wKFsiLi4uIixPKCJvbiAiLGUpLHAodCwiICIpLG5dLCIgIil9LEZyYWdtZW50RGVmaW5pdGlvbjp7bGVhdmU6KHtuYW1lOmUsdHlwZUNvbmRpdGlvbjp0LHZhcmlhYmxlRGVmaW5pdGlvbnM6bixkaXJlY3RpdmVzOmksc2VsZWN0aW9uU2V0OnJ9KT0+YGZyYWdtZW50ICR7ZX0ke08oIigiLHAobiwiLCAiKSwiKSIpfSBvbiAke3R9ICR7TygiIixwKGksIiAiKSwiICIpfWArcn0sSW50VmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxGbG9hdFZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sU3RyaW5nVmFsdWU6e2xlYXZlOih7dmFsdWU6ZSxibG9jazp0fSk9PnQ/bW4oZSk6Rm4oZSl9LEJvb2xlYW5WYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmU/InRydWUiOiJmYWxzZSJ9LE51bGxWYWx1ZTp7bGVhdmU6KCk9PiJudWxsIn0sRW51bVZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sTGlzdFZhbHVlOntsZWF2ZTooe3ZhbHVlczplfSk9PiJbIitwKGUsIiwgIikrIl0ifSxPYmplY3RWYWx1ZTp7bGVhdmU6KHtmaWVsZHM6ZX0pPT4ieyIrcChlLCIsICIpKyJ9In0sT2JqZWN0RmllbGQ6e2xlYXZlOih7bmFtZTplLHZhbHVlOnR9KT0+ZSsiOiAiK3R9LERpcmVjdGl2ZTp7bGVhdmU6KHtuYW1lOmUsYXJndW1lbnRzOnR9KT0+IkAiK2UrTygiKCIscCh0LCIsICIpLCIpIil9LE5hbWVkVHlwZTp7bGVhdmU6KHtuYW1lOmV9KT0+ZX0sTGlzdFR5cGU6e2xlYXZlOih7dHlwZTplfSk9PiJbIitlKyJdIn0sTm9uTnVsbFR5cGU6e2xlYXZlOih7dHlwZTplfSk9PmUrIiEifSxTY2hlbWFEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsZGlyZWN0aXZlczp0LG9wZXJhdGlvblR5cGVzOm59KT0+TygiIixlLGAKYCkrcChbInNjaGVtYSIscCh0LCIgIikscmUobildLCIgIil9LE9wZXJhdGlvblR5cGVEZWZpbml0aW9uOntsZWF2ZTooe29wZXJhdGlvbjplLHR5cGU6dH0pPT5lKyI6ICIrdH0sU2NhbGFyVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpufSk9Pk8oIiIsZSxgCmApK3AoWyJzY2FsYXIiLHQscChuLCIgIildLCIgIil9LE9iamVjdFR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGludGVyZmFjZXM6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KT0+TygiIixlLGAKYCkrcChbInR5cGUiLHQsTygiaW1wbGVtZW50cyAiLHAobiwiICYgIikpLHAoaSwiICIpLHJlKHIpXSwiICIpfSxGaWVsZERlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsYXJndW1lbnRzOm4sdHlwZTppLGRpcmVjdGl2ZXM6cn0pPT5PKCIiLGUsYApgKSt0KyhDdChuKT9PKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApOk8oIigiLHAobiwiLCAiKSwiKSIpKSsiOiAiK2krTygiICIscChyLCIgIikpfSxJbnB1dFZhbHVlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCx0eXBlOm4sZGVmYXVsdFZhbHVlOmksZGlyZWN0aXZlczpyfSk9Pk8oIiIsZSxgCmApK3AoW3QrIjogIituLE8oIj0gIixpKSxwKHIsIiAiKV0sIiAiKX0sSW50ZXJmYWNlVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pPT5PKCIiLGUsYApgKStwKFsiaW50ZXJmYWNlIix0LE8oImltcGxlbWVudHMgIixwKG4sIiAmICIpKSxwKGksIiAiKSxyZShyKV0sIiAiKX0sVW5pb25UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sdHlwZXM6aX0pPT5PKCIiLGUsYApgKStwKFsidW5pb24iLHQscChuLCIgIiksTygiPSAiLHAoaSwiIHwgIikpXSwiICIpfSxFbnVtVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLHZhbHVlczppfSk9Pk8oIiIsZSxgCmApK3AoWyJlbnVtIix0LHAobiwiICIpLHJlKGkpXSwiICIpfSxFbnVtVmFsdWVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bn0pPT5PKCIiLGUsYApgKStwKFt0LHAobiwiICIpXSwiICIpfSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5PKCIiLGUsYApgKStwKFsiaW5wdXQiLHQscChuLCIgIikscmUoaSldLCIgIil9LERpcmVjdGl2ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsYXJndW1lbnRzOm4scmVwZWF0YWJsZTppLGxvY2F0aW9uczpyfSk9Pk8oIiIsZSxgCmApKyJkaXJlY3RpdmUgQCIrdCsoQ3Qobik/TyhgKApgLENlKHAobixgCmApKSxgCilgKTpPKCIoIixwKG4sIiwgIiksIikiKSkrKGk/IiByZXBlYXRhYmxlIjoiIikrIiBvbiAiK3AociwiIHwgIil9LFNjaGVtYUV4dGVuc2lvbjp7bGVhdmU6KHtkaXJlY3RpdmVzOmUsb3BlcmF0aW9uVHlwZXM6dH0pPT5wKFsiZXh0ZW5kIHNjaGVtYSIscChlLCIgIikscmUodCldLCIgIil9LFNjYWxhclR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dH0pPT5wKFsiZXh0ZW5kIHNjYWxhciIsZSxwKHQsIiAiKV0sIiAiKX0sT2JqZWN0VHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsaW50ZXJmYWNlczp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5wKFsiZXh0ZW5kIHR5cGUiLGUsTygiaW1wbGVtZW50cyAiLHAodCwiICYgIikpLHAobiwiICIpLHJlKGkpXSwiICIpfSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxpbnRlcmZhY2VzOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9PnAoWyJleHRlbmQgaW50ZXJmYWNlIixlLE8oImltcGxlbWVudHMgIixwKHQsIiAmICIpKSxwKG4sIiAiKSxyZShpKV0sIiAiKX0sVW5pb25UeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsdHlwZXM6bn0pPT5wKFsiZXh0ZW5kIHVuaW9uIixlLHAodCwiICIpLE8oIj0gIixwKG4sIiB8ICIpKV0sIiAiKX0sRW51bVR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCx2YWx1ZXM6bn0pPT5wKFsiZXh0ZW5kIGVudW0iLGUscCh0LCIgIikscmUobildLCIgIil9LElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LGZpZWxkczpufSk9PnAoWyJleHRlbmQgaW5wdXQiLGUscCh0LCIgIikscmUobildLCIgIil9fTtmdW5jdGlvbiBwKGUsdD0iIil7dmFyIG47cmV0dXJuKG49ZT09bnVsbD92b2lkIDA6ZS5maWx0ZXIoaT0+aSkuam9pbih0KSkhPT1udWxsJiZuIT09dm9pZCAwP246IiJ9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIE8oYHsKYCxDZShwKGUsYApgKSksYAp9YCl9ZnVuY3Rpb24gTyhlLHQsbj0iIil7cmV0dXJuIHQhPW51bGwmJnQhPT0iIj9lK3QrbjoiIn1mdW5jdGlvbiBDZShlKXtyZXR1cm4gTygiICAiLGUucmVwbGFjZSgvXG4vZyxgCiAgYCkpfWZ1bmN0aW9uIEN0KGUpe3ZhciB0O3JldHVybih0PWU9PW51bGw/dm9pZCAwOmUuc29tZShuPT5uLmluY2x1ZGVzKGAKYCkpKSE9PW51bGwmJnQhPT12b2lkIDA/dDohMX1jb25zdCBSdD1lPT57dmFyIGkscjtsZXQgdDtjb25zdCBuPWUuZGVmaW5pdGlvbnMuZmlsdGVyKHM9PnMua2luZD09PSJPcGVyYXRpb25EZWZpbml0aW9uIik7cmV0dXJuIG4ubGVuZ3RoPT09MSYmKHQ9KHI9KGk9blswXSk9PW51bGw/dm9pZCAwOmkubmFtZSk9PW51bGw/dm9pZCAwOnIudmFsdWUpLHR9LEplPWU9PntpZih0eXBlb2YgZT09InN0cmluZyIpe2xldCBuO3RyeXtjb25zdCBpPUR0KGUpO249UnQoaSl9Y2F0Y2goaSl7fXJldHVybntxdWVyeTplLG9wZXJhdGlvbk5hbWU6bn19Y29uc3QgdD1SdChlKTtyZXR1cm57cXVlcnk6am4oZSksb3BlcmF0aW9uTmFtZTp0fX07Y2xhc3MgZGUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4pe2NvbnN0IGk9YCR7ZGUuZXh0cmFjdE1lc3NhZ2UodCl9OiAke0pTT04uc3RyaW5naWZ5KHtyZXNwb25zZTp0LHJlcXVlc3Q6bn0pfWA7c3VwZXIoaSksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZGUucHJvdG90eXBlKSx0aGlzLnJlc3BvbnNlPXQsdGhpcy5yZXF1ZXN0PW4sdHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPT0iZnVuY3Rpb24iJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGRlKX1zdGF0aWMgZXh0cmFjdE1lc3NhZ2UodCl7dmFyIG4saSxyO3JldHVybihyPShpPShuPXQuZXJyb3JzKT09bnVsbD92b2lkIDA6blswXSk9PW51bGw/dm9pZCAwOmkubWVzc2FnZSkhPW51bGw/cjpgR3JhcGhRTCBFcnJvciAoQ29kZTogJHt0LnN0YXR1c30pYH19dmFyIEhuPXR5cGVvZiBnbG9iYWxUaGlzIT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIj9nbG9iYWw6dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6e307ZnVuY3Rpb24gTHQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX12YXIgUWU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBzZWxmIT0idW5kZWZpbmVkIj9zZWxmOkhuLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7dGhpcy5mZXRjaD0hMSx0aGlzLkRPTUV4Y2VwdGlvbj1uLkRPTUV4Y2VwdGlvbn1yZXR1cm4gcy5wcm90b3R5cGU9bixuZXcgc30oKTsoZnVuY3Rpb24ocyl7KGZ1bmN0aW9uKG8pe3ZhciBjPXtzZWFyY2hQYXJhbXM6IlVSTFNlYXJjaFBhcmFtcyJpbiBzLGl0ZXJhYmxlOiJTeW1ib2wiaW4gcyYmIml0ZXJhdG9yImluIFN5bWJvbCxibG9iOiJGaWxlUmVhZGVyImluIHMmJiJCbG9iImluIHMmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChhKXtyZXR1cm4hMX19KCksZm9ybURhdGE6IkZvcm1EYXRhImluIHMsYXJyYXlCdWZmZXI6IkFycmF5QnVmZmVyImluIHN9O2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGEmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpfWlmKGMuYXJyYXlCdWZmZXIpdmFyIGQ9WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSx1PUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmQuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpPi0xfTtmdW5jdGlvbiB5KGEpe2lmKHR5cGVvZiBhIT0ic3RyaW5nIiYmKGE9U3RyaW5nKGEpKSwvW15hLXowLTlcLSMkJSYnKisuXl9gfH5dL2kudGVzdChhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZSIpO3JldHVybiBhLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gdihhKXtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoYT1TdHJpbmcoYSkpLGF9ZnVuY3Rpb24gVChhKXt2YXIgZj17bmV4dDpmdW5jdGlvbigpe3ZhciBfPWEuc2hpZnQoKTtyZXR1cm57ZG9uZTpfPT09dm9pZCAwLHZhbHVlOl99fX07cmV0dXJuIGMuaXRlcmFibGUmJihmW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gZn0pLGZ9ZnVuY3Rpb24gbShhKXt0aGlzLm1hcD17fSxhIGluc3RhbmNlb2YgbT9hLmZvckVhY2goZnVuY3Rpb24oZixfKXt0aGlzLmFwcGVuZChfLGYpfSx0aGlzKTpBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmdW5jdGlvbihmKXt0aGlzLmFwcGVuZChmWzBdLGZbMV0pfSx0aGlzKTphJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3RoaXMuYXBwZW5kKGYsYVtmXSl9LHRoaXMpfW0ucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGYpe2E9eShhKSxmPXYoZik7dmFyIF89dGhpcy5tYXBbYV07dGhpcy5tYXBbYV09Xz9fKyIsICIrZjpmfSxtLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMubWFwW3koYSldfSxtLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9eShhKSx0aGlzLmhhcyhhKT90aGlzLm1hcFthXTpudWxsfSxtLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KHkoYSkpfSxtLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxmKXt0aGlzLm1hcFt5KGEpXT12KGYpfSxtLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsZil7Zm9yKHZhciBfIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KF8pJiZhLmNhbGwoZix0aGlzLm1hcFtfXSxfLHRoaXMpfSxtLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihmLF8pe2EucHVzaChfKX0pLFQoYSl9LG0ucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZil7YS5wdXNoKGYpfSksVChhKX0sbS5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZixfKXthLnB1c2goW18sZl0pfSksVChhKX0sYy5pdGVyYWJsZSYmKG0ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09bS5wcm90b3R5cGUuZW50cmllcyk7ZnVuY3Rpb24gTihhKXtpZihhLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7YS5ib2R5VXNlZD0hMH1mdW5jdGlvbiBSKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLF8pe2Eub25sb2FkPWZ1bmN0aW9uKCl7ZihhLnJlc3VsdCl9LGEub25lcnJvcj1mdW5jdGlvbigpe18oYS5lcnJvcil9fSl9ZnVuY3Rpb24gTChhKXt2YXIgZj1uZXcgRmlsZVJlYWRlcixfPVIoZik7cmV0dXJuIGYucmVhZEFzQXJyYXlCdWZmZXIoYSksX31mdW5jdGlvbiBxKGEpe3ZhciBmPW5ldyBGaWxlUmVhZGVyLF89UihmKTtyZXR1cm4gZi5yZWFkQXNUZXh0KGEpLF99ZnVuY3Rpb24gZyhhKXtmb3IodmFyIGY9bmV3IFVpbnQ4QXJyYXkoYSksXz1uZXcgQXJyYXkoZi5sZW5ndGgpLFM9MDtTPGYubGVuZ3RoO1MrKylfW1NdPVN0cmluZy5mcm9tQ2hhckNvZGUoZltTXSk7cmV0dXJuIF8uam9pbigiIil9ZnVuY3Rpb24gRShhKXtpZihhLnNsaWNlKXJldHVybiBhLnNsaWNlKDApO3ZhciBmPW5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7cmV0dXJuIGYuc2V0KG5ldyBVaW50OEFycmF5KGEpKSxmLmJ1ZmZlcn1mdW5jdGlvbiB3KCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oYSl7dGhpcy5fYm9keUluaXQ9YSxhP3R5cGVvZiBhPT0ic3RyaW5nIj90aGlzLl9ib2R5VGV4dD1hOmMuYmxvYiYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5QmxvYj1hOmMuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlGb3JtRGF0YT1hOmMuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keVRleHQ9YS50b1N0cmluZygpOmMuYXJyYXlCdWZmZXImJmMuYmxvYiYmaChhKT8odGhpcy5fYm9keUFycmF5QnVmZmVyPUUoYS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk6Yy5hcnJheUJ1ZmZlciYmKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpfHx1KGEpKT90aGlzLl9ib2R5QXJyYXlCdWZmZXI9RShhKTp0aGlzLl9ib2R5VGV4dD1hPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTp0aGlzLl9ib2R5VGV4dD0iIix0aGlzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKXx8KHR5cGVvZiBhPT0ic3RyaW5nIj90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOmMuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxjLmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgYT1OKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Tih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihMKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBhPU4odGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gcSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sYy5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbih4KX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfXZhciBrPVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07ZnVuY3Rpb24gUChhKXt2YXIgZj1hLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGsuaW5kZXhPZihmKT4tMT9mOmF9ZnVuY3Rpb24gSShhLGYpe2Y9Znx8e307dmFyIF89Zi5ib2R5O2lmKGEgaW5zdGFuY2VvZiBJKXtpZihhLmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpO3RoaXMudXJsPWEudXJsLHRoaXMuY3JlZGVudGlhbHM9YS5jcmVkZW50aWFscyxmLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG0oYS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9YS5tZXRob2QsdGhpcy5tb2RlPWEubW9kZSx0aGlzLnNpZ25hbD1hLnNpZ25hbCwhXyYmYS5fYm9keUluaXQhPW51bGwmJihfPWEuX2JvZHlJbml0LGEuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGEpO2lmKHRoaXMuY3JlZGVudGlhbHM9Zi5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8InNhbWUtb3JpZ2luIiwoZi5oZWFkZXJzfHwhdGhpcy5oZWFkZXJzKSYmKHRoaXMuaGVhZGVycz1uZXcgbShmLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1QKGYubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIpLHRoaXMubW9kZT1mLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnNpZ25hbD1mLnNpZ25hbHx8dGhpcy5zaWduYWwsdGhpcy5yZWZlcnJlcj1udWxsLCh0aGlzLm1ldGhvZD09PSJHRVQifHx0aGlzLm1ldGhvZD09PSJIRUFEIikmJl8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShfKX1JLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSSh0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9O2Z1bmN0aW9uIHgoYSl7dmFyIGY9bmV3IEZvcm1EYXRhO3JldHVybiBhLnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24oXyl7aWYoXyl7dmFyIFM9Xy5zcGxpdCgiPSIpLEM9Uy5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxBPVMuam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTtmLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQoQyksZGVjb2RlVVJJQ29tcG9uZW50KEEpKX19KSxmfWZ1bmN0aW9uIHooYSl7dmFyIGY9bmV3IG0sXz1hLnJlcGxhY2UoL1xyP1xuW1x0IF0rL2csIiAiKTtyZXR1cm4gXy5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3ZhciBDPVMuc3BsaXQoIjoiKSxBPUMuc2hpZnQoKS50cmltKCk7aWYoQSl7dmFyIEs9Qy5qb2luKCI6IikudHJpbSgpO2YuYXBwZW5kKEEsSyl9fSksZn13LmNhbGwoSS5wcm90b3R5cGUpO2Z1bmN0aW9uIFYoYSxmKXtmfHwoZj17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz1mLnN0YXR1cz09PXZvaWQgMD8yMDA6Zi5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGY/Zi5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBtKGYuaGVhZGVycyksdGhpcy51cmw9Zi51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGEpfXcuY2FsbChWLnByb3RvdHlwZSksVi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBtKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LFYuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVihudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIGEudHlwZT0iZXJyb3IiLGF9O3ZhciBIPVszMDEsMzAyLDMwMywzMDcsMzA4XTtWLnJlZGlyZWN0PWZ1bmN0aW9uKGEsZil7aWYoSC5pbmRleE9mKGYpPT09LTEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IFYobnVsbCx7c3RhdHVzOmYsaGVhZGVyczp7bG9jYXRpb246YX19KX0sby5ET01FeGNlcHRpb249cy5ET01FeGNlcHRpb247dHJ5e25ldyBvLkRPTUV4Y2VwdGlvbn1jYXRjaChhKXtvLkRPTUV4Y2VwdGlvbj1mdW5jdGlvbihmLF8pe3RoaXMubWVzc2FnZT1mLHRoaXMubmFtZT1fO3ZhciBTPUVycm9yKGYpO3RoaXMuc3RhY2s9Uy5zdGFja30sby5ET01FeGNlcHRpb24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I9by5ET01FeGNlcHRpb259ZnVuY3Rpb24gWChhLGYpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfLFMpe3ZhciBDPW5ldyBJKGEsZik7aWYoQy5zaWduYWwmJkMuc2lnbmFsLmFib3J0ZWQpcmV0dXJuIFMobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgQT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gSygpe0EuYWJvcnQoKX1BLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBqPXtzdGF0dXM6QS5zdGF0dXMsc3RhdHVzVGV4dDpBLnN0YXR1c1RleHQsaGVhZGVyczp6KEEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07ai51cmw9InJlc3BvbnNlVVJMImluIEE/QS5yZXNwb25zZVVSTDpqLmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIFc9InJlc3BvbnNlImluIEE/QS5yZXNwb25zZTpBLnJlc3BvbnNlVGV4dDtfKG5ldyBWKFcsaikpfSxBLm9uZXJyb3I9ZnVuY3Rpb24oKXtTKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LEEub250aW1lb3V0PWZ1bmN0aW9uKCl7UyhuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxBLm9uYWJvcnQ9ZnVuY3Rpb24oKXtTKG5ldyBvLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LEEub3BlbihDLm1ldGhvZCxDLnVybCwhMCksQy5jcmVkZW50aWFscz09PSJpbmNsdWRlIj9BLndpdGhDcmVkZW50aWFscz0hMDpDLmNyZWRlbnRpYWxzPT09Im9taXQiJiYoQS53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4gQSYmYy5ibG9iJiYoQS5yZXNwb25zZVR5cGU9ImJsb2IiKSxDLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihqLFcpe0Euc2V0UmVxdWVzdEhlYWRlcihXLGopfSksQy5zaWduYWwmJihDLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsSyksQS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtBLnJlYWR5U3RhdGU9PT00JiZDLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsSyl9KSxBLnNlbmQodHlwZW9mIEMuX2JvZHlJbml0PT0idW5kZWZpbmVkIj9udWxsOkMuX2JvZHlJbml0KX0pfXJldHVybiBYLnBvbHlmaWxsPSEwLHMuZmV0Y2h8fChzLmZldGNoPVgscy5IZWFkZXJzPW0scy5SZXF1ZXN0PUkscy5SZXNwb25zZT1WKSxvLkhlYWRlcnM9bSxvLlJlcXVlc3Q9SSxvLlJlc3BvbnNlPVYsby5mZXRjaD1YLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxvfSkoe30pfSkoaSksaS5mZXRjaC5wb255ZmlsbD0hMCxkZWxldGUgaS5mZXRjaC5wb2x5ZmlsbDt2YXIgcj1pO3Q9ci5mZXRjaCx0LmRlZmF1bHQ9ci5mZXRjaCx0LmZldGNoPXIuZmV0Y2gsdC5IZWFkZXJzPXIuSGVhZGVycyx0LlJlcXVlc3Q9ci5SZXF1ZXN0LHQuUmVzcG9uc2U9ci5SZXNwb25zZSxlLmV4cG9ydHM9dH0pKFFlLFFlLmV4cG9ydHMpO3ZhciBYZT1RZS5leHBvcnRzLFJlPUx0KFhlKSxZbj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0OlJlfSk7Y29uc3QgcGU9ZT0+e2xldCB0PXt9O3JldHVybiBlJiYodHlwZW9mIEhlYWRlcnMhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSGVhZGVyc3x8WW4mJlhlLkhlYWRlcnMmJmUgaW5zdGFuY2VvZiBYZS5IZWFkZXJzP3Q9JChlKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoW24saV0pPT57biYmaSE9PXZvaWQgMCYmKHRbbl09aSl9KTp0PWUpLHR9LFB0PWU9PmUucmVwbGFjZSgvKFtccyxdfCNbXlxuXHJdKykrL2csIiAiKS50cmltKCksSm49ZT0+e2lmKCFBcnJheS5pc0FycmF5KGUucXVlcnkpKXtjb25zdCBpPWUscj1bYHF1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFB0KGkucXVlcnkpKX1gXTtyZXR1cm4gZS52YXJpYWJsZXMmJnIucHVzaChgdmFyaWFibGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuanNvblNlcmlhbGl6ZXIuc3RyaW5naWZ5KGkudmFyaWFibGVzKSl9YCksaS5vcGVyYXRpb25OYW1lJiZyLnB1c2goYG9wZXJhdGlvbk5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoaS5vcGVyYXRpb25OYW1lKX1gKSxyLmpvaW4oIiYiKX1pZih0eXBlb2YgZS52YXJpYWJsZXMhPSJ1bmRlZmluZWQiJiYhQXJyYXkuaXNBcnJheShlLnZhcmlhYmxlcykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHF1ZXJ5IHdpdGggZ2l2ZW4gdmFyaWFibGUgdHlwZSwgYXJyYXkgZXhwZWN0ZWQiKTtjb25zdCB0PWUsbj1lLnF1ZXJ5LnJlZHVjZSgoaSxyLHMpPT4oaS5wdXNoKHtxdWVyeTpQdChyKSx2YXJpYWJsZXM6dC52YXJpYWJsZXM/dC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkodC52YXJpYWJsZXNbc10pOnZvaWQgMH0pLGkpLFtdKTtyZXR1cm5gcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQodC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkobikpfWB9LFFuPWU9PnQ9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe3ZhciBOO2NvbnN0e3VybDpuLHF1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGZldGNoOm8sZmV0Y2hPcHRpb25zOmMsbWlkZGxld2FyZTpofT10LGQ9RCh7fSx0LmhlYWRlcnMpO2xldCB1PSIiLHk7ZT09PSJQT1NUIj8oeT1XbihpLHIscyxjLmpzb25TZXJpYWxpemVyKSx0eXBlb2YgeT09InN0cmluZyImJihkWyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24vanNvbiIpKTp1PUpuKHtxdWVyeTppLHZhcmlhYmxlczpyLG9wZXJhdGlvbk5hbWU6cyxqc29uU2VyaWFsaXplcjooTj1jLmpzb25TZXJpYWxpemVyKSE9bnVsbD9OOkZ9KTtjb25zdCB2PUQoe21ldGhvZDplLGhlYWRlcnM6ZCxib2R5Onl9LGMpO2xldCBUPW4sbT12O2lmKGgpe2NvbnN0IFI9eWllbGQgUHJvbWlzZS5yZXNvbHZlKGgoVWUoRCh7fSx2KSx7dXJsOm4sb3BlcmF0aW9uTmFtZTpzLHZhcmlhYmxlczpyfSkpKSx7dXJsOnF9PVIsZz12ZShSLFsidXJsIl0pO1Q9cSxtPWd9cmV0dXJuIHUmJihUPWAke1R9PyR7dX1gKSx5aWVsZCBvKFQsbSl9KTtjbGFzcyBYbntjb25zdHJ1Y3Rvcih0LG49e30pe3RoaXMudXJsPXQsdGhpcy5yZXF1ZXN0Q29uZmlnPW4sdGhpcy5yYXdSZXF1ZXN0PSguLi5pKT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3RbcixzLG9dPWksYz1PZShyLHMsbyksUj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6aCxmZXRjaDpkPVJlLG1ldGhvZDp1PSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTp5LHJlc3BvbnNlTWlkZGxld2FyZTp2fT1SLFQ9dmUoUixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6bX09dGhpcztjLnNpZ25hbCE9PXZvaWQgMCYmKFQuc2lnbmFsPWMuc2lnbmFsKTtjb25zdHtvcGVyYXRpb25OYW1lOk59PUplKGMucXVlcnkpO3JldHVybiBXZSh7dXJsOm0scXVlcnk6Yy5xdWVyeSx2YXJpYWJsZXM6Yy52YXJpYWJsZXMsaGVhZGVyczpEKEQoe30scGUoWmUoaCkpKSxwZShjLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTpOLGZldGNoOmQsbWV0aG9kOnUsZmV0Y2hPcHRpb25zOlQsbWlkZGxld2FyZTp5fSkudGhlbihMPT4odiYmdihMKSxMKSkuY2F0Y2goTD0+e3Rocm93IHYmJnYoTCksTH0pfSl9cmVxdWVzdCh0LC4uLm4pe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtpLHJdPW4scz1lZSh0LGksciksTj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6byxmZXRjaDpjPVJlLG1ldGhvZDpoPSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTpkLHJlc3BvbnNlTWlkZGxld2FyZTp1fT1OLHk9dmUoTixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6dn09dGhpcztzLnNpZ25hbCE9PXZvaWQgMCYmKHkuc2lnbmFsPXMuc2lnbmFsKTtjb25zdHtxdWVyeTpULG9wZXJhdGlvbk5hbWU6bX09SmUocy5kb2N1bWVudCk7cmV0dXJuIFdlKHt1cmw6dixxdWVyeTpULHZhcmlhYmxlczpzLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShaZShvKSkpLHBlKHMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOm0sZmV0Y2g6YyxtZXRob2Q6aCxmZXRjaE9wdGlvbnM6eSxtaWRkbGV3YXJlOmR9KS50aGVuKFI9Pih1JiZ1KFIpLFIuZGF0YSkpLmNhdGNoKFI9Pnt0aHJvdyB1JiZ1KFIpLFJ9KX0pfWJhdGNoUmVxdWVzdHModCxuKXt2YXIgZDtjb25zdCBpPVZlKHQsbiksaD10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6cn09aCxzPXZlKGgsWyJoZWFkZXJzIl0pO2kuc2lnbmFsIT09dm9pZCAwJiYocy5zaWduYWw9aS5zaWduYWwpO2NvbnN0IG89aS5kb2N1bWVudHMubWFwKCh7ZG9jdW1lbnQ6dX0pPT5KZSh1KS5xdWVyeSksYz1pLmRvY3VtZW50cy5tYXAoKHt2YXJpYWJsZXM6dX0pPT51KTtyZXR1cm4gV2Uoe3VybDp0aGlzLnVybCxxdWVyeTpvLHZhcmlhYmxlczpjLGhlYWRlcnM6RChEKHt9LHBlKFplKHIpKSkscGUoaS5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6dm9pZCAwLGZldGNoOihkPXRoaXMucmVxdWVzdENvbmZpZy5mZXRjaCkhPW51bGw/ZDpSZSxtZXRob2Q6dGhpcy5yZXF1ZXN0Q29uZmlnLm1ldGhvZHx8IlBPU1QiLGZldGNoT3B0aW9uczpzLG1pZGRsZXdhcmU6dGhpcy5yZXF1ZXN0Q29uZmlnLnJlcXVlc3RNaWRkbGV3YXJlfSkudGhlbih1PT4odGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1LmRhdGEpKS5jYXRjaCh1PT57dGhyb3cgdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1fSl9c2V0SGVhZGVycyh0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q29uZmlnLmhlYWRlcnM9dCx0aGlzfXNldEhlYWRlcih0LG4pe2NvbnN0e2hlYWRlcnM6aX09dGhpcy5yZXF1ZXN0Q29uZmlnO3JldHVybiBpP2lbdF09bjp0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz17W3RdOm59LHRoaXN9c2V0RW5kcG9pbnQodCl7cmV0dXJuIHRoaXMudXJsPXQsdGhpc319Y29uc3QgV2U9ZT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIHUseTtjb25zdHtxdWVyeTp0LHZhcmlhYmxlczpuLGZldGNoT3B0aW9uczppfT1lLHI9UW4oQigodT1lLm1ldGhvZCkhPW51bGw/dToicG9zdCIpKSxzPUFycmF5LmlzQXJyYXkoZS5xdWVyeSksbz15aWVsZCByKGUpLGM9eWllbGQgWm4obywoeT1pLmpzb25TZXJpYWxpemVyKSE9bnVsbD95OkYpLGg9QXJyYXkuaXNBcnJheShjKT8hYy5zb21lKCh7ZGF0YTpUfSk9PiFUKTohIWMuZGF0YSxkPUFycmF5LmlzQXJyYXkoYyl8fCFjLmVycm9yc3x8QXJyYXkuaXNBcnJheShjLmVycm9ycykmJiFjLmVycm9ycy5sZW5ndGh8fGkuZXJyb3JQb2xpY3k9PT0iYWxsInx8aS5lcnJvclBvbGljeT09PSJpZ25vcmUiO2lmKG8ub2smJmQmJmgpe2NvbnN0IHY9KEFycmF5LmlzQXJyYXkoYyksYykse2Vycm9yczpUfT12LG09dmUodixbImVycm9ycyJdKSxOPWkuZXJyb3JQb2xpY3k9PT0iaWdub3JlIj9tOmM7cmV0dXJuIFVlKEQoe30scz97ZGF0YTpOfTpOKSx7aGVhZGVyczpvLmhlYWRlcnMsc3RhdHVzOm8uc3RhdHVzfSl9ZWxzZXtjb25zdCBUPXR5cGVvZiBjPT0ic3RyaW5nIj97ZXJyb3I6Y306Yzt0aHJvdyBuZXcgZGUoVWUoRCh7fSxUKSx7c3RhdHVzOm8uc3RhdHVzLGhlYWRlcnM6by5oZWFkZXJzfSkse3F1ZXJ5OnQsdmFyaWFibGVzOm59KX19KSxXbj0oZSx0LG4saSk9Pntjb25zdCByPWkhPW51bGw/aTpGO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiByLnN0cmluZ2lmeSh7cXVlcnk6ZSx2YXJpYWJsZXM6dCxvcGVyYXRpb25OYW1lOm59KTtpZih0eXBlb2YgdCE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHM9ZS5yZWR1Y2UoKG8sYyxoKT0+KG8ucHVzaCh7cXVlcnk6Yyx2YXJpYWJsZXM6dD90W2hdOnZvaWQgMH0pLG8pLFtdKTtyZXR1cm4gci5zdHJpbmdpZnkocyl9LFpuPShlLHQpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgbjtyZXR1cm4gZS5oZWFkZXJzLmZvckVhY2goKGkscik9PntyLnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIiYmKG49aSl9KSxuJiYobi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKXx8bi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2dyYXBocWwranNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbC1yZXNwb25zZStqc29uIikpP3QucGFyc2UoeWllbGQgZS50ZXh0KCkpOmUudGV4dCgpfSksWmU9ZT0+dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSgpOmU7dmFyIEtlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt0PWUuZXhwb3J0cz1uLHQuZ2V0U2VyaWFsaXplPWk7ZnVuY3Rpb24gbihyLHMsbyxjKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixpKHMsYyksbyl9ZnVuY3Rpb24gaShyLHMpe3ZhciBvPVtdLGM9W107cmV0dXJuIHM9PW51bGwmJihzPWZ1bmN0aW9uKGgsZCl7cmV0dXJuIG9bMF09PT1kPyJbQ2lyY3VsYXIgfl0iOiJbQ2lyY3VsYXIgfi4iK2Muc2xpY2UoMCxvLmluZGV4T2YoZCkpLmpvaW4oIi4iKSsiXSJ9KSxmdW5jdGlvbihoLGQpe2lmKG8ubGVuZ3RoPjApe3ZhciB1PW8uaW5kZXhPZih0aGlzKTt+dT9vLnNwbGljZSh1KzEpOm8ucHVzaCh0aGlzKSx+dT9jLnNwbGljZSh1LDEvMCxoKTpjLnB1c2goaCksfm8uaW5kZXhPZihkKSYmKGQ9cy5jYWxsKHRoaXMsaCxkKSl9ZWxzZSBvLnB1c2goZCk7cmV0dXJuIHI9PW51bGw/ZDpyLmNhbGwodGhpcyxoLGQpfX19KShLZSxLZS5leHBvcnRzKTt2YXIgS249S2UuZXhwb3J0cyxtZT1MdChLbik7Y29uc3QgRnQ9MWUzKjE1O3ZhciBMZT1mdW5jdGlvbigpe3JldHVybiBMZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0xLHI9YXJndW1lbnRzLmxlbmd0aDtpPHI7aSsrKXtuPWFyZ3VtZW50c1tpXTtmb3IodmFyIHMgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixzKSYmKHRbc109bltzXSl9cmV0dXJuIHR9LExlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dHlwZW9mIFN1cHByZXNzZWRFcnJvcj09ImZ1bmN0aW9uIiYmU3VwcHJlc3NlZEVycm9yO3ZhciBQZT1uZXcgTWFwLGV0PW5ldyBNYXAsTXQ9ITAsRmU9ITE7ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xzLF0rL2csIiAiKS50cmltKCl9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIEJ0KGUuc291cmNlLmJvZHkuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpKX1mdW5jdGlvbiB0cihlKXt2YXIgdD1uZXcgU2V0LG49W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLmtpbmQ9PT0iRnJhZ21lbnREZWZpbml0aW9uIil7dmFyIHI9aS5uYW1lLnZhbHVlLHM9ZXIoaS5sb2MpLG89ZXQuZ2V0KHIpO28mJiFvLmhhcyhzKT9NdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBmcmFnbWVudCB3aXRoIG5hbWUgIityK2AgYWxyZWFkeSBleGlzdHMuCmdyYXBocWwtdGFnIGVuZm9yY2VzIGFsbCBmcmFnbWVudCBuYW1lcyBhY3Jvc3MgeW91ciBhcHBsaWNhdGlvbiB0byBiZSB1bmlxdWU7IHJlYWQgbW9yZSBhYm91dAp0aGlzIGluIHRoZSBkb2NzOiBodHRwOi8vZGV2LmFwb2xsb2RhdGEuY29tL2NvcmUvZnJhZ21lbnRzLmh0bWwjdW5pcXVlLW5hbWVzYCk6b3x8ZXQuc2V0KHIsbz1uZXcgU2V0KSxvLmFkZChzKSx0LmhhcyhzKXx8KHQuYWRkKHMpLG4ucHVzaChpKSl9ZWxzZSBuLnB1c2goaSl9KSxMZShMZSh7fSxlKSx7ZGVmaW5pdGlvbnM6bn0pfWZ1bmN0aW9uIG5yKGUpe3ZhciB0PW5ldyBTZXQoZS5kZWZpbml0aW9ucyk7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubG9jJiZkZWxldGUgaS5sb2MsT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgcz1pW3JdO3MmJnR5cGVvZiBzPT0ib2JqZWN0IiYmdC5hZGQocyl9KX0pO3ZhciBuPWUubG9jO3JldHVybiBuJiYoZGVsZXRlIG4uc3RhcnRUb2tlbixkZWxldGUgbi5lbmRUb2tlbiksZX1mdW5jdGlvbiBycihlKXt2YXIgdD1CdChlKTtpZighUGUuaGFzKHQpKXt2YXIgbj1EdChlLHtleHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpGZSxhbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzOkZlfSk7aWYoIW58fG4ua2luZCE9PSJEb2N1bWVudCIpdGhyb3cgbmV3IEVycm9yKCJOb3QgYSB2YWxpZCBHcmFwaFFMIGRvY3VtZW50LiIpO1BlLnNldCh0LG5yKHRyKG4pKSl9cmV0dXJuIFBlLmdldCh0KX1mdW5jdGlvbiBRKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9W2VdKTt2YXIgaT1lWzBdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocixzKXtyJiZyLmtpbmQ9PT0iRG9jdW1lbnQiP2krPXIubG9jLnNvdXJjZS5ib2R5OmkrPXIsaSs9ZVtzKzFdfSkscnIoaSl9ZnVuY3Rpb24gaXIoKXtQZS5jbGVhcigpLGV0LmNsZWFyKCl9ZnVuY3Rpb24gc3IoKXtNdD0hMX1mdW5jdGlvbiBvcigpe0ZlPSEwfWZ1bmN0aW9uIGFyKCl7RmU9ITF9dmFyIE5lPXtncWw6USxyZXNldENhY2hlczppcixkaXNhYmxlRnJhZ21lbnRXYXJuaW5nczpzcixlbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpvcixkaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM6YXJ9OyhmdW5jdGlvbihlKXtlLmdxbD1OZS5ncWwsZS5yZXNldENhY2hlcz1OZS5yZXNldENhY2hlcyxlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzPU5lLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzLGUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9TmUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXMsZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9TmUuZGlzYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzfSkoUXx8KFE9e30pKSxRLmRlZmF1bHQ9UTtjb25zdCAkdD1RYAoJZnJhZ21lbnQgTWF0Y2hQYXJ0cyBvbiBNYXRjaENvbmZpZyB7CgkJcmVnZXhWYWx1ZQoJCW1hdGNoVmFsdWUKCX0KYCxjcj1RYAoJbXV0YXRpb24gUHVzaFBheWxvYWQoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IElEIQoJCSRldmVudHM6IFJlcGxheUV2ZW50c0lucHV0IQoJCSRtZXNzYWdlczogU3RyaW5nIQoJCSRyZXNvdXJjZXM6IFN0cmluZyEKCQkkd2ViX3NvY2tldF9ldmVudHM6IFN0cmluZyEKCQkkZXJyb3JzOiBbRXJyb3JPYmplY3RJbnB1dF0hCgkJJGlzX2JlYWNvbjogQm9vbGVhbgoJCSRoYXNfc2Vzc2lvbl91bmxvYWRlZDogQm9vbGVhbgoJCSRoaWdobGlnaHRfbG9nczogU3RyaW5nCgkpIHsKCQlwdXNoUGF5bG9hZCgKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwYXlsb2FkX2lkOiAkcGF5bG9hZF9pZAoJCQlldmVudHM6ICRldmVudHMKCQkJbWVzc2FnZXM6ICRtZXNzYWdlcwoJCQlyZXNvdXJjZXM6ICRyZXNvdXJjZXMKCQkJd2ViX3NvY2tldF9ldmVudHM6ICR3ZWJfc29ja2V0X2V2ZW50cwoJCQllcnJvcnM6ICRlcnJvcnMKCQkJaXNfYmVhY29uOiAkaXNfYmVhY29uCgkJCWhhc19zZXNzaW9uX3VubG9hZGVkOiAkaGFzX3Nlc3Npb25fdW5sb2FkZWQKCQkJaGlnaGxpZ2h0X2xvZ3M6ICRoaWdobGlnaHRfbG9ncwoJCSkKCX0KYCx1cj1RYAoJbXV0YXRpb24gUHVzaFNlc3Npb25FdmVudHMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IEludDY0SUQhCgkJJGRhdGE6IFN0cmluZyEKCSkgewoJCXB1c2hTZXNzaW9uRXZlbnRzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWRhdGE6ICRkYXRhCgkJKQoJfQpgLGxyPVFgCgltdXRhdGlvbiBpZGVudGlmeVNlc3Npb24oCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfaWRlbnRpZmllcjogU3RyaW5nIQoJCSR1c2VyX29iamVjdDogQW55CgkpIHsKCQlpZGVudGlmeVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9pZGVudGlmaWVyOiAkdXNlcl9pZGVudGlmaWVyCgkJCXVzZXJfb2JqZWN0OiAkdXNlcl9vYmplY3QKCQkpCgl9CmAsaHI9UWAKCW11dGF0aW9uIGFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRwcm9wZXJ0aWVzX29iamVjdDogQW55CgkpIHsKCQlhZGRTZXNzaW9uUHJvcGVydGllcygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwcm9wZXJ0aWVzX29iamVjdDogJHByb3BlcnRpZXNfb2JqZWN0CgkJKQoJfQpgLGZyPVFgCgltdXRhdGlvbiBwdXNoTWV0cmljcygkbWV0cmljczogW01ldHJpY0lucHV0XSEpIHsKCQlwdXNoTWV0cmljcyhtZXRyaWNzOiAkbWV0cmljcykKCX0KYCxkcj1RYAoJbXV0YXRpb24gYWRkU2Vzc2lvbkZlZWRiYWNrKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSR1c2VyX25hbWU6IFN0cmluZwoJCSR1c2VyX2VtYWlsOiBTdHJpbmcKCQkkdmVyYmF0aW06IFN0cmluZyEKCQkkdGltZXN0YW1wOiBUaW1lc3RhbXAhCgkpIHsKCQlhZGRTZXNzaW9uRmVlZGJhY2soCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9uYW1lOiAkdXNlcl9uYW1lCgkJCXVzZXJfZW1haWw6ICR1c2VyX2VtYWlsCgkJCXZlcmJhdGltOiAkdmVyYmF0aW0KCQkJdGltZXN0YW1wOiAkdGltZXN0YW1wCgkJKQoJfQpgLHByPVFgCgltdXRhdGlvbiBpbml0aWFsaXplU2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkc2Vzc2lvbl9rZXk6IFN0cmluZwoJCSRvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogU3RyaW5nIQoJCSRlbmFibGVfc3RyaWN0X3ByaXZhY3k6IEJvb2xlYW4hCgkJJHByaXZhY3lfc2V0dGluZzogU3RyaW5nIQoJCSRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6IEJvb2xlYW4hCgkJJGNsaWVudFZlcnNpb246IFN0cmluZyEKCQkkZmlyc3Rsb2FkVmVyc2lvbjogU3RyaW5nIQoJCSRjbGllbnRDb25maWc6IFN0cmluZyEKCQkkZW52aXJvbm1lbnQ6IFN0cmluZyEKCQkkaWQ6IFN0cmluZyEKCQkkYXBwVmVyc2lvbjogU3RyaW5nCgkJJHNlcnZpY2VOYW1lOiBTdHJpbmchCgkJJGNsaWVudF9pZDogU3RyaW5nIQoJCSRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiBbU3RyaW5nIV0KCQkkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZzogQm9vbGVhbgoJKSB7CgkJaW5pdGlhbGl6ZVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJc2Vzc2lvbl9rZXk6ICRzZXNzaW9uX2tleQoJCQlvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkCgkJCWVuYWJsZV9zdHJpY3RfcHJpdmFjeTogJGVuYWJsZV9zdHJpY3RfcHJpdmFjeQoJCQllbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6ICRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHMKCQkJY2xpZW50VmVyc2lvbjogJGNsaWVudFZlcnNpb24KCQkJZmlyc3Rsb2FkVmVyc2lvbjogJGZpcnN0bG9hZFZlcnNpb24KCQkJY2xpZW50Q29uZmlnOiAkY2xpZW50Q29uZmlnCgkJCWVudmlyb25tZW50OiAkZW52aXJvbm1lbnQKCQkJYXBwVmVyc2lvbjogJGFwcFZlcnNpb24KCQkJc2VydmljZU5hbWU6ICRzZXJ2aWNlTmFtZQoJCQlmaW5nZXJwcmludDogJGlkCgkJCWNsaWVudF9pZDogJGNsaWVudF9pZAoJCQluZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiAkbmV0d29ya19yZWNvcmRpbmdfZG9tYWlucwoJCQlkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiAkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZwoJCQlwcml2YWN5X3NldHRpbmc6ICRwcml2YWN5X3NldHRpbmcKCQkpIHsKCQkJc2VjdXJlX2lkCgkJCXByb2plY3RfaWQKCQkJc2FtcGxpbmcgewoJCQkJc3BhbnMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQkJZXZlbnRzIHsKCQkJCQkJbmFtZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCQlrZXkgewoJCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJCX0KCQkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJCWxvZ3MgewoJCQkJCW1lc3NhZ2UgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlzYW1wbGluZ1JhdGlvCgkJCQl9CgkJCX0KCQl9Cgl9CgkkeyR0fQpgLG1yPVFgCglxdWVyeSBJZ25vcmUoJGlkOiBJRCEpIHsKCQlpZ25vcmUoaWQ6ICRpZCkKCX0KYCx5cj1RYAoJcXVlcnkgR2V0U2FtcGxpbmdDb25maWcoJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchKSB7CgkJc2FtcGxpbmcob3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6ICRvcmdhbml6YXRpb25fdmVyYm9zZV9pZCkgewoJCQlzcGFucyB7CgkJCQluYW1lIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlhdHRyaWJ1dGVzIHsKCQkJCQlrZXkgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQl9CgkJCQlldmVudHMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlzYW1wbGluZ1JhdGlvCgkJCX0KCQkJbG9ncyB7CgkJCQltZXNzYWdlIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlzZXZlcml0eVRleHQgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCX0KCX0KCSR7JHR9CmAsZ3I9KGUsdCxuLGkpPT5lKCk7ZnVuY3Rpb24gdnIoZSx0PWdyKXtyZXR1cm57UHVzaFBheWxvYWQobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoY3IsbixEKEQoe30saSkscikpLCJQdXNoUGF5bG9hZCIsIm11dGF0aW9uIixuKX0sUHVzaFNlc3Npb25FdmVudHMobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QodXIsbixEKEQoe30saSkscikpLCJQdXNoU2Vzc2lvbkV2ZW50cyIsIm11dGF0aW9uIixuKX0saWRlbnRpZnlTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGxyLG4sRChEKHt9LGkpLHIpKSwiaWRlbnRpZnlTZXNzaW9uIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uUHJvcGVydGllcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChocixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25Qcm9wZXJ0aWVzIiwibXV0YXRpb24iLG4pfSxwdXNoTWV0cmljcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChmcixuLEQoRCh7fSxpKSxyKSksInB1c2hNZXRyaWNzIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uRmVlZGJhY2sobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZHIsbixEKEQoe30saSkscikpLCJhZGRTZXNzaW9uRmVlZGJhY2siLCJtdXRhdGlvbiIsbil9LGluaXRpYWxpemVTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KHByLG4sRChEKHt9LGkpLHIpKSwiaW5pdGlhbGl6ZVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LElnbm9yZShuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChtcixuLEQoRCh7fSxpKSxyKSksIklnbm9yZSIsInF1ZXJ5IixuKX0sR2V0U2FtcGxpbmdDb25maWcobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoeXIsbixEKEQoe30saSkscikpLCJHZXRTYW1wbGluZ0NvbmZpZyIsInF1ZXJ5IixuKX19fXZhciB0ZT1VaW50OEFycmF5LG5lPVVpbnQxNkFycmF5LHR0PUludDMyQXJyYXksbnQ9bmV3IHRlKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxydD1uZXcgdGUoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksVXQ9bmV3IHRlKFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksVnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bmV3IG5lKDMxKSxpPTA7aTwzMTsrK2kpbltpXT10Kz0xPDxlW2ktMV07Zm9yKHZhciByPW5ldyB0dChuWzMwXSksaT0xO2k8MzA7KytpKWZvcih2YXIgcz1uW2ldO3M8bltpKzFdOysrcylyW3NdPXMtbltpXTw8NXxpO3JldHVybntiOm4scn19LHF0PVZ0KG50LDIpLEVyPXF0LmIsaXQ9cXQucjtFclsyOF09MjU4LGl0WzI1OF09Mjg7Zm9yKHZhciBfcj1WdChydCwwKSxqdD1fci5yLHN0PW5ldyBuZSgzMjc2OCksTT0wO008MzI3Njg7KytNKXt2YXIgYWU9KE0mNDM2OTApPj4xfChNJjIxODQ1KTw8MTthZT0oYWUmNTI0MjgpPj4yfChhZSYxMzEwNyk8PDIsYWU9KGFlJjYxNjgwKT4+NHwoYWUmMzg1NSk8PDQsc3RbTV09KChhZSY2NTI4MCk+Pjh8KGFlJjI1NSk8PDgpPj4xfWZvcih2YXIgeGU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT1lLmxlbmd0aCxyPTAscz1uZXcgbmUodCk7cjxpOysrcillW3JdJiYrK3NbZVtyXS0xXTt2YXIgbz1uZXcgbmUodCk7Zm9yKHI9MTtyPHQ7KytyKW9bcl09b1tyLTFdK3Nbci0xXTw8MTt2YXIgYztpZihuKXtjPW5ldyBuZSgxPDx0KTt2YXIgaD0xNS10O2ZvcihyPTA7cjxpOysrcilpZihlW3JdKWZvcih2YXIgZD1yPDw0fGVbcl0sdT10LWVbcl0seT1vW2Vbcl0tMV0rKzw8dSx2PXl8KDE8PHUpLTE7eTw9djsrK3kpY1tzdFt5XT4+aF09ZH1lbHNlIGZvcihjPW5ldyBuZShpKSxyPTA7cjxpOysrcillW3JdJiYoY1tyXT1zdFtvW2Vbcl0tMV0rK10+PjE1LWVbcl0pO3JldHVybiBjfSx1ZT1uZXcgdGUoMjg4KSxNPTA7TTwxNDQ7KytNKXVlW01dPTg7Zm9yKHZhciBNPTE0NDtNPDI1NjsrK00pdWVbTV09OTtmb3IodmFyIE09MjU2O008MjgwOysrTSl1ZVtNXT03O2Zvcih2YXIgTT0yODA7TTwyODg7KytNKXVlW01dPTg7Zm9yKHZhciBNZT1uZXcgdGUoMzIpLE09MDtNPDMyOysrTSlNZVtNXT01O3ZhciBicj14ZSh1ZSw5LDApLFRyPXhlKE1lLDUsMCksR3Q9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrNykvOHwwfSx6dD1mdW5jdGlvbihlLHQsbil7cmV0dXJuKG49PW51bGx8fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCksbmV3IHRlKGUuc3ViYXJyYXkodCxuKSl9LG9lPWZ1bmN0aW9uKGUsdCxuKXtuPDw9dCY3O3ZhciBpPXQvOHwwO2VbaV18PW4sZVtpKzFdfD1uPj44fSxBZT1mdW5jdGlvbihlLHQsbil7bjw8PXQmNzt2YXIgaT10Lzh8MDtlW2ldfD1uLGVbaSsxXXw9bj4+OCxlW2krMl18PW4+PjE2fSxvdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXSYmbi5wdXNoKHtzOmksZjplW2ldfSk7dmFyIHI9bi5sZW5ndGgscz1uLnNsaWNlKCk7aWYoIXIpcmV0dXJue3Q6UXQsbDowfTtpZihyPT0xKXt2YXIgbz1uZXcgdGUoblswXS5zKzEpO3JldHVybiBvW25bMF0uc109MSx7dDpvLGw6MX19bi5zb3J0KGZ1bmN0aW9uKHcsayl7cmV0dXJuIHcuZi1rLmZ9KSxuLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBjPW5bMF0saD1uWzFdLGQ9MCx1PTEseT0yO2ZvcihuWzBdPXtzOi0xLGY6Yy5mK2guZixsOmMscjpofTt1IT1yLTE7KWM9bltuW2RdLmY8blt5XS5mP2QrKzp5KytdLGg9bltkIT11JiZuW2RdLmY8blt5XS5mP2QrKzp5KytdLG5bdSsrXT17czotMSxmOmMuZitoLmYsbDpjLHI6aH07Zm9yKHZhciB2PXNbMF0ucyxpPTE7aTxyOysraSlzW2ldLnM+diYmKHY9c1tpXS5zKTt2YXIgVD1uZXcgbmUodisxKSxtPWF0KG5bdS0xXSxULDApO2lmKG0+dCl7dmFyIGk9MCxOPTAsUj1tLXQsTD0xPDxSO2ZvcihzLnNvcnQoZnVuY3Rpb24oayxQKXtyZXR1cm4gVFtQLnNdLVRbay5zXXx8ay5mLVAuZn0pO2k8cjsrK2kpe3ZhciBxPXNbaV0ucztpZihUW3FdPnQpTis9TC0oMTw8bS1UW3FdKSxUW3FdPXQ7ZWxzZSBicmVha31mb3IoTj4+PVI7Tj4wOyl7dmFyIGc9c1tpXS5zO1RbZ108dD9OLT0xPDx0LVRbZ10rKy0xOisraX1mb3IoO2k+PTAmJk47LS1pKXt2YXIgRT1zW2ldLnM7VFtFXT09dCYmKC0tVFtFXSwrK04pfW09dH1yZXR1cm57dDpuZXcgdGUoVCksbDptfX0sYXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnM9PS0xP01hdGgubWF4KGF0KGUubCx0LG4rMSksYXQoZS5yLHQsbisxKSk6dFtlLnNdPW59LEh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBuZSgrK3QpLGk9MCxyPWVbMF0scz0xLG89ZnVuY3Rpb24oaCl7bltpKytdPWh9LGM9MTtjPD10OysrYylpZihlW2NdPT1yJiZjIT10KSsrcztlbHNle2lmKCFyJiZzPjIpe2Zvcig7cz4xMzg7cy09MTM4KW8oMzI3NTQpO3M+MiYmKG8ocz4xMD9zLTExPDw1fDI4NjkwOnMtMzw8NXwxMjMwNSkscz0wKX1lbHNlIGlmKHM+Myl7Zm9yKG8ociksLS1zO3M+NjtzLT02KW8oODMwNCk7cz4yJiYobyhzLTM8PDV8ODIwOCkscz0wKX1mb3IoO3MtLTspbyhyKTtzPTEscj1lW2NdfXJldHVybntjOm4uc3ViYXJyYXkoMCxpKSxuOnR9fSxJZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSluKz1lW2ldKnRbaV07cmV0dXJuIG59LFl0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uLmxlbmd0aCxyPUd0KHQrMik7ZVtyXT1pJjI1NSxlW3IrMV09aT4+OCxlW3IrMl09ZVtyXV4yNTUsZVtyKzNdPWVbcisxXV4yNTU7Zm9yKHZhciBzPTA7czxpOysrcyllW3Ircys0XT1uW3NdO3JldHVybihyKzQraSkqOH0sSnQ9ZnVuY3Rpb24oZSx0LG4saSxyLHMsbyxjLGgsZCx1KXtvZSh0LHUrKyxuKSwrK3JbMjU2XTtmb3IodmFyIHk9b3QociwxNSksdj15LnQsVD15LmwsbT1vdChzLDE1KSxOPW0udCxSPW0ubCxMPUh0KHYpLHE9TC5jLGc9TC5uLEU9SHQoTiksdz1FLmMsaz1FLm4sUD1uZXcgbmUoMTkpLEk9MDtJPHEubGVuZ3RoOysrSSkrK1BbcVtJXSYzMV07Zm9yKHZhciBJPTA7STx3Lmxlbmd0aDsrK0kpKytQW3dbSV0mMzFdO2Zvcih2YXIgeD1vdChQLDcpLHo9eC50LFY9eC5sLEg9MTk7SD40JiYheltVdFtILTFdXTstLUgpO3ZhciBYPWQrNTw8MyxhPUllKHIsdWUpK0llKHMsTWUpK28sZj1JZShyLHYpK0llKHMsTikrbysxNCszKkgrSWUoUCx6KSsyKlBbMTZdKzMqUFsxN10rNypQWzE4XTtpZihoPj0wJiZYPD1hJiZYPD1mKXJldHVybiBZdCh0LHUsZS5zdWJhcnJheShoLGgrZCkpO3ZhciBfLFMsQyxBO2lmKG9lKHQsdSwxKyhmPGEpKSx1Kz0yLGY8YSl7Xz14ZSh2LFQsMCksUz12LEM9eGUoTixSLDApLEE9Tjt2YXIgSz14ZSh6LFYsMCk7b2UodCx1LGctMjU3KSxvZSh0LHUrNSxrLTEpLG9lKHQsdSsxMCxILTQpLHUrPTE0O2Zvcih2YXIgST0wO0k8SDsrK0kpb2UodCx1KzMqSSx6W1V0W0ldXSk7dSs9MypIO2Zvcih2YXIgaj1bcSx3XSxXPTA7VzwyOysrVylmb3IodmFyIHllPWpbV10sST0wO0k8eWUubGVuZ3RoOysrSSl7dmFyIGllPXllW0ldJjMxO29lKHQsdSxLW2llXSksdSs9eltpZV0saWU+MTUmJihvZSh0LHUseWVbSV0+PjUmMTI3KSx1Kz15ZVtJXT4+MTIpfX1lbHNlIF89YnIsUz11ZSxDPVRyLEE9TWU7Zm9yKHZhciBJPTA7STxjOysrSSl7dmFyIFk9aVtJXTtpZihZPjI1NSl7dmFyIGllPVk+PjE4JjMxO0FlKHQsdSxfW2llKzI1N10pLHUrPVNbaWUrMjU3XSxpZT43JiYob2UodCx1LFk+PjIzJjMxKSx1Kz1udFtpZV0pO3ZhciBnZT1ZJjMxO0FlKHQsdSxDW2dlXSksdSs9QVtnZV0sZ2U+MyYmKEFlKHQsdSxZPj41JjgxOTEpLHUrPXJ0W2dlXSl9ZWxzZSBBZSh0LHUsX1tZXSksdSs9U1tZXX1yZXR1cm4gQWUodCx1LF9bMjU2XSksdStTWzI1Nl19LE5yPW5ldyB0dChbNjU1NDAsMTMxMDgwLDEzMTA4OCwxMzExMDQsMjYyMTc2LDEwNDg3MDQsMTA0ODgzMiwyMTE0NTYwLDIxMTc2MzJdKSxRdD1uZXcgdGUoMCkseHI9ZnVuY3Rpb24oZSx0LG4saSxyLHMpe3ZhciBvPXMuenx8ZS5sZW5ndGgsYz1uZXcgdGUoaStvKzUqKDErTWF0aC5jZWlsKG8vN2UzKSkrciksaD1jLnN1YmFycmF5KGksYy5sZW5ndGgtciksZD1zLmwsdT0ocy5yfHwwKSY3O2lmKHQpe3UmJihoWzBdPXMucj4+Myk7Zm9yKHZhciB5PU5yW3QtMV0sdj15Pj4xMyxUPXkmODE5MSxtPSgxPDxuKS0xLE49cy5wfHxuZXcgbmUoMzI3NjgpLFI9cy5ofHxuZXcgbmUobSsxKSxMPU1hdGguY2VpbChuLzMpLHE9MipMLGc9ZnVuY3Rpb24ocHQpe3JldHVybihlW3B0XV5lW3B0KzFdPDxMXmVbcHQrMl08PHEpJm19LEU9bmV3IHR0KDI1ZTMpLHc9bmV3IG5lKDI4OCksaz1uZXcgbmUoMzIpLFA9MCxJPTAseD1zLml8fDAsej0wLFY9cy53fHwwLEg9MDt4KzI8bzsrK3gpe3ZhciBYPWcoeCksYT14JjMyNzY3LGY9UltYXTtpZihOW2FdPWYsUltYXT1hLFY8PXgpe3ZhciBfPW8teDtpZigoUD43ZTN8fHo+MjQ1NzYpJiYoXz40MjN8fCFkKSl7dT1KdChlLGgsMCxFLHcsayxJLHosSCx4LUgsdSksej1QPUk9MCxIPXg7Zm9yKHZhciBTPTA7UzwyODY7KytTKXdbU109MDtmb3IodmFyIFM9MDtTPDMwOysrUylrW1NdPTB9dmFyIEM9MixBPTAsSz1ULGo9YS1mJjMyNzY3O2lmKF8+MiYmWD09Zyh4LWopKWZvcih2YXIgVz1NYXRoLm1pbih2LF8pLTEseWU9TWF0aC5taW4oMzI3NjcseCksaWU9TWF0aC5taW4oMjU4LF8pO2o8PXllJiYtLUsmJmEhPWY7KXtpZihlW3grQ109PWVbeCtDLWpdKXtmb3IodmFyIFk9MDtZPGllJiZlW3grWV09PWVbeCtZLWpdOysrWSk7aWYoWT5DKXtpZihDPVksQT1qLFk+VylicmVhaztmb3IodmFyIGdlPU1hdGgubWluKGosWS0yKSx0bj0wLFM9MDtTPGdlOysrUyl7dmFyIGZ0PXgtaitTJjMyNzY3LEpyPU5bZnRdLG5uPWZ0LUpyJjMyNzY3O25uPnRuJiYodG49bm4sZj1mdCl9fX1hPWYsZj1OW2FdLGorPWEtZiYzMjc2N31pZihBKXtFW3orK109MjY4NDM1NDU2fGl0W0NdPDwxOHxqdFtBXTt2YXIgcm49aXRbQ10mMzEsc249anRbQV0mMzE7SSs9bnRbcm5dK3J0W3NuXSwrK3dbMjU3K3JuXSwrK2tbc25dLFY9eCtDLCsrUH1lbHNlIEVbeisrXT1lW3hdLCsrd1tlW3hdXX19Zm9yKHg9TWF0aC5tYXgoeCxWKTt4PG87Kyt4KUVbeisrXT1lW3hdLCsrd1tlW3hdXTt1PUp0KGUsaCxkLEUsdyxrLEkseixILHgtSCx1KSxkfHwocy5yPXUmN3xoW3UvOHwwXTw8Myx1LT03LHMuaD1SLHMucD1OLHMuaT14LHMudz1WKX1lbHNle2Zvcih2YXIgeD1zLnd8fDA7eDxvK2Q7eCs9NjU1MzUpe3ZhciBkdD14KzY1NTM1O2R0Pj1vJiYoaFt1Lzh8MF09ZCxkdD1vKSx1PVl0KGgsdSsxLGUuc3ViYXJyYXkoeCxkdCkpfXMuaT1vfXJldHVybiB6dChjLDAsaStHdCh1KStyKX0sQXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEludDMyQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KXtmb3IodmFyIG49dCxpPTk7LS1pOyluPShuJjEmJi0zMDY2NzQ5MTIpXm4+Pj4xO2VbdF09bn1yZXR1cm4gZX0oKSxJcj1mdW5jdGlvbigpe3ZhciBlPS0xO3JldHVybntwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLGk9MDtpPHQubGVuZ3RoOysraSluPUFyW24mMjU1XnRbaV1dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFNyPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIXImJihyPXtsOjF9LHQuZGljdGlvbmFyeSkpe3ZhciBzPXQuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpLG89bmV3IHRlKHMubGVuZ3RoK2UubGVuZ3RoKTtvLnNldChzKSxvLnNldChlLHMubGVuZ3RoKSxlPW8sci53PXMubGVuZ3RofXJldHVybiB4cihlLHQubGV2ZWw9PW51bGw/Njp0LmxldmVsLHQubWVtPT1udWxsP3IubD9NYXRoLmNlaWwoTWF0aC5tYXgoOCxNYXRoLm1pbigxMyxNYXRoLmxvZyhlLmxlbmd0aCkpKSoxLjUpOjIwOjEyK3QubWVtLG4saSxyKX0sY3Q9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0sT3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6dC5sZXZlbD09OT8yOjAsZVs5XT0zLHQubXRpbWUhPTAmJmN0KGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIGk9MDtpPD1uLmxlbmd0aDsrK2kpZVtpKzEwXT1uLmNoYXJDb2RlQXQoaSl9fSx3cj1mdW5jdGlvbihlKXtyZXR1cm4gMTArKGUuZmlsZW5hbWU/ZS5maWxlbmFtZS5sZW5ndGgrMTowKX07ZnVuY3Rpb24gRHIoZSx0KXt0fHwodD17fSk7dmFyIG49SXIoKSxpPWUubGVuZ3RoO24ucChlKTt2YXIgcj1TcihlLHQsd3IodCksOCkscz1yLmxlbmd0aDtyZXR1cm4gT3Iocix0KSxjdChyLHMtOCxuLmQoKSksY3QocixzLTQsaSkscn12YXIgWHQ9dHlwZW9mIFRleHRFbmNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHRFbmNvZGVyLGtyPXR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCImJm5ldyBUZXh0RGVjb2RlcixDcj0wO3RyeXtrci5kZWNvZGUoUXQse3N0cmVhbTohMH0pLENyPTF9Y2F0Y2goZSl7fWZ1bmN0aW9uIFJyKGUsdCl7dmFyIG47aWYoWHQpcmV0dXJuIFh0LmVuY29kZShlKTtmb3IodmFyIGk9ZS5sZW5ndGgscj1uZXcgdGUoZS5sZW5ndGgrKGUubGVuZ3RoPj4xKSkscz0wLG89ZnVuY3Rpb24oZCl7cltzKytdPWR9LG49MDtuPGk7KytuKXtpZihzKzU+ci5sZW5ndGgpe3ZhciBjPW5ldyB0ZShzKzgrKGktbjw8MSkpO2Muc2V0KHIpLHI9Y312YXIgaD1lLmNoYXJDb2RlQXQobik7aDwxMjh8fHQ/byhoKTpoPDIwNDg/KG8oMTkyfGg+PjYpLG8oMTI4fGgmNjMpKTpoPjU1Mjk1JiZoPDU3MzQ0PyhoPTY1NTM2KyhoJjEwNDc1NTIpfGUuY2hhckNvZGVBdCgrK24pJjEwMjMsbygyNDB8aD4+MTgpLG8oMTI4fGg+PjEyJjYzKSxvKDEyOHxoPj42JjYzKSxvKDEyOHxoJjYzKSk6KG8oMjI0fGg+PjEyKSxvKDEyOHxoPj42JjYzKSxvKDEyOHxoJjYzKSl9cmV0dXJuIHp0KHIsMCxzKX1mdW5jdGlvbiBMcihlKXtyZXR1cm4gSih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3QgdD1ScihKU09OLnN0cmluZ2lmeShlKSksbj1Ecih0KSxpPXlpZWxkIG5ldyBQcm9taXNlKHI9Pntjb25zdCBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPSgpPT5yKHMucmVzdWx0KSxzLnJlYWRBc0RhdGFVUkwobmV3IEJsb2IoW25ldyBVaW50OEFycmF5KG4pXSkpfSk7cmV0dXJue2NvbXByZXNzZWRCYXNlNjQ6aS5zbGljZShpLmluZGV4T2YoIiwiKSsxKSxjb21wcmVzc2VkU2l6ZTpuLmxlbmd0aCxidWZmZXJMZW5ndGg6dC5sZW5ndGh9fSl9Y29uc3QgdXQ9e0JBU0VfVVJMOiIvIixERVY6ITEsTU9ERToicHJvZHVjdGlvbiIsUFJPRDohMCxTU1I6ITF9LFByPVsiZGVidWciLCJsb2ciLCJpbmZvIiwid2FybiIsImVycm9yIl0sbHQ9U3ltYm9sLmZvcigiQGxhdW5jaGRhcmtseS9vMTF5LnNka0xvZ2dlciIpLEZyPSgoKT0+e3RyeXtyZXR1cm4odXQ9PW51bGw/dm9pZCAwOnV0LkRFQlVHKT09PSJ0cnVlIn1jYXRjaChlKXtyZXR1cm4hMX19KSgpLEJlPSgoKT0+e3ZhciBuO2NvbnN0IGU9Z2xvYmFsVGhpcyx0PShuPWVbbHRdKSE9bnVsbD9uOmVbbHRdPXtkZWJ1Z0VuYWJsZWQ6ITEsc3VwcHJlc3NEZXB0aDowfTtyZXR1cm4gRnImJih0LmRlYnVnRW5hYmxlZD0hMCksdH0pKCksTXI9KCk9PkJlLmRlYnVnRW5hYmxlZCxodD1lPT57QmUuc3VwcHJlc3NEZXB0aCsrO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7QmUuc3VwcHJlc3NEZXB0aC0tfX0sQnI9ZT0+UHIuaW5jbHVkZXMoZSk/ZToibG9nIiwkcj0oZSwuLi50KT0+e0JlLmRlYnVnRW5hYmxlZCYmaHQoKCk9Pnt2YXIgbjt0cnl7KChuPWNvbnNvbGVbQnIoZSldKSE9bnVsbD9uOmNvbnNvbGUubG9nKS5hcHBseShjb25zb2xlLHQpfWNhdGNoKGkpe319KX07Y2xhc3MgVXJ7Y29uc3RydWN0b3IodCxuKXt5dCh0aGlzLCJkZWJ1ZyIpO3l0KHRoaXMsIm5hbWUiKTt0aGlzLmRlYnVnPXQsdGhpcy5uYW1lPW59cHJlZml4KCl7bGV0IHQ9YFske0RhdGUubm93KCl9XWA7cmV0dXJuIHRoaXMubmFtZSYmKHQrPWAgLSAke3RoaXMubmFtZX1gKSx0fWxvZyguLi50KXt0aGlzLmRlYnVnJiZodCgoKT0+Y29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxbdGhpcy5wcmVmaXgoKSwuLi50XSkpfXdhcm4oLi4udCl7KHRoaXMuZGVidWd8fE1yKCkpJiZodCgoKT0+Y29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsW3RoaXMucHJlZml4KCksLi4udF0pKX19dmFyIFd0PShlPT4oZS5CaWxsaW5nUXVvdGFFeGNlZWRlZD0iQmlsbGluZ1F1b3RhRXhjZWVkZWQiLGUpKShXdHx8e30pO2NvbnN0IFZyPTMscXI9MWUzLGpyPTUwMCxHcj1bV3QuQmlsbGluZ1F1b3RhRXhjZWVkZWQudG9TdHJpbmcoKV0senI9ZT0+e3ZhciBuO3JldHVybigobj1lLnJlc3BvbnNlLmVycm9ycyk9PW51bGw/dm9pZCAwOm4uZmluZChpPT5Hci5pbmNsdWRlcyhpLm1lc3NhZ2UpKSk9PT12b2lkIDB9LEhyPSgpPT57Y29uc3QgZT0odCxuLGkscixzPTApPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIHQoKX1jYXRjaChvKXtpZihvIGluc3RhbmNlb2YgZGUmJiF6cihvKSl0aHJvdyBvO2lmKHM8VnIpcmV0dXJuIHlpZWxkIG5ldyBQcm9taXNlKGM9PnNldFRpbWVvdXQoYyxxcitqcipNYXRoLnBvdygyLHMpKSkseWllbGQgZSh0LG4saSxyLHMrMSk7dGhyb3cgJHIoImVycm9yIixgaGlnaGxpZ2h0LmlvOiBkYXRhIHJlcXVlc3QgZmFpbGVkIGFmdGVyICR7c30gcmV0cmllc2ApLG99fSk7cmV0dXJuIGV9LFp0PTUsS3Q9MmUzLFlyPVsibnVtYmVyIiwic3RyaW5nIiwiYm9vbGVhbiJdO3ZhciBaPShlPT4oZVtlLkluaXRpYWxpemU9MF09IkluaXRpYWxpemUiLGVbZS5SZXNldD0xXT0iUmVzZXQiLGVbZS5Bc3luY0V2ZW50cz0yXT0iQXN5bmNFdmVudHMiLGVbZS5JZGVudGlmeT0zXT0iSWRlbnRpZnkiLGVbZS5Qcm9wZXJ0aWVzPTRdPSJQcm9wZXJ0aWVzIixlW2UuTWV0cmljcz01XT0iTWV0cmljcyIsZVtlLkZlZWRiYWNrPTZdPSJGZWVkYmFjayIsZVtlLkN1c3RvbUV2ZW50PTddPSJDdXN0b21FdmVudCIsZVtlLlN0b3A9OF09IlN0b3AiLGVbZS5HZXRTdGF0dXM9OV09IkdldFN0YXR1cyIsZSkpKFp8fHt9KTtjb25zdCBTZT1zZWxmO2Z1bmN0aW9uIGVuKGUsdCl7Y29uc3Qgbj17fSxpPVtdLHI9W107Zm9yKGNvbnN0W3Msb11vZiBPYmplY3QuZW50cmllcyhlKSl7aWYobz09bnVsbCljb250aW51ZTtZci5pbmNsdWRlcyh0eXBlb2Ygbyl8fGkucHVzaCh7W3NdOm99KTtsZXQgYzt0eXBlb2Ygbz09InN0cmluZyI/Yz1vOmM9bWUobyksYy5sZW5ndGg+S3QmJihyLnB1c2goe1tzXTpvfSksYz1jLnN1YnN0cmluZygwLEt0KSksbltzXT1jfXJldHVybiB0IT09InNlc3Npb24iJiYoaS5sZW5ndGg+MCYmY29uc29sZS53YXJuKGBIaWdobGlnaHQgd2FzIHBhc3NlZCBvbmUgb3IgbW9yZSAke3R9IHByb3BlcnRpZXMgbm90IG9mIHR5cGUgc3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4uYCxpKSxyLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oYEhpZ2hsaWdodCB3YXMgcGFzc2VkIG9uZSBvciBtb3JlICR7dH0gcHJvcGVydGllcyBleGNlZWRpbmcgMjAwMCBjaGFyYWN0ZXJzLCB3aGljaCB3aWxsIGJlIHRydW5jYXRlZC5gLHIpKSxufXtsZXQgZSx0LG4saT0wLHI9MCxzPSExLG89MCxjPW5ldyBVcighMSwiW3dvcmtlcl0iKTtjb25zdCBoPVtdLGQ9W10sdT0oKT0+byE9PTAmJmk8WnQmJiEhKG4hPW51bGwmJm4ubGVuZ3RoKSx5PShnLEUpPT57U2UucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOlouQ3VzdG9tRXZlbnQsdGFnOmcscGF5bG9hZDpFfX0pfSx2PWc9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e2lkOkUsZXZlbnRzOncsbWVzc2FnZXM6ayxlcnJvcnM6UCxyZXNvdXJjZXNTdHJpbmc6SSx3ZWJTb2NrZXRFdmVudHNTdHJpbmc6eCxoYXNTZXNzaW9uVW5sb2FkZWQ6eixoaWdobGlnaHRMb2dzOlZ9PWcsSD1tZSh7bWVzc2FnZXM6a30pO2xldCBYPXtzZXNzaW9uX3NlY3VyZV9pZDpuLHBheWxvYWRfaWQ6RS50b1N0cmluZygpLGV2ZW50czp7ZXZlbnRzOnd9LG1lc3NhZ2VzOkgscmVzb3VyY2VzOkksd2ViX3NvY2tldF9ldmVudHM6eCxlcnJvcnM6UCxpc19iZWFjb246ITEsaGFzX3Nlc3Npb25fdW5sb2FkZWQ6en07ViYmKFguaGlnaGxpZ2h0X2xvZ3M9Vik7Y29uc3R7Y29tcHJlc3NlZEJhc2U2NDphLGJ1ZmZlckxlbmd0aDpmLGNvbXByZXNzZWRTaXplOl99PXlpZWxkIExyKFgpLFM9e3R5cGU6Wi5Bc3luY0V2ZW50cyxpZDpFLGV2ZW50c1NpemU6Zixjb21wcmVzc2VkU2l6ZTphLmxlbmd0aH07Yy5sb2coYFB1c2hpbmcgcGF5bG9hZDogJHtKU09OLnN0cmluZ2lmeSh7c2Vzc2lvblNlY3VyZUlEOm4saWQ6RSxmaXJzdFNJRDpNYXRoLm1pbiguLi5YLmV2ZW50cy5ldmVudHMubWFwKFc9Plc9PW51bGw/dm9pZCAwOlcuX3NpZCkuZmlsdGVyKFc9PiEhVykpLGV2ZW50c0xlbmd0aDpYLmV2ZW50cy5ldmVudHMubGVuZ3RoLG1lc3NhZ2VzTGVuZ3RoOmsubGVuZ3RoLHJlc291cmNlc0xlbmd0aDpJLmxlbmd0aCx3ZWJTb2NrZXRMZW5ndGg6eC5sZW5ndGgsZXJyb3JzTGVuZ3RoOlAubGVuZ3RoLGJ1Zkxlbmd0aDpmLGNvbXByZXNzZWRMZW5ndGg6Xyxjb21wcmVzc2VkQmFzZTY0TGVuZ3RoOmEubGVuZ3RofSx2b2lkIDAsMil9YCk7Y29uc3QgQz1lLlB1c2hTZXNzaW9uRXZlbnRzKHtzZXNzaW9uX3NlY3VyZV9pZDpuLHBheWxvYWRfaWQ6RS50b1N0cmluZygpLGRhdGE6YX0pO2xldCBBPVByb21pc2UucmVzb2x2ZSgpO2gubGVuZ3RoJiYoQT1lLnB1c2hNZXRyaWNzKHttZXRyaWNzOmh9KSxoLnNwbGljZSgwKSk7bGV0IEs9cGVyZm9ybWFuY2Uubm93KCk7Y29uc3Qgaj1zZXRJbnRlcnZhbCgoKT0+e0smJnBlcmZvcm1hbmNlLm5vdygpLUs+RnQmJihjb25zb2xlLndhcm4oYFVwbG9hZGluZyBwdXNoUGF5bG9hZCB0b29rIHRvbyBsb25nLCBmYWlsdXJlIG51bWJlciAjJHtyfS5gKSxyKz0xLGNsZWFySW50ZXJ2YWwoaikscj49WnQmJihjb25zb2xlLndhcm4oIlVwbG9hZGluZyBwdXNoUGF5bG9hZCB0b29rIHRvbyBsb25nLCBzdG9wcGluZyByZWNvcmRpbmcgdG8gYXZvaWQgT09NLiIpLFNlLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLlN0b3AscmVxdWVzdFN0YXJ0OkssYXN5bmNFdmVudHNSZXNwb25zZTpTfX0pLG0oe3R5cGU6Wi5Qcm9wZXJ0aWVzLHByb3BlcnRpZXNPYmplY3Q6e3N0b3BSZWFzb246IlB1c2ggUGF5bG9hZCBUaW1lb3V0In0scHJvcGVydHlUeXBlOnt0eXBlOiJ0cmFjayJ9fSkpKX0sMTAwKTt0cnl7eWllbGQgUHJvbWlzZS5hbGwoW0MsQV0pLHImJnBlcmZvcm1hbmNlLm5vdygpLUs8PUZ0JiYoY29uc29sZS53YXJuKGBwdXNoUGF5bG9hZCBzdWNjZWVkZWQgYWZ0ZXIgIyR7cn0gZmFpbHVyZXMsIHJlc2V0dGluZyBzdG9wIHN3aXRjaC5gKSxyPTApfWZpbmFsbHl7Sz0wLGNsZWFySW50ZXJ2YWwoail9U2UucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOlN9KX0pLFQ9Zz0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3R7dXNlck9iamVjdDpFLHVzZXJJZGVudGlmaWVyOncsc291cmNlOmt9PWc7az09PSJzZWdtZW50Ij95KCJTZWdtZW50IElkZW50aWZ5IixtZShEKHt1c2VySWRlbnRpZmllcjp3fSxFKSkpOnkoIklkZW50aWZ5IixtZShEKHt1c2VySWRlbnRpZmllcjp3fSxFKSkpLHlpZWxkIGUuaWRlbnRpZnlTZXNzaW9uKHtzZXNzaW9uX3NlY3VyZV9pZDpuLHVzZXJfaWRlbnRpZmllcjp3LHVzZXJfb2JqZWN0OmVuKEUsInVzZXIiKX0pO2NvbnN0IFA9az09PSJzZWdtZW50Ij9rOiJkZWZhdWx0IjtjLmxvZyhgSWRlbnRpZnkgKCR7d30sIHNvdXJjZTogJHtQfSkgdy8gb2JqOiAke21lKEUpfSBAICR7dH1gKX0pLG09Zz0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3R7cHJvcGVydGllc09iamVjdDpFLHByb3BlcnR5VHlwZTp3fT1nO2xldCBrOyh3PT1udWxsP3ZvaWQgMDp3LnR5cGUpPT09InNlc3Npb24iPyhrPSJTZXNzaW9uIix5aWVsZCBlLmFkZFNlc3Npb25Qcm9wZXJ0aWVzKHtzZXNzaW9uX3NlY3VyZV9pZDpuLHByb3BlcnRpZXNfb2JqZWN0OmVuKEUsInNlc3Npb24iKX0pKToodz09bnVsbD92b2lkIDA6dy5zb3VyY2UpPT09InNlZ21lbnQiP2s9IlNlZ21lbnQiOms9IlRyYWNrIixrIT09IlNlc3Npb24iJiZ5KGssbWUoRSkpLGMubG9nKGBBZGRpbmcgJHtrfSBQcm9wZXJ0aWVzIHRvIHNlc3Npb24gKCR7bn0pIHcvIG9iajogJHtKU09OLnN0cmluZ2lmeShFKX0gQCAke3R9YCl9KSxOPWc9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2gucHVzaCguLi5nLm1ldHJpY3MubWFwKEU9Pih7bmFtZTpFLm5hbWUsdmFsdWU6RS52YWx1ZSxzZXNzaW9uX3NlY3VyZV9pZDpuLGNhdGVnb3J5OkUuY2F0ZWdvcnksZ3JvdXA6RS5ncm91cCx0aW1lc3RhbXA6RS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSx0YWdzOkUudGFnc30pKSl9KSxSPWc9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3RpbWVzdGFtcDpFLHZlcmJhdGltOncsdXNlckVtYWlsOmssdXNlck5hbWU6UH09Zzt5aWVsZCBlLmFkZFNlc3Npb25GZWVkYmFjayh7c2Vzc2lvbl9zZWN1cmVfaWQ6bix0aW1lc3RhbXA6RSx2ZXJiYXRpbTp3LHVzZXJfZW1haWw6ayx1c2VyX25hbWU6UH0pfSksTD1nPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtnLnR5cGU9PT1aLkFzeW5jRXZlbnRzP3lpZWxkIHYoZyk6Zy50eXBlPT09Wi5JZGVudGlmeT95aWVsZCBUKGcpOmcudHlwZT09PVouUHJvcGVydGllcz95aWVsZCBtKGcpOmcudHlwZT09PVouTWV0cmljcz95aWVsZCBOKGcpOmcudHlwZT09PVouRmVlZGJhY2smJih5aWVsZCBSKGcpKX0pLHE9KCk9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2Zvcig7ZC5sZW5ndGg+MCYmdSgpOyl7Y29uc3QgZz1kLnNoaWZ0KCk7dHJ5e3lpZWxkIEwoZyksaT0wfWNhdGNoKEUpe3MmJmNvbnNvbGUuZXJyb3IoRSksaSs9MX19fSk7U2Uub25tZXNzYWdlPWZ1bmN0aW9uKGcpe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihnLmRhdGEubWVzc2FnZS50eXBlPT09Wi5Jbml0aWFsaXplKXt0PWcuZGF0YS5tZXNzYWdlLmJhY2tlbmQsbj1nLmRhdGEubWVzc2FnZS5zZXNzaW9uU2VjdXJlSUQscz1nLmRhdGEubWVzc2FnZS5kZWJ1ZyxvPWcuZGF0YS5tZXNzYWdlLnJlY29yZGluZ1N0YXJ0VGltZSxjLmRlYnVnPXMsZT12cihuZXcgWG4odCx7aGVhZGVyczp7fX0pLEhyKCkpLHlpZWxkIHEoKTtyZXR1cm59aWYoZy5kYXRhLm1lc3NhZ2UudHlwZT09PVouUmVzZXQpe2QubGVuZ3RoPTAsaC5sZW5ndGg9MCxpPTAscj0wLG49IiIsbz0wO3JldHVybn1pZihnLmRhdGEubWVzc2FnZS50eXBlPT09Wi5HZXRTdGF0dXMpe1NlLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLkdldFN0YXR1cyxwZW5kaW5nQ291bnQ6ZC5sZW5ndGgsaW5pdGlhbGl6ZWQ6dSgpfX0pO3JldHVybn1pZighdSgpKXtkLnB1c2goZy5kYXRhLm1lc3NhZ2UpO3JldHVybn10cnl7eWllbGQgTChnLmRhdGEubWVzc2FnZSksaT0wLHlpZWxkIHEoKX1jYXRjaChFKXtzJiZjb25zb2xlLmVycm9yKEUpLGkrPTF9fSl9fX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWhpZ2hsaWdodC1jbGllbnQtd29ya2VyLURyRFBSQ3J2LmpzLm1hcAo=", Uu = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), En = typeof self != "undefined" && self.Blob && new Blob([Uu(Al)], { type: "text/javascript;charset=utf-8" });
|
|
10325
|
-
function
|
|
10324
|
+
const _l = "dmFyIFFyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxYcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgV3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIG9uPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYW49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgbXQ9KEYsQiwkKT0+QiBpbiBGP1FyKEYsQix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6JH0pOkZbQl09JCxEPShGLEIpPT57Zm9yKHZhciAkIGluIEJ8fChCPXt9KSlvbi5jYWxsKEIsJCkmJm10KEYsJCxCWyRdKTtpZigkZSlmb3IodmFyICQgb2YgJGUoQikpYW4uY2FsbChCLCQpJiZtdChGLCQsQlskXSk7cmV0dXJuIEZ9LFVlPShGLEIpPT5YcihGLFdyKEIpKTt2YXIgdmU9KEYsQik9Pnt2YXIgJD17fTtmb3IodmFyIGVlIGluIEYpb24uY2FsbChGLGVlKSYmQi5pbmRleE9mKGVlKTwwJiYoJFtlZV09RltlZV0pO2lmKEYhPW51bGwmJiRlKWZvcih2YXIgZWUgb2YgJGUoRikpQi5pbmRleE9mKGVlKTwwJiZhbi5jYWxsKEYsZWUpJiYoJFtlZV09RltlZV0pO3JldHVybiAkfTt2YXIgeXQ9KEYsQiwkKT0+bXQoRix0eXBlb2YgQiE9InN5bWJvbCI/QisiIjpCLCQpO3ZhciBKPShGLEIsJCk9Pm5ldyBQcm9taXNlKChlZSxPZSk9Pnt2YXIgVmU9c2U9Pnt0cnl7RWUoJC5uZXh0KHNlKSl9Y2F0Y2goX2Upe09lKF9lKX19LGxlPXNlPT57dHJ5e0VlKCQudGhyb3coc2UpKX1jYXRjaChfZSl7T2UoX2UpfX0sRWU9c2U9PnNlLmRvbmU/ZWUoc2UudmFsdWUpOlByb21pc2UucmVzb2x2ZShzZS52YWx1ZSkudGhlbihWZSxsZSk7RWUoKCQ9JC5hcHBseShGLEIpKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IEY9SlNPTixCPWU9PmUudG9VcHBlckNhc2UoKSwkPWU9Pntjb25zdCB0PXt9O3JldHVybiBlLmZvckVhY2goKG4saSk9Pnt0W2ldPW59KSx0fSxlZT0oZSx0LG4pPT5lLmRvY3VtZW50P2U6e2RvY3VtZW50OmUsdmFyaWFibGVzOnQscmVxdWVzdEhlYWRlcnM6bixzaWduYWw6dm9pZCAwfSxPZT0oZSx0LG4pPT5lLnF1ZXJ5P2U6e3F1ZXJ5OmUsdmFyaWFibGVzOnQscmVxdWVzdEhlYWRlcnM6bixzaWduYWw6dm9pZCAwfSxWZT0oZSx0KT0+ZS5kb2N1bWVudHM/ZTp7ZG9jdW1lbnRzOmUscmVxdWVzdEhlYWRlcnM6dCxzaWduYWw6dm9pZCAwfTtmdW5jdGlvbiBsZShlLHQpe2lmKCEhIWUpdGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIEVlKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsfWZ1bmN0aW9uIHNlKGUsdCl7aWYoISEhZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW52YXJpYW50IHRyaWdnZXJlZC4iKX1jb25zdCBfZT0vXHJcbnxbXG5ccl0vZztmdW5jdGlvbiBxZShlLHQpe2xldCBuPTAsaT0xO2Zvcihjb25zdCByIG9mIGUuYm9keS5tYXRjaEFsbChfZSkpe2lmKHR5cGVvZiByLmluZGV4PT0ibnVtYmVyInx8c2UoITEpLHIuaW5kZXg+PXQpYnJlYWs7bj1yLmluZGV4K3JbMF0ubGVuZ3RoLGkrPTF9cmV0dXJue2xpbmU6aSxjb2x1bW46dCsxLW59fWZ1bmN0aW9uIGNuKGUpe3JldHVybiBndChlLnNvdXJjZSxxZShlLnNvdXJjZSxlLnN0YXJ0KSl9ZnVuY3Rpb24gZ3QoZSx0KXtjb25zdCBuPWUubG9jYXRpb25PZmZzZXQuY29sdW1uLTEsaT0iIi5wYWRTdGFydChuKStlLmJvZHkscj10LmxpbmUtMSxzPWUubG9jYXRpb25PZmZzZXQubGluZS0xLG89dC5saW5lK3MsYz10LmxpbmU9PT0xP246MCxoPXQuY29sdW1uK2MsZD1gJHtlLm5hbWV9OiR7b306JHtofQpgLHU9aS5zcGxpdCgvXHJcbnxbXG5ccl0vZykseT11W3JdO2lmKHkubGVuZ3RoPjEyMCl7Y29uc3Qgdj1NYXRoLmZsb29yKGgvODApLFQ9aCU4MCxtPVtdO2ZvcihsZXQgTj0wO048eS5sZW5ndGg7Tis9ODApbS5wdXNoKHkuc2xpY2UoTixOKzgwKSk7cmV0dXJuIGQrdnQoW1tgJHtvfSB8YCxtWzBdXSwuLi5tLnNsaWNlKDEsdisxKS5tYXAoTj0+WyJ8IixOXSksWyJ8IiwiXiIucGFkU3RhcnQoVCldLFsifCIsbVt2KzFdXV0pfXJldHVybiBkK3Z0KFtbYCR7by0xfSB8YCx1W3ItMV1dLFtgJHtvfSB8YCx5XSxbInwiLCJeIi5wYWRTdGFydChoKV0sW2Ake28rMX0gfGAsdVtyKzFdXV0pfWZ1bmN0aW9uIHZ0KGUpe2NvbnN0IHQ9ZS5maWx0ZXIoKFtpLHJdKT0+ciE9PXZvaWQgMCksbj1NYXRoLm1heCguLi50Lm1hcCgoW2ldKT0+aS5sZW5ndGgpKTtyZXR1cm4gdC5tYXAoKFtpLHJdKT0+aS5wYWRTdGFydChuKSsocj8iICIrcjoiIikpLmpvaW4oYApgKX1mdW5jdGlvbiB1bihlKXtjb25zdCB0PWVbMF07cmV0dXJuIHQ9PW51bGx8fCJraW5kImluIHR8fCJsZW5ndGgiaW4gdD97bm9kZXM6dCxzb3VyY2U6ZVsxXSxwb3NpdGlvbnM6ZVsyXSxwYXRoOmVbM10sb3JpZ2luYWxFcnJvcjplWzRdLGV4dGVuc2lvbnM6ZVs1XX06dH1jbGFzcyBqZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsLi4ubil7dmFyIGkscixzO2NvbnN0e25vZGVzOm8sc291cmNlOmMscG9zaXRpb25zOmgscGF0aDpkLG9yaWdpbmFsRXJyb3I6dSxleHRlbnNpb25zOnl9PXVuKG4pO3N1cGVyKHQpLHRoaXMubmFtZT0iR3JhcGhRTEVycm9yIix0aGlzLnBhdGg9ZCE9bnVsbD9kOnZvaWQgMCx0aGlzLm9yaWdpbmFsRXJyb3I9dSE9bnVsbD91OnZvaWQgMCx0aGlzLm5vZGVzPUV0KEFycmF5LmlzQXJyYXkobyk/bzpvP1tvXTp2b2lkIDApO2NvbnN0IHY9RXQoKGk9dGhpcy5ub2Rlcyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm1hcChtPT5tLmxvYykuZmlsdGVyKG09Pm0hPW51bGwpKTt0aGlzLnNvdXJjZT1jIT1udWxsP2M6dj09bnVsbHx8KHI9dlswXSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnNvdXJjZSx0aGlzLnBvc2l0aW9ucz1oIT1udWxsP2g6dj09bnVsbD92b2lkIDA6di5tYXAobT0+bS5zdGFydCksdGhpcy5sb2NhdGlvbnM9aCYmYz9oLm1hcChtPT5xZShjLG0pKTp2PT1udWxsP3ZvaWQgMDp2Lm1hcChtPT5xZShtLnNvdXJjZSxtLnN0YXJ0KSk7Y29uc3QgVD1FZSh1PT1udWxsP3ZvaWQgMDp1LmV4dGVuc2lvbnMpP3U9PW51bGw/dm9pZCAwOnUuZXh0ZW5zaW9uczp2b2lkIDA7dGhpcy5leHRlbnNpb25zPShzPXkhPW51bGw/eTpUKSE9PW51bGwmJnMhPT12b2lkIDA/czpPYmplY3QuY3JlYXRlKG51bGwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse21lc3NhZ2U6e3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITB9LG5hbWU6e2VudW1lcmFibGU6ITF9LG5vZGVzOntlbnVtZXJhYmxlOiExfSxzb3VyY2U6e2VudW1lcmFibGU6ITF9LHBvc2l0aW9uczp7ZW51bWVyYWJsZTohMX0sb3JpZ2luYWxFcnJvcjp7ZW51bWVyYWJsZTohMX19KSx1IT1udWxsJiZ1LnN0YWNrP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGFjayIse3ZhbHVlOnUuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxqZSk6T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YWNrIix7dmFsdWU6RXJyb3IoKS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJHcmFwaFFMRXJyb3IifXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5tZXNzYWdlO2lmKHRoaXMubm9kZXMpZm9yKGNvbnN0IG4gb2YgdGhpcy5ub2RlcyluLmxvYyYmKHQrPWAKCmArY24obi5sb2MpKTtlbHNlIGlmKHRoaXMuc291cmNlJiZ0aGlzLmxvY2F0aW9ucylmb3IoY29uc3QgbiBvZiB0aGlzLmxvY2F0aW9ucyl0Kz1gCgpgK2d0KHRoaXMuc291cmNlLG4pO3JldHVybiB0fXRvSlNPTigpe2NvbnN0IHQ9e21lc3NhZ2U6dGhpcy5tZXNzYWdlfTtyZXR1cm4gdGhpcy5sb2NhdGlvbnMhPW51bGwmJih0LmxvY2F0aW9ucz10aGlzLmxvY2F0aW9ucyksdGhpcy5wYXRoIT1udWxsJiYodC5wYXRoPXRoaXMucGF0aCksdGhpcy5leHRlbnNpb25zIT1udWxsJiZPYmplY3Qua2V5cyh0aGlzLmV4dGVuc2lvbnMpLmxlbmd0aD4wJiYodC5leHRlbnNpb25zPXRoaXMuZXh0ZW5zaW9ucyksdH19ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MD92b2lkIDA6ZX1mdW5jdGlvbiBHKGUsdCxuKXtyZXR1cm4gbmV3IGplKGBTeW50YXggRXJyb3I6ICR7bn1gLHtzb3VyY2U6ZSxwb3NpdGlvbnM6W3RdfSl9Y2xhc3MgbG57Y29uc3RydWN0b3IodCxuLGkpe3RoaXMuc3RhcnQ9dC5zdGFydCx0aGlzLmVuZD1uLmVuZCx0aGlzLnN0YXJ0VG9rZW49dCx0aGlzLmVuZFRva2VuPW4sdGhpcy5zb3VyY2U9aX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJMb2NhdGlvbiJ9dG9KU09OKCl7cmV0dXJue3N0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kfX19Y2xhc3MgX3R7Y29uc3RydWN0b3IodCxuLGkscixzLG8pe3RoaXMua2luZD10LHRoaXMuc3RhcnQ9bix0aGlzLmVuZD1pLHRoaXMubGluZT1yLHRoaXMuY29sdW1uPXMsdGhpcy52YWx1ZT1vLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlRva2VuIn10b0pTT04oKXtyZXR1cm57a2luZDp0aGlzLmtpbmQsdmFsdWU6dGhpcy52YWx1ZSxsaW5lOnRoaXMubGluZSxjb2x1bW46dGhpcy5jb2x1bW59fX1jb25zdCBidD17TmFtZTpbXSxEb2N1bWVudDpbImRlZmluaXRpb25zIl0sT3BlcmF0aW9uRGVmaW5pdGlvbjpbIm5hbWUiLCJ2YXJpYWJsZURlZmluaXRpb25zIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLFZhcmlhYmxlRGVmaW5pdGlvbjpbInZhcmlhYmxlIiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImRpcmVjdGl2ZXMiXSxWYXJpYWJsZTpbIm5hbWUiXSxTZWxlY3Rpb25TZXQ6WyJzZWxlY3Rpb25zIl0sRmllbGQ6WyJhbGlhcyIsIm5hbWUiLCJhcmd1bWVudHMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sQXJndW1lbnQ6WyJuYW1lIiwidmFsdWUiXSxGcmFnbWVudFNwcmVhZDpbIm5hbWUiLCJkaXJlY3RpdmVzIl0sSW5saW5lRnJhZ21lbnQ6WyJ0eXBlQ29uZGl0aW9uIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEZyYWdtZW50RGVmaW5pdGlvbjpbIm5hbWUiLCJ2YXJpYWJsZURlZmluaXRpb25zIiwidHlwZUNvbmRpdGlvbiIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxJbnRWYWx1ZTpbXSxGbG9hdFZhbHVlOltdLFN0cmluZ1ZhbHVlOltdLEJvb2xlYW5WYWx1ZTpbXSxOdWxsVmFsdWU6W10sRW51bVZhbHVlOltdLExpc3RWYWx1ZTpbInZhbHVlcyJdLE9iamVjdFZhbHVlOlsiZmllbGRzIl0sT2JqZWN0RmllbGQ6WyJuYW1lIiwidmFsdWUiXSxEaXJlY3RpdmU6WyJuYW1lIiwiYXJndW1lbnRzIl0sTmFtZWRUeXBlOlsibmFtZSJdLExpc3RUeXBlOlsidHlwZSJdLE5vbk51bGxUeXBlOlsidHlwZSJdLFNjaGVtYURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsImRpcmVjdGl2ZXMiLCJvcGVyYXRpb25UeXBlcyJdLE9wZXJhdGlvblR5cGVEZWZpbml0aW9uOlsidHlwZSJdLFNjYWxhclR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyJdLE9iamVjdFR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxGaWVsZERlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJhcmd1bWVudHMiLCJ0eXBlIiwiZGlyZWN0aXZlcyJdLElucHV0VmFsdWVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImRpcmVjdGl2ZXMiXSxJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sVW5pb25UeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJ0eXBlcyJdLEVudW1UeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJ2YWx1ZXMiXSxFbnVtVmFsdWVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyJdLElucHV0T2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRGlyZWN0aXZlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsImxvY2F0aW9ucyJdLFNjaGVtYUV4dGVuc2lvbjpbImRpcmVjdGl2ZXMiLCJvcGVyYXRpb25UeXBlcyJdLFNjYWxhclR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyJdLE9iamVjdFR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sVW5pb25UeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJ0eXBlcyJdLEVudW1UeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJ2YWx1ZXMiXSxJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdfSxobj1uZXcgU2V0KE9iamVjdC5rZXlzKGJ0KSk7ZnVuY3Rpb24gVHQoZSl7Y29uc3QgdD1lPT1udWxsP3ZvaWQgMDplLmtpbmQ7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmaG4uaGFzKHQpfXZhciBoZTsoZnVuY3Rpb24oZSl7ZS5RVUVSWT0icXVlcnkiLGUuTVVUQVRJT049Im11dGF0aW9uIixlLlNVQlNDUklQVElPTj0ic3Vic2NyaXB0aW9uIn0pKGhlfHwoaGU9e30pKTt2YXIgR2U7KGZ1bmN0aW9uKGUpe2UuUVVFUlk9IlFVRVJZIixlLk1VVEFUSU9OPSJNVVRBVElPTiIsZS5TVUJTQ1JJUFRJT049IlNVQlNDUklQVElPTiIsZS5GSUVMRD0iRklFTEQiLGUuRlJBR01FTlRfREVGSU5JVElPTj0iRlJBR01FTlRfREVGSU5JVElPTiIsZS5GUkFHTUVOVF9TUFJFQUQ9IkZSQUdNRU5UX1NQUkVBRCIsZS5JTkxJTkVfRlJBR01FTlQ9IklOTElORV9GUkFHTUVOVCIsZS5WQVJJQUJMRV9ERUZJTklUSU9OPSJWQVJJQUJMRV9ERUZJTklUSU9OIixlLlNDSEVNQT0iU0NIRU1BIixlLlNDQUxBUj0iU0NBTEFSIixlLk9CSkVDVD0iT0JKRUNUIixlLkZJRUxEX0RFRklOSVRJT049IkZJRUxEX0RFRklOSVRJT04iLGUuQVJHVU1FTlRfREVGSU5JVElPTj0iQVJHVU1FTlRfREVGSU5JVElPTiIsZS5JTlRFUkZBQ0U9IklOVEVSRkFDRSIsZS5VTklPTj0iVU5JT04iLGUuRU5VTT0iRU5VTSIsZS5FTlVNX1ZBTFVFPSJFTlVNX1ZBTFVFIixlLklOUFVUX09CSkVDVD0iSU5QVVRfT0JKRUNUIixlLklOUFVUX0ZJRUxEX0RFRklOSVRJT049IklOUFVUX0ZJRUxEX0RFRklOSVRJT04ifSkoR2V8fChHZT17fSkpO3ZhciBiOyhmdW5jdGlvbihlKXtlLk5BTUU9Ik5hbWUiLGUuRE9DVU1FTlQ9IkRvY3VtZW50IixlLk9QRVJBVElPTl9ERUZJTklUSU9OPSJPcGVyYXRpb25EZWZpbml0aW9uIixlLlZBUklBQkxFX0RFRklOSVRJT049IlZhcmlhYmxlRGVmaW5pdGlvbiIsZS5TRUxFQ1RJT05fU0VUPSJTZWxlY3Rpb25TZXQiLGUuRklFTEQ9IkZpZWxkIixlLkFSR1VNRU5UPSJBcmd1bWVudCIsZS5GUkFHTUVOVF9TUFJFQUQ9IkZyYWdtZW50U3ByZWFkIixlLklOTElORV9GUkFHTUVOVD0iSW5saW5lRnJhZ21lbnQiLGUuRlJBR01FTlRfREVGSU5JVElPTj0iRnJhZ21lbnREZWZpbml0aW9uIixlLlZBUklBQkxFPSJWYXJpYWJsZSIsZS5JTlQ9IkludFZhbHVlIixlLkZMT0FUPSJGbG9hdFZhbHVlIixlLlNUUklORz0iU3RyaW5nVmFsdWUiLGUuQk9PTEVBTj0iQm9vbGVhblZhbHVlIixlLk5VTEw9Ik51bGxWYWx1ZSIsZS5FTlVNPSJFbnVtVmFsdWUiLGUuTElTVD0iTGlzdFZhbHVlIixlLk9CSkVDVD0iT2JqZWN0VmFsdWUiLGUuT0JKRUNUX0ZJRUxEPSJPYmplY3RGaWVsZCIsZS5ESVJFQ1RJVkU9IkRpcmVjdGl2ZSIsZS5OQU1FRF9UWVBFPSJOYW1lZFR5cGUiLGUuTElTVF9UWVBFPSJMaXN0VHlwZSIsZS5OT05fTlVMTF9UWVBFPSJOb25OdWxsVHlwZSIsZS5TQ0hFTUFfREVGSU5JVElPTj0iU2NoZW1hRGVmaW5pdGlvbiIsZS5PUEVSQVRJT05fVFlQRV9ERUZJTklUSU9OPSJPcGVyYXRpb25UeXBlRGVmaW5pdGlvbiIsZS5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OPSJTY2FsYXJUeXBlRGVmaW5pdGlvbiIsZS5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OPSJPYmplY3RUeXBlRGVmaW5pdGlvbiIsZS5GSUVMRF9ERUZJTklUSU9OPSJGaWVsZERlZmluaXRpb24iLGUuSU5QVVRfVkFMVUVfREVGSU5JVElPTj0iSW5wdXRWYWx1ZURlZmluaXRpb24iLGUuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTj0iSW50ZXJmYWNlVHlwZURlZmluaXRpb24iLGUuVU5JT05fVFlQRV9ERUZJTklUSU9OPSJVbmlvblR5cGVEZWZpbml0aW9uIixlLkVOVU1fVFlQRV9ERUZJTklUSU9OPSJFbnVtVHlwZURlZmluaXRpb24iLGUuRU5VTV9WQUxVRV9ERUZJTklUSU9OPSJFbnVtVmFsdWVEZWZpbml0aW9uIixlLklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT049IklucHV0T2JqZWN0VHlwZURlZmluaXRpb24iLGUuRElSRUNUSVZFX0RFRklOSVRJT049IkRpcmVjdGl2ZURlZmluaXRpb24iLGUuU0NIRU1BX0VYVEVOU0lPTj0iU2NoZW1hRXh0ZW5zaW9uIixlLlNDQUxBUl9UWVBFX0VYVEVOU0lPTj0iU2NhbGFyVHlwZUV4dGVuc2lvbiIsZS5PQkpFQ1RfVFlQRV9FWFRFTlNJT049Ik9iamVjdFR5cGVFeHRlbnNpb24iLGUuSU5URVJGQUNFX1RZUEVfRVhURU5TSU9OPSJJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uIixlLlVOSU9OX1RZUEVfRVhURU5TSU9OPSJVbmlvblR5cGVFeHRlbnNpb24iLGUuRU5VTV9UWVBFX0VYVEVOU0lPTj0iRW51bVR5cGVFeHRlbnNpb24iLGUuSU5QVVRfT0JKRUNUX1RZUEVfRVhURU5TSU9OPSJJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24ifSkoYnx8KGI9e30pKTtmdW5jdGlvbiB6ZShlKXtyZXR1cm4gZT09PTl8fGU9PT0zMn1mdW5jdGlvbiBiZShlKXtyZXR1cm4gZT49NDgmJmU8PTU3fWZ1bmN0aW9uIE50KGUpe3JldHVybiBlPj05NyYmZTw9MTIyfHxlPj02NSYmZTw9OTB9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIE50KGUpfHxlPT09OTV9ZnVuY3Rpb24gZm4oZSl7cmV0dXJuIE50KGUpfHxiZShlKXx8ZT09PTk1fWZ1bmN0aW9uIGRuKGUpe3ZhciB0O2xldCBuPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGk9bnVsbCxyPS0xO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcztjb25zdCBjPWVbb10saD1wbihjKTtoIT09Yy5sZW5ndGgmJihpPShzPWkpIT09bnVsbCYmcyE9PXZvaWQgMD9zOm8scj1vLG8hPT0wJiZoPG4mJihuPWgpKX1yZXR1cm4gZS5tYXAoKG8sYyk9PmM9PT0wP286by5zbGljZShuKSkuc2xpY2UoKHQ9aSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6MCxyKzEpfWZ1bmN0aW9uIHBuKGUpe2xldCB0PTA7Zm9yKDt0PGUubGVuZ3RoJiZ6ZShlLmNoYXJDb2RlQXQodCkpOykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gbW4oZSx0KXtjb25zdCBuPWUucmVwbGFjZSgvIiIiL2csJ1xcIiIiJyksaT1uLnNwbGl0KC9cclxufFtcblxyXS9nKSxyPWkubGVuZ3RoPT09MSxzPWkubGVuZ3RoPjEmJmkuc2xpY2UoMSkuZXZlcnkoVD0+VC5sZW5ndGg9PT0wfHx6ZShULmNoYXJDb2RlQXQoMCkpKSxvPW4uZW5kc1dpdGgoJ1xcIiIiJyksYz1lLmVuZHNXaXRoKCciJykmJiFvLGg9ZS5lbmRzV2l0aCgiXFwiKSxkPWN8fGgsdT0hcnx8ZS5sZW5ndGg+NzB8fGR8fHN8fG87bGV0IHk9IiI7Y29uc3Qgdj1yJiZ6ZShlLmNoYXJDb2RlQXQoMCkpO3JldHVybih1JiYhdnx8cykmJih5Kz1gCmApLHkrPW4sKHV8fGQpJiYoeSs9YApgKSwnIiIiJyt5KyciIiInfXZhciBsOyhmdW5jdGlvbihlKXtlLlNPRj0iPFNPRj4iLGUuRU9GPSI8RU9GPiIsZS5CQU5HPSIhIixlLkRPTExBUj0iJCIsZS5BTVA9IiYiLGUuUEFSRU5fTD0iKCIsZS5QQVJFTl9SPSIpIixlLlNQUkVBRD0iLi4uIixlLkNPTE9OPSI6IixlLkVRVUFMUz0iPSIsZS5BVD0iQCIsZS5CUkFDS0VUX0w9IlsiLGUuQlJBQ0tFVF9SPSJdIixlLkJSQUNFX0w9InsiLGUuUElQRT0ifCIsZS5CUkFDRV9SPSJ9IixlLk5BTUU9Ik5hbWUiLGUuSU5UPSJJbnQiLGUuRkxPQVQ9IkZsb2F0IixlLlNUUklORz0iU3RyaW5nIixlLkJMT0NLX1NUUklORz0iQmxvY2tTdHJpbmciLGUuQ09NTUVOVD0iQ29tbWVudCJ9KShsfHwobD17fSkpO2NsYXNzIHlue2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49bmV3IF90KGwuU09GLDAsMCwwLDApO3RoaXMuc291cmNlPXQsdGhpcy5sYXN0VG9rZW49bix0aGlzLnRva2VuPW4sdGhpcy5saW5lPTEsdGhpcy5saW5lU3RhcnQ9MH1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJMZXhlciJ9YWR2YW5jZSgpe3JldHVybiB0aGlzLmxhc3RUb2tlbj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sb29rYWhlYWQoKX1sb29rYWhlYWQoKXtsZXQgdD10aGlzLnRva2VuO2lmKHQua2luZCE9PWwuRU9GKWRvIGlmKHQubmV4dCl0PXQubmV4dDtlbHNle2NvbnN0IG49dm4odGhpcyx0LmVuZCk7dC5uZXh0PW4sbi5wcmV2PXQsdD1ufXdoaWxlKHQua2luZD09PWwuQ09NTUVOVCk7cmV0dXJuIHR9fWZ1bmN0aW9uIGduKGUpe3JldHVybiBlPT09bC5CQU5HfHxlPT09bC5ET0xMQVJ8fGU9PT1sLkFNUHx8ZT09PWwuUEFSRU5fTHx8ZT09PWwuUEFSRU5fUnx8ZT09PWwuU1BSRUFEfHxlPT09bC5DT0xPTnx8ZT09PWwuRVFVQUxTfHxlPT09bC5BVHx8ZT09PWwuQlJBQ0tFVF9MfHxlPT09bC5CUkFDS0VUX1J8fGU9PT1sLkJSQUNFX0x8fGU9PT1sLlBJUEV8fGU9PT1sLkJSQUNFX1J9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGU+PTAmJmU8PTU1Mjk1fHxlPj01NzM0NCYmZTw9MTExNDExMX1mdW5jdGlvbiB3ZShlLHQpe3JldHVybiBBdChlLmNoYXJDb2RlQXQodCkpJiZJdChlLmNoYXJDb2RlQXQodCsxKSl9ZnVuY3Rpb24gQXQoZSl7cmV0dXJuIGU+PTU1Mjk2JiZlPD01NjMxOX1mdW5jdGlvbiBJdChlKXtyZXR1cm4gZT49NTYzMjAmJmU8PTU3MzQzfWZ1bmN0aW9uIGNlKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LmNvZGVQb2ludEF0KHQpO2lmKG49PT12b2lkIDApcmV0dXJuIGwuRU9GO2lmKG4+PTMyJiZuPD0xMjYpe2NvbnN0IGk9U3RyaW5nLmZyb21Db2RlUG9pbnQobik7cmV0dXJuIGk9PT0nIic/YCciJ2A6YCIke2l9ImB9cmV0dXJuIlUrIituLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnBhZFN0YXJ0KDQsIjAiKX1mdW5jdGlvbiBVKGUsdCxuLGkscil7Y29uc3Qgcz1lLmxpbmUsbz0xK24tZS5saW5lU3RhcnQ7cmV0dXJuIG5ldyBfdCh0LG4saSxzLG8scil9ZnVuY3Rpb24gdm4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10O2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7c3dpdGNoKHMpe2Nhc2UgNjUyNzk6Y2FzZSA5OmNhc2UgMzI6Y2FzZSA0NDorK3I7Y29udGludWU7Y2FzZSAxMDorK3IsKytlLmxpbmUsZS5saW5lU3RhcnQ9cjtjb250aW51ZTtjYXNlIDEzOm4uY2hhckNvZGVBdChyKzEpPT09MTA/cis9MjorK3IsKytlLmxpbmUsZS5saW5lU3RhcnQ9cjtjb250aW51ZTtjYXNlIDM1OnJldHVybiBFbihlLHIpO2Nhc2UgMzM6cmV0dXJuIFUoZSxsLkJBTkcscixyKzEpO2Nhc2UgMzY6cmV0dXJuIFUoZSxsLkRPTExBUixyLHIrMSk7Y2FzZSAzODpyZXR1cm4gVShlLGwuQU1QLHIscisxKTtjYXNlIDQwOnJldHVybiBVKGUsbC5QQVJFTl9MLHIscisxKTtjYXNlIDQxOnJldHVybiBVKGUsbC5QQVJFTl9SLHIscisxKTtjYXNlIDQ2OmlmKG4uY2hhckNvZGVBdChyKzEpPT09NDYmJm4uY2hhckNvZGVBdChyKzIpPT09NDYpcmV0dXJuIFUoZSxsLlNQUkVBRCxyLHIrMyk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gVShlLGwuQ09MT04scixyKzEpO2Nhc2UgNjE6cmV0dXJuIFUoZSxsLkVRVUFMUyxyLHIrMSk7Y2FzZSA2NDpyZXR1cm4gVShlLGwuQVQscixyKzEpO2Nhc2UgOTE6cmV0dXJuIFUoZSxsLkJSQUNLRVRfTCxyLHIrMSk7Y2FzZSA5MzpyZXR1cm4gVShlLGwuQlJBQ0tFVF9SLHIscisxKTtjYXNlIDEyMzpyZXR1cm4gVShlLGwuQlJBQ0VfTCxyLHIrMSk7Y2FzZSAxMjQ6cmV0dXJuIFUoZSxsLlBJUEUscixyKzEpO2Nhc2UgMTI1OnJldHVybiBVKGUsbC5CUkFDRV9SLHIscisxKTtjYXNlIDM0OnJldHVybiBuLmNoYXJDb2RlQXQocisxKT09PTM0JiZuLmNoYXJDb2RlQXQocisyKT09PTM0P0FuKGUscik6Ym4oZSxyKX1pZihiZShzKXx8cz09PTQ1KXJldHVybiBfbihlLHIscyk7aWYoeHQocykpcmV0dXJuIEluKGUscik7dGhyb3cgRyhlLnNvdXJjZSxyLHM9PT0zOT9gVW5leHBlY3RlZCBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyICgnKSwgZGlkIHlvdSBtZWFuIHRvIHVzZSBhIGRvdWJsZSBxdW90ZSAoIik/YDpmZShzKXx8d2UobixyKT9gVW5leHBlY3RlZCBjaGFyYWN0ZXI6ICR7Y2UoZSxyKX0uYDpgSW52YWxpZCBjaGFyYWN0ZXI6ICR7Y2UoZSxyKX0uYCl9cmV0dXJuIFUoZSxsLkVPRixpLGkpfWZ1bmN0aW9uIEVuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxO2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7aWYocz09PTEwfHxzPT09MTMpYnJlYWs7aWYoZmUocykpKytyO2Vsc2UgaWYod2UobixyKSlyKz0yO2Vsc2UgYnJlYWt9cmV0dXJuIFUoZSxsLkNPTU1FTlQsdCxyLG4uc2xpY2UodCsxLHIpKX1mdW5jdGlvbiBfbihlLHQsbil7Y29uc3QgaT1lLnNvdXJjZS5ib2R5O2xldCByPXQscz1uLG89ITE7aWYocz09PTQ1JiYocz1pLmNoYXJDb2RlQXQoKytyKSkscz09PTQ4KXtpZihzPWkuY2hhckNvZGVBdCgrK3IpLGJlKHMpKXRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBudW1iZXIsIHVuZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgMDogJHtjZShlLHIpfS5gKX1lbHNlIHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpO2lmKHM9PT00NiYmKG89ITAscz1pLmNoYXJDb2RlQXQoKytyKSxyPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKSksKHM9PT02OXx8cz09PTEwMSkmJihvPSEwLHM9aS5jaGFyQ29kZUF0KCsrciksKHM9PT00M3x8cz09PTQ1KSYmKHM9aS5jaGFyQ29kZUF0KCsrcikpLHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpKSxzPT09NDZ8fHh0KHMpKXRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBudW1iZXIsIGV4cGVjdGVkIGRpZ2l0IGJ1dCBnb3Q6ICR7Y2UoZSxyKX0uYCk7cmV0dXJuIFUoZSxvP2wuRkxPQVQ6bC5JTlQsdCxyLGkuc2xpY2UodCxyKSl9ZnVuY3Rpb24gSGUoZSx0LG4pe2lmKCFiZShuKSl0aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAke2NlKGUsdCl9LmApO2NvbnN0IGk9ZS5zb3VyY2UuYm9keTtsZXQgcj10KzE7Zm9yKDtiZShpLmNoYXJDb2RlQXQocikpOykrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzEscz1yLG89IiI7Zm9yKDtyPGk7KXtjb25zdCBjPW4uY2hhckNvZGVBdChyKTtpZihjPT09MzQpcmV0dXJuIG8rPW4uc2xpY2UocyxyKSxVKGUsbC5TVFJJTkcsdCxyKzEsbyk7aWYoYz09PTkyKXtvKz1uLnNsaWNlKHMscik7Y29uc3QgaD1uLmNoYXJDb2RlQXQocisxKT09PTExNz9uLmNoYXJDb2RlQXQocisyKT09PTEyMz9UbihlLHIpOk5uKGUscik6eG4oZSxyKTtvKz1oLnZhbHVlLHIrPWguc2l6ZSxzPXI7Y29udGludWV9aWYoYz09PTEwfHxjPT09MTMpYnJlYWs7aWYoZmUoYykpKytyO2Vsc2UgaWYod2UobixyKSlyKz0yO2Vsc2UgdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAke2NlKGUscil9LmApfXRocm93IEcoZS5zb3VyY2UsciwiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBUbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keTtsZXQgaT0wLHI9Mztmb3IoO3I8MTI7KXtjb25zdCBzPW4uY2hhckNvZGVBdCh0K3IrKyk7aWYocz09PTEyNSl7aWYocjw1fHwhZmUoaSkpYnJlYWs7cmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLHNpemU6cn19aWYoaT1pPDw0fFRlKHMpLGk8MClicmVha310aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2U6ICIke24uc2xpY2UodCx0K3IpfSIuYCl9ZnVuY3Rpb24gTm4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1TdChuLHQrMik7aWYoZmUoaSkpcmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLHNpemU6Nn07aWYoQXQoaSkmJm4uY2hhckNvZGVBdCh0KzYpPT09OTImJm4uY2hhckNvZGVBdCh0KzcpPT09MTE3KXtjb25zdCByPVN0KG4sdCs4KTtpZihJdChyKSlyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSxyKSxzaXplOjEyfX10aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2U6ICIke24uc2xpY2UodCx0KzYpfSIuYCl9ZnVuY3Rpb24gU3QoZSx0KXtyZXR1cm4gVGUoZS5jaGFyQ29kZUF0KHQpKTw8MTJ8VGUoZS5jaGFyQ29kZUF0KHQrMSkpPDw4fFRlKGUuY2hhckNvZGVBdCh0KzIpKTw8NHxUZShlLmNoYXJDb2RlQXQodCszKSl9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz9lLTQ4OmU+PTY1JiZlPD03MD9lLTU1OmU+PTk3JiZlPD0xMDI/ZS04NzotMX1mdW5jdGlvbiB4bihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keTtzd2l0Y2gobi5jaGFyQ29kZUF0KHQrMSkpe2Nhc2UgMzQ6cmV0dXJue3ZhbHVlOiciJyxzaXplOjJ9O2Nhc2UgOTI6cmV0dXJue3ZhbHVlOiJcXCIsc2l6ZToyfTtjYXNlIDQ3OnJldHVybnt2YWx1ZToiLyIsc2l6ZToyfTtjYXNlIDk4OnJldHVybnt2YWx1ZToiXGIiLHNpemU6Mn07Y2FzZSAxMDI6cmV0dXJue3ZhbHVlOiJcZiIsc2l6ZToyfTtjYXNlIDExMDpyZXR1cm57dmFsdWU6YApgLHNpemU6Mn07Y2FzZSAxMTQ6cmV0dXJue3ZhbHVlOiJcciIsc2l6ZToyfTtjYXNlIDExNjpyZXR1cm57dmFsdWU6IgkiLHNpemU6Mn19dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2U6ICIke24uc2xpY2UodCx0KzIpfSIuYCl9ZnVuY3Rpb24gQW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj1lLmxpbmVTdGFydCxzPXQrMyxvPXMsYz0iIjtjb25zdCBoPVtdO2Zvcig7czxpOyl7Y29uc3QgZD1uLmNoYXJDb2RlQXQocyk7aWYoZD09PTM0JiZuLmNoYXJDb2RlQXQocysxKT09PTM0JiZuLmNoYXJDb2RlQXQocysyKT09PTM0KXtjKz1uLnNsaWNlKG8scyksaC5wdXNoKGMpO2NvbnN0IHU9VShlLGwuQkxPQ0tfU1RSSU5HLHQscyszLGRuKGgpLmpvaW4oYApgKSk7cmV0dXJuIGUubGluZSs9aC5sZW5ndGgtMSxlLmxpbmVTdGFydD1yLHV9aWYoZD09PTkyJiZuLmNoYXJDb2RlQXQocysxKT09PTM0JiZuLmNoYXJDb2RlQXQocysyKT09PTM0JiZuLmNoYXJDb2RlQXQocyszKT09PTM0KXtjKz1uLnNsaWNlKG8scyksbz1zKzEscys9NDtjb250aW51ZX1pZihkPT09MTB8fGQ9PT0xMyl7Yys9bi5zbGljZShvLHMpLGgucHVzaChjKSxkPT09MTMmJm4uY2hhckNvZGVBdChzKzEpPT09MTA/cys9MjorK3MsYz0iIixvPXMscj1zO2NvbnRpbnVlfWlmKGZlKGQpKSsrcztlbHNlIGlmKHdlKG4scykpcys9MjtlbHNlIHRocm93IEcoZS5zb3VyY2UscyxgSW52YWxpZCBjaGFyYWN0ZXIgd2l0aGluIFN0cmluZzogJHtjZShlLHMpfS5gKX10aHJvdyBHKGUuc291cmNlLHMsIlVudGVybWluYXRlZCBzdHJpbmcuIil9ZnVuY3Rpb24gSW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzE7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtpZihmbihzKSkrK3I7ZWxzZSBicmVha31yZXR1cm4gVShlLGwuTkFNRSx0LHIsbi5zbGljZSh0LHIpKX1jb25zdCBTbj0xMCxPdD0yO2Z1bmN0aW9uIFllKGUpe3JldHVybiBEZShlLFtdKX1mdW5jdGlvbiBEZShlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBKU09OLnN0cmluZ2lmeShlKTtjYXNlImZ1bmN0aW9uIjpyZXR1cm4gZS5uYW1lP2BbZnVuY3Rpb24gJHtlLm5hbWV9XWA6IltmdW5jdGlvbl0iO2Nhc2Uib2JqZWN0IjpyZXR1cm4gT24oZSx0KTtkZWZhdWx0OnJldHVybiBTdHJpbmcoZSl9fWZ1bmN0aW9uIE9uKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKHQuaW5jbHVkZXMoZSkpcmV0dXJuIltDaXJjdWxhcl0iO2NvbnN0IG49Wy4uLnQsZV07aWYod24oZSkpe2NvbnN0IGk9ZS50b0pTT04oKTtpZihpIT09ZSlyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2k6RGUoaSxuKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGtuKGUsbik7cmV0dXJuIERuKGUsbil9ZnVuY3Rpb24gd24oZSl7cmV0dXJuIHR5cGVvZiBlLnRvSlNPTj09ImZ1bmN0aW9uIn1mdW5jdGlvbiBEbihlLHQpe2NvbnN0IG49T2JqZWN0LmVudHJpZXMoZSk7cmV0dXJuIG4ubGVuZ3RoPT09MD8ie30iOnQubGVuZ3RoPk90PyJbIitDbihlKSsiXSI6InsgIituLm1hcCgoW3Isc10pPT5yKyI6ICIrRGUocyx0KSkuam9pbigiLCAiKSsiIH0ifWZ1bmN0aW9uIGtuKGUsdCl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiJbXSI7aWYodC5sZW5ndGg+T3QpcmV0dXJuIltBcnJheV0iO2NvbnN0IG49TWF0aC5taW4oU24sZS5sZW5ndGgpLGk9ZS5sZW5ndGgtbixyPVtdO2ZvcihsZXQgcz0wO3M8bjsrK3Mpci5wdXNoKERlKGVbc10sdCkpO3JldHVybiBpPT09MT9yLnB1c2goIi4uLiAxIG1vcmUgaXRlbSIpOmk+MSYmci5wdXNoKGAuLi4gJHtpfSBtb3JlIGl0ZW1zYCksIlsiK3Iuam9pbigiLCAiKSsiXSJ9ZnVuY3Rpb24gQ24oZSl7Y29uc3QgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkucmVwbGFjZSgvXlxbb2JqZWN0IC8sIiIpLnJlcGxhY2UoL10kLywiIik7aWYodD09PSJPYmplY3QiJiZ0eXBlb2YgZS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIil7Y29uc3Qgbj1lLmNvbnN0cnVjdG9yLm5hbWU7aWYodHlwZW9mIG49PSJzdHJpbmciJiZuIT09IiIpcmV0dXJuIG59cmV0dXJuIHR9Y29uc3QgUm49Z2xvYmFsVGhpcy5wcm9jZXNzJiZwcm9jZXNzLmVudi5OT0RFX0VOVj09PSJwcm9kdWN0aW9uIj9mdW5jdGlvbih0LG4pe3JldHVybiB0IGluc3RhbmNlb2Ygbn06ZnVuY3Rpb24odCxuKXtpZih0IGluc3RhbmNlb2YgbilyZXR1cm4hMDtpZih0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsKXt2YXIgaTtjb25zdCByPW4ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10scz1TeW1ib2wudG9TdHJpbmdUYWcgaW4gdD90W1N5bWJvbC50b1N0cmluZ1RhZ106KGk9dC5jb25zdHJ1Y3Rvcik9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm5hbWU7aWYocj09PXMpe2NvbnN0IG89WWUodCk7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXNlICR7cn0gIiR7b30iIGZyb20gYW5vdGhlciBtb2R1bGUgb3IgcmVhbG0uCgpFbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiAiZ3JhcGhxbCIgaW4gdGhlIG5vZGVfbW9kdWxlcwpkaXJlY3RvcnkuIElmIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiAiZ3JhcGhxbCIgYXJlIHRoZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIKcmVsaWVkIG9uIG1vZHVsZXMsIHVzZSAicmVzb2x1dGlvbnMiIHRvIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGluc3RhbGxlZC4KCmh0dHBzOi8veWFybnBrZy5jb20vZW4vZG9jcy9zZWxlY3RpdmUtdmVyc2lvbi1yZXNvbHV0aW9ucwoKRHVwbGljYXRlICJncmFwaHFsIiBtb2R1bGVzIGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgc2luY2UgZGlmZmVyZW50CnZlcnNpb25zIG1heSBoYXZlIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMgYW5kIGJlaGF2aW9yLiBUaGUgZGF0YSBmcm9tIG9uZQp2ZXJzaW9uIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIGZyb20gYW5vdGhlciBjb3VsZCBwcm9kdWNlIGNvbmZ1c2luZyBhbmQKc3B1cmlvdXMgcmVzdWx0cy5gKX19cmV0dXJuITF9O2NsYXNzIHd0e2NvbnN0cnVjdG9yKHQsbj0iR3JhcGhRTCByZXF1ZXN0IixpPXtsaW5lOjEsY29sdW1uOjF9KXt0eXBlb2YgdD09InN0cmluZyJ8fGxlKCExLGBCb2R5IG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkOiAke1llKHQpfS5gKSx0aGlzLmJvZHk9dCx0aGlzLm5hbWU9bix0aGlzLmxvY2F0aW9uT2Zmc2V0PWksdGhpcy5sb2NhdGlvbk9mZnNldC5saW5lPjB8fGxlKCExLCJsaW5lIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZS4iKSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbj4wfHxsZSghMSwiY29sdW1uIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZS4iKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJTb3VyY2UifX1mdW5jdGlvbiBMbihlKXtyZXR1cm4gUm4oZSx3dCl9ZnVuY3Rpb24gRHQoZSx0KXtjb25zdCBuPW5ldyBQbihlLHQpLGk9bi5wYXJzZURvY3VtZW50KCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJ0b2tlbkNvdW50Iix7ZW51bWVyYWJsZTohMSx2YWx1ZTpuLnRva2VuQ291bnR9KSxpfWNsYXNzIFBue2NvbnN0cnVjdG9yKHQsbj17fSl7Y29uc3QgaT1Mbih0KT90Om5ldyB3dCh0KTt0aGlzLl9sZXhlcj1uZXcgeW4oaSksdGhpcy5fb3B0aW9ucz1uLHRoaXMuX3Rva2VuQ291bnRlcj0wfWdldCB0b2tlbkNvdW50KCl7cmV0dXJuIHRoaXMuX3Rva2VuQ291bnRlcn1wYXJzZU5hbWUoKXtjb25zdCB0PXRoaXMuZXhwZWN0VG9rZW4obC5OQU1FKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5OQU1FLHZhbHVlOnQudmFsdWV9KX1wYXJzZURvY3VtZW50KCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLkRPQ1VNRU5ULGRlZmluaXRpb25zOnRoaXMubWFueShsLlNPRix0aGlzLnBhcnNlRGVmaW5pdGlvbixsLkVPRil9KX1wYXJzZURlZmluaXRpb24oKXtpZih0aGlzLnBlZWsobC5CUkFDRV9MKSlyZXR1cm4gdGhpcy5wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKTtjb25zdCB0PXRoaXMucGVla0Rlc2NyaXB0aW9uKCksbj10P3RoaXMuX2xleGVyLmxvb2thaGVhZCgpOnRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PWwuTkFNRSl7c3dpdGNoKG4udmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYURlZmluaXRpb24oKTtjYXNlInNjYWxhciI6cmV0dXJuIHRoaXMucGFyc2VTY2FsYXJUeXBlRGVmaW5pdGlvbigpO2Nhc2UidHlwZSI6cmV0dXJuIHRoaXMucGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVEZWZpbml0aW9uKCk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHRoaXMucGFyc2VVbmlvblR5cGVEZWZpbml0aW9uKCk7Y2FzZSJlbnVtIjpyZXR1cm4gdGhpcy5wYXJzZUVudW1UeXBlRGVmaW5pdGlvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbigpO2Nhc2UiZGlyZWN0aXZlIjpyZXR1cm4gdGhpcy5wYXJzZURpcmVjdGl2ZURlZmluaXRpb24oKX1pZih0KXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLHRoaXMuX2xleGVyLnRva2VuLnN0YXJ0LCJVbmV4cGVjdGVkIGRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbnMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uIHR5cGUgZGVmaW5pdGlvbnMuIik7c3dpdGNoKG4udmFsdWUpe2Nhc2UicXVlcnkiOmNhc2UibXV0YXRpb24iOmNhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4gdGhpcy5wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKTtjYXNlImZyYWdtZW50IjpyZXR1cm4gdGhpcy5wYXJzZUZyYWdtZW50RGVmaW5pdGlvbigpO2Nhc2UiZXh0ZW5kIjpyZXR1cm4gdGhpcy5wYXJzZVR5cGVTeXN0ZW1FeHRlbnNpb24oKX19dGhyb3cgdGhpcy51bmV4cGVjdGVkKG4pfXBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47aWYodGhpcy5wZWVrKGwuQlJBQ0VfTCkpcmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOmhlLlFVRVJZLG5hbWU6dm9pZCAwLHZhcmlhYmxlRGVmaW5pdGlvbnM6W10sZGlyZWN0aXZlczpbXSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSk7Y29uc3Qgbj10aGlzLnBhcnNlT3BlcmF0aW9uVHlwZSgpO2xldCBpO3JldHVybiB0aGlzLnBlZWsobC5OQU1FKSYmKGk9dGhpcy5wYXJzZU5hbWUoKSksdGhpcy5ub2RlKHQse2tpbmQ6Yi5PUEVSQVRJT05fREVGSU5JVElPTixvcGVyYXRpb246bixuYW1lOmksdmFyaWFibGVEZWZpbml0aW9uczp0aGlzLnBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZU9wZXJhdGlvblR5cGUoKXtjb25zdCB0PXRoaXMuZXhwZWN0VG9rZW4obC5OQU1FKTtzd2l0Y2godC52YWx1ZSl7Y2FzZSJxdWVyeSI6cmV0dXJuIGhlLlFVRVJZO2Nhc2UibXV0YXRpb24iOnJldHVybiBoZS5NVVRBVElPTjtjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIGhlLlNVQlNDUklQVElPTn10aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9cGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCx0aGlzLnBhcnNlVmFyaWFibGVEZWZpbml0aW9uLGwuUEFSRU5fUil9cGFyc2VWYXJpYWJsZURlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOmIuVkFSSUFCTEVfREVGSU5JVElPTix2YXJpYWJsZTp0aGlzLnBhcnNlVmFyaWFibGUoKSx0eXBlOih0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pLHRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCkpLGRlZmF1bHRWYWx1ZTp0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpP3RoaXMucGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpOnZvaWQgMCxkaXJlY3RpdmVzOnRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKX0pfXBhcnNlVmFyaWFibGUoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuRE9MTEFSKSx0aGlzLm5vZGUodCx7a2luZDpiLlZBUklBQkxFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKX0pfXBhcnNlU2VsZWN0aW9uU2V0KCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLlNFTEVDVElPTl9TRVQsc2VsZWN0aW9uczp0aGlzLm1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VTZWxlY3Rpb24sbC5CUkFDRV9SKX0pfXBhcnNlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMucGVlayhsLlNQUkVBRCk/dGhpcy5wYXJzZUZyYWdtZW50KCk6dGhpcy5wYXJzZUZpZWxkKCl9cGFyc2VGaWVsZCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlTmFtZSgpO2xldCBpLHI7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkNPTE9OKT8oaT1uLHI9dGhpcy5wYXJzZU5hbWUoKSk6cj1uLHRoaXMubm9kZSh0LHtraW5kOmIuRklFTEQsYWxpYXM6aSxuYW1lOnIsYXJndW1lbnRzOnRoaXMucGFyc2VBcmd1bWVudHMoITEpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBlZWsobC5CUkFDRV9MKT90aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCk6dm9pZCAwfSl9cGFyc2VBcmd1bWVudHModCl7Y29uc3Qgbj10P3RoaXMucGFyc2VDb25zdEFyZ3VtZW50OnRoaXMucGFyc2VBcmd1bWVudDtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLG4sbC5QQVJFTl9SKX1wYXJzZUFyZ3VtZW50KHQ9ITEpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW4saT10aGlzLnBhcnNlTmFtZSgpO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pLHRoaXMubm9kZShuLHtraW5kOmIuQVJHVU1FTlQsbmFtZTppLHZhbHVlOnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCl9KX1wYXJzZUNvbnN0QXJndW1lbnQoKXtyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50KCEwKX1wYXJzZUZyYWdtZW50KCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdFRva2VuKGwuU1BSRUFEKTtjb25zdCBuPXRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJvbiIpO3JldHVybiFuJiZ0aGlzLnBlZWsobC5OQU1FKT90aGlzLm5vZGUodCx7a2luZDpiLkZSQUdNRU5UX1NQUkVBRCxuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKX0pOnRoaXMubm9kZSh0LHtraW5kOmIuSU5MSU5FX0ZSQUdNRU5ULHR5cGVDb25kaXRpb246bj90aGlzLnBhcnNlTmFtZWRUeXBlKCk6dm9pZCAwLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZUZyYWdtZW50RGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0S2V5d29yZCgiZnJhZ21lbnQiKSx0aGlzLl9vcHRpb25zLmFsbG93TGVnYWN5RnJhZ21lbnRWYXJpYWJsZXM9PT0hMD90aGlzLm5vZGUodCx7a2luZDpiLkZSQUdNRU5UX0RFRklOSVRJT04sbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksdmFyaWFibGVEZWZpbml0aW9uczp0aGlzLnBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpLHR5cGVDb25kaXRpb246KHRoaXMuZXhwZWN0S2V5d29yZCgib24iKSx0aGlzLnBhcnNlTmFtZWRUeXBlKCkpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KTp0aGlzLm5vZGUodCx7a2luZDpiLkZSQUdNRU5UX0RFRklOSVRJT04sbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksdHlwZUNvbmRpdGlvbjoodGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpLHRoaXMucGFyc2VOYW1lZFR5cGUoKSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlRnJhZ21lbnROYW1lKCl7aWYodGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0ib24iKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLnBhcnNlTmFtZSgpfXBhcnNlVmFsdWVMaXRlcmFsKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47c3dpdGNoKG4ua2luZCl7Y2FzZSBsLkJSQUNLRVRfTDpyZXR1cm4gdGhpcy5wYXJzZUxpc3QodCk7Y2FzZSBsLkJSQUNFX0w6cmV0dXJuIHRoaXMucGFyc2VPYmplY3QodCk7Y2FzZSBsLklOVDpyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUobix7a2luZDpiLklOVCx2YWx1ZTpuLnZhbHVlfSk7Y2FzZSBsLkZMT0FUOnJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZShuLHtraW5kOmIuRkxPQVQsdmFsdWU6bi52YWx1ZX0pO2Nhc2UgbC5TVFJJTkc6Y2FzZSBsLkJMT0NLX1NUUklORzpyZXR1cm4gdGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwoKTtjYXNlIGwuTkFNRTpzd2l0Y2godGhpcy5hZHZhbmNlTGV4ZXIoKSxuLnZhbHVlKXtjYXNlInRydWUiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpiLkJPT0xFQU4sdmFsdWU6ITB9KTtjYXNlImZhbHNlIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6Yi5CT09MRUFOLHZhbHVlOiExfSk7Y2FzZSJudWxsIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6Yi5OVUxMfSk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6Yi5FTlVNLHZhbHVlOm4udmFsdWV9KX1jYXNlIGwuRE9MTEFSOmlmKHQpaWYodGhpcy5leHBlY3RUb2tlbihsLkRPTExBUiksdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PWwuTkFNRSl7Y29uc3QgaT10aGlzLl9sZXhlci50b2tlbi52YWx1ZTt0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBVbmV4cGVjdGVkIHZhcmlhYmxlICIkJHtpfSIgaW4gY29uc3RhbnQgdmFsdWUuYCl9ZWxzZSB0aHJvdyB0aGlzLnVuZXhwZWN0ZWQobik7cmV0dXJuIHRoaXMucGFyc2VWYXJpYWJsZSgpO2RlZmF1bHQ6dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9fXBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKXtyZXR1cm4gdGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCghMCl9cGFyc2VTdHJpbmdMaXRlcmFsKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUodCx7a2luZDpiLlNUUklORyx2YWx1ZTp0LnZhbHVlLGJsb2NrOnQua2luZD09PWwuQkxPQ0tfU1RSSU5HfSl9cGFyc2VMaXN0KHQpe2NvbnN0IG49KCk9PnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCk7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLkxJU1QsdmFsdWVzOnRoaXMuYW55KGwuQlJBQ0tFVF9MLG4sbC5CUkFDS0VUX1IpfSl9cGFyc2VPYmplY3QodCl7Y29uc3Qgbj0oKT0+dGhpcy5wYXJzZU9iamVjdEZpZWxkKHQpO3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6Yi5PQkpFQ1QsZmllbGRzOnRoaXMuYW55KGwuQlJBQ0VfTCxuLGwuQlJBQ0VfUil9KX1wYXJzZU9iamVjdEZpZWxkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW4saT10aGlzLnBhcnNlTmFtZSgpO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pLHRoaXMubm9kZShuLHtraW5kOmIuT0JKRUNUX0ZJRUxELG5hbWU6aSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpfSl9cGFyc2VEaXJlY3RpdmVzKHQpe2NvbnN0IG49W107Zm9yKDt0aGlzLnBlZWsobC5BVCk7KW4ucHVzaCh0aGlzLnBhcnNlRGlyZWN0aXZlKHQpKTtyZXR1cm4gbn1wYXJzZUNvbnN0RGlyZWN0aXZlcygpe3JldHVybiB0aGlzLnBhcnNlRGlyZWN0aXZlcyghMCl9cGFyc2VEaXJlY3RpdmUodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkFUKSx0aGlzLm5vZGUobix7a2luZDpiLkRJUkVDVElWRSxuYW1lOnRoaXMucGFyc2VOYW1lKCksYXJndW1lbnRzOnRoaXMucGFyc2VBcmd1bWVudHModCl9KX1wYXJzZVR5cGVSZWZlcmVuY2UoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO2xldCBuO2lmKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkJSQUNLRVRfTCkpe2NvbnN0IGk9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKTt0aGlzLmV4cGVjdFRva2VuKGwuQlJBQ0tFVF9SKSxuPXRoaXMubm9kZSh0LHtraW5kOmIuTElTVF9UWVBFLHR5cGU6aX0pfWVsc2Ugbj10aGlzLnBhcnNlTmFtZWRUeXBlKCk7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkJBTkcpP3RoaXMubm9kZSh0LHtraW5kOmIuTk9OX05VTExfVFlQRSx0eXBlOm59KTpufXBhcnNlTmFtZWRUeXBlKCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpiLk5BTUVEX1RZUEUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpfSl9cGVla0Rlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMucGVlayhsLlNUUklORyl8fHRoaXMucGVlayhsLkJMT0NLX1NUUklORyl9cGFyc2VEZXNjcmlwdGlvbigpe2lmKHRoaXMucGVla0Rlc2NyaXB0aW9uKCkpcmV0dXJuIHRoaXMucGFyc2VTdHJpbmdMaXRlcmFsKCl9cGFyc2VTY2hlbWFEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgic2NoZW1hIik7Y29uc3QgaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLm1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbixsLkJSQUNFX1IpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLlNDSEVNQV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sZGlyZWN0aXZlczppLG9wZXJhdGlvblR5cGVzOnJ9KX1wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VPcGVyYXRpb25UeXBlKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lZFR5cGUoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5PUEVSQVRJT05fVFlQRV9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLHR5cGU6aX0pfXBhcnNlU2NhbGFyVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzY2FsYXIiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuU0NBTEFSX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnJ9KX1wYXJzZU9iamVjdFR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgidHlwZSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHM9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLG89dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGludGVyZmFjZXM6cixkaXJlY3RpdmVzOnMsZmllbGRzOm99KX1wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCl7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJpbXBsZW1lbnRzIik/dGhpcy5kZWxpbWl0ZWRNYW55KGwuQU1QLHRoaXMucGFyc2VOYW1lZFR5cGUpOltdfXBhcnNlRmllbGRzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUZpZWxkRGVmaW5pdGlvbixsLkJSQUNFX1IpfXBhcnNlRmllbGREZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VBcmd1bWVudERlZnMoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IHM9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSxvPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5GSUVMRF9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGFyZ3VtZW50czpyLHR5cGU6cyxkaXJlY3RpdmVzOm99KX1wYXJzZUFyZ3VtZW50RGVmcygpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsdGhpcy5wYXJzZUlucHV0VmFsdWVEZWYsbC5QQVJFTl9SKX1wYXJzZUlucHV0VmFsdWVEZWYoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlTmFtZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3Qgcj10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpO2xldCBzO3RoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUykmJihzPXRoaXMucGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpKTtjb25zdCBvPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5JTlBVVF9WQUxVRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLHR5cGU6cixkZWZhdWx0VmFsdWU6cyxkaXJlY3RpdmVzOm99KX1wYXJzZUludGVyZmFjZVR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW50ZXJmYWNlIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksbz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksaW50ZXJmYWNlczpyLGRpcmVjdGl2ZXM6cyxmaWVsZHM6b30pfXBhcnNlVW5pb25UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInVuaW9uIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZVVuaW9uTWVtYmVyVHlwZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5VTklPTl9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLHR5cGVzOnN9KX1wYXJzZVVuaW9uTWVtYmVyVHlwZXMoKXtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKT90aGlzLmRlbGltaXRlZE1hbnkobC5QSVBFLHRoaXMucGFyc2VOYW1lZFR5cGUpOltdfXBhcnNlRW51bVR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiZW51bSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLkVOVU1fVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cix2YWx1ZXM6c30pfXBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VFbnVtVmFsdWVEZWZpbml0aW9uLGwuQlJBQ0VfUil9cGFyc2VFbnVtVmFsdWVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZUVudW1WYWx1ZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5FTlVNX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyfSl9cGFyc2VFbnVtVmFsdWVOYW1lKCl7aWYodGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0idHJ1ZSJ8fHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09ImZhbHNlInx8dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0ibnVsbCIpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2UsdGhpcy5fbGV4ZXIudG9rZW4uc3RhcnQsYCR7a2UodGhpcy5fbGV4ZXIudG9rZW4pfSBpcyByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIGFuIGVudW0gdmFsdWUuYCk7cmV0dXJuIHRoaXMucGFyc2VOYW1lKCl9cGFyc2VJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW5wdXQiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsZmllbGRzOnN9KX1wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUlucHV0VmFsdWVEZWYsbC5CUkFDRV9SKX1wYXJzZVR5cGVTeXN0ZW1FeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLmxvb2thaGVhZCgpO2lmKHQua2luZD09PWwuTkFNRSlzd2l0Y2godC52YWx1ZSl7Y2FzZSJzY2hlbWEiOnJldHVybiB0aGlzLnBhcnNlU2NoZW1hRXh0ZW5zaW9uKCk7Y2FzZSJzY2FsYXIiOnJldHVybiB0aGlzLnBhcnNlU2NhbGFyVHlwZUV4dGVuc2lvbigpO2Nhc2UidHlwZSI6cmV0dXJuIHRoaXMucGFyc2VPYmplY3RUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJpbnRlcmZhY2UiOnJldHVybiB0aGlzLnBhcnNlSW50ZXJmYWNlVHlwZUV4dGVuc2lvbigpO2Nhc2UidW5pb24iOnJldHVybiB0aGlzLnBhcnNlVW5pb25UeXBlRXh0ZW5zaW9uKCk7Y2FzZSJlbnVtIjpyZXR1cm4gdGhpcy5wYXJzZUVudW1UeXBlRXh0ZW5zaW9uKCk7Y2FzZSJpbnB1dCI6cmV0dXJuIHRoaXMucGFyc2VJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24oKX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9cGFyc2VTY2hlbWFFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJzY2hlbWEiKTtjb25zdCBuPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxpPXRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24sbC5CUkFDRV9SKTtpZihuLmxlbmd0aD09PTAmJmkubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5TQ0hFTUFfRVhURU5TSU9OLGRpcmVjdGl2ZXM6bixvcGVyYXRpb25UeXBlczppfSl9cGFyc2VTY2FsYXJUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgic2NhbGFyIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO2lmKGkubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5TQ0FMQVJfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aX0pfXBhcnNlT2JqZWN0VHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInR5cGUiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTAmJnMubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5PQkpFQ1RfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGludGVyZmFjZXM6aSxkaXJlY3RpdmVzOnIsZmllbGRzOnN9KX1wYXJzZUludGVyZmFjZVR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJpbnRlcmZhY2UiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTAmJnMubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5JTlRFUkZBQ0VfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGludGVyZmFjZXM6aSxkaXJlY3RpdmVzOnIsZmllbGRzOnN9KX1wYXJzZVVuaW9uVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInVuaW9uIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZVVuaW9uTWVtYmVyVHlwZXMoKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6Yi5VTklPTl9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLHR5cGVzOnJ9KX1wYXJzZUVudW1UeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiZW51bSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLkVOVU1fVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSx2YWx1ZXM6cn0pfXBhcnNlSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiaW5wdXQiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOmIuSU5QVVRfT0JKRUNUX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KX1wYXJzZURpcmVjdGl2ZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJkaXJlY3RpdmUiKSx0aGlzLmV4cGVjdFRva2VuKGwuQVQpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VBcmd1bWVudERlZnMoKSxzPXRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJyZXBlYXRhYmxlIik7dGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpO2NvbnN0IG89dGhpcy5wYXJzZURpcmVjdGl2ZUxvY2F0aW9ucygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpiLkRJUkVDVElWRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGFyZ3VtZW50czpyLHJlcGVhdGFibGU6cyxsb2NhdGlvbnM6b30pfXBhcnNlRGlyZWN0aXZlTG9jYXRpb25zKCl7cmV0dXJuIHRoaXMuZGVsaW1pdGVkTWFueShsLlBJUEUsdGhpcy5wYXJzZURpcmVjdGl2ZUxvY2F0aW9uKX1wYXJzZURpcmVjdGl2ZUxvY2F0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VOYW1lKCk7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdlLG4udmFsdWUpKXJldHVybiBuO3Rocm93IHRoaXMudW5leHBlY3RlZCh0KX1ub2RlKHQsbil7cmV0dXJuIHRoaXMuX29wdGlvbnMubm9Mb2NhdGlvbiE9PSEwJiYobi5sb2M9bmV3IGxuKHQsdGhpcy5fbGV4ZXIubGFzdFRva2VuLHRoaXMuX2xleGVyLnNvdXJjZSkpLG59cGVlayh0KXtyZXR1cm4gdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PXR9ZXhwZWN0VG9rZW4odCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT10KXJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLG47dGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRXhwZWN0ZWQgJHtrdCh0KX0sIGZvdW5kICR7a2Uobil9LmApfWV4cGVjdE9wdGlvbmFsVG9rZW4odCl7cmV0dXJuIHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT10Pyh0aGlzLmFkdmFuY2VMZXhlcigpLCEwKTohMX1leHBlY3RLZXl3b3JkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09bC5OQU1FJiZuLnZhbHVlPT09dCl0aGlzLmFkdmFuY2VMZXhlcigpO2Vsc2UgdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRXhwZWN0ZWQgIiR7dH0iLCBmb3VuZCAke2tlKG4pfS5gKX1leHBlY3RPcHRpb25hbEtleXdvcmQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gbi5raW5kPT09bC5OQU1FJiZuLnZhbHVlPT09dD8odGhpcy5hZHZhbmNlTGV4ZXIoKSwhMCk6ITF9dW5leHBlY3RlZCh0KXtjb25zdCBuPXQhPW51bGw/dDp0aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgVW5leHBlY3RlZCAke2tlKG4pfS5gKX1hbnkodCxuLGkpe3RoaXMuZXhwZWN0VG9rZW4odCk7Y29uc3Qgcj1bXTtmb3IoOyF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSk7KXIucHVzaChuLmNhbGwodGhpcykpO3JldHVybiByfW9wdGlvbmFsTWFueSh0LG4saSl7aWYodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKHQpKXtjb25zdCByPVtdO2RvIHIucHVzaChuLmNhbGwodGhpcykpO3doaWxlKCF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSkpO3JldHVybiByfXJldHVybltdfW1hbnkodCxuLGkpe3RoaXMuZXhwZWN0VG9rZW4odCk7Y29uc3Qgcj1bXTtkbyByLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSghdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpKTtyZXR1cm4gcn1kZWxpbWl0ZWRNYW55KHQsbil7dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKHQpO2NvbnN0IGk9W107ZG8gaS5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKHQpKTtyZXR1cm4gaX1hZHZhbmNlTGV4ZXIoKXtjb25zdHttYXhUb2tlbnM6dH09dGhpcy5fb3B0aW9ucyxuPXRoaXMuX2xleGVyLmFkdmFuY2UoKTtpZihuLmtpbmQhPT1sLkVPRiYmKCsrdGhpcy5fdG9rZW5Db3VudGVyLHQhPT12b2lkIDAmJnRoaXMuX3Rva2VuQ291bnRlcj50KSl0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBEb2N1bWVudCBjb250YWlucyBtb3JlIHRoYXQgJHt0fSB0b2tlbnMuIFBhcnNpbmcgYWJvcnRlZC5gKX19ZnVuY3Rpb24ga2UoZSl7Y29uc3QgdD1lLnZhbHVlO3JldHVybiBrdChlLmtpbmQpKyh0IT1udWxsP2AgIiR7dH0iYDoiIil9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIGduKGUpP2AiJHtlfSJgOmV9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuYCIke2UucmVwbGFjZShNbixCbil9ImB9Y29uc3QgTW49L1tceDAwLVx4MWZceDIyXHg1Y1x4N2YtXHg5Zl0vZztmdW5jdGlvbiBCbihlKXtyZXR1cm4gJG5bZS5jaGFyQ29kZUF0KDApXX1jb25zdCAkbj1bIlxcdTAwMDAiLCJcXHUwMDAxIiwiXFx1MDAwMiIsIlxcdTAwMDMiLCJcXHUwMDA0IiwiXFx1MDAwNSIsIlxcdTAwMDYiLCJcXHUwMDA3IiwiXFxiIiwiXFx0IiwiXFxuIiwiXFx1MDAwQiIsIlxcZiIsIlxcciIsIlxcdTAwMEUiLCJcXHUwMDBGIiwiXFx1MDAxMCIsIlxcdTAwMTEiLCJcXHUwMDEyIiwiXFx1MDAxMyIsIlxcdTAwMTQiLCJcXHUwMDE1IiwiXFx1MDAxNiIsIlxcdTAwMTciLCJcXHUwMDE4IiwiXFx1MDAxOSIsIlxcdTAwMUEiLCJcXHUwMDFCIiwiXFx1MDAxQyIsIlxcdTAwMUQiLCJcXHUwMDFFIiwiXFx1MDAxRiIsIiIsIiIsJ1xcIicsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIlxcXFwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJcXHUwMDdGIiwiXFx1MDA4MCIsIlxcdTAwODEiLCJcXHUwMDgyIiwiXFx1MDA4MyIsIlxcdTAwODQiLCJcXHUwMDg1IiwiXFx1MDA4NiIsIlxcdTAwODciLCJcXHUwMDg4IiwiXFx1MDA4OSIsIlxcdTAwOEEiLCJcXHUwMDhCIiwiXFx1MDA4QyIsIlxcdTAwOEQiLCJcXHUwMDhFIiwiXFx1MDA4RiIsIlxcdTAwOTAiLCJcXHUwMDkxIiwiXFx1MDA5MiIsIlxcdTAwOTMiLCJcXHUwMDk0IiwiXFx1MDA5NSIsIlxcdTAwOTYiLCJcXHUwMDk3IiwiXFx1MDA5OCIsIlxcdTAwOTkiLCJcXHUwMDlBIiwiXFx1MDA5QiIsIlxcdTAwOUMiLCJcXHUwMDlEIiwiXFx1MDA5RSIsIlxcdTAwOUYiXSxVbj1PYmplY3QuZnJlZXplKHt9KTtmdW5jdGlvbiBWbihlLHQsbj1idCl7Y29uc3QgaT1uZXcgTWFwO2Zvcihjb25zdCBMIG9mIE9iamVjdC52YWx1ZXMoYikpaS5zZXQoTCxxbih0LEwpKTtsZXQgcixzPUFycmF5LmlzQXJyYXkoZSksbz1bZV0sYz0tMSxoPVtdLGQ9ZSx1LHk7Y29uc3Qgdj1bXSxUPVtdO2Rve2MrKztjb25zdCBMPWM9PT1vLmxlbmd0aCxxPUwmJmgubGVuZ3RoIT09MDtpZihMKXtpZih1PVQubGVuZ3RoPT09MD92b2lkIDA6dlt2Lmxlbmd0aC0xXSxkPXkseT1ULnBvcCgpLHEpaWYocyl7ZD1kLnNsaWNlKCk7bGV0IEU9MDtmb3IoY29uc3RbdyxrXW9mIGgpe2NvbnN0IFA9dy1FO2s9PT1udWxsPyhkLnNwbGljZShQLDEpLEUrKyk6ZFtQXT1rfX1lbHNle2Q9RCh7fSxkKTtmb3IoY29uc3RbRSx3XW9mIGgpZFtFXT13fWM9ci5pbmRleCxvPXIua2V5cyxoPXIuZWRpdHMscz1yLmluQXJyYXkscj1yLnByZXZ9ZWxzZSBpZih5KXtpZih1PXM/YzpvW2NdLGQ9eVt1XSxkPT1udWxsKWNvbnRpbnVlO3YucHVzaCh1KX1sZXQgZztpZighQXJyYXkuaXNBcnJheShkKSl7dmFyIG0sTjtUdChkKXx8bGUoITEsYEludmFsaWQgQVNUIE5vZGU6ICR7WWUoZCl9LmApO2NvbnN0IEU9TD8obT1pLmdldChkLmtpbmQpKT09PW51bGx8fG09PT12b2lkIDA/dm9pZCAwOm0ubGVhdmU6KE49aS5nZXQoZC5raW5kKSk9PT1udWxsfHxOPT09dm9pZCAwP3ZvaWQgMDpOLmVudGVyO2lmKGc9RT09bnVsbD92b2lkIDA6RS5jYWxsKHQsZCx1LHksdixUKSxnPT09VW4pYnJlYWs7aWYoZz09PSExKXtpZighTCl7di5wb3AoKTtjb250aW51ZX19ZWxzZSBpZihnIT09dm9pZCAwJiYoaC5wdXNoKFt1LGddKSwhTCkpaWYoVHQoZykpZD1nO2Vsc2V7di5wb3AoKTtjb250aW51ZX19aWYoZz09PXZvaWQgMCYmcSYmaC5wdXNoKFt1LGRdKSxMKXYucG9wKCk7ZWxzZXt2YXIgUjtyPXtpbkFycmF5OnMsaW5kZXg6YyxrZXlzOm8sZWRpdHM6aCxwcmV2OnJ9LHM9QXJyYXkuaXNBcnJheShkKSxvPXM/ZDooUj1uW2Qua2luZF0pIT09bnVsbCYmUiE9PXZvaWQgMD9SOltdLGM9LTEsaD1bXSx5JiZULnB1c2goeSkseT1kfX13aGlsZShyIT09dm9pZCAwKTtyZXR1cm4gaC5sZW5ndGghPT0wP2hbaC5sZW5ndGgtMV1bMV06ZX1mdW5jdGlvbiBxbihlLHQpe2NvbnN0IG49ZVt0XTtyZXR1cm4gdHlwZW9mIG49PSJvYmplY3QiP246dHlwZW9mIG49PSJmdW5jdGlvbiI/e2VudGVyOm4sbGVhdmU6dm9pZCAwfTp7ZW50ZXI6ZS5lbnRlcixsZWF2ZTplLmxlYXZlfX1mdW5jdGlvbiBqbihlKXtyZXR1cm4gVm4oZSx6bil9Y29uc3QgR249ODAsem49e05hbWU6e2xlYXZlOmU9PmUudmFsdWV9LFZhcmlhYmxlOntsZWF2ZTplPT4iJCIrZS5uYW1lfSxEb2N1bWVudDp7bGVhdmU6ZT0+cChlLmRlZmluaXRpb25zLGAKCmApfSxPcGVyYXRpb25EZWZpbml0aW9uOntsZWF2ZShlKXtjb25zdCB0PU8oIigiLHAoZS52YXJpYWJsZURlZmluaXRpb25zLCIsICIpLCIpIiksbj1wKFtlLm9wZXJhdGlvbixwKFtlLm5hbWUsdF0pLHAoZS5kaXJlY3RpdmVzLCIgIildLCIgIik7cmV0dXJuKG49PT0icXVlcnkiPyIiOm4rIiAiKStlLnNlbGVjdGlvblNldH19LFZhcmlhYmxlRGVmaW5pdGlvbjp7bGVhdmU6KHt2YXJpYWJsZTplLHR5cGU6dCxkZWZhdWx0VmFsdWU6bixkaXJlY3RpdmVzOml9KT0+ZSsiOiAiK3QrTygiID0gIixuKStPKCIgIixwKGksIiAiKSl9LFNlbGVjdGlvblNldDp7bGVhdmU6KHtzZWxlY3Rpb25zOmV9KT0+cmUoZSl9LEZpZWxkOntsZWF2ZSh7YWxpYXM6ZSxuYW1lOnQsYXJndW1lbnRzOm4sZGlyZWN0aXZlczppLHNlbGVjdGlvblNldDpyfSl7Y29uc3Qgcz1PKCIiLGUsIjogIikrdDtsZXQgbz1zK08oIigiLHAobiwiLCAiKSwiKSIpO3JldHVybiBvLmxlbmd0aD5HbiYmKG89cytPKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApKSxwKFtvLHAoaSwiICIpLHJdLCIgIil9fSxBcmd1bWVudDp7bGVhdmU6KHtuYW1lOmUsdmFsdWU6dH0pPT5lKyI6ICIrdH0sRnJhZ21lbnRTcHJlYWQ6e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dH0pPT4iLi4uIitlK08oIiAiLHAodCwiICIpKX0sSW5saW5lRnJhZ21lbnQ6e2xlYXZlOih7dHlwZUNvbmRpdGlvbjplLGRpcmVjdGl2ZXM6dCxzZWxlY3Rpb25TZXQ6bn0pPT5wKFsiLi4uIixPKCJvbiAiLGUpLHAodCwiICIpLG5dLCIgIil9LEZyYWdtZW50RGVmaW5pdGlvbjp7bGVhdmU6KHtuYW1lOmUsdHlwZUNvbmRpdGlvbjp0LHZhcmlhYmxlRGVmaW5pdGlvbnM6bixkaXJlY3RpdmVzOmksc2VsZWN0aW9uU2V0OnJ9KT0+YGZyYWdtZW50ICR7ZX0ke08oIigiLHAobiwiLCAiKSwiKSIpfSBvbiAke3R9ICR7TygiIixwKGksIiAiKSwiICIpfWArcn0sSW50VmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxGbG9hdFZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sU3RyaW5nVmFsdWU6e2xlYXZlOih7dmFsdWU6ZSxibG9jazp0fSk9PnQ/bW4oZSk6Rm4oZSl9LEJvb2xlYW5WYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmU/InRydWUiOiJmYWxzZSJ9LE51bGxWYWx1ZTp7bGVhdmU6KCk9PiJudWxsIn0sRW51bVZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sTGlzdFZhbHVlOntsZWF2ZTooe3ZhbHVlczplfSk9PiJbIitwKGUsIiwgIikrIl0ifSxPYmplY3RWYWx1ZTp7bGVhdmU6KHtmaWVsZHM6ZX0pPT4ieyIrcChlLCIsICIpKyJ9In0sT2JqZWN0RmllbGQ6e2xlYXZlOih7bmFtZTplLHZhbHVlOnR9KT0+ZSsiOiAiK3R9LERpcmVjdGl2ZTp7bGVhdmU6KHtuYW1lOmUsYXJndW1lbnRzOnR9KT0+IkAiK2UrTygiKCIscCh0LCIsICIpLCIpIil9LE5hbWVkVHlwZTp7bGVhdmU6KHtuYW1lOmV9KT0+ZX0sTGlzdFR5cGU6e2xlYXZlOih7dHlwZTplfSk9PiJbIitlKyJdIn0sTm9uTnVsbFR5cGU6e2xlYXZlOih7dHlwZTplfSk9PmUrIiEifSxTY2hlbWFEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsZGlyZWN0aXZlczp0LG9wZXJhdGlvblR5cGVzOm59KT0+TygiIixlLGAKYCkrcChbInNjaGVtYSIscCh0LCIgIikscmUobildLCIgIil9LE9wZXJhdGlvblR5cGVEZWZpbml0aW9uOntsZWF2ZTooe29wZXJhdGlvbjplLHR5cGU6dH0pPT5lKyI6ICIrdH0sU2NhbGFyVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpufSk9Pk8oIiIsZSxgCmApK3AoWyJzY2FsYXIiLHQscChuLCIgIildLCIgIil9LE9iamVjdFR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGludGVyZmFjZXM6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KT0+TygiIixlLGAKYCkrcChbInR5cGUiLHQsTygiaW1wbGVtZW50cyAiLHAobiwiICYgIikpLHAoaSwiICIpLHJlKHIpXSwiICIpfSxGaWVsZERlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsYXJndW1lbnRzOm4sdHlwZTppLGRpcmVjdGl2ZXM6cn0pPT5PKCIiLGUsYApgKSt0KyhDdChuKT9PKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApOk8oIigiLHAobiwiLCAiKSwiKSIpKSsiOiAiK2krTygiICIscChyLCIgIikpfSxJbnB1dFZhbHVlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCx0eXBlOm4sZGVmYXVsdFZhbHVlOmksZGlyZWN0aXZlczpyfSk9Pk8oIiIsZSxgCmApK3AoW3QrIjogIituLE8oIj0gIixpKSxwKHIsIiAiKV0sIiAiKX0sSW50ZXJmYWNlVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pPT5PKCIiLGUsYApgKStwKFsiaW50ZXJmYWNlIix0LE8oImltcGxlbWVudHMgIixwKG4sIiAmICIpKSxwKGksIiAiKSxyZShyKV0sIiAiKX0sVW5pb25UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sdHlwZXM6aX0pPT5PKCIiLGUsYApgKStwKFsidW5pb24iLHQscChuLCIgIiksTygiPSAiLHAoaSwiIHwgIikpXSwiICIpfSxFbnVtVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLHZhbHVlczppfSk9Pk8oIiIsZSxgCmApK3AoWyJlbnVtIix0LHAobiwiICIpLHJlKGkpXSwiICIpfSxFbnVtVmFsdWVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bn0pPT5PKCIiLGUsYApgKStwKFt0LHAobiwiICIpXSwiICIpfSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5PKCIiLGUsYApgKStwKFsiaW5wdXQiLHQscChuLCIgIikscmUoaSldLCIgIil9LERpcmVjdGl2ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsYXJndW1lbnRzOm4scmVwZWF0YWJsZTppLGxvY2F0aW9uczpyfSk9Pk8oIiIsZSxgCmApKyJkaXJlY3RpdmUgQCIrdCsoQ3Qobik/TyhgKApgLENlKHAobixgCmApKSxgCilgKTpPKCIoIixwKG4sIiwgIiksIikiKSkrKGk/IiByZXBlYXRhYmxlIjoiIikrIiBvbiAiK3AociwiIHwgIil9LFNjaGVtYUV4dGVuc2lvbjp7bGVhdmU6KHtkaXJlY3RpdmVzOmUsb3BlcmF0aW9uVHlwZXM6dH0pPT5wKFsiZXh0ZW5kIHNjaGVtYSIscChlLCIgIikscmUodCldLCIgIil9LFNjYWxhclR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dH0pPT5wKFsiZXh0ZW5kIHNjYWxhciIsZSxwKHQsIiAiKV0sIiAiKX0sT2JqZWN0VHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsaW50ZXJmYWNlczp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5wKFsiZXh0ZW5kIHR5cGUiLGUsTygiaW1wbGVtZW50cyAiLHAodCwiICYgIikpLHAobiwiICIpLHJlKGkpXSwiICIpfSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxpbnRlcmZhY2VzOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9PnAoWyJleHRlbmQgaW50ZXJmYWNlIixlLE8oImltcGxlbWVudHMgIixwKHQsIiAmICIpKSxwKG4sIiAiKSxyZShpKV0sIiAiKX0sVW5pb25UeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsdHlwZXM6bn0pPT5wKFsiZXh0ZW5kIHVuaW9uIixlLHAodCwiICIpLE8oIj0gIixwKG4sIiB8ICIpKV0sIiAiKX0sRW51bVR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCx2YWx1ZXM6bn0pPT5wKFsiZXh0ZW5kIGVudW0iLGUscCh0LCIgIikscmUobildLCIgIil9LElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LGZpZWxkczpufSk9PnAoWyJleHRlbmQgaW5wdXQiLGUscCh0LCIgIikscmUobildLCIgIil9fTtmdW5jdGlvbiBwKGUsdD0iIil7dmFyIG47cmV0dXJuKG49ZT09bnVsbD92b2lkIDA6ZS5maWx0ZXIoaT0+aSkuam9pbih0KSkhPT1udWxsJiZuIT09dm9pZCAwP246IiJ9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIE8oYHsKYCxDZShwKGUsYApgKSksYAp9YCl9ZnVuY3Rpb24gTyhlLHQsbj0iIil7cmV0dXJuIHQhPW51bGwmJnQhPT0iIj9lK3QrbjoiIn1mdW5jdGlvbiBDZShlKXtyZXR1cm4gTygiICAiLGUucmVwbGFjZSgvXG4vZyxgCiAgYCkpfWZ1bmN0aW9uIEN0KGUpe3ZhciB0O3JldHVybih0PWU9PW51bGw/dm9pZCAwOmUuc29tZShuPT5uLmluY2x1ZGVzKGAKYCkpKSE9PW51bGwmJnQhPT12b2lkIDA/dDohMX1jb25zdCBSdD1lPT57dmFyIGkscjtsZXQgdDtjb25zdCBuPWUuZGVmaW5pdGlvbnMuZmlsdGVyKHM9PnMua2luZD09PSJPcGVyYXRpb25EZWZpbml0aW9uIik7cmV0dXJuIG4ubGVuZ3RoPT09MSYmKHQ9KHI9KGk9blswXSk9PW51bGw/dm9pZCAwOmkubmFtZSk9PW51bGw/dm9pZCAwOnIudmFsdWUpLHR9LEplPWU9PntpZih0eXBlb2YgZT09InN0cmluZyIpe2xldCBuO3RyeXtjb25zdCBpPUR0KGUpO249UnQoaSl9Y2F0Y2goaSl7fXJldHVybntxdWVyeTplLG9wZXJhdGlvbk5hbWU6bn19Y29uc3QgdD1SdChlKTtyZXR1cm57cXVlcnk6am4oZSksb3BlcmF0aW9uTmFtZTp0fX07Y2xhc3MgZGUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4pe2NvbnN0IGk9YCR7ZGUuZXh0cmFjdE1lc3NhZ2UodCl9OiAke0pTT04uc3RyaW5naWZ5KHtyZXNwb25zZTp0LHJlcXVlc3Q6bn0pfWA7c3VwZXIoaSksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZGUucHJvdG90eXBlKSx0aGlzLnJlc3BvbnNlPXQsdGhpcy5yZXF1ZXN0PW4sdHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPT0iZnVuY3Rpb24iJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGRlKX1zdGF0aWMgZXh0cmFjdE1lc3NhZ2UodCl7dmFyIG4saSxyO3JldHVybihyPShpPShuPXQuZXJyb3JzKT09bnVsbD92b2lkIDA6blswXSk9PW51bGw/dm9pZCAwOmkubWVzc2FnZSkhPW51bGw/cjpgR3JhcGhRTCBFcnJvciAoQ29kZTogJHt0LnN0YXR1c30pYH19dmFyIEhuPXR5cGVvZiBnbG9iYWxUaGlzIT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIj9nbG9iYWw6dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6e307ZnVuY3Rpb24gTHQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX12YXIgUWU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBzZWxmIT0idW5kZWZpbmVkIj9zZWxmOkhuLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7dGhpcy5mZXRjaD0hMSx0aGlzLkRPTUV4Y2VwdGlvbj1uLkRPTUV4Y2VwdGlvbn1yZXR1cm4gcy5wcm90b3R5cGU9bixuZXcgc30oKTsoZnVuY3Rpb24ocyl7KGZ1bmN0aW9uKG8pe3ZhciBjPXtzZWFyY2hQYXJhbXM6IlVSTFNlYXJjaFBhcmFtcyJpbiBzLGl0ZXJhYmxlOiJTeW1ib2wiaW4gcyYmIml0ZXJhdG9yImluIFN5bWJvbCxibG9iOiJGaWxlUmVhZGVyImluIHMmJiJCbG9iImluIHMmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChhKXtyZXR1cm4hMX19KCksZm9ybURhdGE6IkZvcm1EYXRhImluIHMsYXJyYXlCdWZmZXI6IkFycmF5QnVmZmVyImluIHN9O2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGEmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpfWlmKGMuYXJyYXlCdWZmZXIpdmFyIGQ9WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSx1PUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmQuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpPi0xfTtmdW5jdGlvbiB5KGEpe2lmKHR5cGVvZiBhIT0ic3RyaW5nIiYmKGE9U3RyaW5nKGEpKSwvW15hLXowLTlcLSMkJSYnKisuXl9gfH5dL2kudGVzdChhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZSIpO3JldHVybiBhLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gdihhKXtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoYT1TdHJpbmcoYSkpLGF9ZnVuY3Rpb24gVChhKXt2YXIgZj17bmV4dDpmdW5jdGlvbigpe3ZhciBfPWEuc2hpZnQoKTtyZXR1cm57ZG9uZTpfPT09dm9pZCAwLHZhbHVlOl99fX07cmV0dXJuIGMuaXRlcmFibGUmJihmW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gZn0pLGZ9ZnVuY3Rpb24gbShhKXt0aGlzLm1hcD17fSxhIGluc3RhbmNlb2YgbT9hLmZvckVhY2goZnVuY3Rpb24oZixfKXt0aGlzLmFwcGVuZChfLGYpfSx0aGlzKTpBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmdW5jdGlvbihmKXt0aGlzLmFwcGVuZChmWzBdLGZbMV0pfSx0aGlzKTphJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3RoaXMuYXBwZW5kKGYsYVtmXSl9LHRoaXMpfW0ucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGYpe2E9eShhKSxmPXYoZik7dmFyIF89dGhpcy5tYXBbYV07dGhpcy5tYXBbYV09Xz9fKyIsICIrZjpmfSxtLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMubWFwW3koYSldfSxtLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9eShhKSx0aGlzLmhhcyhhKT90aGlzLm1hcFthXTpudWxsfSxtLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KHkoYSkpfSxtLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxmKXt0aGlzLm1hcFt5KGEpXT12KGYpfSxtLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsZil7Zm9yKHZhciBfIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KF8pJiZhLmNhbGwoZix0aGlzLm1hcFtfXSxfLHRoaXMpfSxtLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihmLF8pe2EucHVzaChfKX0pLFQoYSl9LG0ucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZil7YS5wdXNoKGYpfSksVChhKX0sbS5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZixfKXthLnB1c2goW18sZl0pfSksVChhKX0sYy5pdGVyYWJsZSYmKG0ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09bS5wcm90b3R5cGUuZW50cmllcyk7ZnVuY3Rpb24gTihhKXtpZihhLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7YS5ib2R5VXNlZD0hMH1mdW5jdGlvbiBSKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLF8pe2Eub25sb2FkPWZ1bmN0aW9uKCl7ZihhLnJlc3VsdCl9LGEub25lcnJvcj1mdW5jdGlvbigpe18oYS5lcnJvcil9fSl9ZnVuY3Rpb24gTChhKXt2YXIgZj1uZXcgRmlsZVJlYWRlcixfPVIoZik7cmV0dXJuIGYucmVhZEFzQXJyYXlCdWZmZXIoYSksX31mdW5jdGlvbiBxKGEpe3ZhciBmPW5ldyBGaWxlUmVhZGVyLF89UihmKTtyZXR1cm4gZi5yZWFkQXNUZXh0KGEpLF99ZnVuY3Rpb24gZyhhKXtmb3IodmFyIGY9bmV3IFVpbnQ4QXJyYXkoYSksXz1uZXcgQXJyYXkoZi5sZW5ndGgpLFM9MDtTPGYubGVuZ3RoO1MrKylfW1NdPVN0cmluZy5mcm9tQ2hhckNvZGUoZltTXSk7cmV0dXJuIF8uam9pbigiIil9ZnVuY3Rpb24gRShhKXtpZihhLnNsaWNlKXJldHVybiBhLnNsaWNlKDApO3ZhciBmPW5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7cmV0dXJuIGYuc2V0KG5ldyBVaW50OEFycmF5KGEpKSxmLmJ1ZmZlcn1mdW5jdGlvbiB3KCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oYSl7dGhpcy5fYm9keUluaXQ9YSxhP3R5cGVvZiBhPT0ic3RyaW5nIj90aGlzLl9ib2R5VGV4dD1hOmMuYmxvYiYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5QmxvYj1hOmMuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlGb3JtRGF0YT1hOmMuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keVRleHQ9YS50b1N0cmluZygpOmMuYXJyYXlCdWZmZXImJmMuYmxvYiYmaChhKT8odGhpcy5fYm9keUFycmF5QnVmZmVyPUUoYS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk6Yy5hcnJheUJ1ZmZlciYmKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpfHx1KGEpKT90aGlzLl9ib2R5QXJyYXlCdWZmZXI9RShhKTp0aGlzLl9ib2R5VGV4dD1hPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTp0aGlzLl9ib2R5VGV4dD0iIix0aGlzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKXx8KHR5cGVvZiBhPT0ic3RyaW5nIj90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOmMuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxjLmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgYT1OKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Tih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihMKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBhPU4odGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gcSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sYy5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbih4KX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfXZhciBrPVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07ZnVuY3Rpb24gUChhKXt2YXIgZj1hLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGsuaW5kZXhPZihmKT4tMT9mOmF9ZnVuY3Rpb24gSShhLGYpe2Y9Znx8e307dmFyIF89Zi5ib2R5O2lmKGEgaW5zdGFuY2VvZiBJKXtpZihhLmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpO3RoaXMudXJsPWEudXJsLHRoaXMuY3JlZGVudGlhbHM9YS5jcmVkZW50aWFscyxmLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG0oYS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9YS5tZXRob2QsdGhpcy5tb2RlPWEubW9kZSx0aGlzLnNpZ25hbD1hLnNpZ25hbCwhXyYmYS5fYm9keUluaXQhPW51bGwmJihfPWEuX2JvZHlJbml0LGEuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGEpO2lmKHRoaXMuY3JlZGVudGlhbHM9Zi5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8InNhbWUtb3JpZ2luIiwoZi5oZWFkZXJzfHwhdGhpcy5oZWFkZXJzKSYmKHRoaXMuaGVhZGVycz1uZXcgbShmLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1QKGYubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIpLHRoaXMubW9kZT1mLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnNpZ25hbD1mLnNpZ25hbHx8dGhpcy5zaWduYWwsdGhpcy5yZWZlcnJlcj1udWxsLCh0aGlzLm1ldGhvZD09PSJHRVQifHx0aGlzLm1ldGhvZD09PSJIRUFEIikmJl8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShfKX1JLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSSh0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9O2Z1bmN0aW9uIHgoYSl7dmFyIGY9bmV3IEZvcm1EYXRhO3JldHVybiBhLnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24oXyl7aWYoXyl7dmFyIFM9Xy5zcGxpdCgiPSIpLEM9Uy5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxBPVMuam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTtmLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQoQyksZGVjb2RlVVJJQ29tcG9uZW50KEEpKX19KSxmfWZ1bmN0aW9uIHooYSl7dmFyIGY9bmV3IG0sXz1hLnJlcGxhY2UoL1xyP1xuW1x0IF0rL2csIiAiKTtyZXR1cm4gXy5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3ZhciBDPVMuc3BsaXQoIjoiKSxBPUMuc2hpZnQoKS50cmltKCk7aWYoQSl7dmFyIEs9Qy5qb2luKCI6IikudHJpbSgpO2YuYXBwZW5kKEEsSyl9fSksZn13LmNhbGwoSS5wcm90b3R5cGUpO2Z1bmN0aW9uIFYoYSxmKXtmfHwoZj17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz1mLnN0YXR1cz09PXZvaWQgMD8yMDA6Zi5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGY/Zi5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBtKGYuaGVhZGVycyksdGhpcy51cmw9Zi51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGEpfXcuY2FsbChWLnByb3RvdHlwZSksVi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBtKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LFYuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVihudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIGEudHlwZT0iZXJyb3IiLGF9O3ZhciBIPVszMDEsMzAyLDMwMywzMDcsMzA4XTtWLnJlZGlyZWN0PWZ1bmN0aW9uKGEsZil7aWYoSC5pbmRleE9mKGYpPT09LTEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IFYobnVsbCx7c3RhdHVzOmYsaGVhZGVyczp7bG9jYXRpb246YX19KX0sby5ET01FeGNlcHRpb249cy5ET01FeGNlcHRpb247dHJ5e25ldyBvLkRPTUV4Y2VwdGlvbn1jYXRjaChhKXtvLkRPTUV4Y2VwdGlvbj1mdW5jdGlvbihmLF8pe3RoaXMubWVzc2FnZT1mLHRoaXMubmFtZT1fO3ZhciBTPUVycm9yKGYpO3RoaXMuc3RhY2s9Uy5zdGFja30sby5ET01FeGNlcHRpb24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I9by5ET01FeGNlcHRpb259ZnVuY3Rpb24gWChhLGYpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfLFMpe3ZhciBDPW5ldyBJKGEsZik7aWYoQy5zaWduYWwmJkMuc2lnbmFsLmFib3J0ZWQpcmV0dXJuIFMobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgQT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gSygpe0EuYWJvcnQoKX1BLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBqPXtzdGF0dXM6QS5zdGF0dXMsc3RhdHVzVGV4dDpBLnN0YXR1c1RleHQsaGVhZGVyczp6KEEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07ai51cmw9InJlc3BvbnNlVVJMImluIEE/QS5yZXNwb25zZVVSTDpqLmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIFc9InJlc3BvbnNlImluIEE/QS5yZXNwb25zZTpBLnJlc3BvbnNlVGV4dDtfKG5ldyBWKFcsaikpfSxBLm9uZXJyb3I9ZnVuY3Rpb24oKXtTKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LEEub250aW1lb3V0PWZ1bmN0aW9uKCl7UyhuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxBLm9uYWJvcnQ9ZnVuY3Rpb24oKXtTKG5ldyBvLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LEEub3BlbihDLm1ldGhvZCxDLnVybCwhMCksQy5jcmVkZW50aWFscz09PSJpbmNsdWRlIj9BLndpdGhDcmVkZW50aWFscz0hMDpDLmNyZWRlbnRpYWxzPT09Im9taXQiJiYoQS53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4gQSYmYy5ibG9iJiYoQS5yZXNwb25zZVR5cGU9ImJsb2IiKSxDLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihqLFcpe0Euc2V0UmVxdWVzdEhlYWRlcihXLGopfSksQy5zaWduYWwmJihDLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsSyksQS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtBLnJlYWR5U3RhdGU9PT00JiZDLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsSyl9KSxBLnNlbmQodHlwZW9mIEMuX2JvZHlJbml0PT0idW5kZWZpbmVkIj9udWxsOkMuX2JvZHlJbml0KX0pfXJldHVybiBYLnBvbHlmaWxsPSEwLHMuZmV0Y2h8fChzLmZldGNoPVgscy5IZWFkZXJzPW0scy5SZXF1ZXN0PUkscy5SZXNwb25zZT1WKSxvLkhlYWRlcnM9bSxvLlJlcXVlc3Q9SSxvLlJlc3BvbnNlPVYsby5mZXRjaD1YLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxvfSkoe30pfSkoaSksaS5mZXRjaC5wb255ZmlsbD0hMCxkZWxldGUgaS5mZXRjaC5wb2x5ZmlsbDt2YXIgcj1pO3Q9ci5mZXRjaCx0LmRlZmF1bHQ9ci5mZXRjaCx0LmZldGNoPXIuZmV0Y2gsdC5IZWFkZXJzPXIuSGVhZGVycyx0LlJlcXVlc3Q9ci5SZXF1ZXN0LHQuUmVzcG9uc2U9ci5SZXNwb25zZSxlLmV4cG9ydHM9dH0pKFFlLFFlLmV4cG9ydHMpO3ZhciBYZT1RZS5leHBvcnRzLFJlPUx0KFhlKSxZbj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0OlJlfSk7Y29uc3QgcGU9ZT0+e2xldCB0PXt9O3JldHVybiBlJiYodHlwZW9mIEhlYWRlcnMhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSGVhZGVyc3x8WW4mJlhlLkhlYWRlcnMmJmUgaW5zdGFuY2VvZiBYZS5IZWFkZXJzP3Q9JChlKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoW24saV0pPT57biYmaSE9PXZvaWQgMCYmKHRbbl09aSl9KTp0PWUpLHR9LFB0PWU9PmUucmVwbGFjZSgvKFtccyxdfCNbXlxuXHJdKykrL2csIiAiKS50cmltKCksSm49ZT0+e2lmKCFBcnJheS5pc0FycmF5KGUucXVlcnkpKXtjb25zdCBpPWUscj1bYHF1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFB0KGkucXVlcnkpKX1gXTtyZXR1cm4gZS52YXJpYWJsZXMmJnIucHVzaChgdmFyaWFibGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuanNvblNlcmlhbGl6ZXIuc3RyaW5naWZ5KGkudmFyaWFibGVzKSl9YCksaS5vcGVyYXRpb25OYW1lJiZyLnB1c2goYG9wZXJhdGlvbk5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoaS5vcGVyYXRpb25OYW1lKX1gKSxyLmpvaW4oIiYiKX1pZih0eXBlb2YgZS52YXJpYWJsZXMhPSJ1bmRlZmluZWQiJiYhQXJyYXkuaXNBcnJheShlLnZhcmlhYmxlcykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHF1ZXJ5IHdpdGggZ2l2ZW4gdmFyaWFibGUgdHlwZSwgYXJyYXkgZXhwZWN0ZWQiKTtjb25zdCB0PWUsbj1lLnF1ZXJ5LnJlZHVjZSgoaSxyLHMpPT4oaS5wdXNoKHtxdWVyeTpQdChyKSx2YXJpYWJsZXM6dC52YXJpYWJsZXM/dC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkodC52YXJpYWJsZXNbc10pOnZvaWQgMH0pLGkpLFtdKTtyZXR1cm5gcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQodC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkobikpfWB9LFFuPWU9PnQ9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe3ZhciBOO2NvbnN0e3VybDpuLHF1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGZldGNoOm8sZmV0Y2hPcHRpb25zOmMsbWlkZGxld2FyZTpofT10LGQ9RCh7fSx0LmhlYWRlcnMpO2xldCB1PSIiLHk7ZT09PSJQT1NUIj8oeT1XbihpLHIscyxjLmpzb25TZXJpYWxpemVyKSx0eXBlb2YgeT09InN0cmluZyImJihkWyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24vanNvbiIpKTp1PUpuKHtxdWVyeTppLHZhcmlhYmxlczpyLG9wZXJhdGlvbk5hbWU6cyxqc29uU2VyaWFsaXplcjooTj1jLmpzb25TZXJpYWxpemVyKSE9bnVsbD9OOkZ9KTtjb25zdCB2PUQoe21ldGhvZDplLGhlYWRlcnM6ZCxib2R5Onl9LGMpO2xldCBUPW4sbT12O2lmKGgpe2NvbnN0IFI9eWllbGQgUHJvbWlzZS5yZXNvbHZlKGgoVWUoRCh7fSx2KSx7dXJsOm4sb3BlcmF0aW9uTmFtZTpzLHZhcmlhYmxlczpyfSkpKSx7dXJsOnF9PVIsZz12ZShSLFsidXJsIl0pO1Q9cSxtPWd9cmV0dXJuIHUmJihUPWAke1R9PyR7dX1gKSx5aWVsZCBvKFQsbSl9KTtjbGFzcyBYbntjb25zdHJ1Y3Rvcih0LG49e30pe3RoaXMudXJsPXQsdGhpcy5yZXF1ZXN0Q29uZmlnPW4sdGhpcy5yYXdSZXF1ZXN0PSguLi5pKT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3RbcixzLG9dPWksYz1PZShyLHMsbyksUj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6aCxmZXRjaDpkPVJlLG1ldGhvZDp1PSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTp5LHJlc3BvbnNlTWlkZGxld2FyZTp2fT1SLFQ9dmUoUixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6bX09dGhpcztjLnNpZ25hbCE9PXZvaWQgMCYmKFQuc2lnbmFsPWMuc2lnbmFsKTtjb25zdHtvcGVyYXRpb25OYW1lOk59PUplKGMucXVlcnkpO3JldHVybiBXZSh7dXJsOm0scXVlcnk6Yy5xdWVyeSx2YXJpYWJsZXM6Yy52YXJpYWJsZXMsaGVhZGVyczpEKEQoe30scGUoWmUoaCkpKSxwZShjLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTpOLGZldGNoOmQsbWV0aG9kOnUsZmV0Y2hPcHRpb25zOlQsbWlkZGxld2FyZTp5fSkudGhlbihMPT4odiYmdihMKSxMKSkuY2F0Y2goTD0+e3Rocm93IHYmJnYoTCksTH0pfSl9cmVxdWVzdCh0LC4uLm4pe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtpLHJdPW4scz1lZSh0LGksciksTj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6byxmZXRjaDpjPVJlLG1ldGhvZDpoPSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTpkLHJlc3BvbnNlTWlkZGxld2FyZTp1fT1OLHk9dmUoTixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6dn09dGhpcztzLnNpZ25hbCE9PXZvaWQgMCYmKHkuc2lnbmFsPXMuc2lnbmFsKTtjb25zdHtxdWVyeTpULG9wZXJhdGlvbk5hbWU6bX09SmUocy5kb2N1bWVudCk7cmV0dXJuIFdlKHt1cmw6dixxdWVyeTpULHZhcmlhYmxlczpzLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShaZShvKSkpLHBlKHMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOm0sZmV0Y2g6YyxtZXRob2Q6aCxmZXRjaE9wdGlvbnM6eSxtaWRkbGV3YXJlOmR9KS50aGVuKFI9Pih1JiZ1KFIpLFIuZGF0YSkpLmNhdGNoKFI9Pnt0aHJvdyB1JiZ1KFIpLFJ9KX0pfWJhdGNoUmVxdWVzdHModCxuKXt2YXIgZDtjb25zdCBpPVZlKHQsbiksaD10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6cn09aCxzPXZlKGgsWyJoZWFkZXJzIl0pO2kuc2lnbmFsIT09dm9pZCAwJiYocy5zaWduYWw9aS5zaWduYWwpO2NvbnN0IG89aS5kb2N1bWVudHMubWFwKCh7ZG9jdW1lbnQ6dX0pPT5KZSh1KS5xdWVyeSksYz1pLmRvY3VtZW50cy5tYXAoKHt2YXJpYWJsZXM6dX0pPT51KTtyZXR1cm4gV2Uoe3VybDp0aGlzLnVybCxxdWVyeTpvLHZhcmlhYmxlczpjLGhlYWRlcnM6RChEKHt9LHBlKFplKHIpKSkscGUoaS5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6dm9pZCAwLGZldGNoOihkPXRoaXMucmVxdWVzdENvbmZpZy5mZXRjaCkhPW51bGw/ZDpSZSxtZXRob2Q6dGhpcy5yZXF1ZXN0Q29uZmlnLm1ldGhvZHx8IlBPU1QiLGZldGNoT3B0aW9uczpzLG1pZGRsZXdhcmU6dGhpcy5yZXF1ZXN0Q29uZmlnLnJlcXVlc3RNaWRkbGV3YXJlfSkudGhlbih1PT4odGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1LmRhdGEpKS5jYXRjaCh1PT57dGhyb3cgdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1fSl9c2V0SGVhZGVycyh0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q29uZmlnLmhlYWRlcnM9dCx0aGlzfXNldEhlYWRlcih0LG4pe2NvbnN0e2hlYWRlcnM6aX09dGhpcy5yZXF1ZXN0Q29uZmlnO3JldHVybiBpP2lbdF09bjp0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz17W3RdOm59LHRoaXN9c2V0RW5kcG9pbnQodCl7cmV0dXJuIHRoaXMudXJsPXQsdGhpc319Y29uc3QgV2U9ZT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIHUseTtjb25zdHtxdWVyeTp0LHZhcmlhYmxlczpuLGZldGNoT3B0aW9uczppfT1lLHI9UW4oQigodT1lLm1ldGhvZCkhPW51bGw/dToicG9zdCIpKSxzPUFycmF5LmlzQXJyYXkoZS5xdWVyeSksbz15aWVsZCByKGUpLGM9eWllbGQgWm4obywoeT1pLmpzb25TZXJpYWxpemVyKSE9bnVsbD95OkYpLGg9QXJyYXkuaXNBcnJheShjKT8hYy5zb21lKCh7ZGF0YTpUfSk9PiFUKTohIWMuZGF0YSxkPUFycmF5LmlzQXJyYXkoYyl8fCFjLmVycm9yc3x8QXJyYXkuaXNBcnJheShjLmVycm9ycykmJiFjLmVycm9ycy5sZW5ndGh8fGkuZXJyb3JQb2xpY3k9PT0iYWxsInx8aS5lcnJvclBvbGljeT09PSJpZ25vcmUiO2lmKG8ub2smJmQmJmgpe2NvbnN0IHY9KEFycmF5LmlzQXJyYXkoYyksYykse2Vycm9yczpUfT12LG09dmUodixbImVycm9ycyJdKSxOPWkuZXJyb3JQb2xpY3k9PT0iaWdub3JlIj9tOmM7cmV0dXJuIFVlKEQoe30scz97ZGF0YTpOfTpOKSx7aGVhZGVyczpvLmhlYWRlcnMsc3RhdHVzOm8uc3RhdHVzfSl9ZWxzZXtjb25zdCBUPXR5cGVvZiBjPT0ic3RyaW5nIj97ZXJyb3I6Y306Yzt0aHJvdyBuZXcgZGUoVWUoRCh7fSxUKSx7c3RhdHVzOm8uc3RhdHVzLGhlYWRlcnM6by5oZWFkZXJzfSkse3F1ZXJ5OnQsdmFyaWFibGVzOm59KX19KSxXbj0oZSx0LG4saSk9Pntjb25zdCByPWkhPW51bGw/aTpGO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiByLnN0cmluZ2lmeSh7cXVlcnk6ZSx2YXJpYWJsZXM6dCxvcGVyYXRpb25OYW1lOm59KTtpZih0eXBlb2YgdCE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHM9ZS5yZWR1Y2UoKG8sYyxoKT0+KG8ucHVzaCh7cXVlcnk6Yyx2YXJpYWJsZXM6dD90W2hdOnZvaWQgMH0pLG8pLFtdKTtyZXR1cm4gci5zdHJpbmdpZnkocyl9LFpuPShlLHQpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgbjtyZXR1cm4gZS5oZWFkZXJzLmZvckVhY2goKGkscik9PntyLnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIiYmKG49aSl9KSxuJiYobi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKXx8bi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2dyYXBocWwranNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbC1yZXNwb25zZStqc29uIikpP3QucGFyc2UoeWllbGQgZS50ZXh0KCkpOmUudGV4dCgpfSksWmU9ZT0+dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSgpOmU7dmFyIEtlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt0PWUuZXhwb3J0cz1uLHQuZ2V0U2VyaWFsaXplPWk7ZnVuY3Rpb24gbihyLHMsbyxjKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixpKHMsYyksbyl9ZnVuY3Rpb24gaShyLHMpe3ZhciBvPVtdLGM9W107cmV0dXJuIHM9PW51bGwmJihzPWZ1bmN0aW9uKGgsZCl7cmV0dXJuIG9bMF09PT1kPyJbQ2lyY3VsYXIgfl0iOiJbQ2lyY3VsYXIgfi4iK2Muc2xpY2UoMCxvLmluZGV4T2YoZCkpLmpvaW4oIi4iKSsiXSJ9KSxmdW5jdGlvbihoLGQpe2lmKG8ubGVuZ3RoPjApe3ZhciB1PW8uaW5kZXhPZih0aGlzKTt+dT9vLnNwbGljZSh1KzEpOm8ucHVzaCh0aGlzKSx+dT9jLnNwbGljZSh1LDEvMCxoKTpjLnB1c2goaCksfm8uaW5kZXhPZihkKSYmKGQ9cy5jYWxsKHRoaXMsaCxkKSl9ZWxzZSBvLnB1c2goZCk7cmV0dXJuIHI9PW51bGw/ZDpyLmNhbGwodGhpcyxoLGQpfX19KShLZSxLZS5leHBvcnRzKTt2YXIgS249S2UuZXhwb3J0cyxtZT1MdChLbik7Y29uc3QgRnQ9MWUzKjE1O3ZhciBMZT1mdW5jdGlvbigpe3JldHVybiBMZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0xLHI9YXJndW1lbnRzLmxlbmd0aDtpPHI7aSsrKXtuPWFyZ3VtZW50c1tpXTtmb3IodmFyIHMgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixzKSYmKHRbc109bltzXSl9cmV0dXJuIHR9LExlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dHlwZW9mIFN1cHByZXNzZWRFcnJvcj09ImZ1bmN0aW9uIiYmU3VwcHJlc3NlZEVycm9yO3ZhciBQZT1uZXcgTWFwLGV0PW5ldyBNYXAsTXQ9ITAsRmU9ITE7ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xzLF0rL2csIiAiKS50cmltKCl9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIEJ0KGUuc291cmNlLmJvZHkuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpKX1mdW5jdGlvbiB0cihlKXt2YXIgdD1uZXcgU2V0LG49W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLmtpbmQ9PT0iRnJhZ21lbnREZWZpbml0aW9uIil7dmFyIHI9aS5uYW1lLnZhbHVlLHM9ZXIoaS5sb2MpLG89ZXQuZ2V0KHIpO28mJiFvLmhhcyhzKT9NdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBmcmFnbWVudCB3aXRoIG5hbWUgIityK2AgYWxyZWFkeSBleGlzdHMuCmdyYXBocWwtdGFnIGVuZm9yY2VzIGFsbCBmcmFnbWVudCBuYW1lcyBhY3Jvc3MgeW91ciBhcHBsaWNhdGlvbiB0byBiZSB1bmlxdWU7IHJlYWQgbW9yZSBhYm91dAp0aGlzIGluIHRoZSBkb2NzOiBodHRwOi8vZGV2LmFwb2xsb2RhdGEuY29tL2NvcmUvZnJhZ21lbnRzLmh0bWwjdW5pcXVlLW5hbWVzYCk6b3x8ZXQuc2V0KHIsbz1uZXcgU2V0KSxvLmFkZChzKSx0LmhhcyhzKXx8KHQuYWRkKHMpLG4ucHVzaChpKSl9ZWxzZSBuLnB1c2goaSl9KSxMZShMZSh7fSxlKSx7ZGVmaW5pdGlvbnM6bn0pfWZ1bmN0aW9uIG5yKGUpe3ZhciB0PW5ldyBTZXQoZS5kZWZpbml0aW9ucyk7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubG9jJiZkZWxldGUgaS5sb2MsT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgcz1pW3JdO3MmJnR5cGVvZiBzPT0ib2JqZWN0IiYmdC5hZGQocyl9KX0pO3ZhciBuPWUubG9jO3JldHVybiBuJiYoZGVsZXRlIG4uc3RhcnRUb2tlbixkZWxldGUgbi5lbmRUb2tlbiksZX1mdW5jdGlvbiBycihlKXt2YXIgdD1CdChlKTtpZighUGUuaGFzKHQpKXt2YXIgbj1EdChlLHtleHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpGZSxhbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzOkZlfSk7aWYoIW58fG4ua2luZCE9PSJEb2N1bWVudCIpdGhyb3cgbmV3IEVycm9yKCJOb3QgYSB2YWxpZCBHcmFwaFFMIGRvY3VtZW50LiIpO1BlLnNldCh0LG5yKHRyKG4pKSl9cmV0dXJuIFBlLmdldCh0KX1mdW5jdGlvbiBRKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9W2VdKTt2YXIgaT1lWzBdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocixzKXtyJiZyLmtpbmQ9PT0iRG9jdW1lbnQiP2krPXIubG9jLnNvdXJjZS5ib2R5OmkrPXIsaSs9ZVtzKzFdfSkscnIoaSl9ZnVuY3Rpb24gaXIoKXtQZS5jbGVhcigpLGV0LmNsZWFyKCl9ZnVuY3Rpb24gc3IoKXtNdD0hMX1mdW5jdGlvbiBvcigpe0ZlPSEwfWZ1bmN0aW9uIGFyKCl7RmU9ITF9dmFyIE5lPXtncWw6USxyZXNldENhY2hlczppcixkaXNhYmxlRnJhZ21lbnRXYXJuaW5nczpzcixlbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpvcixkaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM6YXJ9OyhmdW5jdGlvbihlKXtlLmdxbD1OZS5ncWwsZS5yZXNldENhY2hlcz1OZS5yZXNldENhY2hlcyxlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzPU5lLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzLGUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9TmUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXMsZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9TmUuZGlzYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzfSkoUXx8KFE9e30pKSxRLmRlZmF1bHQ9UTtjb25zdCAkdD1RYAoJZnJhZ21lbnQgTWF0Y2hQYXJ0cyBvbiBNYXRjaENvbmZpZyB7CgkJcmVnZXhWYWx1ZQoJCW1hdGNoVmFsdWUKCX0KYCxjcj1RYAoJbXV0YXRpb24gUHVzaFBheWxvYWQoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IElEIQoJCSRldmVudHM6IFJlcGxheUV2ZW50c0lucHV0IQoJCSRtZXNzYWdlczogU3RyaW5nIQoJCSRyZXNvdXJjZXM6IFN0cmluZyEKCQkkd2ViX3NvY2tldF9ldmVudHM6IFN0cmluZyEKCQkkZXJyb3JzOiBbRXJyb3JPYmplY3RJbnB1dF0hCgkJJGlzX2JlYWNvbjogQm9vbGVhbgoJCSRoYXNfc2Vzc2lvbl91bmxvYWRlZDogQm9vbGVhbgoJCSRoaWdobGlnaHRfbG9nczogU3RyaW5nCgkpIHsKCQlwdXNoUGF5bG9hZCgKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwYXlsb2FkX2lkOiAkcGF5bG9hZF9pZAoJCQlldmVudHM6ICRldmVudHMKCQkJbWVzc2FnZXM6ICRtZXNzYWdlcwoJCQlyZXNvdXJjZXM6ICRyZXNvdXJjZXMKCQkJd2ViX3NvY2tldF9ldmVudHM6ICR3ZWJfc29ja2V0X2V2ZW50cwoJCQllcnJvcnM6ICRlcnJvcnMKCQkJaXNfYmVhY29uOiAkaXNfYmVhY29uCgkJCWhhc19zZXNzaW9uX3VubG9hZGVkOiAkaGFzX3Nlc3Npb25fdW5sb2FkZWQKCQkJaGlnaGxpZ2h0X2xvZ3M6ICRoaWdobGlnaHRfbG9ncwoJCSkKCX0KYCx1cj1RYAoJbXV0YXRpb24gUHVzaFNlc3Npb25FdmVudHMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IEludDY0SUQhCgkJJGRhdGE6IFN0cmluZyEKCSkgewoJCXB1c2hTZXNzaW9uRXZlbnRzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWRhdGE6ICRkYXRhCgkJKQoJfQpgLGxyPVFgCgltdXRhdGlvbiBpZGVudGlmeVNlc3Npb24oCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfaWRlbnRpZmllcjogU3RyaW5nIQoJCSR1c2VyX29iamVjdDogQW55CgkpIHsKCQlpZGVudGlmeVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9pZGVudGlmaWVyOiAkdXNlcl9pZGVudGlmaWVyCgkJCXVzZXJfb2JqZWN0OiAkdXNlcl9vYmplY3QKCQkpCgl9CmAsaHI9UWAKCW11dGF0aW9uIGFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRwcm9wZXJ0aWVzX29iamVjdDogQW55CgkpIHsKCQlhZGRTZXNzaW9uUHJvcGVydGllcygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwcm9wZXJ0aWVzX29iamVjdDogJHByb3BlcnRpZXNfb2JqZWN0CgkJKQoJfQpgLGZyPVFgCgltdXRhdGlvbiBwdXNoTWV0cmljcygkbWV0cmljczogW01ldHJpY0lucHV0XSEpIHsKCQlwdXNoTWV0cmljcyhtZXRyaWNzOiAkbWV0cmljcykKCX0KYCxkcj1RYAoJbXV0YXRpb24gYWRkU2Vzc2lvbkZlZWRiYWNrKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSR1c2VyX25hbWU6IFN0cmluZwoJCSR1c2VyX2VtYWlsOiBTdHJpbmcKCQkkdmVyYmF0aW06IFN0cmluZyEKCQkkdGltZXN0YW1wOiBUaW1lc3RhbXAhCgkpIHsKCQlhZGRTZXNzaW9uRmVlZGJhY2soCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9uYW1lOiAkdXNlcl9uYW1lCgkJCXVzZXJfZW1haWw6ICR1c2VyX2VtYWlsCgkJCXZlcmJhdGltOiAkdmVyYmF0aW0KCQkJdGltZXN0YW1wOiAkdGltZXN0YW1wCgkJKQoJfQpgLHByPVFgCgltdXRhdGlvbiBpbml0aWFsaXplU2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkc2Vzc2lvbl9rZXk6IFN0cmluZwoJCSRvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogU3RyaW5nIQoJCSRlbmFibGVfc3RyaWN0X3ByaXZhY3k6IEJvb2xlYW4hCgkJJHByaXZhY3lfc2V0dGluZzogU3RyaW5nIQoJCSRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6IEJvb2xlYW4hCgkJJGNsaWVudFZlcnNpb246IFN0cmluZyEKCQkkZmlyc3Rsb2FkVmVyc2lvbjogU3RyaW5nIQoJCSRjbGllbnRDb25maWc6IFN0cmluZyEKCQkkZW52aXJvbm1lbnQ6IFN0cmluZyEKCQkkaWQ6IFN0cmluZyEKCQkkYXBwVmVyc2lvbjogU3RyaW5nCgkJJHNlcnZpY2VOYW1lOiBTdHJpbmchCgkJJGNsaWVudF9pZDogU3RyaW5nIQoJCSRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiBbU3RyaW5nIV0KCQkkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZzogQm9vbGVhbgoJKSB7CgkJaW5pdGlhbGl6ZVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJc2Vzc2lvbl9rZXk6ICRzZXNzaW9uX2tleQoJCQlvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkCgkJCWVuYWJsZV9zdHJpY3RfcHJpdmFjeTogJGVuYWJsZV9zdHJpY3RfcHJpdmFjeQoJCQllbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6ICRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHMKCQkJY2xpZW50VmVyc2lvbjogJGNsaWVudFZlcnNpb24KCQkJZmlyc3Rsb2FkVmVyc2lvbjogJGZpcnN0bG9hZFZlcnNpb24KCQkJY2xpZW50Q29uZmlnOiAkY2xpZW50Q29uZmlnCgkJCWVudmlyb25tZW50OiAkZW52aXJvbm1lbnQKCQkJYXBwVmVyc2lvbjogJGFwcFZlcnNpb24KCQkJc2VydmljZU5hbWU6ICRzZXJ2aWNlTmFtZQoJCQlmaW5nZXJwcmludDogJGlkCgkJCWNsaWVudF9pZDogJGNsaWVudF9pZAoJCQluZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiAkbmV0d29ya19yZWNvcmRpbmdfZG9tYWlucwoJCQlkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiAkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZwoJCQlwcml2YWN5X3NldHRpbmc6ICRwcml2YWN5X3NldHRpbmcKCQkpIHsKCQkJc2VjdXJlX2lkCgkJCXByb2plY3RfaWQKCQkJc2FtcGxpbmcgewoJCQkJc3BhbnMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQkJZXZlbnRzIHsKCQkJCQkJbmFtZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCQlrZXkgewoJCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJCX0KCQkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJCWxvZ3MgewoJCQkJCW1lc3NhZ2UgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlzYW1wbGluZ1JhdGlvCgkJCQl9CgkJCX0KCQl9Cgl9CgkkeyR0fQpgLG1yPVFgCglxdWVyeSBJZ25vcmUoJGlkOiBJRCEpIHsKCQlpZ25vcmUoaWQ6ICRpZCkKCX0KYCx5cj1RYAoJcXVlcnkgR2V0U2FtcGxpbmdDb25maWcoJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchKSB7CgkJc2FtcGxpbmcob3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6ICRvcmdhbml6YXRpb25fdmVyYm9zZV9pZCkgewoJCQlzcGFucyB7CgkJCQluYW1lIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlhdHRyaWJ1dGVzIHsKCQkJCQlrZXkgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQl9CgkJCQlldmVudHMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlzYW1wbGluZ1JhdGlvCgkJCX0KCQkJbG9ncyB7CgkJCQltZXNzYWdlIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlzZXZlcml0eVRleHQgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCX0KCX0KCSR7JHR9CmAsZ3I9KGUsdCxuLGkpPT5lKCk7ZnVuY3Rpb24gdnIoZSx0PWdyKXtyZXR1cm57UHVzaFBheWxvYWQobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoY3IsbixEKEQoe30saSkscikpLCJQdXNoUGF5bG9hZCIsIm11dGF0aW9uIixuKX0sUHVzaFNlc3Npb25FdmVudHMobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QodXIsbixEKEQoe30saSkscikpLCJQdXNoU2Vzc2lvbkV2ZW50cyIsIm11dGF0aW9uIixuKX0saWRlbnRpZnlTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGxyLG4sRChEKHt9LGkpLHIpKSwiaWRlbnRpZnlTZXNzaW9uIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uUHJvcGVydGllcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChocixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25Qcm9wZXJ0aWVzIiwibXV0YXRpb24iLG4pfSxwdXNoTWV0cmljcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChmcixuLEQoRCh7fSxpKSxyKSksInB1c2hNZXRyaWNzIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uRmVlZGJhY2sobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZHIsbixEKEQoe30saSkscikpLCJhZGRTZXNzaW9uRmVlZGJhY2siLCJtdXRhdGlvbiIsbil9LGluaXRpYWxpemVTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KHByLG4sRChEKHt9LGkpLHIpKSwiaW5pdGlhbGl6ZVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LElnbm9yZShuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChtcixuLEQoRCh7fSxpKSxyKSksIklnbm9yZSIsInF1ZXJ5IixuKX0sR2V0U2FtcGxpbmdDb25maWcobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoeXIsbixEKEQoe30saSkscikpLCJHZXRTYW1wbGluZ0NvbmZpZyIsInF1ZXJ5IixuKX19fXZhciB0ZT1VaW50OEFycmF5LG5lPVVpbnQxNkFycmF5LHR0PUludDMyQXJyYXksbnQ9bmV3IHRlKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxydD1uZXcgdGUoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksVXQ9bmV3IHRlKFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksVnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bmV3IG5lKDMxKSxpPTA7aTwzMTsrK2kpbltpXT10Kz0xPDxlW2ktMV07Zm9yKHZhciByPW5ldyB0dChuWzMwXSksaT0xO2k8MzA7KytpKWZvcih2YXIgcz1uW2ldO3M8bltpKzFdOysrcylyW3NdPXMtbltpXTw8NXxpO3JldHVybntiOm4scn19LHF0PVZ0KG50LDIpLEVyPXF0LmIsaXQ9cXQucjtFclsyOF09MjU4LGl0WzI1OF09Mjg7Zm9yKHZhciBfcj1WdChydCwwKSxqdD1fci5yLHN0PW5ldyBuZSgzMjc2OCksTT0wO008MzI3Njg7KytNKXt2YXIgYWU9KE0mNDM2OTApPj4xfChNJjIxODQ1KTw8MTthZT0oYWUmNTI0MjgpPj4yfChhZSYxMzEwNyk8PDIsYWU9KGFlJjYxNjgwKT4+NHwoYWUmMzg1NSk8PDQsc3RbTV09KChhZSY2NTI4MCk+Pjh8KGFlJjI1NSk8PDgpPj4xfWZvcih2YXIgeGU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT1lLmxlbmd0aCxyPTAscz1uZXcgbmUodCk7cjxpOysrcillW3JdJiYrK3NbZVtyXS0xXTt2YXIgbz1uZXcgbmUodCk7Zm9yKHI9MTtyPHQ7KytyKW9bcl09b1tyLTFdK3Nbci0xXTw8MTt2YXIgYztpZihuKXtjPW5ldyBuZSgxPDx0KTt2YXIgaD0xNS10O2ZvcihyPTA7cjxpOysrcilpZihlW3JdKWZvcih2YXIgZD1yPDw0fGVbcl0sdT10LWVbcl0seT1vW2Vbcl0tMV0rKzw8dSx2PXl8KDE8PHUpLTE7eTw9djsrK3kpY1tzdFt5XT4+aF09ZH1lbHNlIGZvcihjPW5ldyBuZShpKSxyPTA7cjxpOysrcillW3JdJiYoY1tyXT1zdFtvW2Vbcl0tMV0rK10+PjE1LWVbcl0pO3JldHVybiBjfSx1ZT1uZXcgdGUoMjg4KSxNPTA7TTwxNDQ7KytNKXVlW01dPTg7Zm9yKHZhciBNPTE0NDtNPDI1NjsrK00pdWVbTV09OTtmb3IodmFyIE09MjU2O008MjgwOysrTSl1ZVtNXT03O2Zvcih2YXIgTT0yODA7TTwyODg7KytNKXVlW01dPTg7Zm9yKHZhciBNZT1uZXcgdGUoMzIpLE09MDtNPDMyOysrTSlNZVtNXT01O3ZhciBicj14ZSh1ZSw5LDApLFRyPXhlKE1lLDUsMCksR3Q9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrNykvOHwwfSx6dD1mdW5jdGlvbihlLHQsbil7cmV0dXJuKG49PW51bGx8fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCksbmV3IHRlKGUuc3ViYXJyYXkodCxuKSl9LG9lPWZ1bmN0aW9uKGUsdCxuKXtuPDw9dCY3O3ZhciBpPXQvOHwwO2VbaV18PW4sZVtpKzFdfD1uPj44fSxBZT1mdW5jdGlvbihlLHQsbil7bjw8PXQmNzt2YXIgaT10Lzh8MDtlW2ldfD1uLGVbaSsxXXw9bj4+OCxlW2krMl18PW4+PjE2fSxvdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXSYmbi5wdXNoKHtzOmksZjplW2ldfSk7dmFyIHI9bi5sZW5ndGgscz1uLnNsaWNlKCk7aWYoIXIpcmV0dXJue3Q6UXQsbDowfTtpZihyPT0xKXt2YXIgbz1uZXcgdGUoblswXS5zKzEpO3JldHVybiBvW25bMF0uc109MSx7dDpvLGw6MX19bi5zb3J0KGZ1bmN0aW9uKHcsayl7cmV0dXJuIHcuZi1rLmZ9KSxuLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBjPW5bMF0saD1uWzFdLGQ9MCx1PTEseT0yO2ZvcihuWzBdPXtzOi0xLGY6Yy5mK2guZixsOmMscjpofTt1IT1yLTE7KWM9bltuW2RdLmY8blt5XS5mP2QrKzp5KytdLGg9bltkIT11JiZuW2RdLmY8blt5XS5mP2QrKzp5KytdLG5bdSsrXT17czotMSxmOmMuZitoLmYsbDpjLHI6aH07Zm9yKHZhciB2PXNbMF0ucyxpPTE7aTxyOysraSlzW2ldLnM+diYmKHY9c1tpXS5zKTt2YXIgVD1uZXcgbmUodisxKSxtPWF0KG5bdS0xXSxULDApO2lmKG0+dCl7dmFyIGk9MCxOPTAsUj1tLXQsTD0xPDxSO2ZvcihzLnNvcnQoZnVuY3Rpb24oayxQKXtyZXR1cm4gVFtQLnNdLVRbay5zXXx8ay5mLVAuZn0pO2k8cjsrK2kpe3ZhciBxPXNbaV0ucztpZihUW3FdPnQpTis9TC0oMTw8bS1UW3FdKSxUW3FdPXQ7ZWxzZSBicmVha31mb3IoTj4+PVI7Tj4wOyl7dmFyIGc9c1tpXS5zO1RbZ108dD9OLT0xPDx0LVRbZ10rKy0xOisraX1mb3IoO2k+PTAmJk47LS1pKXt2YXIgRT1zW2ldLnM7VFtFXT09dCYmKC0tVFtFXSwrK04pfW09dH1yZXR1cm57dDpuZXcgdGUoVCksbDptfX0sYXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnM9PS0xP01hdGgubWF4KGF0KGUubCx0LG4rMSksYXQoZS5yLHQsbisxKSk6dFtlLnNdPW59LEh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBuZSgrK3QpLGk9MCxyPWVbMF0scz0xLG89ZnVuY3Rpb24oaCl7bltpKytdPWh9LGM9MTtjPD10OysrYylpZihlW2NdPT1yJiZjIT10KSsrcztlbHNle2lmKCFyJiZzPjIpe2Zvcig7cz4xMzg7cy09MTM4KW8oMzI3NTQpO3M+MiYmKG8ocz4xMD9zLTExPDw1fDI4NjkwOnMtMzw8NXwxMjMwNSkscz0wKX1lbHNlIGlmKHM+Myl7Zm9yKG8ociksLS1zO3M+NjtzLT02KW8oODMwNCk7cz4yJiYobyhzLTM8PDV8ODIwOCkscz0wKX1mb3IoO3MtLTspbyhyKTtzPTEscj1lW2NdfXJldHVybntjOm4uc3ViYXJyYXkoMCxpKSxuOnR9fSxJZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSluKz1lW2ldKnRbaV07cmV0dXJuIG59LFl0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uLmxlbmd0aCxyPUd0KHQrMik7ZVtyXT1pJjI1NSxlW3IrMV09aT4+OCxlW3IrMl09ZVtyXV4yNTUsZVtyKzNdPWVbcisxXV4yNTU7Zm9yKHZhciBzPTA7czxpOysrcyllW3Ircys0XT1uW3NdO3JldHVybihyKzQraSkqOH0sSnQ9ZnVuY3Rpb24oZSx0LG4saSxyLHMsbyxjLGgsZCx1KXtvZSh0LHUrKyxuKSwrK3JbMjU2XTtmb3IodmFyIHk9b3QociwxNSksdj15LnQsVD15LmwsbT1vdChzLDE1KSxOPW0udCxSPW0ubCxMPUh0KHYpLHE9TC5jLGc9TC5uLEU9SHQoTiksdz1FLmMsaz1FLm4sUD1uZXcgbmUoMTkpLEk9MDtJPHEubGVuZ3RoOysrSSkrK1BbcVtJXSYzMV07Zm9yKHZhciBJPTA7STx3Lmxlbmd0aDsrK0kpKytQW3dbSV0mMzFdO2Zvcih2YXIgeD1vdChQLDcpLHo9eC50LFY9eC5sLEg9MTk7SD40JiYheltVdFtILTFdXTstLUgpO3ZhciBYPWQrNTw8MyxhPUllKHIsdWUpK0llKHMsTWUpK28sZj1JZShyLHYpK0llKHMsTikrbysxNCszKkgrSWUoUCx6KSsyKlBbMTZdKzMqUFsxN10rNypQWzE4XTtpZihoPj0wJiZYPD1hJiZYPD1mKXJldHVybiBZdCh0LHUsZS5zdWJhcnJheShoLGgrZCkpO3ZhciBfLFMsQyxBO2lmKG9lKHQsdSwxKyhmPGEpKSx1Kz0yLGY8YSl7Xz14ZSh2LFQsMCksUz12LEM9eGUoTixSLDApLEE9Tjt2YXIgSz14ZSh6LFYsMCk7b2UodCx1LGctMjU3KSxvZSh0LHUrNSxrLTEpLG9lKHQsdSsxMCxILTQpLHUrPTE0O2Zvcih2YXIgST0wO0k8SDsrK0kpb2UodCx1KzMqSSx6W1V0W0ldXSk7dSs9MypIO2Zvcih2YXIgaj1bcSx3XSxXPTA7VzwyOysrVylmb3IodmFyIHllPWpbV10sST0wO0k8eWUubGVuZ3RoOysrSSl7dmFyIGllPXllW0ldJjMxO29lKHQsdSxLW2llXSksdSs9eltpZV0saWU+MTUmJihvZSh0LHUseWVbSV0+PjUmMTI3KSx1Kz15ZVtJXT4+MTIpfX1lbHNlIF89YnIsUz11ZSxDPVRyLEE9TWU7Zm9yKHZhciBJPTA7STxjOysrSSl7dmFyIFk9aVtJXTtpZihZPjI1NSl7dmFyIGllPVk+PjE4JjMxO0FlKHQsdSxfW2llKzI1N10pLHUrPVNbaWUrMjU3XSxpZT43JiYob2UodCx1LFk+PjIzJjMxKSx1Kz1udFtpZV0pO3ZhciBnZT1ZJjMxO0FlKHQsdSxDW2dlXSksdSs9QVtnZV0sZ2U+MyYmKEFlKHQsdSxZPj41JjgxOTEpLHUrPXJ0W2dlXSl9ZWxzZSBBZSh0LHUsX1tZXSksdSs9U1tZXX1yZXR1cm4gQWUodCx1LF9bMjU2XSksdStTWzI1Nl19LE5yPW5ldyB0dChbNjU1NDAsMTMxMDgwLDEzMTA4OCwxMzExMDQsMjYyMTc2LDEwNDg3MDQsMTA0ODgzMiwyMTE0NTYwLDIxMTc2MzJdKSxRdD1uZXcgdGUoMCkseHI9ZnVuY3Rpb24oZSx0LG4saSxyLHMpe3ZhciBvPXMuenx8ZS5sZW5ndGgsYz1uZXcgdGUoaStvKzUqKDErTWF0aC5jZWlsKG8vN2UzKSkrciksaD1jLnN1YmFycmF5KGksYy5sZW5ndGgtciksZD1zLmwsdT0ocy5yfHwwKSY3O2lmKHQpe3UmJihoWzBdPXMucj4+Myk7Zm9yKHZhciB5PU5yW3QtMV0sdj15Pj4xMyxUPXkmODE5MSxtPSgxPDxuKS0xLE49cy5wfHxuZXcgbmUoMzI3NjgpLFI9cy5ofHxuZXcgbmUobSsxKSxMPU1hdGguY2VpbChuLzMpLHE9MipMLGc9ZnVuY3Rpb24ocHQpe3JldHVybihlW3B0XV5lW3B0KzFdPDxMXmVbcHQrMl08PHEpJm19LEU9bmV3IHR0KDI1ZTMpLHc9bmV3IG5lKDI4OCksaz1uZXcgbmUoMzIpLFA9MCxJPTAseD1zLml8fDAsej0wLFY9cy53fHwwLEg9MDt4KzI8bzsrK3gpe3ZhciBYPWcoeCksYT14JjMyNzY3LGY9UltYXTtpZihOW2FdPWYsUltYXT1hLFY8PXgpe3ZhciBfPW8teDtpZigoUD43ZTN8fHo+MjQ1NzYpJiYoXz40MjN8fCFkKSl7dT1KdChlLGgsMCxFLHcsayxJLHosSCx4LUgsdSksej1QPUk9MCxIPXg7Zm9yKHZhciBTPTA7UzwyODY7KytTKXdbU109MDtmb3IodmFyIFM9MDtTPDMwOysrUylrW1NdPTB9dmFyIEM9MixBPTAsSz1ULGo9YS1mJjMyNzY3O2lmKF8+MiYmWD09Zyh4LWopKWZvcih2YXIgVz1NYXRoLm1pbih2LF8pLTEseWU9TWF0aC5taW4oMzI3NjcseCksaWU9TWF0aC5taW4oMjU4LF8pO2o8PXllJiYtLUsmJmEhPWY7KXtpZihlW3grQ109PWVbeCtDLWpdKXtmb3IodmFyIFk9MDtZPGllJiZlW3grWV09PWVbeCtZLWpdOysrWSk7aWYoWT5DKXtpZihDPVksQT1qLFk+VylicmVhaztmb3IodmFyIGdlPU1hdGgubWluKGosWS0yKSx0bj0wLFM9MDtTPGdlOysrUyl7dmFyIGZ0PXgtaitTJjMyNzY3LEpyPU5bZnRdLG5uPWZ0LUpyJjMyNzY3O25uPnRuJiYodG49bm4sZj1mdCl9fX1hPWYsZj1OW2FdLGorPWEtZiYzMjc2N31pZihBKXtFW3orK109MjY4NDM1NDU2fGl0W0NdPDwxOHxqdFtBXTt2YXIgcm49aXRbQ10mMzEsc249anRbQV0mMzE7SSs9bnRbcm5dK3J0W3NuXSwrK3dbMjU3K3JuXSwrK2tbc25dLFY9eCtDLCsrUH1lbHNlIEVbeisrXT1lW3hdLCsrd1tlW3hdXX19Zm9yKHg9TWF0aC5tYXgoeCxWKTt4PG87Kyt4KUVbeisrXT1lW3hdLCsrd1tlW3hdXTt1PUp0KGUsaCxkLEUsdyxrLEkseixILHgtSCx1KSxkfHwocy5yPXUmN3xoW3UvOHwwXTw8Myx1LT03LHMuaD1SLHMucD1OLHMuaT14LHMudz1WKX1lbHNle2Zvcih2YXIgeD1zLnd8fDA7eDxvK2Q7eCs9NjU1MzUpe3ZhciBkdD14KzY1NTM1O2R0Pj1vJiYoaFt1Lzh8MF09ZCxkdD1vKSx1PVl0KGgsdSsxLGUuc3ViYXJyYXkoeCxkdCkpfXMuaT1vfXJldHVybiB6dChjLDAsaStHdCh1KStyKX0sQXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEludDMyQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KXtmb3IodmFyIG49dCxpPTk7LS1pOyluPShuJjEmJi0zMDY2NzQ5MTIpXm4+Pj4xO2VbdF09bn1yZXR1cm4gZX0oKSxJcj1mdW5jdGlvbigpe3ZhciBlPS0xO3JldHVybntwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLGk9MDtpPHQubGVuZ3RoOysraSluPUFyW24mMjU1XnRbaV1dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFNyPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIXImJihyPXtsOjF9LHQuZGljdGlvbmFyeSkpe3ZhciBzPXQuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpLG89bmV3IHRlKHMubGVuZ3RoK2UubGVuZ3RoKTtvLnNldChzKSxvLnNldChlLHMubGVuZ3RoKSxlPW8sci53PXMubGVuZ3RofXJldHVybiB4cihlLHQubGV2ZWw9PW51bGw/Njp0LmxldmVsLHQubWVtPT1udWxsP3IubD9NYXRoLmNlaWwoTWF0aC5tYXgoOCxNYXRoLm1pbigxMyxNYXRoLmxvZyhlLmxlbmd0aCkpKSoxLjUpOjIwOjEyK3QubWVtLG4saSxyKX0sY3Q9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0sT3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6dC5sZXZlbD09OT8yOjAsZVs5XT0zLHQubXRpbWUhPTAmJmN0KGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIGk9MDtpPD1uLmxlbmd0aDsrK2kpZVtpKzEwXT1uLmNoYXJDb2RlQXQoaSl9fSx3cj1mdW5jdGlvbihlKXtyZXR1cm4gMTArKGUuZmlsZW5hbWU/ZS5maWxlbmFtZS5sZW5ndGgrMTowKX07ZnVuY3Rpb24gRHIoZSx0KXt0fHwodD17fSk7dmFyIG49SXIoKSxpPWUubGVuZ3RoO24ucChlKTt2YXIgcj1TcihlLHQsd3IodCksOCkscz1yLmxlbmd0aDtyZXR1cm4gT3Iocix0KSxjdChyLHMtOCxuLmQoKSksY3QocixzLTQsaSkscn12YXIgWHQ9dHlwZW9mIFRleHRFbmNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHRFbmNvZGVyLGtyPXR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCImJm5ldyBUZXh0RGVjb2RlcixDcj0wO3RyeXtrci5kZWNvZGUoUXQse3N0cmVhbTohMH0pLENyPTF9Y2F0Y2goZSl7fWZ1bmN0aW9uIFJyKGUsdCl7dmFyIG47aWYoWHQpcmV0dXJuIFh0LmVuY29kZShlKTtmb3IodmFyIGk9ZS5sZW5ndGgscj1uZXcgdGUoZS5sZW5ndGgrKGUubGVuZ3RoPj4xKSkscz0wLG89ZnVuY3Rpb24oZCl7cltzKytdPWR9LG49MDtuPGk7KytuKXtpZihzKzU+ci5sZW5ndGgpe3ZhciBjPW5ldyB0ZShzKzgrKGktbjw8MSkpO2Muc2V0KHIpLHI9Y312YXIgaD1lLmNoYXJDb2RlQXQobik7aDwxMjh8fHQ/byhoKTpoPDIwNDg/KG8oMTkyfGg+PjYpLG8oMTI4fGgmNjMpKTpoPjU1Mjk1JiZoPDU3MzQ0PyhoPTY1NTM2KyhoJjEwNDc1NTIpfGUuY2hhckNvZGVBdCgrK24pJjEwMjMsbygyNDB8aD4+MTgpLG8oMTI4fGg+PjEyJjYzKSxvKDEyOHxoPj42JjYzKSxvKDEyOHxoJjYzKSk6KG8oMjI0fGg+PjEyKSxvKDEyOHxoPj42JjYzKSxvKDEyOHxoJjYzKSl9cmV0dXJuIHp0KHIsMCxzKX1mdW5jdGlvbiBMcihlKXtyZXR1cm4gSih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3QgdD1ScihKU09OLnN0cmluZ2lmeShlKSksbj1Ecih0KSxpPXlpZWxkIG5ldyBQcm9taXNlKHI9Pntjb25zdCBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPSgpPT5yKHMucmVzdWx0KSxzLnJlYWRBc0RhdGFVUkwobmV3IEJsb2IoW25ldyBVaW50OEFycmF5KG4pXSkpfSk7cmV0dXJue2NvbXByZXNzZWRCYXNlNjQ6aS5zbGljZShpLmluZGV4T2YoIiwiKSsxKSxjb21wcmVzc2VkU2l6ZTpuLmxlbmd0aCxidWZmZXJMZW5ndGg6dC5sZW5ndGh9fSl9Y29uc3QgdXQ9e0JBU0VfVVJMOiIvIixERVY6ITEsTU9ERToicHJvZHVjdGlvbiIsUFJPRDohMCxTU1I6ITF9LFByPVsiZGVidWciLCJsb2ciLCJpbmZvIiwid2FybiIsImVycm9yIl0sbHQ9U3ltYm9sLmZvcigiQGxhdW5jaGRhcmtseS9vMTF5LnNka0xvZ2dlciIpLEZyPSgoKT0+e3RyeXtyZXR1cm4odXQ9PW51bGw/dm9pZCAwOnV0LkRFQlVHKT09PSJ0cnVlIn1jYXRjaChlKXtyZXR1cm4hMX19KSgpLEJlPSgoKT0+e3ZhciBuO2NvbnN0IGU9Z2xvYmFsVGhpcyx0PShuPWVbbHRdKSE9bnVsbD9uOmVbbHRdPXtkZWJ1Z0VuYWJsZWQ6ITEsc3VwcHJlc3NEZXB0aDowfTtyZXR1cm4gRnImJih0LmRlYnVnRW5hYmxlZD0hMCksdH0pKCksTXI9KCk9PkJlLmRlYnVnRW5hYmxlZCxodD1lPT57QmUuc3VwcHJlc3NEZXB0aCsrO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7QmUuc3VwcHJlc3NEZXB0aC0tfX0sQnI9ZT0+UHIuaW5jbHVkZXMoZSk/ZToibG9nIiwkcj0oZSwuLi50KT0+e0JlLmRlYnVnRW5hYmxlZCYmaHQoKCk9Pnt2YXIgbjt0cnl7KChuPWNvbnNvbGVbQnIoZSldKSE9bnVsbD9uOmNvbnNvbGUubG9nKS5hcHBseShjb25zb2xlLHQpfWNhdGNoKGkpe319KX07Y2xhc3MgVXJ7Y29uc3RydWN0b3IodCxuKXt5dCh0aGlzLCJkZWJ1ZyIpO3l0KHRoaXMsIm5hbWUiKTt0aGlzLmRlYnVnPXQsdGhpcy5uYW1lPW59cHJlZml4KCl7bGV0IHQ9YFske0RhdGUubm93KCl9XWA7cmV0dXJuIHRoaXMubmFtZSYmKHQrPWAgLSAke3RoaXMubmFtZX1gKSx0fWxvZyguLi50KXt0aGlzLmRlYnVnJiZodCgoKT0+Y29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxbdGhpcy5wcmVmaXgoKSwuLi50XSkpfXdhcm4oLi4udCl7KHRoaXMuZGVidWd8fE1yKCkpJiZodCgoKT0+Y29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsW3RoaXMucHJlZml4KCksLi4udF0pKX19dmFyIFd0PShlPT4oZS5CaWxsaW5nUXVvdGFFeGNlZWRlZD0iQmlsbGluZ1F1b3RhRXhjZWVkZWQiLGUpKShXdHx8e30pO2NvbnN0IFZyPTMscXI9MWUzLGpyPTUwMCxHcj1bV3QuQmlsbGluZ1F1b3RhRXhjZWVkZWQudG9TdHJpbmcoKV0senI9ZT0+e3ZhciBuO3JldHVybigobj1lLnJlc3BvbnNlLmVycm9ycyk9PW51bGw/dm9pZCAwOm4uZmluZChpPT5Hci5pbmNsdWRlcyhpLm1lc3NhZ2UpKSk9PT12b2lkIDB9LEhyPSgpPT57Y29uc3QgZT0odCxuLGkscixzPTApPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIHQoKX1jYXRjaChvKXtpZihvIGluc3RhbmNlb2YgZGUmJiF6cihvKSl0aHJvdyBvO2lmKHM8VnIpcmV0dXJuIHlpZWxkIG5ldyBQcm9taXNlKGM9PnNldFRpbWVvdXQoYyxxcitqcipNYXRoLnBvdygyLHMpKSkseWllbGQgZSh0LG4saSxyLHMrMSk7dGhyb3cgJHIoImVycm9yIixgaGlnaGxpZ2h0LmlvOiBkYXRhIHJlcXVlc3QgZmFpbGVkIGFmdGVyICR7c30gcmV0cmllc2ApLG99fSk7cmV0dXJuIGV9LFp0PTUsS3Q9MmUzLFlyPVsibnVtYmVyIiwic3RyaW5nIiwiYm9vbGVhbiJdO3ZhciBaPShlPT4oZVtlLkluaXRpYWxpemU9MF09IkluaXRpYWxpemUiLGVbZS5SZXNldD0xXT0iUmVzZXQiLGVbZS5Bc3luY0V2ZW50cz0yXT0iQXN5bmNFdmVudHMiLGVbZS5JZGVudGlmeT0zXT0iSWRlbnRpZnkiLGVbZS5Qcm9wZXJ0aWVzPTRdPSJQcm9wZXJ0aWVzIixlW2UuTWV0cmljcz01XT0iTWV0cmljcyIsZVtlLkZlZWRiYWNrPTZdPSJGZWVkYmFjayIsZVtlLkN1c3RvbUV2ZW50PTddPSJDdXN0b21FdmVudCIsZVtlLlN0b3A9OF09IlN0b3AiLGVbZS5HZXRTdGF0dXM9OV09IkdldFN0YXR1cyIsZSkpKFp8fHt9KTtjb25zdCBTZT1zZWxmO2Z1bmN0aW9uIGVuKGUsdCl7Y29uc3Qgbj17fSxpPVtdLHI9W107Zm9yKGNvbnN0W3Msb11vZiBPYmplY3QuZW50cmllcyhlKSl7aWYobz09bnVsbCljb250aW51ZTtZci5pbmNsdWRlcyh0eXBlb2Ygbyl8fGkucHVzaCh7W3NdOm99KTtsZXQgYzt0eXBlb2Ygbz09InN0cmluZyI/Yz1vOmM9bWUobyksYy5sZW5ndGg+S3QmJihyLnB1c2goe1tzXTpvfSksYz1jLnN1YnN0cmluZygwLEt0KSksbltzXT1jfXJldHVybiB0IT09InNlc3Npb24iJiYoaS5sZW5ndGg+MCYmY29uc29sZS53YXJuKGBIaWdobGlnaHQgd2FzIHBhc3NlZCBvbmUgb3IgbW9yZSAke3R9IHByb3BlcnRpZXMgbm90IG9mIHR5cGUgc3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4uYCxpKSxyLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oYEhpZ2hsaWdodCB3YXMgcGFzc2VkIG9uZSBvciBtb3JlICR7dH0gcHJvcGVydGllcyBleGNlZWRpbmcgMjAwMCBjaGFyYWN0ZXJzLCB3aGljaCB3aWxsIGJlIHRydW5jYXRlZC5gLHIpKSxufXtsZXQgZSx0LG4saT0wLHI9MCxzPSExLG89MCxjPW5ldyBVcighMSwiW3dvcmtlcl0iKTtjb25zdCBoPVtdLGQ9W10sdT0oKT0+byE9PTAmJmk8WnQmJiEhKG4hPW51bGwmJm4ubGVuZ3RoKSx5PShnLEUpPT57U2UucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOlouQ3VzdG9tRXZlbnQsdGFnOmcscGF5bG9hZDpFfX0pfSx2PWc9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e2lkOkUsZXZlbnRzOncsbWVzc2FnZXM6ayxlcnJvcnM6UCxyZXNvdXJjZXNTdHJpbmc6SSx3ZWJTb2NrZXRFdmVudHNTdHJpbmc6eCxoYXNTZXNzaW9uVW5sb2FkZWQ6eixoaWdobGlnaHRMb2dzOlZ9PWcsSD1tZSh7bWVzc2FnZXM6a30pO2xldCBYPXtzZXNzaW9uX3NlY3VyZV9pZDpuLHBheWxvYWRfaWQ6RS50b1N0cmluZygpLGV2ZW50czp7ZXZlbnRzOnd9LG1lc3NhZ2VzOkgscmVzb3VyY2VzOkksd2ViX3NvY2tldF9ldmVudHM6eCxlcnJvcnM6UCxpc19iZWFjb246ITEsaGFzX3Nlc3Npb25fdW5sb2FkZWQ6en07ViYmKFguaGlnaGxpZ2h0X2xvZ3M9Vik7Y29uc3R7Y29tcHJlc3NlZEJhc2U2NDphLGJ1ZmZlckxlbmd0aDpmLGNvbXByZXNzZWRTaXplOl99PXlpZWxkIExyKFgpLFM9e3R5cGU6Wi5Bc3luY0V2ZW50cyxpZDpFLGV2ZW50c1NpemU6Zixjb21wcmVzc2VkU2l6ZTphLmxlbmd0aH07Yy5sb2coYFB1c2hpbmcgcGF5bG9hZDogJHtKU09OLnN0cmluZ2lmeSh7c2Vzc2lvblNlY3VyZUlEOm4saWQ6RSxmaXJzdFNJRDpNYXRoLm1pbiguLi5YLmV2ZW50cy5ldmVudHMubWFwKFc9Plc9PW51bGw/dm9pZCAwOlcuX3NpZCkuZmlsdGVyKFc9PiEhVykpLGV2ZW50c0xlbmd0aDpYLmV2ZW50cy5ldmVudHMubGVuZ3RoLG1lc3NhZ2VzTGVuZ3RoOmsubGVuZ3RoLHJlc291cmNlc0xlbmd0aDpJLmxlbmd0aCx3ZWJTb2NrZXRMZW5ndGg6eC5sZW5ndGgsZXJyb3JzTGVuZ3RoOlAubGVuZ3RoLGJ1Zkxlbmd0aDpmLGNvbXByZXNzZWRMZW5ndGg6Xyxjb21wcmVzc2VkQmFzZTY0TGVuZ3RoOmEubGVuZ3RofSx2b2lkIDAsMil9YCk7Y29uc3QgQz1lLlB1c2hTZXNzaW9uRXZlbnRzKHtzZXNzaW9uX3NlY3VyZV9pZDpuLHBheWxvYWRfaWQ6RS50b1N0cmluZygpLGRhdGE6YX0pO2xldCBBPVByb21pc2UucmVzb2x2ZSgpO2gubGVuZ3RoJiYoQT1lLnB1c2hNZXRyaWNzKHttZXRyaWNzOmh9KSxoLnNwbGljZSgwKSk7bGV0IEs9cGVyZm9ybWFuY2Uubm93KCk7Y29uc3Qgaj1zZXRJbnRlcnZhbCgoKT0+e0smJnBlcmZvcm1hbmNlLm5vdygpLUs+RnQmJihjb25zb2xlLndhcm4oYFVwbG9hZGluZyBwdXNoUGF5bG9hZCB0b29rIHRvbyBsb25nLCBmYWlsdXJlIG51bWJlciAjJHtyfS5gKSxyKz0xLGNsZWFySW50ZXJ2YWwoaikscj49WnQmJihjb25zb2xlLndhcm4oIlVwbG9hZGluZyBwdXNoUGF5bG9hZCB0b29rIHRvbyBsb25nLCBzdG9wcGluZyByZWNvcmRpbmcgdG8gYXZvaWQgT09NLiIpLFNlLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLlN0b3AscmVxdWVzdFN0YXJ0OkssYXN5bmNFdmVudHNSZXNwb25zZTpTfX0pLG0oe3R5cGU6Wi5Qcm9wZXJ0aWVzLHByb3BlcnRpZXNPYmplY3Q6e3N0b3BSZWFzb246IlB1c2ggUGF5bG9hZCBUaW1lb3V0In0scHJvcGVydHlUeXBlOnt0eXBlOiJ0cmFjayJ9fSkpKX0sMTAwKTt0cnl7eWllbGQgUHJvbWlzZS5hbGwoW0MsQV0pLHImJnBlcmZvcm1hbmNlLm5vdygpLUs8PUZ0JiYoY29uc29sZS53YXJuKGBwdXNoUGF5bG9hZCBzdWNjZWVkZWQgYWZ0ZXIgIyR7cn0gZmFpbHVyZXMsIHJlc2V0dGluZyBzdG9wIHN3aXRjaC5gKSxyPTApfWZpbmFsbHl7Sz0wLGNsZWFySW50ZXJ2YWwoail9U2UucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOlN9KX0pLFQ9Zz0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3R7dXNlck9iamVjdDpFLHVzZXJJZGVudGlmaWVyOncsc291cmNlOmt9PWc7az09PSJzZWdtZW50Ij95KCJTZWdtZW50IElkZW50aWZ5IixtZShEKHt1c2VySWRlbnRpZmllcjp3fSxFKSkpOnkoIklkZW50aWZ5IixtZShEKHt1c2VySWRlbnRpZmllcjp3fSxFKSkpLHlpZWxkIGUuaWRlbnRpZnlTZXNzaW9uKHtzZXNzaW9uX3NlY3VyZV9pZDpuLHVzZXJfaWRlbnRpZmllcjp3LHVzZXJfb2JqZWN0OmVuKEUsInVzZXIiKX0pO2NvbnN0IFA9az09PSJzZWdtZW50Ij9rOiJkZWZhdWx0IjtjLmxvZyhgSWRlbnRpZnkgKCR7d30sIHNvdXJjZTogJHtQfSkgdy8gb2JqOiAke21lKEUpfSBAICR7dH1gKX0pLG09Zz0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3R7cHJvcGVydGllc09iamVjdDpFLHByb3BlcnR5VHlwZTp3fT1nO2xldCBrOyh3PT1udWxsP3ZvaWQgMDp3LnR5cGUpPT09InNlc3Npb24iPyhrPSJTZXNzaW9uIix5aWVsZCBlLmFkZFNlc3Npb25Qcm9wZXJ0aWVzKHtzZXNzaW9uX3NlY3VyZV9pZDpuLHByb3BlcnRpZXNfb2JqZWN0OmVuKEUsInNlc3Npb24iKX0pKToodz09bnVsbD92b2lkIDA6dy5zb3VyY2UpPT09InNlZ21lbnQiP2s9IlNlZ21lbnQiOms9IlRyYWNrIixrIT09IlNlc3Npb24iJiZ5KGssbWUoRSkpLGMubG9nKGBBZGRpbmcgJHtrfSBQcm9wZXJ0aWVzIHRvIHNlc3Npb24gKCR7bn0pIHcvIG9iajogJHtKU09OLnN0cmluZ2lmeShFKX0gQCAke3R9YCl9KSxOPWc9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2gucHVzaCguLi5nLm1ldHJpY3MubWFwKEU9Pih7bmFtZTpFLm5hbWUsdmFsdWU6RS52YWx1ZSxzZXNzaW9uX3NlY3VyZV9pZDpuLGNhdGVnb3J5OkUuY2F0ZWdvcnksZ3JvdXA6RS5ncm91cCx0aW1lc3RhbXA6RS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSx0YWdzOkUudGFnc30pKSl9KSxSPWc9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3RpbWVzdGFtcDpFLHZlcmJhdGltOncsdXNlckVtYWlsOmssdXNlck5hbWU6UH09Zzt5aWVsZCBlLmFkZFNlc3Npb25GZWVkYmFjayh7c2Vzc2lvbl9zZWN1cmVfaWQ6bix0aW1lc3RhbXA6RSx2ZXJiYXRpbTp3LHVzZXJfZW1haWw6ayx1c2VyX25hbWU6UH0pfSksTD1nPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtnLnR5cGU9PT1aLkFzeW5jRXZlbnRzP3lpZWxkIHYoZyk6Zy50eXBlPT09Wi5JZGVudGlmeT95aWVsZCBUKGcpOmcudHlwZT09PVouUHJvcGVydGllcz95aWVsZCBtKGcpOmcudHlwZT09PVouTWV0cmljcz95aWVsZCBOKGcpOmcudHlwZT09PVouRmVlZGJhY2smJih5aWVsZCBSKGcpKX0pLHE9KCk9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2Zvcig7ZC5sZW5ndGg+MCYmdSgpOyl7Y29uc3QgZz1kLnNoaWZ0KCk7dHJ5e3lpZWxkIEwoZyksaT0wfWNhdGNoKEUpe3MmJmNvbnNvbGUuZXJyb3IoRSksaSs9MX19fSk7U2Uub25tZXNzYWdlPWZ1bmN0aW9uKGcpe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihnLmRhdGEubWVzc2FnZS50eXBlPT09Wi5Jbml0aWFsaXplKXt0PWcuZGF0YS5tZXNzYWdlLmJhY2tlbmQsbj1nLmRhdGEubWVzc2FnZS5zZXNzaW9uU2VjdXJlSUQscz1nLmRhdGEubWVzc2FnZS5kZWJ1ZyxvPWcuZGF0YS5tZXNzYWdlLnJlY29yZGluZ1N0YXJ0VGltZSxjLmRlYnVnPXMsZT12cihuZXcgWG4odCx7aGVhZGVyczp7fX0pLEhyKCkpLHlpZWxkIHEoKTtyZXR1cm59aWYoZy5kYXRhLm1lc3NhZ2UudHlwZT09PVouUmVzZXQpe2QubGVuZ3RoPTAsaC5sZW5ndGg9MCxpPTAscj0wLG49IiIsbz0wO3JldHVybn1pZihnLmRhdGEubWVzc2FnZS50eXBlPT09Wi5HZXRTdGF0dXMpe1NlLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLkdldFN0YXR1cyxwZW5kaW5nQ291bnQ6ZC5sZW5ndGgsaW5pdGlhbGl6ZWQ6dSgpfX0pO3JldHVybn1pZighdSgpKXtkLnB1c2goZy5kYXRhLm1lc3NhZ2UpO3JldHVybn10cnl7eWllbGQgTChnLmRhdGEubWVzc2FnZSksaT0wLHlpZWxkIHEoKX1jYXRjaChFKXtzJiZjb25zb2xlLmVycm9yKEUpLGkrPTF9fSl9fX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWhpZ2hsaWdodC1jbGllbnQtd29ya2VyLURyRFBSQ3J2LmpzLm1hcAo=", Ku = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), En = typeof self != "undefined" && self.Blob && new Blob([Ku(_l)], { type: "text/javascript;charset=utf-8" });
|
|
10325
|
+
function Fu(e) {
|
|
10326
10326
|
let t;
|
|
10327
10327
|
try {
|
|
10328
10328
|
if (t = En && (self.URL || self.webkitURL).createObjectURL(En), !t) throw "";
|
|
@@ -10334,7 +10334,7 @@ function Ku(e) {
|
|
|
10334
10334
|
}), s;
|
|
10335
10335
|
} catch (s) {
|
|
10336
10336
|
return new Worker(
|
|
10337
|
-
"data:text/javascript;base64," +
|
|
10337
|
+
"data:text/javascript;base64," + _l,
|
|
10338
10338
|
{
|
|
10339
10339
|
name: e == null ? void 0 : e.name
|
|
10340
10340
|
}
|
|
@@ -10344,7 +10344,7 @@ function Ku(e) {
|
|
|
10344
10344
|
}
|
|
10345
10345
|
}
|
|
10346
10346
|
var Je = /* @__PURE__ */ ((e) => (e[e.Initialize = 0] = "Initialize", e[e.Reset = 1] = "Reset", e[e.AsyncEvents = 2] = "AsyncEvents", e[e.Identify = 3] = "Identify", e[e.Properties = 4] = "Properties", e[e.Metrics = 5] = "Metrics", e[e.Feedback = 6] = "Feedback", e[e.CustomEvent = 7] = "CustomEvent", e[e.Stop = 8] = "Stop", e[e.GetStatus = 9] = "GetStatus", e))(Je || {});
|
|
10347
|
-
const
|
|
10347
|
+
const Mu = ({
|
|
10348
10348
|
apiKey: e
|
|
10349
10349
|
}) => {
|
|
10350
10350
|
(function(t, s) {
|
|
@@ -10427,7 +10427,7 @@ const Fu = ({
|
|
|
10427
10427
|
return a = (!a || a.length === 0 ? "$default_instance" : a).toLowerCase(), Object.prototype.hasOwnProperty.call(l._iq, a) || (l._iq[a] = { _q: [] }, o(l._iq[a])), l._iq[a];
|
|
10428
10428
|
}, t.amplitude = l;
|
|
10429
10429
|
})(window, document);
|
|
10430
|
-
},
|
|
10430
|
+
}, zu = ({
|
|
10431
10431
|
projectToken: e
|
|
10432
10432
|
}) => {
|
|
10433
10433
|
if (window.mixpanel)
|
|
@@ -10474,13 +10474,13 @@ const Fu = ({
|
|
|
10474
10474
|
}
|
|
10475
10475
|
})(document, window.mixpanel || []);
|
|
10476
10476
|
const t = document.createElement("script");
|
|
10477
|
-
t.src =
|
|
10477
|
+
t.src = Hu, document.head.appendChild(t), t.addEventListener("load", () => {
|
|
10478
10478
|
var s;
|
|
10479
10479
|
(s = window.mixpanel) == null || s.init(e);
|
|
10480
10480
|
});
|
|
10481
|
-
},
|
|
10481
|
+
}, Hu = "https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";
|
|
10482
10482
|
var bt;
|
|
10483
|
-
class
|
|
10483
|
+
class Ou {
|
|
10484
10484
|
constructor(t) {
|
|
10485
10485
|
H(this, "options");
|
|
10486
10486
|
/** Determines if the client is running on a Highlight property (e.g. frontend). */
|
|
@@ -10522,6 +10522,7 @@ class Hu {
|
|
|
10522
10522
|
H(this, "_isCrossOriginIframe");
|
|
10523
10523
|
H(this, "_eventBytesSinceSnapshot");
|
|
10524
10524
|
H(this, "_lastSnapshotTime");
|
|
10525
|
+
H(this, "_snapshotPayloadIds");
|
|
10525
10526
|
H(this, "_lastVisibilityChangeTime");
|
|
10526
10527
|
H(this, "pushPayloadTimerId");
|
|
10527
10528
|
H(this, "hasSessionUnloaded");
|
|
@@ -10531,9 +10532,9 @@ class Hu {
|
|
|
10531
10532
|
H(this, "_recordStop");
|
|
10532
10533
|
H(this, "_integrations", []);
|
|
10533
10534
|
var l, c, u, f, b, m;
|
|
10534
|
-
this.options = t, typeof ((l = this.options) == null ? void 0 : l.debug) == "boolean" ? this.debugOptions = this.options.debug ? { clientInteractions: !0 } : {} : this.debugOptions = (u = (c = this.options) == null ? void 0 : c.debug) != null ? u : {}, this.logger = new
|
|
10535
|
+
this.options = t, typeof ((l = this.options) == null ? void 0 : l.debug) == "boolean" ? this.debugOptions = this.options.debug ? { clientInteractions: !0 } : {} : this.debugOptions = (u = (c = this.options) == null ? void 0 : c.debug) != null ? u : {}, this.logger = new xo(this.debugOptions.clientInteractions), (f = this.options) != null && f.debug && vo(!0), this._worker = new Fu(), this._worker.onmessage = (h) => {
|
|
10535
10536
|
var d, r, n;
|
|
10536
|
-
((d = h.data.response) == null ? void 0 : d.type) === Je.AsyncEvents ? (this._eventBytesSinceSnapshot += h.data.response.eventsSize, this.logger.log(
|
|
10537
|
+
((d = h.data.response) == null ? void 0 : d.type) === Je.AsyncEvents ? (this._snapshotPayloadIds.delete(h.data.response.id) || (this._eventBytesSinceSnapshot += h.data.response.eventsSize), this.logger.log(
|
|
10537
10538
|
`Web worker sent payloadID ${h.data.response.id} size ${h.data.response.eventsSize} bytes, compression ratio ${h.data.response.eventsSize / h.data.response.compressedSize}.
|
|
10538
10539
|
Total since snapshot: ${(this._eventBytesSinceSnapshot / 1e6).toFixed(1)}MB`
|
|
10539
10540
|
)) : ((r = h.data.response) == null ? void 0 : r.type) === Je.CustomEvent ? this.addCustomEvent(
|
|
@@ -10596,21 +10597,21 @@ class Hu {
|
|
|
10596
10597
|
canvasFactor: 0.5,
|
|
10597
10598
|
canvasMaxSnapshotDimension: 360,
|
|
10598
10599
|
canvasClearWebGLBuffer: !0,
|
|
10599
|
-
dataUrlOptions:
|
|
10600
|
+
dataUrlOptions: io()
|
|
10600
10601
|
}, (r = t.samplingStrategy) != null ? r : {
|
|
10601
10602
|
canvas: 2
|
|
10602
10603
|
}), this._backendUrl = (n = t == null ? void 0 : t.backendUrl) != null ? n : "https://pub.observability.app.launchdarkly.com", this._backendUrl[0] === "/" && (this._backendUrl = new URL(this._backendUrl, document.baseURI).href);
|
|
10603
|
-
const s = new
|
|
10604
|
+
const s = new no(`${this._backendUrl}`, {
|
|
10604
10605
|
headers: {}
|
|
10605
10606
|
});
|
|
10606
|
-
As(this, bt,
|
|
10607
|
+
As(this, bt, so(s, ro())), this.environment = (i = t.environment) != null ? i : "production", this.appVersion = t.appVersion, this.serviceName = (o = t.serviceName) != null ? o : "browser", typeof t.organizationID == "string" ? this.organizationID = t.organizationID : this.organizationID = t.organizationID.toString(), this.isRunningOnHighlight = this.organizationID === "1" || this.organizationID === "1jdkoe52", this.firstloadVersion = t.firstloadVersion || "unknown", this.sessionShortcut = t.sessionShortcut || !1, this._onToggleFeedbackFormVisibility = () => {
|
|
10607
10608
|
};
|
|
10608
10609
|
const a = t, { firstloadVersion: l } = a, c = st(a, ["firstloadVersion"]);
|
|
10609
10610
|
this._optionsInternal = c, this.listeners = [], this.events = [], this.hasSessionUnloaded = !1, this.hasPushedData = !1, window.Intercom && window.Intercom("onShow", () => {
|
|
10610
10611
|
window.Intercom("update", {
|
|
10611
10612
|
highlightSessionURL: this.getCurrentSessionURLWithTimestamp()
|
|
10612
10613
|
}), this.addProperties({ event: "Intercom onShow" });
|
|
10613
|
-
}), this._eventBytesSinceSnapshot = 0, this._lastSnapshotTime = (/* @__PURE__ */ new Date()).getTime(), this._lastVisibilityChangeTime = (/* @__PURE__ */ new Date()).getTime();
|
|
10614
|
+
}), this._eventBytesSinceSnapshot = 0, this._lastSnapshotTime = (/* @__PURE__ */ new Date()).getTime(), this._snapshotPayloadIds = /* @__PURE__ */ new Set(), this._lastVisibilityChangeTime = (/* @__PURE__ */ new Date()).getTime();
|
|
10614
10615
|
}
|
|
10615
10616
|
identify(t, s = {}, l) {
|
|
10616
10617
|
if (!t || t === "") {
|
|
@@ -10751,7 +10752,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10751
10752
|
a.bind(this);
|
|
10752
10753
|
const p = !!this._recordStop;
|
|
10753
10754
|
this._recordStop && (this._recordStop(), this._recordStop = void 0);
|
|
10754
|
-
const [X, Z] =
|
|
10755
|
+
const [X, Z] = nu(
|
|
10755
10756
|
this.privacySetting,
|
|
10756
10757
|
this.options.maskAllInputs,
|
|
10757
10758
|
this.options.maskInputOptions
|
|
@@ -10763,7 +10764,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10763
10764
|
blockSelector: this.options.blockSelector,
|
|
10764
10765
|
emit: a,
|
|
10765
10766
|
recordCrossOriginIframes: this.options.recordCrossOriginIframe,
|
|
10766
|
-
privacySetting:
|
|
10767
|
+
privacySetting: lu(
|
|
10767
10768
|
this.privacySetting,
|
|
10768
10769
|
this.options.maskPiiText
|
|
10769
10770
|
),
|
|
@@ -10789,7 +10790,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10789
10790
|
collectFonts: this.inlineImages,
|
|
10790
10791
|
inlineStylesheet: this.inlineStylesheet,
|
|
10791
10792
|
styleSheetResyncInterval: this.styleSheetResyncInterval,
|
|
10792
|
-
plugins: [
|
|
10793
|
+
plugins: [Yo()],
|
|
10793
10794
|
logger: typeof this.options.debug == "boolean" && this.options.debug || typeof this.options.debug == "object" && this.options.debug.domRecording ? {
|
|
10794
10795
|
debug: this.logger.log,
|
|
10795
10796
|
warn: Me.bind(
|
|
@@ -10818,7 +10819,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10818
10819
|
this.logger.log("Ignoring visibility event due to manual stop.");
|
|
10819
10820
|
return;
|
|
10820
10821
|
}
|
|
10821
|
-
(/* @__PURE__ */ new Date()).getTime() - this._lastVisibilityChangeTime <
|
|
10822
|
+
(/* @__PURE__ */ new Date()).getTime() - this._lastVisibilityChangeTime < lo || (this._lastVisibilityChangeTime = (/* @__PURE__ */ new Date()).getTime(), this.logger.log(`Detected window ${t ? "hidden" : "visible"}.`), t ? (this.addCustomEvent("TabHidden", !0), this.options.disableBackgroundRecording && this.stop()) : (this.options.disableBackgroundRecording && (yield this.start()), this.addCustomEvent("TabHidden", !1)));
|
|
10822
10823
|
});
|
|
10823
10824
|
}
|
|
10824
10825
|
_setupCrossOriginIframe() {
|
|
@@ -10865,7 +10866,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10865
10866
|
try {
|
|
10866
10867
|
const c = this;
|
|
10867
10868
|
this.enableSegmentIntegration && this.listeners.push(
|
|
10868
|
-
|
|
10869
|
+
uu((f) => {
|
|
10869
10870
|
if (f.type === "track") {
|
|
10870
10871
|
const b = {};
|
|
10871
10872
|
b["segment-event"] = f.event, c.addProperties(b, {
|
|
@@ -10885,24 +10886,24 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10885
10886
|
}
|
|
10886
10887
|
})
|
|
10887
10888
|
), this.listeners.push(
|
|
10888
|
-
|
|
10889
|
+
oo((f) => {
|
|
10889
10890
|
this.reloaded ? (this.addCustomEvent("Reload", f), this.reloaded = !1, c.addProperties(
|
|
10890
10891
|
{ reload: !0 },
|
|
10891
10892
|
{ type: "session" }
|
|
10892
10893
|
)) : this.addCustomEvent("Navigate", f);
|
|
10893
10894
|
})
|
|
10894
10895
|
), this.listeners.push(
|
|
10895
|
-
|
|
10896
|
+
ao(
|
|
10896
10897
|
(f) => {
|
|
10897
10898
|
this.addCustomEvent("Viewport", f);
|
|
10898
10899
|
}
|
|
10899
10900
|
)
|
|
10900
10901
|
), this.listeners.push(
|
|
10901
|
-
|
|
10902
|
+
ou((f, b) => {
|
|
10902
10903
|
let m = null, h = null;
|
|
10903
10904
|
if (b && b.target) {
|
|
10904
10905
|
const d = b.target;
|
|
10905
|
-
m =
|
|
10906
|
+
m = co(d), h = d.textContent, h && h.length > 2e3 && (h = h.substring(0, 2e3));
|
|
10906
10907
|
}
|
|
10907
10908
|
this.addCustomEvent("Click", {
|
|
10908
10909
|
clickTarget: f,
|
|
@@ -10911,11 +10912,11 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10911
10912
|
});
|
|
10912
10913
|
})
|
|
10913
10914
|
), this.listeners.push(
|
|
10914
|
-
|
|
10915
|
+
au((f) => {
|
|
10915
10916
|
f && this.addCustomEvent("Focus", f);
|
|
10916
10917
|
})
|
|
10917
10918
|
), this.sessionShortcut && this.listeners.push(
|
|
10918
|
-
|
|
10919
|
+
hu(this.sessionShortcut, () => {
|
|
10919
10920
|
window.open(
|
|
10920
10921
|
this.getCurrentSessionURLWithTimestamp(),
|
|
10921
10922
|
"_blank"
|
|
@@ -10926,7 +10927,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10926
10927
|
({ visible: f }) => {
|
|
10927
10928
|
this._visibilityHandler(!f);
|
|
10928
10929
|
}
|
|
10929
|
-
), this.logger.log("Set up Electron highlight.run events.")) : (
|
|
10930
|
+
), this.logger.log("Set up Electron highlight.run events.")) : (cu(
|
|
10930
10931
|
(f) => this._visibilityHandler(f)
|
|
10931
10932
|
), this.logger.log("Set up document visibility listener.")), this._hasPreviouslyInitialized = !0);
|
|
10932
10933
|
const u = () => {
|
|
@@ -10986,7 +10987,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10986
10987
|
return fe(this, null, function* () {
|
|
10987
10988
|
var t;
|
|
10988
10989
|
try {
|
|
10989
|
-
this.state === "Recording" && this.listeners && !this.sessionData.sessionKey && this.sessionData.sessionStartTime && Date.now() - this.sessionData.sessionStartTime >
|
|
10990
|
+
this.state === "Recording" && this.listeners && !this.sessionData.sessionKey && this.sessionData.sessionStartTime && Date.now() - this.sessionData.sessionStartTime > uo && (this.logger.log("Resetting session", {
|
|
10990
10991
|
start: this.sessionData.sessionStartTime
|
|
10991
10992
|
}), yield this._reset({}));
|
|
10992
10993
|
let s;
|
|
@@ -10994,7 +10995,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
10994
10995
|
let c = new Blob(
|
|
10995
10996
|
[
|
|
10996
10997
|
JSON.stringify({
|
|
10997
|
-
query:
|
|
10998
|
+
query: Zo(go),
|
|
10998
10999
|
variables: l
|
|
10999
11000
|
})
|
|
11000
11001
|
],
|
|
@@ -11012,7 +11013,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
11012
11013
|
}
|
|
11013
11014
|
this.state === "Recording" && (this.pushPayloadTimerId && (clearTimeout(this.pushPayloadTimerId), this.pushPayloadTimerId = void 0), this.pushPayloadTimerId = setTimeout(() => {
|
|
11014
11015
|
this._save();
|
|
11015
|
-
},
|
|
11016
|
+
}, ho));
|
|
11016
11017
|
});
|
|
11017
11018
|
}
|
|
11018
11019
|
/**
|
|
@@ -11039,13 +11040,13 @@ To: ${this._backendUrl}
|
|
|
11039
11040
|
Org: ${this.organizationID}
|
|
11040
11041
|
SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
11041
11042
|
);
|
|
11042
|
-
const f = (/* @__PURE__ */ new Date()).getTime(), b =
|
|
11043
|
+
const f = (/* @__PURE__ */ new Date()).getTime(), b = Xu();
|
|
11043
11044
|
if (t) {
|
|
11044
11045
|
const m = {
|
|
11045
11046
|
session_secure_id: this.sessionData.sessionSecureID,
|
|
11046
11047
|
payload_id: f.toString(),
|
|
11047
11048
|
events: { events: l },
|
|
11048
|
-
messages:
|
|
11049
|
+
messages: po({ messages: [] }),
|
|
11049
11050
|
resources: JSON.stringify({ resources: [] }),
|
|
11050
11051
|
web_socket_events: JSON.stringify({
|
|
11051
11052
|
webSocketEvents: []
|
|
@@ -11054,14 +11055,14 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
11054
11055
|
is_beacon: !1,
|
|
11055
11056
|
has_session_unloaded: this.hasSessionUnloaded,
|
|
11056
11057
|
highlight_logs: b || void 0
|
|
11057
|
-
}, { compressedBase64: h } = yield
|
|
11058
|
+
}, { compressedBase64: h } = yield Uu(m);
|
|
11058
11059
|
yield t({
|
|
11059
11060
|
session_secure_id: this.sessionData.sessionSecureID,
|
|
11060
11061
|
payload_id: f.toString(),
|
|
11061
11062
|
data: h
|
|
11062
11063
|
});
|
|
11063
11064
|
} else
|
|
11064
|
-
this._worker.postMessage({
|
|
11065
|
+
l.some((m) => m.type === Qn.FullSnapshot) && this._snapshotPayloadIds.add(f), this._worker.postMessage({
|
|
11065
11066
|
message: {
|
|
11066
11067
|
type: Je.AsyncEvents,
|
|
11067
11068
|
id: f,
|
|
@@ -11076,7 +11077,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
11076
11077
|
highlightLogs: b
|
|
11077
11078
|
}
|
|
11078
11079
|
});
|
|
11079
|
-
rt(this.sessionData), this.events = this.events.slice(l.length),
|
|
11080
|
+
rt(this.sessionData), this.events = this.events.slice(l.length), Ru(b);
|
|
11080
11081
|
});
|
|
11081
11082
|
}
|
|
11082
11083
|
takeFullSnapshot() {
|
|
@@ -11090,7 +11091,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
11090
11091
|
}), Ne.takeFullSnapshot(), this._eventBytesSinceSnapshot = 0, this._lastSnapshotTime = (/* @__PURE__ */ new Date()).getTime();
|
|
11091
11092
|
}
|
|
11092
11093
|
register(t, s) {
|
|
11093
|
-
this._integrations.push(new
|
|
11094
|
+
this._integrations.push(new mo(t, s));
|
|
11094
11095
|
}
|
|
11095
11096
|
getHooks(t) {
|
|
11096
11097
|
return this._integrations.flatMap((s) => {
|
|
@@ -11130,16 +11131,16 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
11130
11131
|
}
|
|
11131
11132
|
getFrontendUrl() {
|
|
11132
11133
|
var s, l;
|
|
11133
|
-
const t = this._backendUrl.match(
|
|
11134
|
+
const t = this._backendUrl.match(fo);
|
|
11134
11135
|
if (t && ((s = t == null ? void 0 : t.groups) != null && s.domain)) {
|
|
11135
|
-
const c = (l = t.groups.domain) != null ? l : "", u =
|
|
11136
|
-
return u ? `https://${u}${
|
|
11136
|
+
const c = (l = t.groups.domain) != null ? l : "", u = bo[c];
|
|
11137
|
+
return u ? `https://${u}${yo}` : tr;
|
|
11137
11138
|
}
|
|
11138
11139
|
return tr;
|
|
11139
11140
|
}
|
|
11140
11141
|
}
|
|
11141
11142
|
bt = new WeakMap();
|
|
11142
|
-
class
|
|
11143
|
+
class Du extends So {
|
|
11143
11144
|
constructor(s) {
|
|
11144
11145
|
super(s);
|
|
11145
11146
|
H(this, "record");
|
|
@@ -11173,18 +11174,18 @@ class Qu extends go {
|
|
|
11173
11174
|
this.configureSession(s, l);
|
|
11174
11175
|
const i = me(K({}, l), {
|
|
11175
11176
|
organizationID: s,
|
|
11176
|
-
firstloadVersion:
|
|
11177
|
+
firstloadVersion: Xo,
|
|
11177
11178
|
environment: (l == null ? void 0 : l.environment) || "production",
|
|
11178
11179
|
appVersion: l == null ? void 0 : l.version,
|
|
11179
11180
|
sessionSecureID: this.sessionSecureID,
|
|
11180
11181
|
privacySetting: (c = l == null ? void 0 : l.privacySetting) != null ? c : "strict"
|
|
11181
11182
|
});
|
|
11182
|
-
this.record = new
|
|
11183
|
+
this.record = new Ou(i);
|
|
11183
11184
|
const o = l != null && l.manualStart ? void 0 : this.record.start();
|
|
11184
|
-
|
|
11185
|
+
Lo.load(this.record, {
|
|
11185
11186
|
ready: !(l != null && l.manualStart),
|
|
11186
11187
|
started: o
|
|
11187
|
-
}), !((f = (u = l == null ? void 0 : l.integrations) == null ? void 0 : u.mixpanel) != null && f.disabled) && ((m = (b = l == null ? void 0 : l.integrations) == null ? void 0 : b.mixpanel) != null && m.projectToken) &&
|
|
11188
|
+
}), !((f = (u = l == null ? void 0 : l.integrations) == null ? void 0 : u.mixpanel) != null && f.disabled) && ((m = (b = l == null ? void 0 : l.integrations) == null ? void 0 : b.mixpanel) != null && m.projectToken) && zu(l.integrations.mixpanel), !((d = (h = l == null ? void 0 : l.integrations) == null ? void 0 : h.amplitude) != null && d.disabled) && ((n = (r = l == null ? void 0 : l.integrations) == null ? void 0 : r.amplitude) != null && n.apiKey) && Mu(l.integrations.amplitude);
|
|
11188
11189
|
} catch (i) {
|
|
11189
11190
|
Me(
|
|
11190
11191
|
"Error initializing @launchdarkly/session-replay SDK",
|
|
@@ -11205,12 +11206,12 @@ class Qu extends go {
|
|
|
11205
11206
|
getHooks(s) {
|
|
11206
11207
|
var c, u, f, b;
|
|
11207
11208
|
const l = K(K({
|
|
11208
|
-
[
|
|
11209
|
-
[
|
|
11210
|
-
[
|
|
11211
|
-
[
|
|
11212
|
-
}, (c = s.application) != null && c.id ? { [
|
|
11213
|
-
[
|
|
11209
|
+
[Co]: s.sdk.name,
|
|
11210
|
+
[wo]: s.sdk.version,
|
|
11211
|
+
[Io]: s.clientSideId,
|
|
11212
|
+
[Wo]: "LaunchDarkly"
|
|
11213
|
+
}, (c = s.application) != null && c.id ? { [Vo]: s.application.id } : {}), (u = s.application) != null && u.version ? {
|
|
11214
|
+
[Go]: s.application.version
|
|
11214
11215
|
} : {});
|
|
11215
11216
|
return this.initialize(
|
|
11216
11217
|
(b = (f = s.sdkKey) != null ? f : s.mobileKey) != null ? b : s.clientSideId,
|
|
@@ -11225,7 +11226,7 @@ class Qu extends go {
|
|
|
11225
11226
|
for (const S of (i = (n = (r = this.record) == null ? void 0 : r.getHooks) == null ? void 0 : n.call(r, s)) != null ? i : [])
|
|
11226
11227
|
(o = S.afterIdentify) == null || o.call(S, m, h, d);
|
|
11227
11228
|
if (d.status === "completed") {
|
|
11228
|
-
const S = me(K({},
|
|
11229
|
+
const S = me(K({}, Ro(m.context)), {
|
|
11229
11230
|
key: (X = (p = (a = this.options) == null ? void 0 : a.contextFriendlyName) == null ? void 0 : p.call(
|
|
11230
11231
|
a,
|
|
11231
11232
|
m.context
|
|
@@ -11260,25 +11261,26 @@ class Qu extends go {
|
|
|
11260
11261
|
}
|
|
11261
11262
|
}
|
|
11262
11263
|
export {
|
|
11263
|
-
|
|
11264
|
-
|
|
11264
|
+
ou as C,
|
|
11265
|
+
Qn as E,
|
|
11266
|
+
au as F,
|
|
11265
11267
|
Kn as I,
|
|
11266
11268
|
Je as M,
|
|
11267
|
-
|
|
11268
|
-
|
|
11269
|
-
|
|
11270
|
-
|
|
11269
|
+
cu as P,
|
|
11270
|
+
Du as R,
|
|
11271
|
+
uu as S,
|
|
11272
|
+
Fu as W,
|
|
11271
11273
|
Fn as a,
|
|
11272
|
-
|
|
11274
|
+
hu as b,
|
|
11273
11275
|
Nn as c,
|
|
11274
|
-
|
|
11275
|
-
|
|
11276
|
-
|
|
11277
|
-
|
|
11278
|
-
|
|
11279
|
-
|
|
11280
|
-
|
|
11276
|
+
Ru as d,
|
|
11277
|
+
Yo as e,
|
|
11278
|
+
lu as f,
|
|
11279
|
+
Xu as g,
|
|
11280
|
+
nu as h,
|
|
11281
|
+
Mu as i,
|
|
11282
|
+
Uu as p,
|
|
11281
11283
|
Ne as r,
|
|
11282
|
-
|
|
11284
|
+
zu as s
|
|
11283
11285
|
};
|
|
11284
|
-
//# sourceMappingURL=record-
|
|
11286
|
+
//# sourceMappingURL=record-Bgkzgi9x.js.map
|