@launchdarkly/session-replay 0.4.12 → 0.5.1

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.
@@ -1,4 +1,4 @@
1
- var hu = Object.defineProperty, pu = (e, t, i) => t in e ? hu(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, He = (e, t, i) => pu(e, typeof t != "symbol" ? t + "" : t, i), mu = (e, t, i) => new Promise((n, s) => {
1
+ var hu = Object.defineProperty, pu = (e, t, i) => t in e ? hu(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, ze = (e, t, i) => pu(e, typeof t != "symbol" ? t + "" : t, i), mu = (e, t, i) => new Promise((n, s) => {
2
2
  var r = (a) => {
3
3
  try {
4
4
  o(i.next(a));
@@ -21,14 +21,14 @@ const Br = /* @__PURE__ */ Object.create(null), Ve = (e, t, ...i) => {
21
21
  Br[`${e}-${t}`] || (Br[`${e}-${t}`] = !0, Ve(e, i, ...n));
22
22
  }, bu = (e, ...t) => mu(void 0, null, function* () {
23
23
  try {
24
- const { LDObserve: i } = yield import("./LDObserve-BHQyYqSE.js");
24
+ const { LDObserve: i } = yield import("./LDObserve-BeLi-QhE.js");
25
25
  i.recordLog(`${e}${t}`, "warn");
26
26
  } catch {
27
27
  }
28
28
  });
29
29
  class vl {
30
30
  constructor(t, i) {
31
- He(this, "debug"), He(this, "name"), this.debug = t, this.name = i;
31
+ ze(this, "debug"), ze(this, "name"), this.debug = t, this.name = i;
32
32
  }
33
33
  log(...t) {
34
34
  if (this.debug) {
@@ -43,7 +43,7 @@ class vl {
43
43
  }
44
44
  let wl = class {
45
45
  constructor() {
46
- He(this, "_sdk"), He(this, "_isLoaded", !1), He(this, "_callBuffer", []), He(this, "_capacity", 1e5), He(this, "_droppedEvents", 0), He(this, "_exceededCapacity", !1), He(this, "_logger", new vl());
46
+ ze(this, "_sdk"), ze(this, "_isLoaded", !1), ze(this, "_callBuffer", []), ze(this, "_capacity", 1e5), ze(this, "_droppedEvents", 0), ze(this, "_exceededCapacity", !1), ze(this, "_logger", new vl());
47
47
  }
48
48
  _bufferCall(t, i) {
49
49
  if (this._isLoaded)
@@ -97,7 +97,7 @@ var fu = Object.defineProperty, yu = Object.defineProperties, gu = Object.getOwn
97
97
  for (var n of ln(e))
98
98
  t.indexOf(n) < 0 && Tl.call(e, n) && (i[n] = e[n]);
99
99
  return i;
100
- }, ni = (e, t, i) => ys(e, typeof t != "symbol" ? t + "" : t, i), Ct = (e, t, i) => new Promise((n, s) => {
100
+ }, ni = (e, t, i) => ys(e, typeof t != "symbol" ? t + "" : t, i), Wt = (e, t, i) => new Promise((n, s) => {
101
101
  var r = (a) => {
102
102
  try {
103
103
  o(i.next(a));
@@ -197,7 +197,7 @@ function Xu(e) {
197
197
  extensions: e[5]
198
198
  } : t;
199
199
  }
200
- let Cu = class Ll extends Error {
200
+ let Wu = class Ll extends Error {
201
201
  /**
202
202
  * An array of `{ line, column }` locations within the source GraphQL document
203
203
  * which correspond to this error.
@@ -307,12 +307,12 @@ function jr(e) {
307
307
  return e === void 0 || e.length === 0 ? void 0 : e;
308
308
  }
309
309
  function ue(e, t, i) {
310
- return new Cu(`Syntax Error: ${i}`, {
310
+ return new Wu(`Syntax Error: ${i}`, {
311
311
  source: e,
312
312
  positions: [t]
313
313
  });
314
314
  }
315
- let Wu = class {
315
+ let Cu = class {
316
316
  /**
317
317
  * The character offset at which this Node begins.
318
318
  */
@@ -479,15 +479,15 @@ function Is(e) {
479
479
  function si(e) {
480
480
  return e >= 48 && e <= 57;
481
481
  }
482
- function Fl(e) {
482
+ function Ul(e) {
483
483
  return e >= 97 && e <= 122 || // A-Z
484
484
  e >= 65 && e <= 90;
485
485
  }
486
- function Ul(e) {
487
- return Fl(e) || e === 95;
486
+ function Fl(e) {
487
+ return Ul(e) || e === 95;
488
488
  }
489
489
  function ku(e) {
490
- return Fl(e) || si(e) || e === 95;
490
+ return Ul(e) || si(e) || e === 95;
491
491
  }
492
492
  function vu(e) {
493
493
  var t;
@@ -574,12 +574,12 @@ function Jt(e) {
574
574
  return e >= 0 && e <= 55295 || e >= 57344 && e <= 1114111;
575
575
  }
576
576
  function Nn(e, t) {
577
- return Kl(e.charCodeAt(t)) && Ol(e.charCodeAt(t + 1));
577
+ return Kl(e.charCodeAt(t)) && Ml(e.charCodeAt(t + 1));
578
578
  }
579
579
  function Kl(e) {
580
580
  return e >= 55296 && e <= 56319;
581
581
  }
582
- function Ol(e) {
582
+ function Ml(e) {
583
583
  return e >= 56320 && e <= 57343;
584
584
  }
585
585
  function lt(e, t) {
@@ -647,12 +647,12 @@ function Lu(e, t) {
647
647
  case 125:
648
648
  return le(e, Z.BRACE_R, s, s + 1);
649
649
  case 34:
650
- return i.charCodeAt(s + 1) === 34 && i.charCodeAt(s + 2) === 34 ? Eu(e, s) : Fu(e, s);
650
+ return i.charCodeAt(s + 1) === 34 && i.charCodeAt(s + 2) === 34 ? Ou(e, s) : Uu(e, s);
651
651
  }
652
652
  if (si(r) || r === 45)
653
653
  return Yu(e, s, r);
654
- if (Ul(r))
655
- return Mu(e, s);
654
+ if (Fl(r))
655
+ return Eu(e, s);
656
656
  throw ue(
657
657
  e.source,
658
658
  s,
@@ -698,7 +698,7 @@ function Yu(e, t, i) {
698
698
  );
699
699
  } else
700
700
  s = Qn(e, s, r), r = n.charCodeAt(s);
701
- if (r === 46 && (l = !0, r = n.charCodeAt(++s), s = Qn(e, s, r), r = n.charCodeAt(s)), (r === 69 || r === 101) && (l = !0, r = n.charCodeAt(++s), (r === 43 || r === 45) && (r = n.charCodeAt(++s)), s = Qn(e, s, r), r = n.charCodeAt(s)), r === 46 || Ul(r))
701
+ if (r === 46 && (l = !0, r = n.charCodeAt(++s), s = Qn(e, s, r), r = n.charCodeAt(s)), (r === 69 || r === 101) && (l = !0, r = n.charCodeAt(++s), (r === 43 || r === 45) && (r = n.charCodeAt(++s)), s = Qn(e, s, r), r = n.charCodeAt(s)), r === 46 || Fl(r))
702
702
  throw ue(
703
703
  e.source,
704
704
  s,
@@ -731,7 +731,7 @@ function Qn(e, t, i) {
731
731
  ++s;
732
732
  return s;
733
733
  }
734
- function Fu(e, t) {
734
+ function Uu(e, t) {
735
735
  const i = e.source.body, n = i.length;
736
736
  let s = t + 1, r = s, l = "";
737
737
  for (; s < n; ) {
@@ -740,7 +740,7 @@ function Fu(e, t) {
740
740
  return l += i.slice(r, s), le(e, Z.STRING, t, s + 1, l);
741
741
  if (o === 92) {
742
742
  l += i.slice(r, s);
743
- const a = i.charCodeAt(s + 1) === 117 ? i.charCodeAt(s + 2) === 123 ? Uu(e, s) : Ku(e, s) : Ou(e, s);
743
+ const a = i.charCodeAt(s + 1) === 117 ? i.charCodeAt(s + 2) === 123 ? Fu(e, s) : Ku(e, s) : Mu(e, s);
744
744
  l += a.value, s += a.size, r = s;
745
745
  continue;
746
746
  }
@@ -762,7 +762,7 @@ function Fu(e, t) {
762
762
  }
763
763
  throw ue(e.source, s, "Unterminated string.");
764
764
  }
765
- function Uu(e, t) {
765
+ function Fu(e, t) {
766
766
  const i = e.source.body;
767
767
  let n = 0, s = 3;
768
768
  for (; s < 12; ) {
@@ -796,7 +796,7 @@ function Ku(e, t) {
796
796
  };
797
797
  if (Kl(n) && i.charCodeAt(t + 6) === 92 && i.charCodeAt(t + 7) === 117) {
798
798
  const s = Ar(i, t + 8);
799
- if (Ol(s))
799
+ if (Ml(s))
800
800
  return {
801
801
  value: String.fromCodePoint(n, s),
802
802
  size: 12
@@ -814,7 +814,7 @@ function Ar(e, t) {
814
814
  function Dt(e) {
815
815
  return e >= 48 && e <= 57 ? e - 48 : e >= 65 && e <= 70 ? e - 55 : e >= 97 && e <= 102 ? e - 87 : -1;
816
816
  }
817
- function Ou(e, t) {
817
+ function Mu(e, t) {
818
818
  const i = e.source.body;
819
819
  switch (i.charCodeAt(t + 1)) {
820
820
  case 34:
@@ -868,7 +868,7 @@ function Ou(e, t) {
868
868
  )}".`
869
869
  );
870
870
  }
871
- function Eu(e, t) {
871
+ function Ou(e, t) {
872
872
  const i = e.source.body, n = i.length;
873
873
  let s = e.lineStart, r = t + 3, l = r, o = "";
874
874
  const a = [];
@@ -911,7 +911,7 @@ function Eu(e, t) {
911
911
  }
912
912
  throw ue(e.source, r, "Unterminated string.");
913
913
  }
914
- function Mu(e, t) {
914
+ function Eu(e, t) {
915
915
  const i = e.source.body, n = i.length;
916
916
  let s = t + 1;
917
917
  for (; s < n; ) {
@@ -929,7 +929,7 @@ function Mu(e, t) {
929
929
  i.slice(t, s)
930
930
  );
931
931
  }
932
- const zu = 10, El = 2;
932
+ const Hu = 10, Ol = 2;
933
933
  function hr(e) {
934
934
  return Ln(e, []);
935
935
  }
@@ -940,12 +940,12 @@ function Ln(e, t) {
940
940
  case "function":
941
941
  return e.name ? `[function ${e.name}]` : "[function]";
942
942
  case "object":
943
- return Hu(e, t);
943
+ return zu(e, t);
944
944
  default:
945
945
  return String(e);
946
946
  }
947
947
  }
948
- function Hu(e, t) {
948
+ function zu(e, t) {
949
949
  if (e === null)
950
950
  return "null";
951
951
  if (t.includes(e))
@@ -964,16 +964,16 @@ function Pu(e) {
964
964
  }
965
965
  function Bu(e, t) {
966
966
  const i = Object.entries(e);
967
- return i.length === 0 ? "{}" : t.length > El ? "[" + ju(e) + "]" : "{ " + i.map(
967
+ return i.length === 0 ? "{}" : t.length > Ol ? "[" + ju(e) + "]" : "{ " + i.map(
968
968
  ([n, s]) => n + ": " + Ln(s, t)
969
969
  ).join(", ") + " }";
970
970
  }
971
971
  function Du(e, t) {
972
972
  if (e.length === 0)
973
973
  return "[]";
974
- if (t.length > El)
974
+ if (t.length > Ol)
975
975
  return "[Array]";
976
- const i = Math.min(zu, e.length), n = e.length - i, s = [];
976
+ const i = Math.min(Hu, e.length), n = e.length - i, s = [];
977
977
  for (let r = 0; r < i; ++r)
978
978
  s.push(Ln(e[r], t));
979
979
  return n === 1 ? s.push("... 1 more item") : n > 1 && s.push(`... ${n} more items`), "[" + s.join(", ") + "]";
@@ -1021,7 +1021,7 @@ spurious results.`);
1021
1021
  return !1;
1022
1022
  }
1023
1023
  );
1024
- let Ml = class {
1024
+ let El = class {
1025
1025
  constructor(t, i = "GraphQL request", n = {
1026
1026
  line: 1,
1027
1027
  column: 1
@@ -1039,9 +1039,9 @@ let Ml = class {
1039
1039
  }
1040
1040
  };
1041
1041
  function _u(e) {
1042
- return Au(e, Ml);
1042
+ return Au(e, El);
1043
1043
  }
1044
- function zl(e, t) {
1044
+ function Hl(e, t) {
1045
1045
  const i = new $u(e, t), n = i.parseDocument();
1046
1046
  return Object.defineProperty(n, "tokenCount", {
1047
1047
  enumerable: !1,
@@ -1050,7 +1050,7 @@ function zl(e, t) {
1050
1050
  }
1051
1051
  let $u = class {
1052
1052
  constructor(t, i = {}) {
1053
- const n = _u(t) ? t : new Ml(t);
1053
+ const n = _u(t) ? t : new El(t);
1054
1054
  this._lexer = new Tu(n), this._options = i, this._tokenCounter = 0;
1055
1055
  }
1056
1056
  get tokenCount() {
@@ -2021,7 +2021,7 @@ let $u = class {
2021
2021
  * given parsed object.
2022
2022
  */
2023
2023
  node(t, i) {
2024
- return this._options.noLocation !== !0 && (i.loc = new Wu(
2024
+ return this._options.noLocation !== !0 && (i.loc = new Cu(
2025
2025
  t,
2026
2026
  this._lexer.lastToken,
2027
2027
  this._lexer.source
@@ -2044,7 +2044,7 @@ let $u = class {
2044
2044
  throw ue(
2045
2045
  this._lexer.source,
2046
2046
  i.start,
2047
- `Expected ${Hl(t)}, found ${Vi(i)}.`
2047
+ `Expected ${zl(t)}, found ${Vi(i)}.`
2048
2048
  );
2049
2049
  }
2050
2050
  /**
@@ -2154,9 +2154,9 @@ let $u = class {
2154
2154
  };
2155
2155
  function Vi(e) {
2156
2156
  const t = e.value;
2157
- return Hl(e.kind) + (t != null ? ` "${t}"` : "");
2157
+ return zl(e.kind) + (t != null ? ` "${t}"` : "");
2158
2158
  }
2159
- function Hl(e) {
2159
+ function zl(e) {
2160
2160
  return Nu(e) ? `"${e}"` : e;
2161
2161
  }
2162
2162
  function qu(e) {
@@ -2362,27 +2362,27 @@ function sd(e, t, i = Yl) {
2362
2362
  continue;
2363
2363
  p.push(u);
2364
2364
  }
2365
- let W;
2365
+ let C;
2366
2366
  if (!Array.isArray(c)) {
2367
2367
  var b, d;
2368
2368
  Qr(c) || Qi(!1, `Invalid AST Node: ${hr(c)}.`);
2369
2369
  const X = I ? (b = n.get(c.kind)) === null || b === void 0 ? void 0 : b.leave : (d = n.get(c.kind)) === null || d === void 0 ? void 0 : d.enter;
2370
- if (W = X?.call(t, c, u, h, p, m), W === nd)
2370
+ if (C = X?.call(t, c, u, h, p, m), C === nd)
2371
2371
  break;
2372
- if (W === !1) {
2372
+ if (C === !1) {
2373
2373
  if (!I) {
2374
2374
  p.pop();
2375
2375
  continue;
2376
2376
  }
2377
- } else if (W !== void 0 && (a.push([u, W]), !I))
2378
- if (Qr(W))
2379
- c = W;
2377
+ } else if (C !== void 0 && (a.push([u, C]), !I))
2378
+ if (Qr(C))
2379
+ c = C;
2380
2380
  else {
2381
2381
  p.pop();
2382
2382
  continue;
2383
2383
  }
2384
2384
  }
2385
- if (W === void 0 && V && a.push([u, c]), I)
2385
+ if (C === void 0 && V && a.push([u, c]), I)
2386
2386
  p.pop();
2387
2387
  else {
2388
2388
  var S;
@@ -2425,7 +2425,7 @@ const od = 80, ld = {
2425
2425
  },
2426
2426
  OperationDefinition: {
2427
2427
  leave(e) {
2428
- const t = z("(", x(e.variableDefinitions, ", "), ")"), i = x(
2428
+ const t = H("(", x(e.variableDefinitions, ", "), ")"), i = x(
2429
2429
  [
2430
2430
  e.operation,
2431
2431
  x([e.name, t]),
@@ -2437,16 +2437,16 @@ const od = 80, ld = {
2437
2437
  }
2438
2438
  },
2439
2439
  VariableDefinition: {
2440
- leave: ({ variable: e, type: t, defaultValue: i, directives: n }) => e + ": " + t + z(" = ", i) + z(" ", x(n, " "))
2440
+ leave: ({ variable: e, type: t, defaultValue: i, directives: n }) => e + ": " + t + H(" = ", i) + H(" ", x(n, " "))
2441
2441
  },
2442
2442
  SelectionSet: {
2443
2443
  leave: ({ selections: e }) => xe(e)
2444
2444
  },
2445
2445
  Field: {
2446
2446
  leave({ alias: e, name: t, arguments: i, directives: n, selectionSet: s }) {
2447
- const r = z("", e, ": ") + t;
2448
- let l = r + z("(", x(i, ", "), ")");
2449
- return l.length > od && (l = r + z(`(
2447
+ const r = H("", e, ": ") + t;
2448
+ let l = r + H("(", x(i, ", "), ")");
2449
+ return l.length > od && (l = r + H(`(
2450
2450
  `, Ai(x(i, `
2451
2451
  `)), `
2452
2452
  )`)), x([l, x(n, " "), s], " ");
@@ -2457,13 +2457,13 @@ const od = 80, ld = {
2457
2457
  },
2458
2458
  // Fragments
2459
2459
  FragmentSpread: {
2460
- leave: ({ name: e, directives: t }) => "..." + e + z(" ", x(t, " "))
2460
+ leave: ({ name: e, directives: t }) => "..." + e + H(" ", x(t, " "))
2461
2461
  },
2462
2462
  InlineFragment: {
2463
2463
  leave: ({ typeCondition: e, directives: t, selectionSet: i }) => x(
2464
2464
  [
2465
2465
  "...",
2466
- z("on ", e),
2466
+ H("on ", e),
2467
2467
  x(t, " "),
2468
2468
  i
2469
2469
  ],
@@ -2473,7 +2473,7 @@ const od = 80, ld = {
2473
2473
  FragmentDefinition: {
2474
2474
  leave: ({ name: e, typeCondition: t, variableDefinitions: i, directives: n, selectionSet: s }) => (
2475
2475
  // or removed in the future.
2476
- `fragment ${e}${z("(", x(i, ", "), ")")} on ${t} ${z("", x(n, " "), " ")}` + s
2476
+ `fragment ${e}${H("(", x(i, ", "), ")")} on ${t} ${H("", x(n, " "), " ")}` + s
2477
2477
  )
2478
2478
  },
2479
2479
  // Value
@@ -2506,7 +2506,7 @@ const od = 80, ld = {
2506
2506
  },
2507
2507
  // Directive
2508
2508
  Directive: {
2509
- leave: ({ name: e, arguments: t }) => "@" + e + z("(", x(t, ", "), ")")
2509
+ leave: ({ name: e, arguments: t }) => "@" + e + H("(", x(t, ", "), ")")
2510
2510
  },
2511
2511
  // Type
2512
2512
  NamedType: {
@@ -2520,23 +2520,23 @@ const od = 80, ld = {
2520
2520
  },
2521
2521
  // Type System Definitions
2522
2522
  SchemaDefinition: {
2523
- leave: ({ description: e, directives: t, operationTypes: i }) => z("", e, `
2523
+ leave: ({ description: e, directives: t, operationTypes: i }) => H("", e, `
2524
2524
  `) + x(["schema", x(t, " "), xe(i)], " ")
2525
2525
  },
2526
2526
  OperationTypeDefinition: {
2527
2527
  leave: ({ operation: e, type: t }) => e + ": " + t
2528
2528
  },
2529
2529
  ScalarTypeDefinition: {
2530
- leave: ({ description: e, name: t, directives: i }) => z("", e, `
2530
+ leave: ({ description: e, name: t, directives: i }) => H("", e, `
2531
2531
  `) + x(["scalar", t, x(i, " ")], " ")
2532
2532
  },
2533
2533
  ObjectTypeDefinition: {
2534
- leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => z("", e, `
2534
+ leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => H("", e, `
2535
2535
  `) + x(
2536
2536
  [
2537
2537
  "type",
2538
2538
  t,
2539
- z("implements ", x(i, " & ")),
2539
+ H("implements ", x(i, " & ")),
2540
2540
  x(n, " "),
2541
2541
  xe(s)
2542
2542
  ],
@@ -2544,26 +2544,26 @@ const od = 80, ld = {
2544
2544
  )
2545
2545
  },
2546
2546
  FieldDefinition: {
2547
- leave: ({ description: e, name: t, arguments: i, type: n, directives: s }) => z("", e, `
2548
- `) + t + (_r(i) ? z(`(
2547
+ leave: ({ description: e, name: t, arguments: i, type: n, directives: s }) => H("", e, `
2548
+ `) + t + (_r(i) ? H(`(
2549
2549
  `, Ai(x(i, `
2550
2550
  `)), `
2551
- )`) : z("(", x(i, ", "), ")")) + ": " + n + z(" ", x(s, " "))
2551
+ )`) : H("(", x(i, ", "), ")")) + ": " + n + H(" ", x(s, " "))
2552
2552
  },
2553
2553
  InputValueDefinition: {
2554
- leave: ({ description: e, name: t, type: i, defaultValue: n, directives: s }) => z("", e, `
2554
+ leave: ({ description: e, name: t, type: i, defaultValue: n, directives: s }) => H("", e, `
2555
2555
  `) + x(
2556
- [t + ": " + i, z("= ", n), x(s, " ")],
2556
+ [t + ": " + i, H("= ", n), x(s, " ")],
2557
2557
  " "
2558
2558
  )
2559
2559
  },
2560
2560
  InterfaceTypeDefinition: {
2561
- leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => z("", e, `
2561
+ leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => H("", e, `
2562
2562
  `) + x(
2563
2563
  [
2564
2564
  "interface",
2565
2565
  t,
2566
- z("implements ", x(i, " & ")),
2566
+ H("implements ", x(i, " & ")),
2567
2567
  x(n, " "),
2568
2568
  xe(s)
2569
2569
  ],
@@ -2571,30 +2571,30 @@ const od = 80, ld = {
2571
2571
  )
2572
2572
  },
2573
2573
  UnionTypeDefinition: {
2574
- leave: ({ description: e, name: t, directives: i, types: n }) => z("", e, `
2574
+ leave: ({ description: e, name: t, directives: i, types: n }) => H("", e, `
2575
2575
  `) + x(
2576
- ["union", t, x(i, " "), z("= ", x(n, " | "))],
2576
+ ["union", t, x(i, " "), H("= ", x(n, " | "))],
2577
2577
  " "
2578
2578
  )
2579
2579
  },
2580
2580
  EnumTypeDefinition: {
2581
- leave: ({ description: e, name: t, directives: i, values: n }) => z("", e, `
2581
+ leave: ({ description: e, name: t, directives: i, values: n }) => H("", e, `
2582
2582
  `) + x(["enum", t, x(i, " "), xe(n)], " ")
2583
2583
  },
2584
2584
  EnumValueDefinition: {
2585
- leave: ({ description: e, name: t, directives: i }) => z("", e, `
2585
+ leave: ({ description: e, name: t, directives: i }) => H("", e, `
2586
2586
  `) + x([t, x(i, " ")], " ")
2587
2587
  },
2588
2588
  InputObjectTypeDefinition: {
2589
- leave: ({ description: e, name: t, directives: i, fields: n }) => z("", e, `
2589
+ leave: ({ description: e, name: t, directives: i, fields: n }) => H("", e, `
2590
2590
  `) + x(["input", t, x(i, " "), xe(n)], " ")
2591
2591
  },
2592
2592
  DirectiveDefinition: {
2593
- leave: ({ description: e, name: t, arguments: i, repeatable: n, locations: s }) => z("", e, `
2594
- `) + "directive @" + t + (_r(i) ? z(`(
2593
+ leave: ({ description: e, name: t, arguments: i, repeatable: n, locations: s }) => H("", e, `
2594
+ `) + "directive @" + t + (_r(i) ? H(`(
2595
2595
  `, Ai(x(i, `
2596
2596
  `)), `
2597
- )`) : z("(", x(i, ", "), ")")) + (n ? " repeatable" : "") + " on " + x(s, " | ")
2597
+ )`) : H("(", x(i, ", "), ")")) + (n ? " repeatable" : "") + " on " + x(s, " | ")
2598
2598
  },
2599
2599
  SchemaExtension: {
2600
2600
  leave: ({ directives: e, operationTypes: t }) => x(
@@ -2610,7 +2610,7 @@ const od = 80, ld = {
2610
2610
  [
2611
2611
  "extend type",
2612
2612
  e,
2613
- z("implements ", x(t, " & ")),
2613
+ H("implements ", x(t, " & ")),
2614
2614
  x(i, " "),
2615
2615
  xe(n)
2616
2616
  ],
@@ -2622,7 +2622,7 @@ const od = 80, ld = {
2622
2622
  [
2623
2623
  "extend interface",
2624
2624
  e,
2625
- z("implements ", x(t, " & ")),
2625
+ H("implements ", x(t, " & ")),
2626
2626
  x(i, " "),
2627
2627
  xe(n)
2628
2628
  ],
@@ -2635,7 +2635,7 @@ const od = 80, ld = {
2635
2635
  "extend union",
2636
2636
  e,
2637
2637
  x(t, " "),
2638
- z("= ", x(i, " | "))
2638
+ H("= ", x(i, " | "))
2639
2639
  ],
2640
2640
  " "
2641
2641
  )
@@ -2652,16 +2652,16 @@ function x(e, t = "") {
2652
2652
  return (i = e?.filter((n) => n).join(t)) !== null && i !== void 0 ? i : "";
2653
2653
  }
2654
2654
  function xe(e) {
2655
- return z(`{
2655
+ return H(`{
2656
2656
  `, Ai(x(e, `
2657
2657
  `)), `
2658
2658
  }`);
2659
2659
  }
2660
- function z(e, t, i = "") {
2660
+ function H(e, t, i = "") {
2661
2661
  return t != null && t !== "" ? e + t + i : "";
2662
2662
  }
2663
2663
  function Ai(e) {
2664
- return z(" ", e.replace(/\n/g, `
2664
+ return H(" ", e.replace(/\n/g, `
2665
2665
  `));
2666
2666
  }
2667
2667
  function _r(e) {
@@ -2697,7 +2697,7 @@ const pr = JSON, ad = (e) => e.toUpperCase(), cd = (e) => {
2697
2697
  if (typeof e == "string") {
2698
2698
  let i;
2699
2699
  try {
2700
- const n = zl(e);
2700
+ const n = Hl(e);
2701
2701
  i = $r(n);
2702
2702
  } catch {
2703
2703
  }
@@ -2844,9 +2844,9 @@ var Ss = { exports: {} };
2844
2844
  var y = new FileReader(), T = S(y);
2845
2845
  return y.readAsText(f), T;
2846
2846
  }
2847
- function W(f) {
2848
- for (var y = new Uint8Array(f), T = new Array(y.length), F = 0; F < y.length; F++)
2849
- T[F] = String.fromCharCode(y[F]);
2847
+ function C(f) {
2848
+ for (var y = new Uint8Array(f), T = new Array(y.length), U = 0; U < y.length; U++)
2849
+ T[U] = String.fromCharCode(y[U]);
2850
2850
  return T.join("");
2851
2851
  }
2852
2852
  function X(f) {
@@ -2878,7 +2878,7 @@ var Ss = { exports: {} };
2878
2878
  if (this._bodyBlob)
2879
2879
  return V(this._bodyBlob);
2880
2880
  if (this._bodyArrayBuffer)
2881
- return Promise.resolve(W(this._bodyArrayBuffer));
2881
+ return Promise.resolve(C(this._bodyArrayBuffer));
2882
2882
  if (this._bodyFormData)
2883
2883
  throw new Error("could not read FormData body as text");
2884
2884
  return Promise.resolve(this._bodyText);
@@ -2913,17 +2913,17 @@ var Ss = { exports: {} };
2913
2913
  var y = new FormData();
2914
2914
  return f.trim().split("&").forEach(function(T) {
2915
2915
  if (T) {
2916
- var F = T.split("="), U = F.shift().replace(/\+/g, " "), N = F.join("=").replace(/\+/g, " ");
2917
- y.append(decodeURIComponent(U), decodeURIComponent(N));
2916
+ var U = T.split("="), F = U.shift().replace(/\+/g, " "), N = U.join("=").replace(/\+/g, " ");
2917
+ y.append(decodeURIComponent(F), decodeURIComponent(N));
2918
2918
  }
2919
2919
  }), y;
2920
2920
  }
2921
2921
  function R(f) {
2922
2922
  var y = new b(), T = f.replace(/\r?\n[\t ]+/g, " ");
2923
- return T.split(/\r?\n/).forEach(function(F) {
2924
- var U = F.split(":"), N = U.shift().trim();
2923
+ return T.split(/\r?\n/).forEach(function(U) {
2924
+ var F = U.split(":"), N = F.shift().trim();
2925
2925
  if (N) {
2926
- var A = U.join(":").trim();
2926
+ var A = F.join(":").trim();
2927
2927
  y.append(N, A);
2928
2928
  }
2929
2929
  }), y;
@@ -2943,9 +2943,9 @@ var Ss = { exports: {} };
2943
2943
  var f = new J(null, { status: 0, statusText: "" });
2944
2944
  return f.type = "error", f;
2945
2945
  };
2946
- var M = [301, 302, 303, 307, 308];
2946
+ var E = [301, 302, 303, 307, 308];
2947
2947
  J.redirect = function(f, y) {
2948
- if (M.indexOf(y) === -1)
2948
+ if (E.indexOf(y) === -1)
2949
2949
  throw new RangeError("Invalid status code");
2950
2950
  return new J(null, { status: y, headers: { location: f } });
2951
2951
  }, l.DOMException = r.DOMException;
@@ -2954,15 +2954,15 @@ var Ss = { exports: {} };
2954
2954
  } catch {
2955
2955
  l.DOMException = function(y, T) {
2956
2956
  this.message = y, this.name = T;
2957
- var F = Error(y);
2958
- this.stack = F.stack;
2957
+ var U = Error(y);
2958
+ this.stack = U.stack;
2959
2959
  }, l.DOMException.prototype = Object.create(Error.prototype), l.DOMException.prototype.constructor = l.DOMException;
2960
2960
  }
2961
2961
  function $(f, y) {
2962
- return new Promise(function(T, F) {
2963
- var U = new w(f, y);
2964
- if (U.signal && U.signal.aborted)
2965
- return F(new l.DOMException("Aborted", "AbortError"));
2962
+ return new Promise(function(T, U) {
2963
+ var F = new w(f, y);
2964
+ if (F.signal && F.signal.aborted)
2965
+ return U(new l.DOMException("Aborted", "AbortError"));
2966
2966
  var N = new XMLHttpRequest();
2967
2967
  function A() {
2968
2968
  N.abort();
@@ -2977,16 +2977,16 @@ var Ss = { exports: {} };
2977
2977
  var de = "response" in N ? N.response : N.responseText;
2978
2978
  T(new J(de, D));
2979
2979
  }, N.onerror = function() {
2980
- F(new TypeError("Network request failed"));
2980
+ U(new TypeError("Network request failed"));
2981
2981
  }, N.ontimeout = function() {
2982
- F(new TypeError("Network request failed"));
2982
+ U(new TypeError("Network request failed"));
2983
2983
  }, N.onabort = function() {
2984
- F(new l.DOMException("Aborted", "AbortError"));
2985
- }, N.open(U.method, U.url, !0), U.credentials === "include" ? N.withCredentials = !0 : U.credentials === "omit" && (N.withCredentials = !1), "responseType" in N && o.blob && (N.responseType = "blob"), U.headers.forEach(function(D, de) {
2984
+ U(new l.DOMException("Aborted", "AbortError"));
2985
+ }, N.open(F.method, F.url, !0), F.credentials === "include" ? N.withCredentials = !0 : F.credentials === "omit" && (N.withCredentials = !1), "responseType" in N && o.blob && (N.responseType = "blob"), F.headers.forEach(function(D, de) {
2986
2986
  N.setRequestHeader(de, D);
2987
- }), U.signal && (U.signal.addEventListener("abort", A), N.onreadystatechange = function() {
2988
- N.readyState === 4 && U.signal.removeEventListener("abort", A);
2989
- }), N.send(typeof U._bodyInit > "u" ? null : U._bodyInit);
2987
+ }), F.signal && (F.signal.addEventListener("abort", A), N.onreadystatechange = function() {
2988
+ N.readyState === 4 && F.signal.removeEventListener("abort", A);
2989
+ }), N.send(typeof F._bodyInit > "u" ? null : F._bodyInit);
2990
2990
  });
2991
2991
  }
2992
2992
  return $.polyfill = !0, r.fetch || (r.fetch = $, r.Headers = b, r.Request = w, r.Response = J), l.Headers = b, l.Request = w, l.Response = J, l.fetch = $, Object.defineProperty(l, "__esModule", { value: !0 }), l;
@@ -3016,7 +3016,7 @@ const _i = /* @__PURE__ */ mr(cn), md = /* @__PURE__ */ Zu({
3016
3016
  variables: t.variables ? t.jsonSerializer.stringify(t.variables[r]) : void 0
3017
3017
  }), n), []);
3018
3018
  return `query=${encodeURIComponent(t.jsonSerializer.stringify(i))}`;
3019
- }, fd = (e) => (t) => Ct(void 0, null, function* () {
3019
+ }, fd = (e) => (t) => Wt(void 0, null, function* () {
3020
3020
  var i;
3021
3021
  const { url: n, query: s, variables: r, operationName: l, fetch: o, fetchOptions: a, middleware: c } = t, u = Q({}, t.headers);
3022
3022
  let h = "", p;
@@ -3040,7 +3040,7 @@ const _i = /* @__PURE__ */ mr(cn), md = /* @__PURE__ */ Zu({
3040
3040
  });
3041
3041
  let yd = class {
3042
3042
  constructor(t, i = {}) {
3043
- this.url = t, this.requestConfig = i, this.rawRequest = (...n) => Ct(this, null, function* () {
3043
+ this.url = t, this.requestConfig = i, this.rawRequest = (...n) => Wt(this, null, function* () {
3044
3044
  const [s, r, l] = n, o = dd(s, r, l), a = this.requestConfig, { headers: c, fetch: u = _i, method: h = "POST", requestMiddleware: p, responseMiddleware: m } = a, b = Qt(a, ["headers", "fetch", "method", "requestMiddleware", "responseMiddleware"]), { url: d } = this;
3045
3045
  o.signal !== void 0 && (b.signal = o.signal);
3046
3046
  const { operationName: S } = An(o.query);
@@ -3060,7 +3060,7 @@ let yd = class {
3060
3060
  });
3061
3061
  }
3062
3062
  request(t, ...i) {
3063
- return Ct(this, null, function* () {
3063
+ return Wt(this, null, function* () {
3064
3064
  const [n, s] = i, r = ud(t, n, s), l = this.requestConfig, { headers: o, fetch: a = _i, method: c = "POST", requestMiddleware: u, responseMiddleware: h } = l, p = Qt(l, ["headers", "fetch", "method", "requestMiddleware", "responseMiddleware"]), { url: m } = this;
3065
3065
  r.signal !== void 0 && (p.signal = r.signal);
3066
3066
  const { query: b, operationName: d } = An(r.document);
@@ -3117,7 +3117,7 @@ let yd = class {
3117
3117
  return this.url = t, this;
3118
3118
  }
3119
3119
  };
3120
- const _n = (e) => Ct(void 0, null, function* () {
3120
+ const _n = (e) => Wt(void 0, null, function* () {
3121
3121
  var t, i;
3122
3122
  const { query: n, variables: s, fetchOptions: r } = e, l = fd(ad((t = e.method) != null ? t : "post")), o = Array.isArray(e.query), a = yield l(e), c = yield Zd(a, (i = r.jsonSerializer) != null ? i : pr), u = Array.isArray(c) ? !c.some(({ data: p }) => !p) : !!c.data, h = Array.isArray(c) || !c.errors || Array.isArray(c.errors) && !c.errors.length || r.errorPolicy === "all" || r.errorPolicy === "ignore";
3123
3123
  if (a.ok && h && u) {
@@ -3144,7 +3144,7 @@ const _n = (e) => Ct(void 0, null, function* () {
3144
3144
  throw new Error("Cannot create request body with given variable type, array expected");
3145
3145
  const r = e.reduce((l, o, a) => (l.push({ query: o, variables: t ? t[a] : void 0 }), l), []);
3146
3146
  return s.stringify(r);
3147
- }, Zd = (e, t) => Ct(void 0, null, function* () {
3147
+ }, Zd = (e, t) => Wt(void 0, null, function* () {
3148
3148
  let i;
3149
3149
  return e.headers.forEach((n, s) => {
3150
3150
  s.toLowerCase() === "content-type" && (i = n);
@@ -3209,10 +3209,10 @@ function Xd(e) {
3209
3209
  var i = e.loc;
3210
3210
  return i && (delete i.startToken, delete i.endToken), e;
3211
3211
  }
3212
- function Cd(e) {
3212
+ function Wd(e) {
3213
3213
  var t = Dl(e);
3214
3214
  if (!$i.has(t)) {
3215
- var i = zl(e, {
3215
+ var i = Hl(e, {
3216
3216
  experimentalFragmentVariables: dn,
3217
3217
  allowLegacyFragmentVariables: dn
3218
3218
  });
@@ -3229,9 +3229,9 @@ function Ie(e) {
3229
3229
  var n = e[0];
3230
3230
  return t.forEach(function(s, r) {
3231
3231
  s && s.kind === "Document" ? n += s.loc.source.body : n += s, n += e[r + 1];
3232
- }), Cd(n);
3232
+ }), Wd(n);
3233
3233
  }
3234
- function Wd() {
3234
+ function Cd() {
3235
3235
  $i.clear(), Vs.clear();
3236
3236
  }
3237
3237
  function Rd() {
@@ -3243,15 +3243,15 @@ function kd() {
3243
3243
  function vd() {
3244
3244
  dn = !1;
3245
3245
  }
3246
- var Ut = {
3246
+ var Ft = {
3247
3247
  gql: Ie,
3248
- resetCaches: Wd,
3248
+ resetCaches: Cd,
3249
3249
  disableFragmentWarnings: Rd,
3250
3250
  enableExperimentalFragmentVariables: kd,
3251
3251
  disableExperimentalFragmentVariables: vd
3252
3252
  };
3253
3253
  (function(e) {
3254
- e.gql = Ut.gql, e.resetCaches = Ut.resetCaches, e.disableFragmentWarnings = Ut.disableFragmentWarnings, e.enableExperimentalFragmentVariables = Ut.enableExperimentalFragmentVariables, e.disableExperimentalFragmentVariables = Ut.disableExperimentalFragmentVariables;
3254
+ e.gql = Ft.gql, e.resetCaches = Ft.resetCaches, e.disableFragmentWarnings = Ft.disableFragmentWarnings, e.enableExperimentalFragmentVariables = Ft.enableExperimentalFragmentVariables, e.disableExperimentalFragmentVariables = Ft.disableExperimentalFragmentVariables;
3255
3255
  })(Ie || (Ie = {}));
3256
3256
  Ie.default = Ie;
3257
3257
  const jl = Ie`
@@ -3431,7 +3431,7 @@ const jl = Ie`
3431
3431
  query Ignore($id: ID!) {
3432
3432
  ignore(id: $id)
3433
3433
  }
3434
- `, Fd = Ie`
3434
+ `, Ud = Ie`
3435
3435
  query GetSamplingConfig($organization_verbose_id: String!) {
3436
3436
  sampling(organization_verbose_id: $organization_verbose_id) {
3437
3437
  spans {
@@ -3481,8 +3481,8 @@ const jl = Ie`
3481
3481
  }
3482
3482
  }
3483
3483
  ${jl}
3484
- `, Ud = (e, t, i, n) => e();
3485
- function Kd(e, t = Ud) {
3484
+ `, Fd = (e, t, i, n) => e();
3485
+ function Kd(e, t = Fd) {
3486
3486
  return {
3487
3487
  PushPayload(i, n) {
3488
3488
  return t(
@@ -3579,7 +3579,7 @@ function Kd(e, t = Ud) {
3579
3579
  GetSamplingConfig(i, n) {
3580
3580
  return t(
3581
3581
  (s) => e.request(
3582
- Fd,
3582
+ Ud,
3583
3583
  i,
3584
3584
  Q(Q({}, n), s)
3585
3585
  ),
@@ -3590,12 +3590,12 @@ function Kd(e, t = Ud) {
3590
3590
  }
3591
3591
  };
3592
3592
  }
3593
- function Od() {
3593
+ function Md() {
3594
3594
  var e = document.createElement("canvas");
3595
3595
  return e.getContext && e.getContext("2d") ? e.toDataURL("image/webp").indexOf("data:image/webp") == 0 : !1;
3596
3596
  }
3597
- function Ed() {
3598
- return Od() ? {
3597
+ function Od() {
3598
+ return Md() ? {
3599
3599
  type: "image/webp",
3600
3600
  quality: 0.9
3601
3601
  } : {
@@ -3603,7 +3603,7 @@ function Ed() {
3603
3603
  quality: 0.6
3604
3604
  };
3605
3605
  }
3606
- const Md = "telemetry.sdk.name", zd = "telemetry.sdk.version", eo = 1e3, Hd = 1e3 * 2, Pd = 4 * 60 * 60 * 1e3, br = 15 * 60 * 1e3, to = {
3606
+ const Ed = "telemetry.sdk.name", Hd = "telemetry.sdk.version", eo = 1e3, zd = 1e3 * 2, Pd = 4 * 60 * 60 * 1e3, br = 15 * 60 * 1e3, to = {
3607
3607
  normal: {
3608
3608
  bytes: 1e7,
3609
3609
  time: 4 * 60 * 1e3
@@ -3687,8 +3687,8 @@ function Xs(e, t) {
3687
3687
  }
3688
3688
  );
3689
3689
  }
3690
- var qn = Xs(_d, { path: "/" }), Cs = /* @__PURE__ */ ((e) => (e.CLIENT_ID = "highlightClientID", e))(Cs || {});
3691
- let hn = "localStorage", Ws = !0, $d = class {
3690
+ var qn = Xs(_d, { path: "/" }), Ws = /* @__PURE__ */ ((e) => (e.CLIENT_ID = "highlightClientID", e))(Ws || {});
3691
+ let hn = "localStorage", Cs = !0, $d = class {
3692
3692
  constructor() {
3693
3693
  ni(this, "storage", {});
3694
3694
  }
@@ -3715,13 +3715,13 @@ let hn = "localStorage", Ws = !0, $d = class {
3715
3715
  return (i = qn.get(t)) != null ? i : "";
3716
3716
  }
3717
3717
  setItem(t, i) {
3718
- if (!Ws)
3718
+ if (!Cs)
3719
3719
  return;
3720
3720
  const n = /* @__PURE__ */ new Date();
3721
3721
  n.setTime(n.getTime() + br), qn.set(t, i, { expires: n });
3722
3722
  }
3723
3723
  removeItem(t) {
3724
- Ws && qn.remove(t);
3724
+ Cs && qn.remove(t);
3725
3725
  }
3726
3726
  };
3727
3727
  const Xt = new $d(), pn = new qd(), ri = () => {
@@ -3756,7 +3756,7 @@ const Xt = new $d(), pn = new qd(), ri = () => {
3756
3756
  }, eh = (e) => {
3757
3757
  hn = e;
3758
3758
  }, no = (e) => {
3759
- Ws = e;
3759
+ Cs = e;
3760
3760
  }, Xe = (e) => {
3761
3761
  try {
3762
3762
  return ri().getItem(e);
@@ -3884,7 +3884,7 @@ const lh = 3, ah = 1e3, ch = 500, uh = [_l.BillingQuotaExceeded.toString()], dh
3884
3884
  (i) => uh.includes(i.message)
3885
3885
  )) === void 0;
3886
3886
  }, hh = () => {
3887
- const e = (t, i, n, s, r = 0) => Ct(void 0, null, function* () {
3887
+ const e = (t, i, n, s, r = 0) => Wt(void 0, null, function* () {
3888
3888
  try {
3889
3889
  return yield t();
3890
3890
  } catch (l) {
@@ -3991,11 +3991,11 @@ class Ih extends wl {
3991
3991
  return this._bufferCall("track", [t, i]);
3992
3992
  }
3993
3993
  }
3994
- const Sh = "9.25.0", Gh = {
3994
+ const Sh = "9.25.1", Gh = {
3995
3995
  version: Sh
3996
3996
  }, Vh = Gh.version;
3997
3997
  function ta(e, t) {
3998
- return Ch(e);
3998
+ return Wh(e);
3999
3999
  }
4000
4000
  function Xh(e) {
4001
4001
  if (e.id.length)
@@ -4008,11 +4008,11 @@ function Xh(e) {
4008
4008
  }
4009
4009
  return e.nodeName.toLowerCase();
4010
4010
  }
4011
- const Ch = (e) => {
4011
+ const Wh = (e) => {
4012
4012
  let t = "";
4013
4013
  const i = e.getAttribute("class"), n = e.getAttribute("id");
4014
4014
  return n && (t = t.concat(lo(n, "#"))), i && (t = t.concat(lo(i, "."))), t === "" && (t = t.concat(e.tagName.toLowerCase())), t;
4015
- }, lo = (e, t) => `${t}${e.trim().split(" ").join(t)}`, Wh = (e) => {
4015
+ }, lo = (e, t) => `${t}${e.trim().split(" ").join(t)}`, Ch = (e) => {
4016
4016
  let t;
4017
4017
  const i = () => {
4018
4018
  clearTimeout(t), t = setTimeout(() => {
@@ -4192,7 +4192,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
4192
4192
  for (var i of bn(t))
4193
4193
  sa.call(t, i) && Rs(e, i, t[i]);
4194
4194
  return e;
4195
- }, Se = (e, t) => Nh(e, Lh(t)), Wt = (e, t) => {
4195
+ }, Se = (e, t) => Nh(e, Lh(t)), Ct = (e, t) => {
4196
4196
  var i = {};
4197
4197
  for (var n in e)
4198
4198
  na.call(e, n) && t.indexOf(n) < 0 && (i[n] = e[n]);
@@ -4218,7 +4218,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
4218
4218
  });
4219
4219
  const Jh = {
4220
4220
  key: "_sid"
4221
- }, Yh = "rrweb/sequential-id@1", Fh = (e) => {
4221
+ }, Yh = "rrweb/sequential-id@1", Uh = (e) => {
4222
4222
  const t = Jh;
4223
4223
  let i = 0;
4224
4224
  return {
@@ -4231,30 +4231,30 @@ const Jh = {
4231
4231
  options: t
4232
4232
  };
4233
4233
  };
4234
- var Uh = Object.defineProperty, Kh = (e, t, i) => t in e ? Uh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, C = (e, t, i) => Kh(e, typeof t != "symbol" ? t + "" : t, i), co, Oh = Object.defineProperty, Eh = (e, t, i) => t in e ? Oh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, uo = (e, t, i) => Eh(e, typeof t != "symbol" ? t + "" : t, i), ae = /* @__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))(ae || {});
4235
- const Ci = /* @__PURE__ */ new Map(), ho = /* @__PURE__ */ new WeakSet();
4234
+ var Fh = Object.defineProperty, Kh = (e, t, i) => t in e ? Fh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, W = (e, t, i) => Kh(e, typeof t != "symbol" ? t + "" : t, i), co, Mh = Object.defineProperty, Oh = (e, t, i) => t in e ? Mh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, uo = (e, t, i) => Oh(e, typeof t != "symbol" ? t + "" : t, i), ae = /* @__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))(ae || {});
4235
+ const Wi = /* @__PURE__ */ new Map(), ho = /* @__PURE__ */ new WeakSet();
4236
4236
  function po(e) {
4237
4237
  return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
4238
4238
  }
4239
- function Mh(e) {
4239
+ function Eh(e) {
4240
4240
  if (ho.has(e))
4241
4241
  return;
4242
4242
  ho.add(e);
4243
4243
  const t = e.drawImage.bind(e);
4244
4244
  e.drawImage = function(i, ...n) {
4245
- const s = Ci.get(e);
4245
+ const s = Wi.get(e);
4246
4246
  s && (s.cancelled = !0);
4247
4247
  const r = () => {
4248
4248
  n.length === 2 && po(i) && n.push(i.naturalWidth || i.width, i.naturalHeight || i.height), t(i, ...n);
4249
4249
  };
4250
4250
  if (po(i) && !i.complete) {
4251
4251
  const l = { cancelled: !1 };
4252
- Ci.set(e, l);
4252
+ Wi.set(e, l);
4253
4253
  const o = () => {
4254
- l.cancelled || (Ci.delete(e), r());
4254
+ l.cancelled || (Wi.delete(e), r());
4255
4255
  }, a = () => {
4256
4256
  if (!l.cancelled) {
4257
- Ci.delete(e);
4257
+ Wi.delete(e);
4258
4258
  try {
4259
4259
  r();
4260
4260
  } catch {
@@ -4276,10 +4276,10 @@ const mo = {
4276
4276
  ShadowRoot: ["getSelection"],
4277
4277
  Element: [],
4278
4278
  MutationObserver: ["constructor"]
4279
- }, Wi = {}, zh = () => !!globalThis.Zone;
4279
+ }, Ci = {}, Hh = () => !!globalThis.Zone;
4280
4280
  function fr(e) {
4281
- if (Wi[e])
4282
- return Wi[e];
4281
+ if (Ci[e])
4282
+ return Ci[e];
4283
4283
  const t = globalThis[e], i = t.prototype, n = e in mo ? mo[e] : void 0, s = !!(n && // @ts-expect-error 2345
4284
4284
  n.every(
4285
4285
  (o) => {
@@ -4293,15 +4293,15 @@ function fr(e) {
4293
4293
  return typeof i[o] == "function" && ((a = i[o]) == null ? void 0 : a.toString().includes("[native code]"));
4294
4294
  }
4295
4295
  ));
4296
- if (s && l && !zh())
4297
- return Wi[e] = t.prototype, t.prototype;
4296
+ if (s && l && !Hh())
4297
+ return Ci[e] = t.prototype, t.prototype;
4298
4298
  try {
4299
4299
  const o = document.createElement("iframe");
4300
4300
  document.body.appendChild(o);
4301
4301
  const a = o.contentWindow;
4302
4302
  if (!a) return t.prototype;
4303
4303
  const c = a[e].prototype;
4304
- return document.body.removeChild(o), c ? Wi[e] = c : i;
4304
+ return document.body.removeChild(o), c ? Ci[e] = c : i;
4305
4305
  } catch {
4306
4306
  return i;
4307
4307
  }
@@ -4330,7 +4330,7 @@ function ra(e, t, i) {
4330
4330
  const s = fr(e)[i];
4331
4331
  return typeof s != "function" ? t[i] : (is[n] = s, s.bind(t));
4332
4332
  }
4333
- function Hh(e) {
4333
+ function zh(e) {
4334
4334
  return qe("Node", e, "childNodes");
4335
4335
  }
4336
4336
  function Ph(e) {
@@ -4386,7 +4386,7 @@ function ip(e, t, i) {
4386
4386
  }
4387
4387
  }
4388
4388
  const he = {
4389
- childNodes: Hh,
4389
+ childNodes: zh,
4390
4390
  parentNode: Ph,
4391
4391
  parentElement: Bh,
4392
4392
  textContent: Dh,
@@ -4399,7 +4399,7 @@ const he = {
4399
4399
  querySelectorAll: ep,
4400
4400
  mutationObserver: tp,
4401
4401
  patch: ip,
4402
- wrapCanvasContextDrawImage: Mh
4402
+ wrapCanvasContextDrawImage: Eh
4403
4403
  };
4404
4404
  function oa(e) {
4405
4405
  return e.nodeType === e.ELEMENT_NODE;
@@ -4712,16 +4712,16 @@ const da = ({
4712
4712
  const s = i && i.toLowerCase();
4713
4713
  return n !== "true" && (!!e[t.toLowerCase()] || !!(s && e[s]));
4714
4714
  };
4715
- let Cp = 1;
4716
- const Wp = new RegExp("[^a-z0-9-_:]"), oi = -2;
4715
+ let Wp = 1;
4716
+ const Cp = new RegExp("[^a-z0-9-_:]"), oi = -2;
4717
4717
  function ha() {
4718
- return Cp++;
4718
+ return Wp++;
4719
4719
  }
4720
4720
  function Rp(e) {
4721
4721
  if (e instanceof HTMLFormElement)
4722
4722
  return "form";
4723
4723
  const t = Rt(e.tagName);
4724
- return Wp.test(t) ? "div" : t;
4724
+ return Cp.test(t) ? "div" : t;
4725
4725
  }
4726
4726
  let yt, yo;
4727
4727
  const kp = /^[^ \t\n\r\u000c]+/, vp = /^[, \t\n\r\u000c]+/;
@@ -4892,7 +4892,7 @@ function Lp(e, t) {
4892
4892
  keepIframeSrcFn: S,
4893
4893
  newlyAddedElement: I = !1,
4894
4894
  cssCaptured: V = !1,
4895
- privacySetting: W
4895
+ privacySetting: C
4896
4896
  } = t, X = Jp(i, n);
4897
4897
  switch (e.nodeType) {
4898
4898
  case e.DOCUMENT_NODE:
@@ -4914,7 +4914,7 @@ function Lp(e, t) {
4914
4914
  rootId: X
4915
4915
  };
4916
4916
  case e.ELEMENT_NODE:
4917
- return Fp(e, {
4917
+ return Up(e, {
4918
4918
  doc: i,
4919
4919
  blockClass: s,
4920
4920
  blockSelector: r,
@@ -4928,7 +4928,7 @@ function Lp(e, t) {
4928
4928
  recordCanvas: d,
4929
4929
  keepIframeSrcFn: S,
4930
4930
  newlyAddedElement: I,
4931
- privacySetting: W,
4931
+ privacySetting: C,
4932
4932
  rootId: X
4933
4933
  });
4934
4934
  case e.TEXT_NODE:
@@ -4936,7 +4936,7 @@ function Lp(e, t) {
4936
4936
  doc: i,
4937
4937
  needsMask: l,
4938
4938
  maskTextFn: u,
4939
- privacySetting: W,
4939
+ privacySetting: C,
4940
4940
  rootId: X,
4941
4941
  cssCaptured: V
4942
4942
  });
@@ -4982,7 +4982,7 @@ function Yp(e, t) {
4982
4982
  rootId: l
4983
4983
  };
4984
4984
  }
4985
- function Fp(e, t) {
4985
+ function Up(e, t) {
4986
4986
  const {
4987
4987
  doc: i,
4988
4988
  blockClass: n,
@@ -5001,7 +5001,7 @@ function Fp(e, t) {
5001
5001
  rootId: S
5002
5002
  } = t;
5003
5003
  let I = Zo(e, n, s);
5004
- const V = Zo(e, a, null), W = d === "strict";
5004
+ const V = Zo(e, a, null), C = d === "strict";
5005
5005
  let X = Rp(e), G = {};
5006
5006
  const k = e.attributes.length;
5007
5007
  for (let g = 0; g < k; g++) {
@@ -5052,10 +5052,10 @@ function Fp(e, t) {
5052
5052
  g !== J && (G.rr_dataURL = g);
5053
5053
  }
5054
5054
  }
5055
- if (X === "img" && u && !I && !V && !W) {
5055
+ if (X === "img" && u && !I && !V && !C) {
5056
5056
  yt || (yt = i.createElement("canvas"), yo = yt.getContext("2d"));
5057
- const g = e, R = g.currentSrc || g.getAttribute("src") || "<unknown-src>", J = g.crossOrigin, M = () => {
5058
- g.removeEventListener("load", M);
5057
+ const g = e, R = g.currentSrc || g.getAttribute("src") || "<unknown-src>", J = g.crossOrigin, E = () => {
5058
+ g.removeEventListener("load", E);
5059
5059
  try {
5060
5060
  yt.width = g.naturalWidth, yt.height = g.naturalHeight, yo.drawImage(g, 0, 0), G.rr_dataURL = yt.toDataURL(
5061
5061
  c.type,
@@ -5063,7 +5063,7 @@ function Fp(e, t) {
5063
5063
  );
5064
5064
  } catch ($) {
5065
5065
  if (g.crossOrigin !== "anonymous") {
5066
- g.crossOrigin = "anonymous", g.complete && g.naturalWidth !== 0 ? M() : g.addEventListener("load", M);
5066
+ g.crossOrigin = "anonymous", g.complete && g.naturalWidth !== 0 ? E() : g.addEventListener("load", E);
5067
5067
  return;
5068
5068
  } else
5069
5069
  console.warn(
@@ -5072,13 +5072,13 @@ function Fp(e, t) {
5072
5072
  }
5073
5073
  g.crossOrigin === "anonymous" && (J ? G.crossOrigin = J : g.removeAttribute("crossorigin"));
5074
5074
  };
5075
- g.complete && g.naturalWidth !== 0 ? M() : g.addEventListener("load", M);
5075
+ g.complete && g.naturalWidth !== 0 ? E() : g.addEventListener("load", E);
5076
5076
  }
5077
5077
  if (X === "audio" || X === "video") {
5078
5078
  const g = G;
5079
5079
  g.rr_mediaState = e.paused ? "paused" : "played", g.rr_mediaCurrentTime = e.currentTime, g.rr_mediaPlaybackRate = e.playbackRate, g.rr_mediaMuted = e.muted, g.rr_mediaLoop = e.loop, g.rr_mediaVolume = e.volume;
5080
5080
  }
5081
- if (b || (e.scrollLeft && (G.rr_scrollLeft = e.scrollLeft), e.scrollTop && (G.rr_scrollTop = e.scrollTop)), I || V || W && vs(X)) {
5081
+ if (b || (e.scrollLeft && (G.rr_scrollLeft = e.scrollLeft), e.scrollTop && (G.rr_scrollTop = e.scrollTop)), I || V || C && vs(X)) {
5082
5082
  const { width: g, height: R } = e.getBoundingClientRect();
5083
5083
  G = {
5084
5084
  class: G.class,
@@ -5086,7 +5086,7 @@ function Fp(e, t) {
5086
5086
  rr_height: `${R}px`
5087
5087
  };
5088
5088
  }
5089
- W && vs(X) && (I = !0), X === "iframe" && !m(G.src) && (e.contentDocument || (G.rr_src = G.src), delete G.src);
5089
+ C && vs(X) && (I = !0), X === "iframe" && !m(G.src) && (e.contentDocument || (G.rr_src = G.src), delete G.src);
5090
5090
  let v;
5091
5091
  try {
5092
5092
  customElements.get(X) && (v = !0);
@@ -5103,8 +5103,8 @@ function Fp(e, t) {
5103
5103
  class: G.class,
5104
5104
  style: G.style
5105
5105
  }, X = "canvas";
5106
- const M = i.createElement("canvas");
5107
- M.width = e.width, M.height = e.height, G.rr_dataURL = M.toDataURL(
5106
+ const E = i.createElement("canvas");
5107
+ E.width = e.width, E.height = e.height, G.rr_dataURL = E.toDataURL(
5108
5108
  c.type,
5109
5109
  c.quality
5110
5110
  );
@@ -5128,7 +5128,7 @@ function Fp(e, t) {
5128
5128
  function ie(e) {
5129
5129
  return e == null ? "" : e.toLowerCase();
5130
5130
  }
5131
- function Up(e, t) {
5131
+ function Fp(e, t) {
5132
5132
  return !!(t.comment && e.type === ae.Comment || e.type === ae.Element && (t.script && // script tag
5133
5133
  (e.tagName === "script" || // (module)preload link
5134
5134
  e.tagName === "link" && (e.attributes.rel === "preload" && e.attributes.as === "script" || e.attributes.rel === "modulepreload") || // prefetch link
@@ -5156,7 +5156,7 @@ function St(e, t) {
5156
5156
  inlineVideos: S = !1,
5157
5157
  recordCanvas: I = !1,
5158
5158
  onSerialize: V,
5159
- onIframeLoad: W,
5159
+ onIframeLoad: C,
5160
5160
  iframeLoadTimeout: X = 5e3,
5161
5161
  onStylesheetLoad: G,
5162
5162
  stylesheetLoadTimeout: k = 5e3,
@@ -5165,7 +5165,7 @@ function St(e, t) {
5165
5165
  cssCaptured: g = !1,
5166
5166
  privacySetting: R
5167
5167
  } = t;
5168
- let { needsMask: J } = t, { preserveWhiteSpace: M = !0 } = t;
5168
+ let { needsMask: J } = t, { preserveWhiteSpace: E = !0 } = t;
5169
5169
  J || (J = ba(
5170
5170
  e,
5171
5171
  l,
@@ -5195,14 +5195,14 @@ function St(e, t) {
5195
5195
  if (!$)
5196
5196
  return console.warn(e, "not serialized"), null;
5197
5197
  let f;
5198
- n.hasNode(e) ? f = n.getId(e) : Up($, m) || !M && $.type === ae.Text && !$.textContent.replace(/^\s+|\s+$/gm, "").length ? f = oi : f = ha();
5198
+ n.hasNode(e) ? f = n.getId(e) : Fp($, m) || !E && $.type === ae.Text && !$.textContent.replace(/^\s+|\s+$/gm, "").length ? f = oi : f = ha();
5199
5199
  const y = Object.assign($, { id: f });
5200
5200
  if (n.add(e, y), f === oi)
5201
5201
  return null;
5202
5202
  V && V(e);
5203
- let T = !a, F = R, U = R === "strict";
5203
+ let T = !a, U = R, F = R === "strict";
5204
5204
  if (y.type === ae.Element) {
5205
- if (T = T && !y.needBlock, U || (U = !!y.needBlock || !!y.needMask), F = U ? "strict" : F, U && vs(y.tagName)) {
5205
+ if (T = T && !y.needBlock, F || (F = !!y.needBlock || !!y.needMask), U = F ? "strict" : U, F && vs(y.tagName)) {
5206
5206
  const D = e.cloneNode();
5207
5207
  D.src = "", n.add(D, y);
5208
5208
  }
@@ -5211,7 +5211,7 @@ function St(e, t) {
5211
5211
  A && qt(A) && (y.isShadowHost = !0);
5212
5212
  }
5213
5213
  if ((y.type === ae.Document || y.type === ae.Element) && T) {
5214
- m.headWhitespace && y.type === ae.Element && y.tagName === "head" && (M = !1);
5214
+ m.headWhitespace && y.type === ae.Element && y.tagName === "head" && (E = !1);
5215
5215
  const A = {
5216
5216
  doc: i,
5217
5217
  mirror: n,
@@ -5230,15 +5230,15 @@ function St(e, t) {
5230
5230
  inlineImages: d,
5231
5231
  inlineVideos: S,
5232
5232
  recordCanvas: I,
5233
- preserveWhiteSpace: M,
5233
+ preserveWhiteSpace: E,
5234
5234
  onSerialize: V,
5235
- onIframeLoad: W,
5235
+ onIframeLoad: C,
5236
5236
  iframeLoadTimeout: X,
5237
5237
  onStylesheetLoad: G,
5238
5238
  stylesheetLoadTimeout: k,
5239
5239
  keepIframeSrcFn: v,
5240
5240
  cssCaptured: !1,
5241
- privacySetting: F
5241
+ privacySetting: U
5242
5242
  };
5243
5243
  if (!(y.type === ae.Element && y.tagName === "textarea" && y.attributes.value !== void 0)) {
5244
5244
  y.type === ae.Element && y.attributes._cssText !== void 0 && typeof y.attributes._cssText == "string" && (A.cssCaptured = !0);
@@ -5259,7 +5259,7 @@ function St(e, t) {
5259
5259
  e,
5260
5260
  () => {
5261
5261
  const A = e.contentDocument;
5262
- if (A && W) {
5262
+ if (A && C) {
5263
5263
  const D = St(A, {
5264
5264
  doc: A,
5265
5265
  mirror: n,
@@ -5278,16 +5278,16 @@ function St(e, t) {
5278
5278
  inlineImages: d,
5279
5279
  inlineVideos: S,
5280
5280
  recordCanvas: I,
5281
- preserveWhiteSpace: M,
5281
+ preserveWhiteSpace: E,
5282
5282
  onSerialize: V,
5283
- onIframeLoad: W,
5283
+ onIframeLoad: C,
5284
5284
  iframeLoadTimeout: X,
5285
5285
  onStylesheetLoad: G,
5286
5286
  stylesheetLoadTimeout: k,
5287
5287
  keepIframeSrcFn: v,
5288
5288
  privacySetting: R
5289
5289
  });
5290
- D && W(
5290
+ D && C(
5291
5291
  e,
5292
5292
  D
5293
5293
  );
@@ -5316,9 +5316,9 @@ function St(e, t) {
5316
5316
  inlineImages: d,
5317
5317
  inlineVideos: S,
5318
5318
  recordCanvas: I,
5319
- preserveWhiteSpace: M,
5319
+ preserveWhiteSpace: E,
5320
5320
  onSerialize: V,
5321
- onIframeLoad: W,
5321
+ onIframeLoad: C,
5322
5322
  iframeLoadTimeout: X,
5323
5323
  onStylesheetLoad: G,
5324
5324
  stylesheetLoadTimeout: k,
@@ -5353,7 +5353,7 @@ function Kp(e, t) {
5353
5353
  preserveWhiteSpace: S,
5354
5354
  onSerialize: I,
5355
5355
  onIframeLoad: V,
5356
- iframeLoadTimeout: W,
5356
+ iframeLoadTimeout: C,
5357
5357
  onStylesheetLoad: X,
5358
5358
  stylesheetLoadTimeout: G,
5359
5359
  keepIframeSrcFn: k = () => !1,
@@ -5413,7 +5413,7 @@ function Kp(e, t) {
5413
5413
  preserveWhiteSpace: S,
5414
5414
  onSerialize: I,
5415
5415
  onIframeLoad: V,
5416
- iframeLoadTimeout: W,
5416
+ iframeLoadTimeout: C,
5417
5417
  onStylesheetLoad: X,
5418
5418
  stylesheetLoadTimeout: G,
5419
5419
  keepIframeSrcFn: k,
@@ -5421,7 +5421,7 @@ function Kp(e, t) {
5421
5421
  privacySetting: v
5422
5422
  });
5423
5423
  }
5424
- function Op(e) {
5424
+ function Mp(e) {
5425
5425
  if (e.__esModule) return e;
5426
5426
  var t = e.default;
5427
5427
  if (typeof t == "function") {
@@ -5440,17 +5440,17 @@ function Op(e) {
5440
5440
  });
5441
5441
  }), i;
5442
5442
  }
5443
- var Zr = { exports: {} }, O = String, fa = function() {
5444
- return { isColorSupported: !1, reset: O, bold: O, dim: O, italic: O, underline: O, inverse: O, hidden: O, strikethrough: O, black: O, red: O, green: O, yellow: O, blue: O, magenta: O, cyan: O, white: O, gray: O, bgBlack: O, bgRed: O, bgGreen: O, bgYellow: O, bgBlue: O, bgMagenta: O, bgCyan: O, bgWhite: O, blackBright: O, redBright: O, greenBright: O, yellowBright: O, blueBright: O, magentaBright: O, cyanBright: O, whiteBright: O, bgBlackBright: O, bgRedBright: O, bgGreenBright: O, bgYellowBright: O, bgBlueBright: O, bgMagentaBright: O, bgCyanBright: O, bgWhiteBright: O };
5443
+ var Zr = { exports: {} }, M = String, fa = function() {
5444
+ return { isColorSupported: !1, reset: M, bold: M, dim: M, italic: M, underline: M, inverse: M, hidden: M, strikethrough: M, black: M, red: M, green: M, yellow: M, blue: M, magenta: M, cyan: M, white: M, gray: M, bgBlack: M, bgRed: M, bgGreen: M, bgYellow: M, bgBlue: M, bgMagenta: M, bgCyan: M, bgWhite: M, blackBright: M, redBright: M, greenBright: M, yellowBright: M, blueBright: M, magentaBright: M, cyanBright: M, whiteBright: M, bgBlackBright: M, bgRedBright: M, bgGreenBright: M, bgYellowBright: M, bgBlueBright: M, bgMagentaBright: M, bgCyanBright: M, bgWhiteBright: M };
5445
5445
  };
5446
5446
  Zr.exports = fa();
5447
5447
  Zr.exports.createColors = fa;
5448
- var Ep = Zr.exports;
5449
- const Mp = {}, zp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5448
+ var Op = Zr.exports;
5449
+ const Ep = {}, Hp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5450
5450
  __proto__: null,
5451
- default: Mp
5452
- }, Symbol.toStringTag, { value: "Module" })), Ne = /* @__PURE__ */ Op(zp);
5453
- let Io = Ep, So = Ne, ws = class ya extends Error {
5451
+ default: Ep
5452
+ }, Symbol.toStringTag, { value: "Module" })), Ne = /* @__PURE__ */ Mp(Hp);
5453
+ let Io = Op, So = Ne, ws = class ya extends Error {
5454
5454
  constructor(t, i, n, s, r, l) {
5455
5455
  super(t), this.name = "CssSyntaxError", this.reason = t, r && (this.file = r), s && (this.source = s), l && (this.plugin = l), typeof i < "u" && typeof n < "u" && (typeof i == "number" ? (this.line = i, this.column = n) : (this.line = i.line, this.column = i.column, this.endLine = n.line, this.endColumn = n.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, ya);
5456
5456
  }
@@ -5474,9 +5474,9 @@ let Io = Ep, So = Ne, ws = class ya extends Error {
5474
5474
  let d = 20, S = Math.max(0, this.column - d), I = Math.max(
5475
5475
  this.column + d,
5476
5476
  this.endColumn + d
5477
- ), V = u.slice(S, I), W = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
5477
+ ), V = u.slice(S, I), C = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
5478
5478
  return s(">") + n(m) + r(V) + `
5479
- ` + W + s("^");
5479
+ ` + C + s("^");
5480
5480
  }
5481
5481
  let b = n(m.replace(/\d/g, " ")) + u.slice(0, this.column - 1).replace(/[^\t]/g, " ");
5482
5482
  return s(">") + n(m) + r(u) + `
@@ -5515,7 +5515,7 @@ const Go = {
5515
5515
  indent: " ",
5516
5516
  semicolon: !1
5517
5517
  };
5518
- function Hp(e) {
5518
+ function zp(e) {
5519
5519
  return e[0].toUpperCase() + e.slice(1);
5520
5520
  }
5521
5521
  let xs = class {
@@ -5586,7 +5586,7 @@ let xs = class {
5586
5586
  if (i === "before" || i === "after")
5587
5587
  return this.beforeAfter(e, i);
5588
5588
  {
5589
- let l = "raw" + Hp(i);
5589
+ let l = "raw" + zp(i);
5590
5590
  this[l] ? n = this[l](r, e) : r.walk((o) => {
5591
5591
  if (n = o.raws[t], typeof n < "u") return !1;
5592
5592
  });
@@ -5940,16 +5940,16 @@ let Ls = class {
5940
5940
  return e.warn(t, n);
5941
5941
  }
5942
5942
  };
5943
- var Fn = Ls;
5943
+ var Un = Ls;
5944
5944
  Ls.default = Ls;
5945
- let Ap = Fn, Js = class extends Ap {
5945
+ let Ap = Un, Js = class extends Ap {
5946
5946
  constructor(e) {
5947
5947
  super(e), this.type = "comment";
5948
5948
  }
5949
5949
  };
5950
- var Un = Js;
5950
+ var Fn = Js;
5951
5951
  Js.default = Js;
5952
- let _p = Fn, Ys = class extends _p {
5952
+ let _p = Un, Ys = class extends _p {
5953
5953
  get variable() {
5954
5954
  return this.prop.startsWith("--") || this.prop[0] === "$";
5955
5955
  }
@@ -5959,14 +5959,14 @@ let _p = Fn, Ys = class extends _p {
5959
5959
  };
5960
5960
  var Kn = Ys;
5961
5961
  Ys.default = Ys;
5962
- let Za = Un, Ia = Kn, $p = Fn, { isClean: Sa, my: Ga } = yi, Sr, Va, Xa, Gr;
5963
- function Ca(e) {
5964
- return e.map((t) => (t.nodes && (t.nodes = Ca(t.nodes)), delete t.source, t));
5965
- }
5962
+ let Za = Fn, Ia = Kn, $p = Un, { isClean: Sa, my: Ga } = yi, Sr, Va, Xa, Gr;
5966
5963
  function Wa(e) {
5964
+ return e.map((t) => (t.nodes && (t.nodes = Wa(t.nodes)), delete t.source, t));
5965
+ }
5966
+ function Ca(e) {
5967
5967
  if (e[Sa] = !1, e.proxyOf.nodes)
5968
5968
  for (let t of e.proxyOf.nodes)
5969
- Wa(t);
5969
+ Ca(t);
5970
5970
  }
5971
5971
  let De = class Ra extends $p {
5972
5972
  get first() {
@@ -6044,7 +6044,7 @@ let De = class Ra extends $p {
6044
6044
  }
6045
6045
  normalize(t, i) {
6046
6046
  if (typeof t == "string")
6047
- t = Ca(Va(t).nodes);
6047
+ t = Wa(Va(t).nodes);
6048
6048
  else if (typeof t > "u")
6049
6049
  t = [];
6050
6050
  else if (Array.isArray(t)) {
@@ -6069,7 +6069,7 @@ let De = class Ra extends $p {
6069
6069
  t = [new Za(t)];
6070
6070
  else
6071
6071
  throw new Error("Unknown node type in node creation");
6072
- return t.map((n) => (n[Ga] || Ra.rebuild(n), n = n.proxyOf, n.parent && n.parent.removeChild(n), n[Sa] && Wa(n), n.raws || (n.raws = {}), typeof n.raws.before > "u" && i && typeof i.raws.before < "u" && (n.raws.before = i.raws.before.replace(/\S/g, "")), n.parent = this.proxyOf, n));
6072
+ return t.map((n) => (n[Ga] || Ra.rebuild(n), n = n.proxyOf, n.parent && n.parent.removeChild(n), n[Sa] && Ca(n), n.raws || (n.raws = {}), typeof n.raws.before > "u" && i && typeof i.raws.before < "u" && (n.raws.before = i.raws.before.replace(/\S/g, "")), n.parent = this.proxyOf, n));
6073
6073
  }
6074
6074
  prepend(...t) {
6075
6075
  t = t.reverse();
@@ -6217,7 +6217,7 @@ let { existsSync: nm, readFileSync: sm } = Ne, { dirname: ns, join: rm } = Ne, {
6217
6217
  function om(e) {
6218
6218
  return Buffer ? Buffer.from(e, "base64").toString() : window.atob(e);
6219
6219
  }
6220
- let Fs = class {
6220
+ let Us = class {
6221
6221
  constructor(e, t) {
6222
6222
  if (t.map === !1) return;
6223
6223
  this.loadAnnotation(e), this.inline = this.startWith(this.annotation, "data:");
@@ -6295,9 +6295,9 @@ let Fs = class {
6295
6295
  return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
6296
6296
  }
6297
6297
  };
6298
- var xa = Fs;
6299
- Fs.default = Fs;
6300
- let { nanoid: lm } = im, { isAbsolute: Us, resolve: Ks } = Ne, { SourceMapConsumer: am, SourceMapGenerator: cm } = Ne, { fileURLToPath: Co, pathToFileURL: ki } = Ne, Wo = Ir, um = xa, ss = Ne, rs = Symbol("lineToIndexCache"), dm = !!(am && cm), Ro = !!(Ks && Us);
6298
+ var xa = Us;
6299
+ Us.default = Us;
6300
+ let { nanoid: lm } = im, { isAbsolute: Fs, resolve: Ks } = Ne, { SourceMapConsumer: am, SourceMapGenerator: cm } = Ne, { fileURLToPath: Wo, pathToFileURL: ki } = Ne, Co = Ir, um = xa, ss = Ne, rs = Symbol("lineToIndexCache"), dm = !!(am && cm), Ro = !!(Ks && Fs);
6301
6301
  function ko(e) {
6302
6302
  if (e[rs]) return e[rs];
6303
6303
  let t = e.css.split(`
@@ -6313,7 +6313,7 @@ let Gn = class {
6313
6313
  constructor(e, t = {}) {
6314
6314
  if (e === null || typeof e > "u" || typeof e == "object" && !e.toString)
6315
6315
  throw new Error(`PostCSS received ${e} instead of CSS string`);
6316
- if (this.css = e.toString(), this.css[0] === "\uFEFF" || this.css[0] === "￾" ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, this.document = this.css, t.document && (this.document = t.document.toString()), t.from && (!Ro || /^\w+:\/\//.test(t.from) || Us(t.from) ? this.file = t.from : this.file = Ks(t.from)), Ro && dm) {
6316
+ if (this.css = e.toString(), this.css[0] === "\uFEFF" || this.css[0] === "￾" ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, this.document = this.css, t.document && (this.document = t.document.toString()), t.from && (!Ro || /^\w+:\/\//.test(t.from) || Fs(t.from) ? this.file = t.from : this.file = Ks(t.from)), Ro && dm) {
6317
6317
  let i = new um(this.css, t);
6318
6318
  if (i.text) {
6319
6319
  this.map = i;
@@ -6347,14 +6347,14 @@ let Gn = class {
6347
6347
  t = u.line, i = u.col;
6348
6348
  }
6349
6349
  let c = this.origin(t, i, r, s);
6350
- return c ? a = new Wo(
6350
+ return c ? a = new Co(
6351
6351
  e,
6352
6352
  c.endLine === void 0 ? c.line : { column: c.column, line: c.line },
6353
6353
  c.endLine === void 0 ? c.column : { column: c.endColumn, line: c.endLine },
6354
6354
  c.source,
6355
6355
  c.file,
6356
6356
  n.plugin
6357
- ) : a = new Wo(
6357
+ ) : a = new Co(
6358
6358
  e,
6359
6359
  r === void 0 ? t : { column: i, line: t },
6360
6360
  r === void 0 ? i : { column: s, line: r },
@@ -6397,7 +6397,7 @@ let Gn = class {
6397
6397
  let l;
6398
6398
  typeof i == "number" && (l = s.originalPositionFor({ column: n, line: i }));
6399
6399
  let o;
6400
- Us(r.source) ? o = ki(r.source) : o = new URL(
6400
+ Fs(r.source) ? o = ki(r.source) : o = new URL(
6401
6401
  r.source,
6402
6402
  this.map.consumer().sourceRoot || ki(this.map.mapFile)
6403
6403
  );
@@ -6409,8 +6409,8 @@ let Gn = class {
6409
6409
  url: o.toString()
6410
6410
  };
6411
6411
  if (o.protocol === "file:")
6412
- if (Co)
6413
- a.file = Co(o);
6412
+ if (Wo)
6413
+ a.file = Wo(o);
6414
6414
  else
6415
6415
  throw new Error("file: protocol is not available in this PostCSS build");
6416
6416
  let c = s.sourceContentFor(r.source);
@@ -6423,7 +6423,7 @@ let Gn = class {
6423
6423
  return this.map && (e.map = Y({}, this.map), e.map.consumerCache && (e.map.consumerCache = void 0)), e;
6424
6424
  }
6425
6425
  };
6426
- var On = Gn;
6426
+ var Mn = Gn;
6427
6427
  Gn.default = Gn;
6428
6428
  ss && ss.registerInput && ss.registerInput(Gn);
6429
6429
  let Ta = ct, Na, La, kt = class extends Ta {
@@ -6488,13 +6488,13 @@ let Ya = ct, hm = Ja, Vn = class extends Ya {
6488
6488
  super(e), this.type = "rule", this.nodes || (this.nodes = []);
6489
6489
  }
6490
6490
  };
6491
- var Cr = Vn;
6491
+ var Wr = Vn;
6492
6492
  Vn.default = Vn;
6493
6493
  Ya.registerRule(Vn);
6494
- let pm = Vr, mm = Un, bm = Kn, fm = On, ym = xa, gm = gi, Zm = Cr;
6494
+ let pm = Vr, mm = Fn, bm = Kn, fm = Mn, ym = xa, gm = gi, Zm = Wr;
6495
6495
  function ci(e, t) {
6496
6496
  if (Array.isArray(e)) return e.map((r) => ci(r));
6497
- let i = e, { inputs: n } = i, s = Wt(i, ["inputs"]);
6497
+ let i = e, { inputs: n } = i, s = Ct(i, ["inputs"]);
6498
6498
  if (n) {
6499
6499
  t = [];
6500
6500
  for (let r of n) {
@@ -6505,7 +6505,7 @@ function ci(e, t) {
6505
6505
  }
6506
6506
  }
6507
6507
  if (s.nodes && (s.nodes = e.nodes.map((r) => ci(r, t))), s.source) {
6508
- let r = s.source, { inputId: l } = r, o = Wt(r, ["inputId"]);
6508
+ let r = s.source, { inputId: l } = r, o = Ct(r, ["inputId"]);
6509
6509
  s.source = o, l != null && (s.source.input = t[l]);
6510
6510
  }
6511
6511
  if (s.type === "root")
@@ -6522,7 +6522,7 @@ function ci(e, t) {
6522
6522
  }
6523
6523
  var Im = ci;
6524
6524
  ci.default = ci;
6525
- let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsumer: Oa, SourceMapGenerator: tn } = Ne, { pathToFileURL: vo } = Ne, Sm = On, Gm = !!(Oa && tn), Vm = !!(en && Ua && Fa && Ka), Xm = class {
6525
+ let { dirname: en, relative: Ua, resolve: Fa, sep: Ka } = Ne, { SourceMapConsumer: Ma, SourceMapGenerator: tn } = Ne, { pathToFileURL: vo } = Ne, Sm = Mn, Gm = !!(Ma && tn), Vm = !!(en && Fa && Ua && Ka), Xm = class {
6526
6526
  constructor(e, t, i, n) {
6527
6527
  this.stringify = e, this.mapOpts = i.map || {}, this.root = t, this.opts = i, this.css = n, this.originalCSS = n, this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute, this.memoizedFileURLs = /* @__PURE__ */ new Map(), this.memoizedPaths = /* @__PURE__ */ new Map(), this.memoizedURLs = /* @__PURE__ */ new Map();
6528
6528
  }
@@ -6538,7 +6538,7 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
6538
6538
  applyPrevMaps() {
6539
6539
  for (let e of this.previous()) {
6540
6540
  let t = this.toUrl(this.path(e.file)), i = e.root || en(e.file), n;
6541
- this.mapOpts.sourcesContent === !1 ? (n = new Oa(e.text), n.sourcesContent && (n.sourcesContent = null)) : n = e.consumer(), this.map.applySourceMap(n, t, this.toUrl(this.path(i)));
6541
+ this.mapOpts.sourcesContent === !1 ? (n = new Ma(e.text), n.sourcesContent && (n.sourcesContent = null)) : n = e.consumer(), this.map.applySourceMap(n, t, this.toUrl(this.path(i)));
6542
6542
  }
6543
6543
  }
6544
6544
  clearAnnotation() {
@@ -6619,8 +6619,8 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
6619
6619
  let t = this.memoizedPaths.get(e);
6620
6620
  if (t) return t;
6621
6621
  let i = this.opts.to ? en(this.opts.to) : ".";
6622
- typeof this.mapOpts.annotation == "string" && (i = en(Ua(i, this.mapOpts.annotation)));
6623
- let n = Fa(i, e);
6622
+ typeof this.mapOpts.annotation == "string" && (i = en(Fa(i, this.mapOpts.annotation)));
6623
+ let n = Ua(i, e);
6624
6624
  return this.memoizedPaths.set(e, n), n;
6625
6625
  }
6626
6626
  previous() {
@@ -6681,14 +6681,14 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
6681
6681
  return this.memoizedURLs.set(e, i), i;
6682
6682
  }
6683
6683
  };
6684
- var Ea = Xm;
6685
- const os = 39, wo = 34, vi = 92, xo = 47, wi = 10, Ot = 32, xi = 12, Ti = 9, Ni = 13, Cm = 91, Wm = 93, Rm = 40, km = 41, vm = 123, wm = 125, xm = 59, Tm = 42, Nm = 58, Lm = 64, Li = /[\t\n\f\r "#'()/;[\\\]{}]/g, Ji = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Jm = /.[\r\n"'(/\\]/, To = /[\da-f]/i;
6684
+ var Oa = Xm;
6685
+ const os = 39, wo = 34, vi = 92, xo = 47, wi = 10, Mt = 32, xi = 12, Ti = 9, Ni = 13, Wm = 91, Cm = 93, Rm = 40, km = 41, vm = 123, wm = 125, xm = 59, Tm = 42, Nm = 58, Lm = 64, Li = /[\t\n\f\r "#'()/;[\\\]{}]/g, Ji = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Jm = /.[\r\n"'(/\\]/, To = /[\da-f]/i;
6686
6686
  var Ym = function(e, t = {}) {
6687
6687
  let i = e.css.valueOf(), n = t.ignoreErrors, s, r, l, o, a, c, u, h, p, m, b = i.length, d = 0, S = [], I = [];
6688
6688
  function V() {
6689
6689
  return d;
6690
6690
  }
6691
- function W(v) {
6691
+ function C(v) {
6692
6692
  throw e.error("Unclosed " + v, d);
6693
6693
  }
6694
6694
  function X() {
@@ -6700,19 +6700,19 @@ var Ym = function(e, t = {}) {
6700
6700
  let w = v ? v.ignoreUnclosed : !1;
6701
6701
  switch (s = i.charCodeAt(d), s) {
6702
6702
  case wi:
6703
- case Ot:
6703
+ case Mt:
6704
6704
  case Ti:
6705
6705
  case Ni:
6706
6706
  case xi: {
6707
6707
  o = d;
6708
6708
  do
6709
6709
  o += 1, s = i.charCodeAt(o);
6710
- while (s === Ot || s === wi || s === Ti || s === Ni || s === xi);
6710
+ while (s === Mt || s === wi || s === Ti || s === Ni || s === xi);
6711
6711
  c = ["space", i.slice(d, o)], d = o - 1;
6712
6712
  break;
6713
6713
  }
6714
- case Cm:
6715
6714
  case Wm:
6715
+ case Cm:
6716
6716
  case vm:
6717
6717
  case wm:
6718
6718
  case Nm:
@@ -6723,7 +6723,7 @@ var Ym = function(e, t = {}) {
6723
6723
  break;
6724
6724
  }
6725
6725
  case Rm: {
6726
- if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== os && p !== wo && p !== Ot && p !== wi && p !== Ti && p !== xi && p !== Ni) {
6726
+ if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== os && p !== wo && p !== Mt && p !== wi && p !== Ti && p !== xi && p !== Ni) {
6727
6727
  o = d;
6728
6728
  do {
6729
6729
  if (u = !1, o = i.indexOf(")", o + 1), o === -1)
@@ -6731,7 +6731,7 @@ var Ym = function(e, t = {}) {
6731
6731
  o = d;
6732
6732
  break;
6733
6733
  } else
6734
- W("bracket");
6734
+ C("bracket");
6735
6735
  for (h = o; i.charCodeAt(h - 1) === vi; )
6736
6736
  h -= 1, u = !u;
6737
6737
  } while (u);
@@ -6749,7 +6749,7 @@ var Ym = function(e, t = {}) {
6749
6749
  o = d + 1;
6750
6750
  break;
6751
6751
  } else
6752
- W("string");
6752
+ C("string");
6753
6753
  for (h = o; i.charCodeAt(h - 1) === vi; )
6754
6754
  h -= 1, u = !u;
6755
6755
  } while (u);
@@ -6763,16 +6763,16 @@ var Ym = function(e, t = {}) {
6763
6763
  case vi: {
6764
6764
  for (o = d, l = !0; i.charCodeAt(o + 1) === vi; )
6765
6765
  o += 1, l = !l;
6766
- if (s = i.charCodeAt(o + 1), l && s !== xo && s !== Ot && s !== wi && s !== Ti && s !== Ni && s !== xi && (o += 1, To.test(i.charAt(o)))) {
6766
+ if (s = i.charCodeAt(o + 1), l && s !== xo && s !== Mt && s !== wi && s !== Ti && s !== Ni && s !== xi && (o += 1, To.test(i.charAt(o)))) {
6767
6767
  for (; To.test(i.charAt(o + 1)); )
6768
6768
  o += 1;
6769
- i.charCodeAt(o + 1) === Ot && (o += 1);
6769
+ i.charCodeAt(o + 1) === Mt && (o += 1);
6770
6770
  }
6771
6771
  c = ["word", i.slice(d, o + 1), d, o], d = o;
6772
6772
  break;
6773
6773
  }
6774
6774
  default: {
6775
- s === xo && i.charCodeAt(d + 1) === Tm ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : W("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Ji.lastIndex = d + 1, Ji.test(i), Ji.lastIndex === 0 ? o = i.length - 1 : o = Ji.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
6775
+ s === xo && i.charCodeAt(d + 1) === Tm ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : C("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Ji.lastIndex = d + 1, Ji.test(i), Ji.lastIndex === 0 ? o = i.length - 1 : o = Ji.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
6776
6776
  break;
6777
6777
  }
6778
6778
  }
@@ -6788,23 +6788,23 @@ var Ym = function(e, t = {}) {
6788
6788
  position: V
6789
6789
  };
6790
6790
  };
6791
- let Fm = Vr, Um = Un, Km = Kn, Om = gi, No = Cr, Em = Ym;
6791
+ let Um = Vr, Fm = Fn, Km = Kn, Mm = gi, No = Wr, Om = Ym;
6792
6792
  const Lo = {
6793
6793
  empty: !0,
6794
6794
  space: !0
6795
6795
  };
6796
- function Mm(e) {
6796
+ function Em(e) {
6797
6797
  for (let t = e.length - 1; t >= 0; t--) {
6798
6798
  let i = e[t], n = i[3] || i[2];
6799
6799
  if (n) return n;
6800
6800
  }
6801
6801
  }
6802
- let zm = class {
6802
+ let Hm = class {
6803
6803
  constructor(e) {
6804
- this.input = e, this.root = new Om(), this.current = this.root, this.spaces = "", this.semicolon = !1, this.createTokenizer(), this.root.source = { input: e, start: { column: 1, line: 1, offset: 0 } };
6804
+ this.input = e, this.root = new Mm(), this.current = this.root, this.spaces = "", this.semicolon = !1, this.createTokenizer(), this.root.source = { input: e, start: { column: 1, line: 1, offset: 0 } };
6805
6805
  }
6806
6806
  atrule(e) {
6807
- let t = new Fm();
6807
+ let t = new Um();
6808
6808
  t.name = e[1].slice(1), t.name === "" && this.unnamedAtrule(t, e), this.init(t, e[2]);
6809
6809
  let i, n, s, r = !1, l = !1, o = [], a = [];
6810
6810
  for (; !this.tokenizer.endOfFile(); ) {
@@ -6861,7 +6861,7 @@ let zm = class {
6861
6861
  return !1;
6862
6862
  }
6863
6863
  comment(e) {
6864
- let t = new Um();
6864
+ let t = new Fm();
6865
6865
  this.init(t, e[2]), t.source.end = this.getPosition(e[3] || e[2]), t.source.end.offset++;
6866
6866
  let i = e[1].slice(2, -2);
6867
6867
  if (/^\s*$/.test(i))
@@ -6872,14 +6872,14 @@ let zm = class {
6872
6872
  }
6873
6873
  }
6874
6874
  createTokenizer() {
6875
- this.tokenizer = Em(this.input);
6875
+ this.tokenizer = Om(this.input);
6876
6876
  }
6877
6877
  decl(e, t) {
6878
6878
  let i = new Km();
6879
6879
  this.init(i, e[0][2]);
6880
6880
  let n = e[e.length - 1];
6881
6881
  for (n[0] === ";" && (this.semicolon = !0, e.pop()), i.source.end = this.getPosition(
6882
- n[3] || n[2] || Mm(e)
6882
+ n[3] || n[2] || Em(e)
6883
6883
  ), i.source.end.offset++; e[0][0] !== "word"; )
6884
6884
  e.length === 1 && this.unknownWord(e), i.raws.before += e.shift()[1];
6885
6885
  for (i.source.start = this.getPosition(e[0][2]), i.prop = ""; e.length; ) {
@@ -7095,8 +7095,8 @@ let zm = class {
7095
7095
  );
7096
7096
  }
7097
7097
  };
7098
- var Hm = zm;
7099
- let Pm = ct, Bm = On, Dm = Hm;
7098
+ var zm = Hm;
7099
+ let Pm = ct, Bm = Mn, Dm = zm;
7100
7100
  function Xn(e, t) {
7101
7101
  let i = new Bm(e, t), n = new Dm(i);
7102
7102
  try {
@@ -7109,10 +7109,10 @@ You tried to parse Less with the standard CSS parser; try again with the postcss
7109
7109
  }
7110
7110
  return n.root;
7111
7111
  }
7112
- var Wr = Xn;
7112
+ var Cr = Xn;
7113
7113
  Xn.default = Xn;
7114
7114
  Pm.registerParse(Xn);
7115
- let Os = class {
7115
+ let Ms = class {
7116
7116
  constructor(e, t = {}) {
7117
7117
  if (this.type = "warning", this.text = e, t.node && t.node.source) {
7118
7118
  let i = t.node.rangeBy(t);
@@ -7128,9 +7128,9 @@ let Os = class {
7128
7128
  }).message : this.plugin ? this.plugin + ": " + this.text : this.text;
7129
7129
  }
7130
7130
  };
7131
- var Ma = Os;
7132
- Os.default = Os;
7133
- let jm = Ma, Es = class {
7131
+ var Ea = Ms;
7132
+ Ms.default = Ms;
7133
+ let jm = Ea, Os = class {
7134
7134
  get content() {
7135
7135
  return this.css;
7136
7136
  }
@@ -7149,13 +7149,13 @@ let jm = Ma, Es = class {
7149
7149
  return this.messages.filter((e) => e.type === "warning");
7150
7150
  }
7151
7151
  };
7152
- var Rr = Es;
7153
- Es.default = Es;
7152
+ var Rr = Os;
7153
+ Os.default = Os;
7154
7154
  let Jo = {};
7155
- var za = function(e) {
7155
+ var Ha = function(e) {
7156
7156
  Jo[e] || (Jo[e] = !0, typeof console < "u" && console.warn && console.warn(e));
7157
7157
  };
7158
- let Qm = ct, Am = Xr, _m = Ea, $m = Wr, Yo = Rr, qm = gi, eb = Yn, { isClean: Ye, my: tb } = yi, ib = za;
7158
+ let Qm = ct, Am = Xr, _m = Oa, $m = Cr, Yo = Rr, qm = gi, eb = Yn, { isClean: Ye, my: tb } = yi, ib = Ha;
7159
7159
  const nb = {
7160
7160
  atrule: "AtRule",
7161
7161
  comment: "Comment",
@@ -7185,10 +7185,10 @@ const nb = {
7185
7185
  postcssPlugin: !0,
7186
7186
  prepare: !0
7187
7187
  }, vt = 0;
7188
- function Et(e) {
7188
+ function Ot(e) {
7189
7189
  return typeof e == "object" && typeof e.then == "function";
7190
7190
  }
7191
- function Ha(e) {
7191
+ function za(e) {
7192
7192
  let t = !1, i = nb[e.type];
7193
7193
  return e.type === "decl" ? t = e.prop.toLowerCase() : e.type === "atrule" && (t = e.name.toLowerCase()), t && e.append ? [
7194
7194
  i,
@@ -7198,9 +7198,9 @@ function Ha(e) {
7198
7198
  i + "Exit-" + t
7199
7199
  ] : t ? [i, i + "-" + t, i + "Exit", i + "Exit-" + t] : e.append ? [i, vt, i + "Exit"] : [i, i + "Exit"];
7200
7200
  }
7201
- function Fo(e) {
7201
+ function Uo(e) {
7202
7202
  let t;
7203
- return e.type === "document" ? t = ["Document", vt, "DocumentExit"] : e.type === "root" ? t = ["Root", vt, "RootExit"] : t = Ha(e), {
7203
+ return e.type === "document" ? t = ["Document", vt, "DocumentExit"] : e.type === "root" ? t = ["Root", vt, "RootExit"] : t = za(e), {
7204
7204
  eventIndex: 0,
7205
7205
  events: t,
7206
7206
  iterator: 0,
@@ -7209,10 +7209,10 @@ function Fo(e) {
7209
7209
  visitors: []
7210
7210
  };
7211
7211
  }
7212
- function Ms(e) {
7213
- return e[Ye] = !1, e.nodes && e.nodes.forEach((t) => Ms(t)), e;
7212
+ function Es(e) {
7213
+ return e[Ye] = !1, e.nodes && e.nodes.forEach((t) => Es(t)), e;
7214
7214
  }
7215
- let zs = {}, wt = class Pa {
7215
+ let Hs = {}, wt = class Pa {
7216
7216
  get content() {
7217
7217
  return this.stringify().content;
7218
7218
  }
@@ -7241,9 +7241,9 @@ let zs = {}, wt = class Pa {
7241
7241
  this.stringified = !1, this.processed = !1;
7242
7242
  let s;
7243
7243
  if (typeof i == "object" && i !== null && (i.type === "root" || i.type === "document"))
7244
- s = Ms(i);
7244
+ s = Es(i);
7245
7245
  else if (i instanceof Pa || i instanceof Yo)
7246
- s = Ms(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
7246
+ s = Es(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
7247
7247
  else {
7248
7248
  let r = $m;
7249
7249
  n.syntax && (r = n.syntax.parse), n.parser && (r = n.parser), r.parse && (r = r.parse);
@@ -7254,7 +7254,7 @@ let zs = {}, wt = class Pa {
7254
7254
  }
7255
7255
  s && !s[tb] && Qm.rebuild(s);
7256
7256
  }
7257
- this.result = new Yo(t, s, n), this.helpers = Se(Y({}, zs), { postcss: zs, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
7257
+ this.result = new Yo(t, s, n), this.helpers = Se(Y({}, Hs), { postcss: Hs, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
7258
7258
  }
7259
7259
  async() {
7260
7260
  return this.error ? Promise.reject(this.error) : this.processed ? Promise.resolve(this.result) : (this.processing || (this.processing = this.runAsync()), this.processing);
@@ -7313,7 +7313,7 @@ let zs = {}, wt = class Pa {
7313
7313
  this.plugin = 0;
7314
7314
  for (let t = 0; t < this.plugins.length; t++) {
7315
7315
  let i = this.plugins[t], n = this.runOnRoot(i);
7316
- if (Et(n))
7316
+ if (Ot(n))
7317
7317
  try {
7318
7318
  yield n;
7319
7319
  } catch (s) {
@@ -7324,10 +7324,10 @@ let zs = {}, wt = class Pa {
7324
7324
  let t = this.result.root;
7325
7325
  for (; !t[Ye]; ) {
7326
7326
  t[Ye] = !0;
7327
- let i = [Fo(t)];
7327
+ let i = [Uo(t)];
7328
7328
  for (; i.length > 0; ) {
7329
7329
  let n = this.visitTick(i);
7330
- if (Et(n))
7330
+ if (Ot(n))
7331
7331
  try {
7332
7332
  yield n;
7333
7333
  } catch (s) {
@@ -7363,7 +7363,7 @@ let zs = {}, wt = class Pa {
7363
7363
  let i = this.result.root.nodes.map(
7364
7364
  (n) => t.Once(n, this.helpers)
7365
7365
  );
7366
- return Et(i[0]) ? Promise.all(i) : i;
7366
+ return Ot(i[0]) ? Promise.all(i) : i;
7367
7367
  }
7368
7368
  return t.Once(this.result.root, this.helpers);
7369
7369
  } else if (typeof t == "function")
@@ -7388,7 +7388,7 @@ let zs = {}, wt = class Pa {
7388
7388
  throw this.getAsyncError();
7389
7389
  for (let t of this.plugins) {
7390
7390
  let i = this.runOnRoot(t);
7391
- if (Et(i))
7391
+ if (Ot(i))
7392
7392
  throw this.getAsyncError();
7393
7393
  }
7394
7394
  if (this.prepareVisitors(), this.hasListener) {
@@ -7423,7 +7423,7 @@ let zs = {}, wt = class Pa {
7423
7423
  }
7424
7424
  if (i.type !== "root" && i.type !== "document" && !i.parent)
7425
7425
  return !0;
7426
- if (Et(r))
7426
+ if (Ot(r))
7427
7427
  throw this.getAsyncError();
7428
7428
  }
7429
7429
  }
@@ -7446,7 +7446,7 @@ let zs = {}, wt = class Pa {
7446
7446
  let l = i.iterator, o;
7447
7447
  for (; o = n.nodes[n.indexes[l]]; )
7448
7448
  if (n.indexes[l] += 1, !o[Ye]) {
7449
- o[Ye] = !0, t.push(Fo(o));
7449
+ o[Ye] = !0, t.push(Uo(o));
7450
7450
  return;
7451
7451
  }
7452
7452
  i.iterator = 0, delete n.indexes[l];
@@ -7466,7 +7466,7 @@ let zs = {}, wt = class Pa {
7466
7466
  }
7467
7467
  walkSync(t) {
7468
7468
  t[Ye] = !0;
7469
- let i = Ha(t);
7469
+ let i = za(t);
7470
7470
  for (let n of i)
7471
7471
  if (n === vt)
7472
7472
  t.nodes && t.each((s) => {
@@ -7483,15 +7483,15 @@ let zs = {}, wt = class Pa {
7483
7483
  }
7484
7484
  };
7485
7485
  wt.registerPostcss = (e) => {
7486
- zs = e;
7486
+ Hs = e;
7487
7487
  };
7488
7488
  var Ba = wt;
7489
7489
  wt.default = wt;
7490
7490
  qm.registerLazyResult(wt);
7491
7491
  Am.registerLazyResult(wt);
7492
- let ob = Ea, lb = Wr;
7492
+ let ob = Oa, lb = Cr;
7493
7493
  const ab = Rr;
7494
- let cb = Yn, ub = za, Hs = class {
7494
+ let cb = Yn, ub = Ha, zs = class {
7495
7495
  get content() {
7496
7496
  return this.result.css;
7497
7497
  }
@@ -7568,8 +7568,8 @@ let cb = Yn, ub = za, Hs = class {
7568
7568
  return [];
7569
7569
  }
7570
7570
  };
7571
- var db = Hs;
7572
- Hs.default = Hs;
7571
+ var db = zs;
7572
+ zs.default = zs;
7573
7573
  let hb = Xr, pb = Ba, mb = db, bb = gi, ui = class {
7574
7574
  constructor(e = []) {
7575
7575
  this.version = "8.5.6", this.plugins = this.normalize(e);
@@ -7603,7 +7603,7 @@ var fb = ui;
7603
7603
  ui.default = ui;
7604
7604
  bb.registerProcessor(ui);
7605
7605
  hb.registerProcessor(ui);
7606
- let Da = Vr, ja = Un, yb = ct, gb = Ir, Qa = Kn, Aa = Xr, Zb = Im, Ib = On, Sb = Ba, Gb = Ja, Vb = Fn, Xb = Wr, kr = fb, Cb = Rr, _a = gi, $a = Cr, Wb = Yn, Rb = Ma;
7606
+ let Da = Vr, ja = Fn, yb = ct, gb = Ir, Qa = Kn, Aa = Xr, Zb = Im, Ib = Mn, Sb = Ba, Gb = Ja, Vb = Un, Xb = Cr, kr = fb, Wb = Rr, _a = gi, $a = Wr, Cb = Yn, Rb = Ea;
7607
7607
  function q(...e) {
7608
7608
  return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new kr(e);
7609
7609
  }
@@ -7629,7 +7629,7 @@ https://www.w3ctech.com/topic/2226`
7629
7629
  return q([n(o)]).process(r, l);
7630
7630
  }, n;
7631
7631
  };
7632
- q.stringify = Wb;
7632
+ q.stringify = Cb;
7633
7633
  q.parse = Xb;
7634
7634
  q.fromJSON = Zb;
7635
7635
  q.list = Gb;
@@ -7647,7 +7647,7 @@ q.Document = Aa;
7647
7647
  q.Comment = ja;
7648
7648
  q.Warning = Rb;
7649
7649
  q.AtRule = Da;
7650
- q.Result = Cb;
7650
+ q.Result = Wb;
7651
7651
  q.Input = Ib;
7652
7652
  q.Rule = $a;
7653
7653
  q.Root = _a;
@@ -7674,8 +7674,8 @@ function wb(e) {
7674
7674
  });
7675
7675
  }), i;
7676
7676
  }
7677
- var vr = { exports: {} }, E = String, qa = function() {
7678
- return { isColorSupported: !1, reset: E, bold: E, dim: E, italic: E, underline: E, inverse: E, hidden: E, strikethrough: E, black: E, red: E, green: E, yellow: E, blue: E, magenta: E, cyan: E, white: E, gray: E, bgBlack: E, bgRed: E, bgGreen: E, bgYellow: E, bgBlue: E, bgMagenta: E, bgCyan: E, bgWhite: E, blackBright: E, redBright: E, greenBright: E, yellowBright: E, blueBright: E, magentaBright: E, cyanBright: E, whiteBright: E, bgBlackBright: E, bgRedBright: E, bgGreenBright: E, bgYellowBright: E, bgBlueBright: E, bgMagentaBright: E, bgCyanBright: E, bgWhiteBright: E };
7677
+ var vr = { exports: {} }, O = String, qa = function() {
7678
+ return { isColorSupported: !1, reset: O, bold: O, dim: O, italic: O, underline: O, inverse: O, hidden: O, strikethrough: O, black: O, red: O, green: O, yellow: O, blue: O, magenta: O, cyan: O, white: O, gray: O, bgBlack: O, bgRed: O, bgGreen: O, bgYellow: O, bgBlue: O, bgMagenta: O, bgCyan: O, bgWhite: O, blackBright: O, redBright: O, greenBright: O, yellowBright: O, blueBright: O, magentaBright: O, cyanBright: O, whiteBright: O, bgBlackBright: O, bgRedBright: O, bgGreenBright: O, bgYellowBright: O, bgBlueBright: O, bgMagentaBright: O, bgCyanBright: O, bgWhiteBright: O };
7679
7679
  };
7680
7680
  vr.exports = qa();
7681
7681
  vr.exports.createColors = qa;
@@ -7684,7 +7684,7 @@ const Tb = {}, Nb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
7684
7684
  __proto__: null,
7685
7685
  default: Tb
7686
7686
  }, Symbol.toStringTag, { value: "Module" })), Le = /* @__PURE__ */ wb(Nb);
7687
- let Uo = xb, Ko = Le, Ps = class ec extends Error {
7687
+ let Fo = xb, Ko = Le, Ps = class ec extends Error {
7688
7688
  constructor(t, i, n, s, r, l) {
7689
7689
  super(t), this.name = "CssSyntaxError", this.reason = t, r && (this.file = r), s && (this.source = s), l && (this.plugin = l), typeof i < "u" && typeof n < "u" && (typeof i == "number" ? (this.line = i, this.column = n) : (this.line = i.line, this.column = i.column, this.endLine = n.line, this.endColumn = n.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, ec);
7690
7690
  }
@@ -7694,10 +7694,10 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
7694
7694
  showSourceCode(t) {
7695
7695
  if (!this.source) return "";
7696
7696
  let i = this.source;
7697
- t == null && (t = Uo.isColorSupported);
7697
+ t == null && (t = Fo.isColorSupported);
7698
7698
  let n = (u) => u, s = (u) => u, r = (u) => u;
7699
7699
  if (t) {
7700
- let { bold: u, gray: h, red: p } = Uo.createColors(!0);
7700
+ let { bold: u, gray: h, red: p } = Fo.createColors(!0);
7701
7701
  s = (m) => u(p(m)), n = (m) => h(m), Ko && (r = (m) => Ko(m));
7702
7702
  }
7703
7703
  let l = i.split(/\r?\n/), o = Math.max(this.line - 3, 0), a = Math.min(this.line + 2, l.length), c = String(a).length;
@@ -7708,9 +7708,9 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
7708
7708
  let d = 20, S = Math.max(0, this.column - d), I = Math.max(
7709
7709
  this.column + d,
7710
7710
  this.endColumn + d
7711
- ), V = u.slice(S, I), W = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
7711
+ ), V = u.slice(S, I), C = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
7712
7712
  return s(">") + n(m) + r(V) + `
7713
- ` + W + s("^");
7713
+ ` + C + s("^");
7714
7714
  }
7715
7715
  let b = n(m.replace(/\d/g, " ")) + u.slice(0, this.column - 1).replace(/[^\t]/g, " ");
7716
7716
  return s(">") + n(m) + r(u) + `
@@ -7730,7 +7730,7 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
7730
7730
  };
7731
7731
  var wr = Ps;
7732
7732
  Ps.default = Ps;
7733
- const Oo = {
7733
+ const Mo = {
7734
7734
  after: `
7735
7735
  `,
7736
7736
  beforeClose: `
@@ -7813,7 +7813,7 @@ let Bs = class {
7813
7813
  let s = e.parent;
7814
7814
  if (i === "before" && (!s || s.type === "root" && s.first === e || s && s.type === "document"))
7815
7815
  return "";
7816
- if (!s) return Oo[i];
7816
+ if (!s) return Mo[i];
7817
7817
  let r = e.root();
7818
7818
  if (r.rawCache || (r.rawCache = {}), typeof r.rawCache[i] < "u")
7819
7819
  return r.rawCache[i];
@@ -7825,7 +7825,7 @@ let Bs = class {
7825
7825
  if (n = o.raws[t], typeof n < "u") return !1;
7826
7826
  });
7827
7827
  }
7828
- return typeof n > "u" && (n = Oo[i]), r.rawCache[i] = n, n;
7828
+ return typeof n > "u" && (n = Mo[i]), r.rawCache[i] = n, n;
7829
7829
  }
7830
7830
  rawBeforeClose(e) {
7831
7831
  let t;
@@ -7923,12 +7923,12 @@ let Jb = tc;
7923
7923
  function Ds(e, t) {
7924
7924
  new Jb(t).stringify(e);
7925
7925
  }
7926
- var En = Ds;
7926
+ var On = Ds;
7927
7927
  Ds.default = Ds;
7928
7928
  var Zi = {};
7929
7929
  Zi.isClean = Symbol("isClean");
7930
7930
  Zi.my = Symbol("my");
7931
- let Yb = wr, Fb = tc, Ub = En, { isClean: Mt, my: Kb } = Zi;
7931
+ let Yb = wr, Ub = tc, Fb = On, { isClean: Et, my: Kb } = Zi;
7932
7932
  function js(e, t) {
7933
7933
  let i = new e.constructor();
7934
7934
  for (let n in e) {
@@ -7957,7 +7957,7 @@ let Qs = class {
7957
7957
  return this;
7958
7958
  }
7959
7959
  constructor(e = {}) {
7960
- this.raws = {}, this[Mt] = !1, this[Kb] = !0;
7960
+ this.raws = {}, this[Et] = !1, this[Kb] = !0;
7961
7961
  for (let t in e)
7962
7962
  if (t === "nodes") {
7963
7963
  this.nodes = [];
@@ -8029,14 +8029,14 @@ let Qs = class {
8029
8029
  }
8030
8030
  /* c8 ignore next 3 */
8031
8031
  markClean() {
8032
- this[Mt] = !0;
8032
+ this[Et] = !0;
8033
8033
  }
8034
8034
  markDirty() {
8035
- if (this[Mt]) {
8036
- this[Mt] = !1;
8035
+ if (this[Et]) {
8036
+ this[Et] = !1;
8037
8037
  let e = this;
8038
8038
  for (; e = e.parent; )
8039
- e[Mt] = !1;
8039
+ e[Et] = !1;
8040
8040
  }
8041
8041
  }
8042
8042
  next() {
@@ -8114,7 +8114,7 @@ let Qs = class {
8114
8114
  }), { end: n, start: i };
8115
8115
  }
8116
8116
  raw(e, t) {
8117
- return new Fb().raw(this, e, t);
8117
+ return new Ub().raw(this, e, t);
8118
8118
  }
8119
8119
  remove() {
8120
8120
  return this.parent && this.parent.removeChild(this), this.parent = void 0, this;
@@ -8161,7 +8161,7 @@ let Qs = class {
8161
8161
  toProxy() {
8162
8162
  return this.proxyCache || (this.proxyCache = new Proxy(this, this.getProxyProcessor())), this.proxyCache;
8163
8163
  }
8164
- toString(e = Ub) {
8164
+ toString(e = Fb) {
8165
8165
  e.stringify && (e = e.stringify);
8166
8166
  let t = "";
8167
8167
  return e(this, (i) => {
@@ -8174,16 +8174,16 @@ let Qs = class {
8174
8174
  return e.warn(t, n);
8175
8175
  }
8176
8176
  };
8177
- var Mn = Qs;
8177
+ var En = Qs;
8178
8178
  Qs.default = Qs;
8179
- let Ob = Mn, As = class extends Ob {
8179
+ let Mb = En, As = class extends Mb {
8180
8180
  constructor(e) {
8181
8181
  super(e), this.type = "comment";
8182
8182
  }
8183
8183
  };
8184
- var zn = As;
8184
+ var Hn = As;
8185
8185
  As.default = As;
8186
- let Eb = Mn, _s = class extends Eb {
8186
+ let Ob = En, _s = class extends Ob {
8187
8187
  get variable() {
8188
8188
  return this.prop.startsWith("--") || this.prop[0] === "$";
8189
8189
  }
@@ -8191,9 +8191,9 @@ let Eb = Mn, _s = class extends Eb {
8191
8191
  e && typeof e.value < "u" && typeof e.value != "string" && (e = Se(Y({}, e), { value: String(e.value) })), super(e), this.type = "decl";
8192
8192
  }
8193
8193
  };
8194
- var Hn = _s;
8194
+ var zn = _s;
8195
8195
  _s.default = _s;
8196
- let ic = zn, nc = Hn, Mb = Mn, { isClean: sc, my: rc } = Zi, xr, oc, lc, Tr;
8196
+ let ic = Hn, nc = zn, Eb = En, { isClean: sc, my: rc } = Zi, xr, oc, lc, Tr;
8197
8197
  function ac(e) {
8198
8198
  return e.map((t) => (t.nodes && (t.nodes = ac(t.nodes)), delete t.source, t));
8199
8199
  }
@@ -8202,7 +8202,7 @@ function cc(e) {
8202
8202
  for (let t of e.proxyOf.nodes)
8203
8203
  cc(t);
8204
8204
  }
8205
- let je = class uc extends Mb {
8205
+ let je = class uc extends Eb {
8206
8206
  get first() {
8207
8207
  if (this.proxyOf.nodes)
8208
8208
  return this.proxyOf.nodes[0];
@@ -8410,7 +8410,7 @@ je.rebuild = (e) => {
8410
8410
  je.rebuild(t);
8411
8411
  });
8412
8412
  };
8413
- let dc = ut, Cn = class extends dc {
8413
+ let dc = ut, Wn = class extends dc {
8414
8414
  constructor(e) {
8415
8415
  super(e), this.type = "atrule";
8416
8416
  }
@@ -8421,10 +8421,10 @@ let dc = ut, Cn = class extends dc {
8421
8421
  return this.proxyOf.nodes || (this.nodes = []), super.prepend(...e);
8422
8422
  }
8423
8423
  };
8424
- var Nr = Cn;
8425
- Cn.default = Cn;
8426
- dc.registerAtRule(Cn);
8427
- let zb = ut, hc, pc, di = class extends zb {
8424
+ var Nr = Wn;
8425
+ Wn.default = Wn;
8426
+ dc.registerAtRule(Wn);
8427
+ let Hb = ut, hc, pc, di = class extends Hb {
8428
8428
  constructor(e) {
8429
8429
  super(Y({ type: "document" }, e)), this.nodes || (this.nodes = []);
8430
8430
  }
@@ -8440,14 +8440,14 @@ di.registerProcessor = (e) => {
8440
8440
  };
8441
8441
  var Lr = di;
8442
8442
  di.default = di;
8443
- let Hb = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", Pb = (e = 21) => {
8443
+ let zb = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", Pb = (e = 21) => {
8444
8444
  let t = "", i = e | 0;
8445
8445
  for (; i--; )
8446
- t += Hb[Math.random() * 64 | 0];
8446
+ t += zb[Math.random() * 64 | 0];
8447
8447
  return t;
8448
8448
  };
8449
8449
  var Bb = { nanoid: Pb };
8450
- let { existsSync: Db, readFileSync: jb } = Le, { dirname: ls, join: Qb } = Le, { SourceMapConsumer: Eo, SourceMapGenerator: Mo } = Le;
8450
+ let { existsSync: Db, readFileSync: jb } = Le, { dirname: ls, join: Qb } = Le, { SourceMapConsumer: Oo, SourceMapGenerator: Eo } = Le;
8451
8451
  function Ab(e) {
8452
8452
  return Buffer ? Buffer.from(e, "base64").toString() : window.atob(e);
8453
8453
  }
@@ -8459,7 +8459,7 @@ let $s = class {
8459
8459
  !this.mapFile && t.from && (this.mapFile = t.from), this.mapFile && (this.root = ls(this.mapFile)), n && (this.text = n);
8460
8460
  }
8461
8461
  consumer() {
8462
- return this.consumerCache || (this.consumerCache = new Eo(this.text)), this.consumerCache;
8462
+ return this.consumerCache || (this.consumerCache = new Oo(this.text)), this.consumerCache;
8463
8463
  }
8464
8464
  decodeInline(e) {
8465
8465
  let t = /^data:application\/json;charset=utf-?8;base64,/, i = /^data:application\/json;base64,/, n = /^data:application\/json;charset=utf-?8,/, s = /^data:application\/json,/, r = e.match(n) || e.match(s);
@@ -8503,9 +8503,9 @@ let $s = class {
8503
8503
  return n;
8504
8504
  }
8505
8505
  } else {
8506
+ if (t instanceof Oo)
8507
+ return Eo.fromSourceMap(t).toString();
8506
8508
  if (t instanceof Eo)
8507
- return Mo.fromSourceMap(t).toString();
8508
- if (t instanceof Mo)
8509
8509
  return t.toString();
8510
8510
  if (this.isMap(t))
8511
8511
  return JSON.stringify(t);
@@ -8531,7 +8531,7 @@ let $s = class {
8531
8531
  };
8532
8532
  var mc = $s;
8533
8533
  $s.default = $s;
8534
- let { nanoid: _b } = Bb, { isAbsolute: qs, resolve: er } = Le, { SourceMapConsumer: $b, SourceMapGenerator: qb } = Le, { fileURLToPath: zo, pathToFileURL: Yi } = Le, Ho = wr, ef = mc, as = Le, cs = Symbol("lineToIndexCache"), tf = !!($b && qb), Po = !!(er && qs);
8534
+ let { nanoid: _b } = Bb, { isAbsolute: qs, resolve: er } = Le, { SourceMapConsumer: $b, SourceMapGenerator: qb } = Le, { fileURLToPath: Ho, pathToFileURL: Yi } = Le, zo = wr, ef = mc, as = Le, cs = Symbol("lineToIndexCache"), tf = !!($b && qb), Po = !!(er && qs);
8535
8535
  function Bo(e) {
8536
8536
  if (e[cs]) return e[cs];
8537
8537
  let t = e.css.split(`
@@ -8540,7 +8540,7 @@ function Bo(e) {
8540
8540
  i[s] = n, n += t[s].length + 1;
8541
8541
  return e[cs] = i, i;
8542
8542
  }
8543
- let Wn = class {
8543
+ let Cn = class {
8544
8544
  get from() {
8545
8545
  return this.file || this.id;
8546
8546
  }
@@ -8581,14 +8581,14 @@ let Wn = class {
8581
8581
  t = u.line, i = u.col;
8582
8582
  }
8583
8583
  let c = this.origin(t, i, r, s);
8584
- return c ? a = new Ho(
8584
+ return c ? a = new zo(
8585
8585
  e,
8586
8586
  c.endLine === void 0 ? c.line : { column: c.column, line: c.line },
8587
8587
  c.endLine === void 0 ? c.column : { column: c.endColumn, line: c.endLine },
8588
8588
  c.source,
8589
8589
  c.file,
8590
8590
  n.plugin
8591
- ) : a = new Ho(
8591
+ ) : a = new zo(
8592
8592
  e,
8593
8593
  r === void 0 ? t : { column: i, line: t },
8594
8594
  r === void 0 ? i : { column: s, line: r },
@@ -8643,8 +8643,8 @@ let Wn = class {
8643
8643
  url: o.toString()
8644
8644
  };
8645
8645
  if (o.protocol === "file:")
8646
- if (zo)
8647
- a.file = zo(o);
8646
+ if (Ho)
8647
+ a.file = Ho(o);
8648
8648
  else
8649
8649
  throw new Error("file: protocol is not available in this PostCSS build");
8650
8650
  let c = s.sourceContentFor(r.source);
@@ -8657,9 +8657,9 @@ let Wn = class {
8657
8657
  return this.map && (e.map = Y({}, this.map), e.map.consumerCache && (e.map.consumerCache = void 0)), e;
8658
8658
  }
8659
8659
  };
8660
- var Pn = Wn;
8661
- Wn.default = Wn;
8662
- as && as.registerInput && as.registerInput(Wn);
8660
+ var Pn = Cn;
8661
+ Cn.default = Cn;
8662
+ as && as.registerInput && as.registerInput(Cn);
8663
8663
  let bc = ut, fc, yc, xt = class extends bc {
8664
8664
  constructor(e) {
8665
8665
  super(e), this.type = "root", this.nodes || (this.nodes = []);
@@ -8725,10 +8725,10 @@ let Zc = ut, nf = gc, Rn = class extends Zc {
8725
8725
  var Jr = Rn;
8726
8726
  Rn.default = Rn;
8727
8727
  Zc.registerRule(Rn);
8728
- let sf = Nr, rf = zn, of = Hn, lf = Pn, af = mc, cf = Ii, uf = Jr;
8728
+ let sf = Nr, rf = Hn, of = zn, lf = Pn, af = mc, cf = Ii, uf = Jr;
8729
8729
  function pi(e, t) {
8730
8730
  if (Array.isArray(e)) return e.map((r) => pi(r));
8731
- let i = e, { inputs: n } = i, s = Wt(i, ["inputs"]);
8731
+ let i = e, { inputs: n } = i, s = Ct(i, ["inputs"]);
8732
8732
  if (n) {
8733
8733
  t = [];
8734
8734
  for (let r of n) {
@@ -8739,7 +8739,7 @@ function pi(e, t) {
8739
8739
  }
8740
8740
  }
8741
8741
  if (s.nodes && (s.nodes = e.nodes.map((r) => pi(r, t))), s.source) {
8742
- let r = s.source, { inputId: l } = r, o = Wt(r, ["inputId"]);
8742
+ let r = s.source, { inputId: l } = r, o = Ct(r, ["inputId"]);
8743
8743
  s.source = o, l != null && (s.source.input = t[l]);
8744
8744
  }
8745
8745
  if (s.type === "root")
@@ -8916,13 +8916,13 @@ let { dirname: nn, relative: Ic, resolve: Sc, sep: Gc } = Le, { SourceMapConsume
8916
8916
  }
8917
8917
  };
8918
8918
  var Xc = bf;
8919
- const us = 39, jo = 34, Fi = 92, Qo = 47, Ui = 10, zt = 32, Ki = 12, Oi = 9, Ei = 13, ff = 91, yf = 93, gf = 40, Zf = 41, If = 123, Sf = 125, Gf = 59, Vf = 42, Xf = 58, Cf = 64, Mi = /[\t\n\f\r "#'()/;[\\\]{}]/g, zi = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Wf = /.[\r\n"'(/\\]/, Ao = /[\da-f]/i;
8919
+ const us = 39, jo = 34, Ui = 92, Qo = 47, Fi = 10, Ht = 32, Ki = 12, Mi = 9, Oi = 13, ff = 91, yf = 93, gf = 40, Zf = 41, If = 123, Sf = 125, Gf = 59, Vf = 42, Xf = 58, Wf = 64, Ei = /[\t\n\f\r "#'()/;[\\\]{}]/g, Hi = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Cf = /.[\r\n"'(/\\]/, Ao = /[\da-f]/i;
8920
8920
  var Rf = function(e, t = {}) {
8921
8921
  let i = e.css.valueOf(), n = t.ignoreErrors, s, r, l, o, a, c, u, h, p, m, b = i.length, d = 0, S = [], I = [];
8922
8922
  function V() {
8923
8923
  return d;
8924
8924
  }
8925
- function W(v) {
8925
+ function C(v) {
8926
8926
  throw e.error("Unclosed " + v, d);
8927
8927
  }
8928
8928
  function X() {
@@ -8933,15 +8933,15 @@ var Rf = function(e, t = {}) {
8933
8933
  if (d >= b) return;
8934
8934
  let w = v ? v.ignoreUnclosed : !1;
8935
8935
  switch (s = i.charCodeAt(d), s) {
8936
- case Ui:
8937
- case zt:
8936
+ case Fi:
8937
+ case Ht:
8938
+ case Mi:
8938
8939
  case Oi:
8939
- case Ei:
8940
8940
  case Ki: {
8941
8941
  o = d;
8942
8942
  do
8943
8943
  o += 1, s = i.charCodeAt(o);
8944
- while (s === zt || s === Ui || s === Oi || s === Ei || s === Ki);
8944
+ while (s === Ht || s === Fi || s === Mi || s === Oi || s === Ki);
8945
8945
  c = ["space", i.slice(d, o)], d = o - 1;
8946
8946
  break;
8947
8947
  }
@@ -8957,7 +8957,7 @@ var Rf = function(e, t = {}) {
8957
8957
  break;
8958
8958
  }
8959
8959
  case gf: {
8960
- if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== us && p !== jo && p !== zt && p !== Ui && p !== Oi && p !== Ki && p !== Ei) {
8960
+ if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== us && p !== jo && p !== Ht && p !== Fi && p !== Mi && p !== Ki && p !== Oi) {
8961
8961
  o = d;
8962
8962
  do {
8963
8963
  if (u = !1, o = i.indexOf(")", o + 1), o === -1)
@@ -8965,13 +8965,13 @@ var Rf = function(e, t = {}) {
8965
8965
  o = d;
8966
8966
  break;
8967
8967
  } else
8968
- W("bracket");
8969
- for (h = o; i.charCodeAt(h - 1) === Fi; )
8968
+ C("bracket");
8969
+ for (h = o; i.charCodeAt(h - 1) === Ui; )
8970
8970
  h -= 1, u = !u;
8971
8971
  } while (u);
8972
8972
  c = ["brackets", i.slice(d, o + 1), d, o], d = o;
8973
8973
  } else
8974
- o = i.indexOf(")", d + 1), r = i.slice(d, o + 1), o === -1 || Wf.test(r) ? c = ["(", "(", d] : (c = ["brackets", r, d, o], d = o);
8974
+ o = i.indexOf(")", d + 1), r = i.slice(d, o + 1), o === -1 || Cf.test(r) ? c = ["(", "(", d] : (c = ["brackets", r, d, o], d = o);
8975
8975
  break;
8976
8976
  }
8977
8977
  case us:
@@ -8983,30 +8983,30 @@ var Rf = function(e, t = {}) {
8983
8983
  o = d + 1;
8984
8984
  break;
8985
8985
  } else
8986
- W("string");
8987
- for (h = o; i.charCodeAt(h - 1) === Fi; )
8986
+ C("string");
8987
+ for (h = o; i.charCodeAt(h - 1) === Ui; )
8988
8988
  h -= 1, u = !u;
8989
8989
  } while (u);
8990
8990
  c = ["string", i.slice(d, o + 1), d, o], d = o;
8991
8991
  break;
8992
8992
  }
8993
- case Cf: {
8994
- Mi.lastIndex = d + 1, Mi.test(i), Mi.lastIndex === 0 ? o = i.length - 1 : o = Mi.lastIndex - 2, c = ["at-word", i.slice(d, o + 1), d, o], d = o;
8993
+ case Wf: {
8994
+ Ei.lastIndex = d + 1, Ei.test(i), Ei.lastIndex === 0 ? o = i.length - 1 : o = Ei.lastIndex - 2, c = ["at-word", i.slice(d, o + 1), d, o], d = o;
8995
8995
  break;
8996
8996
  }
8997
- case Fi: {
8998
- for (o = d, l = !0; i.charCodeAt(o + 1) === Fi; )
8997
+ case Ui: {
8998
+ for (o = d, l = !0; i.charCodeAt(o + 1) === Ui; )
8999
8999
  o += 1, l = !l;
9000
- if (s = i.charCodeAt(o + 1), l && s !== Qo && s !== zt && s !== Ui && s !== Oi && s !== Ei && s !== Ki && (o += 1, Ao.test(i.charAt(o)))) {
9000
+ if (s = i.charCodeAt(o + 1), l && s !== Qo && s !== Ht && s !== Fi && s !== Mi && s !== Oi && s !== Ki && (o += 1, Ao.test(i.charAt(o)))) {
9001
9001
  for (; Ao.test(i.charAt(o + 1)); )
9002
9002
  o += 1;
9003
- i.charCodeAt(o + 1) === zt && (o += 1);
9003
+ i.charCodeAt(o + 1) === Ht && (o += 1);
9004
9004
  }
9005
9005
  c = ["word", i.slice(d, o + 1), d, o], d = o;
9006
9006
  break;
9007
9007
  }
9008
9008
  default: {
9009
- s === Qo && i.charCodeAt(d + 1) === Vf ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : W("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (zi.lastIndex = d + 1, zi.test(i), zi.lastIndex === 0 ? o = i.length - 1 : o = zi.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
9009
+ s === Qo && i.charCodeAt(d + 1) === Vf ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : C("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Hi.lastIndex = d + 1, Hi.test(i), Hi.lastIndex === 0 ? o = i.length - 1 : o = Hi.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
9010
9010
  break;
9011
9011
  }
9012
9012
  }
@@ -9022,7 +9022,7 @@ var Rf = function(e, t = {}) {
9022
9022
  position: V
9023
9023
  };
9024
9024
  };
9025
- let kf = Nr, vf = zn, wf = Hn, xf = Ii, _o = Jr, Tf = Rf;
9025
+ let kf = Nr, vf = Hn, wf = zn, xf = Ii, _o = Jr, Tf = Rf;
9026
9026
  const $o = {
9027
9027
  empty: !0,
9028
9028
  space: !0
@@ -9330,9 +9330,9 @@ let Lf = class {
9330
9330
  }
9331
9331
  };
9332
9332
  var Jf = Lf;
9333
- let Yf = ut, Ff = Pn, Uf = Jf;
9333
+ let Yf = ut, Uf = Pn, Ff = Jf;
9334
9334
  function kn(e, t) {
9335
- let i = new Ff(e, t), n = new Uf(i);
9335
+ let i = new Uf(e, t), n = new Ff(i);
9336
9336
  try {
9337
9337
  n.parse();
9338
9338
  } catch (s) {
@@ -9362,9 +9362,9 @@ let tr = class {
9362
9362
  }).message : this.plugin ? this.plugin + ": " + this.text : this.text;
9363
9363
  }
9364
9364
  };
9365
- var Cc = tr;
9365
+ var Wc = tr;
9366
9366
  tr.default = tr;
9367
- let Kf = Cc, ir = class {
9367
+ let Kf = Wc, ir = class {
9368
9368
  get content() {
9369
9369
  return this.css;
9370
9370
  }
@@ -9383,13 +9383,13 @@ let Kf = Cc, ir = class {
9383
9383
  return this.messages.filter((e) => e.type === "warning");
9384
9384
  }
9385
9385
  };
9386
- var Fr = ir;
9386
+ var Ur = ir;
9387
9387
  ir.default = ir;
9388
9388
  let qo = {};
9389
- var Wc = function(e) {
9389
+ var Cc = function(e) {
9390
9390
  qo[e] || (qo[e] = !0, typeof console < "u" && console.warn && console.warn(e));
9391
9391
  };
9392
- let Of = ut, Ef = Lr, Mf = Xc, zf = Yr, el = Fr, Hf = Ii, Pf = En, { isClean: Fe, my: Bf } = Zi, Df = Wc;
9392
+ let Mf = ut, Of = Lr, Ef = Xc, Hf = Yr, el = Ur, zf = Ii, Pf = On, { isClean: Ue, my: Bf } = Zi, Df = Cc;
9393
9393
  const jf = {
9394
9394
  atrule: "AtRule",
9395
9395
  comment: "Comment",
@@ -9419,7 +9419,7 @@ const jf = {
9419
9419
  postcssPlugin: !0,
9420
9420
  prepare: !0
9421
9421
  }, Tt = 0;
9422
- function Ht(e) {
9422
+ function zt(e) {
9423
9423
  return typeof e == "object" && typeof e.then == "function";
9424
9424
  }
9425
9425
  function Rc(e) {
@@ -9444,7 +9444,7 @@ function tl(e) {
9444
9444
  };
9445
9445
  }
9446
9446
  function nr(e) {
9447
- return e[Fe] = !1, e.nodes && e.nodes.forEach((t) => nr(t)), e;
9447
+ return e[Ue] = !1, e.nodes && e.nodes.forEach((t) => nr(t)), e;
9448
9448
  }
9449
9449
  let sr = {}, Nt = class kc {
9450
9450
  get content() {
@@ -9479,14 +9479,14 @@ let sr = {}, Nt = class kc {
9479
9479
  else if (i instanceof kc || i instanceof el)
9480
9480
  s = nr(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
9481
9481
  else {
9482
- let r = zf;
9482
+ let r = Hf;
9483
9483
  n.syntax && (r = n.syntax.parse), n.parser && (r = n.parser), r.parse && (r = r.parse);
9484
9484
  try {
9485
9485
  s = r(i, n);
9486
9486
  } catch (l) {
9487
9487
  this.processed = !0, this.error = l;
9488
9488
  }
9489
- s && !s[Bf] && Of.rebuild(s);
9489
+ s && !s[Bf] && Mf.rebuild(s);
9490
9490
  }
9491
9491
  this.result = new el(t, s, n), this.helpers = Se(Y({}, sr), { postcss: sr, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
9492
9492
  }
@@ -9547,7 +9547,7 @@ let sr = {}, Nt = class kc {
9547
9547
  this.plugin = 0;
9548
9548
  for (let t = 0; t < this.plugins.length; t++) {
9549
9549
  let i = this.plugins[t], n = this.runOnRoot(i);
9550
- if (Ht(n))
9550
+ if (zt(n))
9551
9551
  try {
9552
9552
  yield n;
9553
9553
  } catch (s) {
@@ -9556,12 +9556,12 @@ let sr = {}, Nt = class kc {
9556
9556
  }
9557
9557
  if (this.prepareVisitors(), this.hasListener) {
9558
9558
  let t = this.result.root;
9559
- for (; !t[Fe]; ) {
9560
- t[Fe] = !0;
9559
+ for (; !t[Ue]; ) {
9560
+ t[Ue] = !0;
9561
9561
  let i = [tl(t)];
9562
9562
  for (; i.length > 0; ) {
9563
9563
  let n = this.visitTick(i);
9564
- if (Ht(n))
9564
+ if (zt(n))
9565
9565
  try {
9566
9566
  yield n;
9567
9567
  } catch (s) {
@@ -9597,7 +9597,7 @@ let sr = {}, Nt = class kc {
9597
9597
  let i = this.result.root.nodes.map(
9598
9598
  (n) => t.Once(n, this.helpers)
9599
9599
  );
9600
- return Ht(i[0]) ? Promise.all(i) : i;
9600
+ return zt(i[0]) ? Promise.all(i) : i;
9601
9601
  }
9602
9602
  return t.Once(this.result.root, this.helpers);
9603
9603
  } else if (typeof t == "function")
@@ -9612,7 +9612,7 @@ let sr = {}, Nt = class kc {
9612
9612
  this.stringified = !0, this.sync();
9613
9613
  let t = this.result.opts, i = Pf;
9614
9614
  t.syntax && (i = t.syntax.stringify), t.stringifier && (i = t.stringifier), i.stringify && (i = i.stringify);
9615
- let n = new Mf(i, this.result.root, this.result.opts).generate();
9615
+ let n = new Ef(i, this.result.root, this.result.opts).generate();
9616
9616
  return this.result.css = n[0], this.result.map = n[1], this.result;
9617
9617
  }
9618
9618
  sync() {
@@ -9622,13 +9622,13 @@ let sr = {}, Nt = class kc {
9622
9622
  throw this.getAsyncError();
9623
9623
  for (let t of this.plugins) {
9624
9624
  let i = this.runOnRoot(t);
9625
- if (Ht(i))
9625
+ if (zt(i))
9626
9626
  throw this.getAsyncError();
9627
9627
  }
9628
9628
  if (this.prepareVisitors(), this.hasListener) {
9629
9629
  let t = this.result.root;
9630
- for (; !t[Fe]; )
9631
- t[Fe] = !0, this.walkSync(t);
9630
+ for (; !t[Ue]; )
9631
+ t[Ue] = !0, this.walkSync(t);
9632
9632
  if (this.listeners.OnceExit)
9633
9633
  if (t.type === "document")
9634
9634
  for (let i of t.nodes)
@@ -9657,7 +9657,7 @@ let sr = {}, Nt = class kc {
9657
9657
  }
9658
9658
  if (i.type !== "root" && i.type !== "document" && !i.parent)
9659
9659
  return !0;
9660
- if (Ht(r))
9660
+ if (zt(r))
9661
9661
  throw this.getAsyncError();
9662
9662
  }
9663
9663
  }
@@ -9679,8 +9679,8 @@ let sr = {}, Nt = class kc {
9679
9679
  if (i.iterator !== 0) {
9680
9680
  let l = i.iterator, o;
9681
9681
  for (; o = n.nodes[n.indexes[l]]; )
9682
- if (n.indexes[l] += 1, !o[Fe]) {
9683
- o[Fe] = !0, t.push(tl(o));
9682
+ if (n.indexes[l] += 1, !o[Ue]) {
9683
+ o[Ue] = !0, t.push(tl(o));
9684
9684
  return;
9685
9685
  }
9686
9686
  i.iterator = 0, delete n.indexes[l];
@@ -9689,7 +9689,7 @@ let sr = {}, Nt = class kc {
9689
9689
  for (; i.eventIndex < r.length; ) {
9690
9690
  let l = r[i.eventIndex];
9691
9691
  if (i.eventIndex += 1, l === Tt) {
9692
- n.nodes && n.nodes.length && (n[Fe] = !0, i.iterator = n.getIterator());
9692
+ n.nodes && n.nodes.length && (n[Ue] = !0, i.iterator = n.getIterator());
9693
9693
  return;
9694
9694
  } else if (this.listeners[l]) {
9695
9695
  i.visitors = this.listeners[l];
@@ -9699,12 +9699,12 @@ let sr = {}, Nt = class kc {
9699
9699
  t.pop();
9700
9700
  }
9701
9701
  walkSync(t) {
9702
- t[Fe] = !0;
9702
+ t[Ue] = !0;
9703
9703
  let i = Rc(t);
9704
9704
  for (let n of i)
9705
9705
  if (n === Tt)
9706
9706
  t.nodes && t.each((s) => {
9707
- s[Fe] || this.walkSync(s);
9707
+ s[Ue] || this.walkSync(s);
9708
9708
  });
9709
9709
  else {
9710
9710
  let s = this.listeners[n];
@@ -9721,11 +9721,11 @@ Nt.registerPostcss = (e) => {
9721
9721
  };
9722
9722
  var vc = Nt;
9723
9723
  Nt.default = Nt;
9724
- Hf.registerLazyResult(Nt);
9725
- Ef.registerLazyResult(Nt);
9724
+ zf.registerLazyResult(Nt);
9725
+ Of.registerLazyResult(Nt);
9726
9726
  let _f = Xc, $f = Yr;
9727
- const qf = Fr;
9728
- let ey = En, ty = Wc, rr = class {
9727
+ const qf = Ur;
9728
+ let ey = On, ty = Cc, rr = class {
9729
9729
  get content() {
9730
9730
  return this.result.css;
9731
9731
  }
@@ -9837,9 +9837,9 @@ var ly = mi;
9837
9837
  mi.default = mi;
9838
9838
  oy.registerProcessor(mi);
9839
9839
  ny.registerProcessor(mi);
9840
- let wc = Nr, xc = zn, ay = ut, cy = wr, Tc = Hn, Nc = Lr, uy = df, dy = Pn, hy = vc, py = gc, my = Mn, by = Yr, Ur = ly, fy = Fr, Lc = Ii, Jc = Jr, yy = En, gy = Cc;
9840
+ let wc = Nr, xc = Hn, ay = ut, cy = wr, Tc = zn, Nc = Lr, uy = df, dy = Pn, hy = vc, py = gc, my = En, by = Yr, Fr = ly, fy = Ur, Lc = Ii, Jc = Jr, yy = On, gy = Wc;
9841
9841
  function ee(...e) {
9842
- return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new Ur(e);
9842
+ return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new Fr(e);
9843
9843
  }
9844
9844
  ee.plugin = function(e, t) {
9845
9845
  let i = !1;
@@ -9852,7 +9852,7 @@ https://evilmartians.com/chronicles/postcss-8-plugin-migration`
9852
9852
  https://www.w3ctech.com/topic/2226`
9853
9853
  ));
9854
9854
  let l = t(...r);
9855
- return l.postcssPlugin = e, l.postcssVersion = new Ur().version, l;
9855
+ return l.postcssPlugin = e, l.postcssVersion = new Fr().version, l;
9856
9856
  }
9857
9857
  let s;
9858
9858
  return Object.defineProperty(n, "postcss", {
@@ -9876,7 +9876,7 @@ ee.document = (e) => new Nc(e);
9876
9876
  ee.CssSyntaxError = cy;
9877
9877
  ee.Declaration = Tc;
9878
9878
  ee.Container = ay;
9879
- ee.Processor = Ur;
9879
+ ee.Processor = Fr;
9880
9880
  ee.Document = Nc;
9881
9881
  ee.Comment = xc;
9882
9882
  ee.Warning = gy;
@@ -9933,7 +9933,7 @@ class Kr {
9933
9933
  return "RRNode";
9934
9934
  }
9935
9935
  }
9936
- const Hi = /* @__PURE__ */ new Map(), il = /* @__PURE__ */ new WeakSet();
9936
+ const zi = /* @__PURE__ */ new Map(), il = /* @__PURE__ */ new WeakSet();
9937
9937
  function nl(e) {
9938
9938
  return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
9939
9939
  }
@@ -9943,19 +9943,19 @@ function Zy(e) {
9943
9943
  il.add(e);
9944
9944
  const t = e.drawImage.bind(e);
9945
9945
  e.drawImage = function(i, ...n) {
9946
- const s = Hi.get(e);
9946
+ const s = zi.get(e);
9947
9947
  s && (s.cancelled = !0);
9948
9948
  const r = () => {
9949
9949
  n.length === 2 && nl(i) && n.push(i.naturalWidth || i.width, i.naturalHeight || i.height), t(i, ...n);
9950
9950
  };
9951
9951
  if (nl(i) && !i.complete) {
9952
9952
  const l = { cancelled: !1 };
9953
- Hi.set(e, l);
9953
+ zi.set(e, l);
9954
9954
  const o = () => {
9955
- l.cancelled || (Hi.delete(e), r());
9955
+ l.cancelled || (zi.delete(e), r());
9956
9956
  }, a = () => {
9957
9957
  if (!l.cancelled) {
9958
- Hi.delete(e);
9958
+ zi.delete(e);
9959
9959
  try {
9960
9960
  r();
9961
9961
  } catch {
@@ -9978,7 +9978,7 @@ const sl = {
9978
9978
  Element: [],
9979
9979
  MutationObserver: ["constructor"]
9980
9980
  }, Pi = {}, Iy = () => !!globalThis.Zone;
9981
- function Or(e) {
9981
+ function Mr(e) {
9982
9982
  if (Pi[e])
9983
9983
  return Pi[e];
9984
9984
  const t = globalThis[e], i = t.prototype, n = e in sl ? sl[e] : void 0, s = !!(n && // @ts-expect-error 2345
@@ -10015,7 +10015,7 @@ function et(e, t, i) {
10015
10015
  return ds[s].call(
10016
10016
  t
10017
10017
  );
10018
- const r = Or(e), l = (n = Object.getOwnPropertyDescriptor(
10018
+ const r = Mr(e), l = (n = Object.getOwnPropertyDescriptor(
10019
10019
  r,
10020
10020
  i
10021
10021
  )) == null ? void 0 : n.get;
@@ -10028,7 +10028,7 @@ function Yc(e, t, i) {
10028
10028
  return hs[n].bind(
10029
10029
  t
10030
10030
  );
10031
- const s = Or(e)[i];
10031
+ const s = Mr(e)[i];
10032
10032
  return typeof s != "function" ? t[i] : (hs[n] = s, s.bind(t));
10033
10033
  }
10034
10034
  function Sy(e) {
@@ -10043,10 +10043,10 @@ function Vy(e) {
10043
10043
  function Xy(e) {
10044
10044
  return et("Node", e, "textContent");
10045
10045
  }
10046
- function Cy(e, t) {
10046
+ function Wy(e, t) {
10047
10047
  return Yc("Node", e, "contains")(t);
10048
10048
  }
10049
- function Wy(e) {
10049
+ function Cy(e) {
10050
10050
  return Yc("Node", e, "getRootNode")();
10051
10051
  }
10052
10052
  function Ry(e) {
@@ -10064,8 +10064,8 @@ function wy(e, t) {
10064
10064
  function xy(e, t) {
10065
10065
  return et("Element", e, "querySelectorAll")(t);
10066
10066
  }
10067
- function Fc() {
10068
- return Or("MutationObserver").constructor;
10067
+ function Uc() {
10068
+ return Mr("MutationObserver").constructor;
10069
10069
  }
10070
10070
  function dt(e, t, i) {
10071
10071
  try {
@@ -10086,19 +10086,19 @@ function dt(e, t, i) {
10086
10086
  };
10087
10087
  }
10088
10088
  }
10089
- const H = {
10089
+ const z = {
10090
10090
  childNodes: Sy,
10091
10091
  parentNode: Gy,
10092
10092
  parentElement: Vy,
10093
10093
  textContent: Xy,
10094
- contains: Cy,
10095
- getRootNode: Wy,
10094
+ contains: Wy,
10095
+ getRootNode: Cy,
10096
10096
  host: Ry,
10097
10097
  styleSheets: ky,
10098
10098
  shadowRoot: vy,
10099
10099
  querySelector: wy,
10100
10100
  querySelectorAll: xy,
10101
- mutationObserver: Fc,
10101
+ mutationObserver: Uc,
10102
10102
  patch: dt,
10103
10103
  wrapCanvasContextDrawImage: Zy
10104
10104
  };
@@ -10159,22 +10159,22 @@ function Bn(e, t, i, n, s = window) {
10159
10159
  }
10160
10160
  let vn = Date.now;
10161
10161
  /* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString()) || (vn = () => (/* @__PURE__ */ new Date()).getTime());
10162
- function Uc(e) {
10162
+ function Fc(e) {
10163
10163
  var t, i, n, s;
10164
10164
  const r = e.document;
10165
10165
  return {
10166
- left: r.scrollingElement ? r.scrollingElement.scrollLeft : e.pageXOffset !== void 0 ? e.pageXOffset : r.documentElement.scrollLeft || r?.body && ((t = H.parentElement(r.body)) == null ? void 0 : t.scrollLeft) || ((i = r?.body) == null ? void 0 : i.scrollLeft) || 0,
10167
- top: r.scrollingElement ? r.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : r?.documentElement.scrollTop || r?.body && ((n = H.parentElement(r.body)) == null ? void 0 : n.scrollTop) || ((s = r?.body) == null ? void 0 : s.scrollTop) || 0
10166
+ left: r.scrollingElement ? r.scrollingElement.scrollLeft : e.pageXOffset !== void 0 ? e.pageXOffset : r.documentElement.scrollLeft || r?.body && ((t = z.parentElement(r.body)) == null ? void 0 : t.scrollLeft) || ((i = r?.body) == null ? void 0 : i.scrollLeft) || 0,
10167
+ top: r.scrollingElement ? r.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : r?.documentElement.scrollTop || r?.body && ((n = z.parentElement(r.body)) == null ? void 0 : n.scrollTop) || ((s = r?.body) == null ? void 0 : s.scrollTop) || 0
10168
10168
  };
10169
10169
  }
10170
10170
  function Kc() {
10171
10171
  return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;
10172
10172
  }
10173
- function Oc() {
10173
+ function Mc() {
10174
10174
  return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;
10175
10175
  }
10176
- function Ec(e) {
10177
- return e ? e.nodeType === e.ELEMENT_NODE ? e : H.parentElement(e) : null;
10176
+ function Oc(e) {
10177
+ return e ? e.nodeType === e.ELEMENT_NODE ? e : z.parentElement(e) : null;
10178
10178
  }
10179
10179
  const Ty = (e) => {
10180
10180
  try {
@@ -10188,7 +10188,7 @@ const Ty = (e) => {
10188
10188
  function pe(e, t, i, n) {
10189
10189
  if (!e)
10190
10190
  return !1;
10191
- const s = Ec(e);
10191
+ const s = Oc(e);
10192
10192
  if (!s)
10193
10193
  return !1;
10194
10194
  try {
@@ -10205,14 +10205,14 @@ function Ny(e, t) {
10205
10205
  function ps(e, t, i) {
10206
10206
  return e.tagName === "TITLE" && i.headTitleMutations ? !0 : t.getId(e) === oi;
10207
10207
  }
10208
- function Mc(e, t) {
10208
+ function Ec(e, t) {
10209
10209
  if ($t(e))
10210
10210
  return !1;
10211
10211
  const i = t.getId(e);
10212
10212
  if (!t.has(i))
10213
10213
  return !0;
10214
- const n = H.parentNode(e);
10215
- return n && n.nodeType === e.DOCUMENT_NODE ? !1 : n ? Mc(n, t) : !0;
10214
+ const n = z.parentNode(e);
10215
+ return n && n.nodeType === e.DOCUMENT_NODE ? !1 : n ? Ec(n, t) : !0;
10216
10216
  }
10217
10217
  function or(e) {
10218
10218
  return !!e.changedTouches;
@@ -10220,18 +10220,18 @@ function or(e) {
10220
10220
  function Ly(e = window) {
10221
10221
  "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);
10222
10222
  }
10223
- function zc(e, t) {
10223
+ function Hc(e, t) {
10224
10224
  return !!(e.nodeName === "IFRAME" && t.getMeta(e));
10225
10225
  }
10226
- function Hc(e, t) {
10226
+ function zc(e, t) {
10227
10227
  return !!(e.nodeName === "LINK" && e.nodeType === e.ELEMENT_NODE && e.getAttribute && e.getAttribute("rel") === "stylesheet" && t.getMeta(e));
10228
10228
  }
10229
10229
  function lr(e) {
10230
- return e ? e instanceof Kr && "shadowRoot" in e ? !!e.shadowRoot : !!H.shadowRoot(e) : !1;
10230
+ return e ? e instanceof Kr && "shadowRoot" in e ? !!e.shadowRoot : !!z.shadowRoot(e) : !1;
10231
10231
  }
10232
10232
  class Jy {
10233
10233
  constructor() {
10234
- C(this, "id", 1), C(this, "styleIDMap", /* @__PURE__ */ new WeakMap()), C(this, "idStyleMap", /* @__PURE__ */ new Map());
10234
+ W(this, "id", 1), W(this, "styleIDMap", /* @__PURE__ */ new WeakMap()), W(this, "idStyleMap", /* @__PURE__ */ new Map());
10235
10235
  }
10236
10236
  getId(t) {
10237
10237
  var i;
@@ -10261,7 +10261,7 @@ class Jy {
10261
10261
  function Pc(e) {
10262
10262
  var t;
10263
10263
  let i = null;
10264
- return "getRootNode" in e && ((t = H.getRootNode(e)) == null ? void 0 : t.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && H.host(H.getRootNode(e)) && (i = H.host(H.getRootNode(e))), i;
10264
+ return "getRootNode" in e && ((t = z.getRootNode(e)) == null ? void 0 : t.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && z.host(z.getRootNode(e)) && (i = z.host(z.getRootNode(e))), i;
10265
10265
  }
10266
10266
  function Yy(e) {
10267
10267
  let t = e, i;
@@ -10269,23 +10269,23 @@ function Yy(e) {
10269
10269
  t = i;
10270
10270
  return t;
10271
10271
  }
10272
- function Fy(e) {
10272
+ function Uy(e) {
10273
10273
  const t = e.ownerDocument;
10274
10274
  if (!t) return !1;
10275
10275
  const i = Yy(e);
10276
- return H.contains(t, i);
10276
+ return z.contains(t, i);
10277
10277
  }
10278
10278
  function Bc(e) {
10279
10279
  const t = e.ownerDocument;
10280
- return t ? H.contains(t, e) || Fy(e) : !1;
10280
+ return t ? z.contains(t, e) || Uy(e) : !1;
10281
10281
  }
10282
10282
  var j = /* @__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))(j || {}), P = /* @__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))(P || {}), Ge = /* @__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))(Ge || {}), _e = /* @__PURE__ */ ((e) => (e[e.Mouse = 0] = "Mouse", e[e.Pen = 1] = "Pen", e[e.Touch = 2] = "Touch", e))(_e || {}), Lt = /* @__PURE__ */ ((e) => (e[e["2D"] = 0] = "2D", e[e.WebGL = 1] = "WebGL", e[e.WebGL2 = 2] = "WebGL2", e))(Lt || {}), Zt = /* @__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))(Zt || {}), Dc = /* @__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))(Dc || {});
10283
10283
  function ll(e) {
10284
10284
  return "__ln" in e;
10285
10285
  }
10286
- class Uy {
10286
+ class Fy {
10287
10287
  constructor() {
10288
- C(this, "length", 0), C(this, "head", null), C(this, "tail", null);
10288
+ W(this, "length", 0), W(this, "head", null), W(this, "tail", null);
10289
10289
  }
10290
10290
  get(t) {
10291
10291
  if (t >= this.length)
@@ -10319,18 +10319,18 @@ class Uy {
10319
10319
  const al = (e, t) => `${e}@${t}`;
10320
10320
  class Ky {
10321
10321
  constructor() {
10322
- C(this, "frozen", !1), C(this, "locked", !1), C(this, "texts", []), C(this, "attributes", []), C(this, "attributeMap", /* @__PURE__ */ new WeakMap()), C(this, "removes", []), C(this, "mapRemoves", []), C(this, "movedMap", {}), C(this, "addedSet", /* @__PURE__ */ new Set()), C(this, "movedSet", /* @__PURE__ */ new Set()), C(this, "droppedSet", /* @__PURE__ */ new Set()), C(this, "removesSubTreeCache", /* @__PURE__ */ new Set()), C(this, "mutationCb"), C(this, "blockClass"), C(this, "blockSelector"), C(this, "maskTextClass"), C(this, "maskTextSelector"), C(this, "inlineStylesheet"), C(this, "maskInputOptions"), C(this, "maskTextFn"), C(this, "maskInputFn"), C(this, "keepIframeSrcFn"), C(this, "recordCanvas"), C(this, "inlineImages"), C(this, "inlineVideos"), C(this, "privacySetting"), C(this, "slimDOMOptions"), C(this, "dataURLOptions"), C(this, "doc"), C(this, "mirror"), C(this, "iframeManager"), C(this, "stylesheetManager"), C(this, "shadowDomManager"), C(this, "canvasManager"), C(this, "processedNodeManager"), C(this, "unattachedDoc"), C(this, "processMutations", (t) => {
10322
+ W(this, "frozen", !1), W(this, "locked", !1), W(this, "texts", []), W(this, "attributes", []), W(this, "attributeMap", /* @__PURE__ */ new WeakMap()), W(this, "removes", []), W(this, "mapRemoves", []), W(this, "movedMap", {}), W(this, "addedSet", /* @__PURE__ */ new Set()), W(this, "movedSet", /* @__PURE__ */ new Set()), W(this, "droppedSet", /* @__PURE__ */ new Set()), W(this, "removesSubTreeCache", /* @__PURE__ */ new Set()), W(this, "mutationCb"), W(this, "blockClass"), W(this, "blockSelector"), W(this, "maskTextClass"), W(this, "maskTextSelector"), W(this, "inlineStylesheet"), W(this, "maskInputOptions"), W(this, "maskTextFn"), W(this, "maskInputFn"), W(this, "keepIframeSrcFn"), W(this, "recordCanvas"), W(this, "inlineImages"), W(this, "inlineVideos"), W(this, "privacySetting"), W(this, "slimDOMOptions"), W(this, "dataURLOptions"), W(this, "doc"), W(this, "mirror"), W(this, "iframeManager"), W(this, "stylesheetManager"), W(this, "shadowDomManager"), W(this, "canvasManager"), W(this, "processedNodeManager"), W(this, "unattachedDoc"), W(this, "processMutations", (t) => {
10323
10323
  t.forEach(this.processMutation), this.emit();
10324
- }), C(this, "emit", () => {
10324
+ }), W(this, "emit", () => {
10325
10325
  if (this.frozen || this.locked)
10326
10326
  return;
10327
- const t = [], i = /* @__PURE__ */ new Set(), n = new Uy(), s = (a) => {
10327
+ const t = [], i = /* @__PURE__ */ new Set(), n = new Fy(), s = (a) => {
10328
10328
  let c = a, u = oi;
10329
10329
  for (; u === oi; )
10330
10330
  c = c && c.nextSibling, u = c && this.mirror.getId(c);
10331
10331
  return u;
10332
10332
  }, r = (a) => {
10333
- const c = H.parentNode(a);
10333
+ const c = z.parentNode(a);
10334
10334
  if (!c || !Bc(a))
10335
10335
  return;
10336
10336
  let u = !1;
@@ -10363,9 +10363,9 @@ class Ky {
10363
10363
  inlineVideos: this.inlineVideos,
10364
10364
  privacySetting: this.privacySetting,
10365
10365
  onSerialize: (b) => {
10366
- zc(b, this.mirror) && this.iframeManager.addIframe(b), Hc(b, this.mirror) && this.stylesheetManager.trackLinkElement(
10366
+ Hc(b, this.mirror) && this.iframeManager.addIframe(b), zc(b, this.mirror) && this.stylesheetManager.trackLinkElement(
10367
10367
  b
10368
- ), lr(a) && this.shadowDomManager.addShadowRoot(H.shadowRoot(a), this.doc);
10368
+ ), lr(a) && this.shadowDomManager.addShadowRoot(z.shadowRoot(a), this.doc);
10369
10369
  },
10370
10370
  onIframeLoad: (b, d) => {
10371
10371
  this.iframeManager.attachIframe(b, d), this.shadowDomManager.observeAttachShadow(b);
@@ -10384,14 +10384,14 @@ class Ky {
10384
10384
  for (; this.mapRemoves.length; )
10385
10385
  this.mirror.removeNodeFromMap(this.mapRemoves.shift());
10386
10386
  for (const a of this.movedSet)
10387
- cl(this.removesSubTreeCache, a) && !this.movedSet.has(H.parentNode(a)) || r(a);
10387
+ cl(this.removesSubTreeCache, a) && !this.movedSet.has(z.parentNode(a)) || r(a);
10388
10388
  for (const a of this.addedSet)
10389
10389
  !ul(this.droppedSet, a) && !cl(this.removesSubTreeCache, a) || ul(this.movedSet, a) ? r(a) : this.droppedSet.add(a);
10390
10390
  let l = null;
10391
10391
  for (; n.length; ) {
10392
10392
  let a = null;
10393
10393
  if (l) {
10394
- const c = this.mirror.getId(H.parentNode(l.value)), u = s(l.value);
10394
+ const c = this.mirror.getId(z.parentNode(l.value)), u = s(l.value);
10395
10395
  c !== -1 && u !== -1 && (a = l);
10396
10396
  }
10397
10397
  if (!a) {
@@ -10399,15 +10399,15 @@ class Ky {
10399
10399
  for (; c; ) {
10400
10400
  const u = c;
10401
10401
  if (c = c.previous, u) {
10402
- const h = this.mirror.getId(H.parentNode(u.value));
10402
+ const h = this.mirror.getId(z.parentNode(u.value));
10403
10403
  if (s(u.value) === -1) continue;
10404
10404
  if (h !== -1) {
10405
10405
  a = u;
10406
10406
  break;
10407
10407
  } else {
10408
- const p = u.value, m = H.parentNode(p);
10408
+ const p = u.value, m = z.parentNode(p);
10409
10409
  if (m && m.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
10410
- const b = H.host(m);
10410
+ const b = z.host(m);
10411
10411
  if (this.mirror.getId(b) !== -1) {
10412
10412
  a = u;
10413
10413
  break;
@@ -10427,7 +10427,7 @@ class Ky {
10427
10427
  const o = {
10428
10428
  texts: this.texts.map((a) => {
10429
10429
  var c, u;
10430
- const h = a.node, p = H.parentNode(h);
10430
+ const h = a.node, p = z.parentNode(h);
10431
10431
  p && p.tagName === "TEXTAREA" && this.genTextAreaValueMutation(p);
10432
10432
  let m = a.value;
10433
10433
  const b = this.privacySetting === "strict", d = this.privacySetting === "default" && ua(m), S = (u = (c = a.node) == null ? void 0 : c.parentElement) == null ? void 0 : u.getAttribute("data-hl-record");
@@ -10451,7 +10451,7 @@ class Ky {
10451
10451
  adds: t
10452
10452
  };
10453
10453
  !o.texts.length && !o.attributes.length && !o.removes.length && !o.adds.length || (this.texts = [], this.attributes = [], this.attributeMap = /* @__PURE__ */ new WeakMap(), this.removes = [], this.addedSet = /* @__PURE__ */ new Set(), this.movedSet = /* @__PURE__ */ new Set(), this.droppedSet = /* @__PURE__ */ new Set(), this.removesSubTreeCache = /* @__PURE__ */ new Set(), this.movedMap = {}, this.mutationCb(o));
10454
- }), C(this, "genTextAreaValueMutation", (t) => {
10454
+ }), W(this, "genTextAreaValueMutation", (t) => {
10455
10455
  let i = this.attributeMap.get(t);
10456
10456
  i || (i = {
10457
10457
  node: t,
@@ -10460,8 +10460,8 @@ class Ky {
10460
10460
  _unchangedStyles: {}
10461
10461
  }, this.attributes.push(i), this.attributeMap.set(t, i));
10462
10462
  const n = Array.from(
10463
- H.childNodes(t),
10464
- (s) => H.textContent(s) || ""
10463
+ z.childNodes(t),
10464
+ (s) => z.textContent(s) || ""
10465
10465
  ).join("");
10466
10466
  i.attributes.value = fn({
10467
10467
  overwriteRecord: null,
@@ -10472,11 +10472,11 @@ class Ky {
10472
10472
  value: n,
10473
10473
  maskInputFn: this.maskInputFn
10474
10474
  });
10475
- }), C(this, "processMutation", (t) => {
10475
+ }), W(this, "processMutation", (t) => {
10476
10476
  if (!ps(t.target, this.mirror, this.slimDOMOptions))
10477
10477
  switch (t.type) {
10478
10478
  case "characterData": {
10479
- const i = H.textContent(t.target);
10479
+ const i = z.textContent(t.target);
10480
10480
  !pe(t.target, this.blockClass, this.blockSelector, !1) && i !== t.oldValue && this.texts.push({
10481
10481
  value: ba(
10482
10482
  t.target,
@@ -10484,7 +10484,7 @@ class Ky {
10484
10484
  this.maskTextSelector,
10485
10485
  !0
10486
10486
  // checkAncestors
10487
- ) && i ? this.maskTextFn ? this.maskTextFn(i, Ec(t.target)) : i.replace(/[\S]/g, "*") : i,
10487
+ ) && i ? this.maskTextFn ? this.maskTextFn(i, Oc(t.target)) : i.replace(/[\S]/g, "*") : i,
10488
10488
  node: t.target
10489
10489
  });
10490
10490
  break;
@@ -10557,17 +10557,17 @@ class Ky {
10557
10557
  return;
10558
10558
  }
10559
10559
  t.addedNodes.forEach((i) => this.genAdds(i, t.target)), t.removedNodes.forEach((i) => {
10560
- const n = this.mirror.getId(i), s = $t(t.target) ? this.mirror.getId(H.host(t.target)) : this.mirror.getId(t.target);
10561
- pe(t.target, this.blockClass, this.blockSelector, !1) || ps(i, this.mirror, this.slimDOMOptions) || !Ny(i, this.mirror) || (this.addedSet.has(i) ? (ar(this.addedSet, i), this.droppedSet.add(i)) : this.addedSet.has(t.target) && n === -1 || Mc(t.target, this.mirror) || (this.movedSet.has(i) && this.movedMap[al(n, s)] ? ar(this.movedSet, i) : (this.removes.push({
10560
+ const n = this.mirror.getId(i), s = $t(t.target) ? this.mirror.getId(z.host(t.target)) : this.mirror.getId(t.target);
10561
+ pe(t.target, this.blockClass, this.blockSelector, !1) || ps(i, this.mirror, this.slimDOMOptions) || !Ny(i, this.mirror) || (this.addedSet.has(i) ? (ar(this.addedSet, i), this.droppedSet.add(i)) : this.addedSet.has(t.target) && n === -1 || Ec(t.target, this.mirror) || (this.movedSet.has(i) && this.movedMap[al(n, s)] ? ar(this.movedSet, i) : (this.removes.push({
10562
10562
  parentId: s,
10563
10563
  id: n,
10564
10564
  isShadow: $t(t.target) && qt(t.target) ? !0 : void 0
10565
- }), Oy(i, this.removesSubTreeCache))), this.mapRemoves.push(i));
10565
+ }), My(i, this.removesSubTreeCache))), this.mapRemoves.push(i));
10566
10566
  });
10567
10567
  break;
10568
10568
  }
10569
10569
  }
10570
- }), C(this, "genAdds", (t, i) => {
10570
+ }), W(this, "genAdds", (t, i) => {
10571
10571
  if (!this.processedNodeManager.inOtherBuffer(t, this) && !(this.addedSet.has(t) || this.movedSet.has(t))) {
10572
10572
  if (this.mirror.hasNode(t)) {
10573
10573
  if (ps(t, this.mirror, this.slimDOMOptions))
@@ -10577,7 +10577,7 @@ class Ky {
10577
10577
  i && this.mirror.hasNode(i) && (n = this.mirror.getId(i)), n && n !== -1 && (this.movedMap[al(this.mirror.getId(t), n)] = !0);
10578
10578
  } else
10579
10579
  this.addedSet.add(t), this.droppedSet.delete(t);
10580
- pe(t, this.blockClass, this.blockSelector, !1) || (H.childNodes(t).forEach((n) => this.genAdds(n)), lr(t) && H.childNodes(H.shadowRoot(t)).forEach((n) => {
10580
+ pe(t, this.blockClass, this.blockSelector, !1) || (z.childNodes(t).forEach((n) => this.genAdds(n)), lr(t) && z.childNodes(z.shadowRoot(t)).forEach((n) => {
10581
10581
  this.processedNodeManager.add(n, this), this.genAdds(n, t);
10582
10582
  }));
10583
10583
  }
@@ -10632,34 +10632,34 @@ class Ky {
10632
10632
  }
10633
10633
  }
10634
10634
  function ar(e, t) {
10635
- e.delete(t), H.childNodes(t).forEach((i) => ar(e, i));
10635
+ e.delete(t), z.childNodes(t).forEach((i) => ar(e, i));
10636
10636
  }
10637
- function Oy(e, t) {
10637
+ function My(e, t) {
10638
10638
  const i = [e];
10639
10639
  for (; i.length; ) {
10640
10640
  const n = i.pop();
10641
- t.has(n) || (t.add(n), H.childNodes(n).forEach((s) => i.push(s)));
10641
+ t.has(n) || (t.add(n), z.childNodes(n).forEach((s) => i.push(s)));
10642
10642
  }
10643
10643
  }
10644
10644
  function cl(e, t, i) {
10645
- return e.size === 0 ? !1 : Ey(e, t);
10645
+ return e.size === 0 ? !1 : Oy(e, t);
10646
10646
  }
10647
- function Ey(e, t, i) {
10648
- const n = H.parentNode(t);
10647
+ function Oy(e, t, i) {
10648
+ const n = z.parentNode(t);
10649
10649
  return n ? e.has(n) : !1;
10650
10650
  }
10651
10651
  function ul(e, t) {
10652
10652
  return e.size === 0 ? !1 : jc(e, t);
10653
10653
  }
10654
10654
  function jc(e, t) {
10655
- const i = H.parentNode(t);
10655
+ const i = z.parentNode(t);
10656
10656
  return i ? e.has(i) ? !0 : jc(e, i) : !1;
10657
10657
  }
10658
10658
  let ei;
10659
- function My(e) {
10659
+ function Ey(e) {
10660
10660
  ei = e;
10661
10661
  }
10662
- function zy() {
10662
+ function Hy() {
10663
10663
  ei = void 0;
10664
10664
  }
10665
10665
  const B = (e) => ei ? (...t) => {
@@ -10686,7 +10686,7 @@ function Si(e) {
10686
10686
  function Qc(e, t) {
10687
10687
  const i = new Ky();
10688
10688
  rt.push(i), i.init(e);
10689
- const n = new (Fc())(
10689
+ const n = new (Uc())(
10690
10690
  B(i.processMutations.bind(i))
10691
10691
  );
10692
10692
  return n.observe(t, {
@@ -10698,7 +10698,7 @@ function Qc(e, t) {
10698
10698
  subtree: !0
10699
10699
  }), n;
10700
10700
  }
10701
- function Hy({
10701
+ function zy({
10702
10702
  mousemoveCb: e,
10703
10703
  sampling: t,
10704
10704
  doc: i,
@@ -10831,7 +10831,7 @@ function Ac({
10831
10831
  return;
10832
10832
  const c = i.getId(a);
10833
10833
  if (a === t && t.defaultView) {
10834
- const u = Uc(t.defaultView);
10834
+ const u = Fc(t.defaultView);
10835
10835
  e({
10836
10836
  id: c,
10837
10837
  x: u.left,
@@ -10854,7 +10854,7 @@ function By({ viewportResizeCb: e }, { win: t }) {
10854
10854
  const s = B(
10855
10855
  bi(
10856
10856
  B(() => {
10857
- const r = Kc(), l = Oc();
10857
+ const r = Kc(), l = Mc();
10858
10858
  (i !== r || n !== l) && (e({
10859
10859
  width: Number(l),
10860
10860
  height: Number(r)
@@ -10881,8 +10881,8 @@ function jy({
10881
10881
  }) {
10882
10882
  function h(I) {
10883
10883
  let V = Si(I);
10884
- const W = I.isTrusted, X = V && V.tagName;
10885
- if (V && X === "OPTION" && (V = H.parentElement(V)), !V || !X || Dy.indexOf(X) < 0 || pe(V, n, s, !0) || V.classList.contains(r) || l && V.matches(l))
10884
+ const C = I.isTrusted, X = V && V.tagName;
10885
+ if (V && X === "OPTION" && (V = z.parentElement(V)), !V || !X || Dy.indexOf(X) < 0 || pe(V, n, s, !0) || V.classList.contains(r) || l && V.matches(l))
10886
10886
  return;
10887
10887
  let G = V.value, k = !1;
10888
10888
  const v = yn(V) || "", w = V.getAttribute("data-hl-record");
@@ -10901,7 +10901,7 @@ function jy({
10901
10901
  maskInputFn: a
10902
10902
  })), p(
10903
10903
  V,
10904
- u ? { text: G, isChecked: k, userTriggered: W } : { text: G, isChecked: k }
10904
+ u ? { text: G, isChecked: k, userTriggered: C } : { text: G, isChecked: k }
10905
10905
  );
10906
10906
  const g = V.name;
10907
10907
  v === "radio" && g && k && t.querySelectorAll(`input[type="radio"][name="${g}"]`).forEach((R) => {
@@ -10915,8 +10915,8 @@ function jy({
10915
10915
  });
10916
10916
  }
10917
10917
  function p(I, V) {
10918
- const W = dl.get(I);
10919
- if (!W || W.text !== V.text || W.isChecked !== V.isChecked) {
10918
+ const C = dl.get(I);
10919
+ if (!C || C.text !== V.text || C.isChecked !== V.isChecked) {
10920
10920
  dl.set(I, V);
10921
10921
  const X = i.getId(I);
10922
10922
  B(e)(Se(Y({}, V), {
@@ -11134,7 +11134,7 @@ function _c({
11134
11134
  }, i) {
11135
11135
  var n, s, r;
11136
11136
  let l = null;
11137
- i.nodeName === "#document" ? l = e.getId(i) : l = e.getId(H.host(i));
11137
+ i.nodeName === "#document" ? l = e.getId(i) : l = e.getId(z.host(i));
11138
11138
  const o = i.nodeName === "#document" ? (n = i.defaultView) == null ? void 0 : n.Document : (r = (s = i.ownerDocument) == null ? void 0 : s.defaultView) == null ? void 0 : r.ShadowRoot, a = o != null && o.prototype ? Object.getOwnPropertyDescriptor(
11139
11139
  o?.prototype,
11140
11140
  "adoptedStyleSheets"
@@ -11401,7 +11401,7 @@ function ig(e, t = {}) {
11401
11401
  tg(e, t);
11402
11402
  let n;
11403
11403
  e.recordDOM && (n = Qc(e, e.doc));
11404
- const s = Hy(e), r = Py(e), l = Ac(e), o = By(e, {
11404
+ const s = zy(e), r = Py(e), l = Ac(e), o = By(e, {
11405
11405
  win: i
11406
11406
  }), a = jy(e), c = _y(e);
11407
11407
  let u = () => {
@@ -11431,7 +11431,7 @@ function Di(e) {
11431
11431
  }
11432
11432
  class hl {
11433
11433
  constructor(t) {
11434
- C(this, "iframeIdToRemoteIdMap", /* @__PURE__ */ new WeakMap()), C(this, "iframeRemoteIdToIdMap", /* @__PURE__ */ new WeakMap()), this.generateIdFn = t;
11434
+ W(this, "iframeIdToRemoteIdMap", /* @__PURE__ */ new WeakMap()), W(this, "iframeRemoteIdToIdMap", /* @__PURE__ */ new WeakMap()), this.generateIdFn = t;
11435
11435
  }
11436
11436
  getId(t, i, n, s) {
11437
11437
  const r = n || this.getIdToRemoteIdMap(t), l = s || this.getRemoteIdToIdMap(t);
@@ -11470,7 +11470,7 @@ class hl {
11470
11470
  }
11471
11471
  class ng {
11472
11472
  constructor(t) {
11473
- C(this, "iframes", /* @__PURE__ */ new WeakMap()), C(this, "crossOriginIframeMap", /* @__PURE__ */ new WeakMap()), C(this, "crossOriginIframeMirror", new hl(ha)), C(this, "crossOriginIframeStyleMirror"), C(this, "crossOriginIframeRootIdMap", /* @__PURE__ */ new WeakMap()), C(this, "mirror"), C(this, "mutationCb"), C(this, "wrappedEmit"), C(this, "loadListener"), C(this, "stylesheetManager"), C(this, "recordCrossOriginIframes"), this.mutationCb = t.mutationCb, this.wrappedEmit = t.wrappedEmit, this.stylesheetManager = t.stylesheetManager, this.recordCrossOriginIframes = t.recordCrossOriginIframes, this.crossOriginIframeStyleMirror = new hl(
11473
+ W(this, "iframes", /* @__PURE__ */ new WeakMap()), W(this, "crossOriginIframeMap", /* @__PURE__ */ new WeakMap()), W(this, "crossOriginIframeMirror", new hl(ha)), W(this, "crossOriginIframeStyleMirror"), W(this, "crossOriginIframeRootIdMap", /* @__PURE__ */ new WeakMap()), W(this, "mirror"), W(this, "mutationCb"), W(this, "wrappedEmit"), W(this, "loadListener"), W(this, "stylesheetManager"), W(this, "recordCrossOriginIframes"), this.mutationCb = t.mutationCb, this.wrappedEmit = t.wrappedEmit, this.stylesheetManager = t.stylesheetManager, this.recordCrossOriginIframes = t.recordCrossOriginIframes, this.crossOriginIframeStyleMirror = new hl(
11474
11474
  this.stylesheetManager.styleMirror.generateId.bind(
11475
11475
  this.stylesheetManager.styleMirror
11476
11476
  )
@@ -11635,7 +11635,7 @@ class ng {
11635
11635
  }
11636
11636
  class sg {
11637
11637
  constructor(t) {
11638
- C(this, "shadowDoms", /* @__PURE__ */ new WeakSet()), C(this, "mutationCb"), C(this, "scrollCb"), C(this, "bypassOptions"), C(this, "mirror"), C(this, "restoreHandlers", []), this.mutationCb = t.mutationCb, this.scrollCb = t.scrollCb, this.bypassOptions = t.bypassOptions, this.mirror = t.mirror, this.init();
11638
+ W(this, "shadowDoms", /* @__PURE__ */ new WeakSet()), W(this, "mutationCb"), W(this, "scrollCb"), W(this, "bypassOptions"), W(this, "mirror"), W(this, "restoreHandlers", []), this.mutationCb = t.mutationCb, this.scrollCb = t.scrollCb, this.bypassOptions = t.bypassOptions, this.mirror = t.mirror, this.init();
11639
11639
  }
11640
11640
  init() {
11641
11641
  this.reset(), this.patchAttachShadow(Element, document);
@@ -11663,7 +11663,7 @@ class sg {
11663
11663
  ), setTimeout(() => {
11664
11664
  t.adoptedStyleSheets && t.adoptedStyleSheets.length > 0 && this.bypassOptions.stylesheetManager.adoptStyleSheets(
11665
11665
  t.adoptedStyleSheets,
11666
- this.mirror.getId(H.host(t))
11666
+ this.mirror.getId(z.host(t))
11667
11667
  ), this.restoreHandlers.push(
11668
11668
  _c(
11669
11669
  {
@@ -11695,7 +11695,7 @@ class sg {
11695
11695
  "attachShadow",
11696
11696
  function(s) {
11697
11697
  return function(r) {
11698
- const l = s.call(this, r), o = H.shadowRoot(this);
11698
+ const l = s.call(this, r), o = z.shadowRoot(this);
11699
11699
  return o && Bc(this) && n.addShadowRoot(o, i), l;
11700
11700
  };
11701
11701
  }
@@ -11992,7 +11992,7 @@ function hg(e) {
11992
11992
  }
11993
11993
  class pg {
11994
11994
  constructor(t) {
11995
- C(this, "pendingCanvasMutations", /* @__PURE__ */ new Map()), C(this, "rafStamps", { latestId: 0, invokeId: null }), C(this, "mirror"), C(this, "logger"), C(this, "worker"), C(this, "snapshotInProgressMap", /* @__PURE__ */ new Map()), C(this, "lastSnapshotTime", /* @__PURE__ */ new Map()), C(this, "options"), C(this, "mutationCb"), C(this, "resetObservers"), C(this, "frozen", !1), C(this, "locked", !1), C(this, "processMutation", (h, p) => {
11995
+ W(this, "pendingCanvasMutations", /* @__PURE__ */ new Map()), W(this, "rafStamps", { latestId: 0, invokeId: null }), W(this, "mirror"), W(this, "logger"), W(this, "worker"), W(this, "snapshotInProgressMap", /* @__PURE__ */ new Map()), W(this, "lastSnapshotTime", /* @__PURE__ */ new Map()), W(this, "options"), W(this, "mutationCb"), W(this, "resetObservers"), W(this, "frozen", !1), W(this, "locked", !1), W(this, "processMutation", (h, p) => {
11996
11996
  (this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId || !this.rafStamps.invokeId) && (this.rafStamps.invokeId = this.rafStamps.latestId), this.pendingCanvasMutations.has(h) || this.pendingCanvasMutations.set(h, []), this.pendingCanvasMutations.get(h).push(p);
11997
11997
  });
11998
11998
  const {
@@ -12016,7 +12016,7 @@ class pg {
12016
12016
  });
12017
12017
  return;
12018
12018
  }
12019
- const { base64: m, type: b, dx: d, dy: S, dw: I, dh: V } = h.data, W = {
12019
+ const { base64: m, type: b, dx: d, dy: S, dw: I, dh: V } = h.data, C = {
12020
12020
  id: p,
12021
12021
  type: Lt["2D"],
12022
12022
  commands: [
@@ -12047,7 +12047,7 @@ class pg {
12047
12047
  }
12048
12048
  ]
12049
12049
  };
12050
- this.debug(null, "canvas worker recording mutation", W), this.mutationCb(W);
12050
+ this.debug(null, "canvas worker recording mutation", C), this.mutationCb(C);
12051
12051
  }, this.options = t, l && i === "all" ? (this.debug(null, "initializing canvas mutation observer", { sampling: i }), this.initCanvasMutationObserver(n, s, r)) : l && typeof i == "number" && (this.debug(null, "initializing canvas fps observer", { sampling: i }), this.initCanvasFPSObserver(
12052
12052
  o,
12053
12053
  a,
@@ -12159,50 +12159,50 @@ class pg {
12159
12159
  !0
12160
12160
  ), h = 1e3 / n;
12161
12161
  let p = 0, m;
12162
- const b = /* @__PURE__ */ new Map(), d = (W, X) => {
12162
+ const b = /* @__PURE__ */ new Map(), d = (C, X) => {
12163
12163
  const G = [];
12164
- W.querySelectorAll(X).forEach((w) => G.push(w));
12165
- const k = document.createNodeIterator(W, Node.ELEMENT_NODE);
12164
+ C.querySelectorAll(X).forEach((w) => G.push(w));
12165
+ const k = document.createNodeIterator(C, Node.ELEMENT_NODE);
12166
12166
  let v;
12167
12167
  for (; v = k.nextNode(); )
12168
12168
  v != null && v.shadowRoot && G.push(...d(v.shadowRoot, X));
12169
12169
  return G;
12170
- }, S = (W) => {
12170
+ }, S = (C) => {
12171
12171
  const X = [];
12172
12172
  return d(s.document, "canvas").forEach((G) => {
12173
12173
  if (!pe(G, r, l, !0)) {
12174
12174
  this.debug(G, "discovered canvas"), X.push(G);
12175
12175
  const k = this.mirror.getId(G);
12176
- b.has(k) || b.set(k, W);
12176
+ b.has(k) || b.set(k, C);
12177
12177
  }
12178
12178
  }), X;
12179
- }, I = (W) => {
12179
+ }, I = (C) => {
12180
12180
  const X = [];
12181
12181
  return (t || i) && d(s.document, "video").forEach((G) => {
12182
12182
  if (!(!i && G.src !== "" && G.src.indexOf("blob:") === -1) && !(!t && (G.src === "" || G.src.indexOf("blob:") !== -1)) && !pe(G, r, l, !0)) {
12183
12183
  X.push(G);
12184
12184
  const k = this.mirror.getId(G);
12185
- b.has(k) || b.set(k, W);
12185
+ b.has(k) || b.set(k, C);
12186
12186
  }
12187
12187
  }), X;
12188
- }, V = (W) => fe(this, null, function* () {
12189
- if (p && W - p < h) {
12188
+ }, V = (C) => fe(this, null, function* () {
12189
+ if (p && C - p < h) {
12190
12190
  m = requestAnimationFrame(V);
12191
12191
  return;
12192
12192
  }
12193
- p = W;
12193
+ p = C;
12194
12194
  const X = (k) => {
12195
- const v = this.mirror.getId(k), w = b.get(v), g = !o.initialSnapshotDelay || W - w > o.initialSnapshotDelay;
12195
+ const v = this.mirror.getId(k), w = b.get(v), g = !o.initialSnapshotDelay || C - w > o.initialSnapshotDelay;
12196
12196
  return this.debug(k, {
12197
12197
  delay: o.initialSnapshotDelay,
12198
- delta: W - w,
12198
+ delta: C - w,
12199
12199
  hadLoadingTime: g
12200
12200
  }), g;
12201
12201
  }, G = [];
12202
12202
  G.push(
12203
- ...S(W).filter(X).map((k) => this.snapshot(k))
12203
+ ...S(C).filter(X).map((k) => this.snapshot(k))
12204
12204
  ), G.push(
12205
- ...I(W).filter(X).map((k) => fe(this, null, function* () {
12205
+ ...I(C).filter(X).map((k) => fe(this, null, function* () {
12206
12206
  this.debug(k, "starting video snapshotting");
12207
12207
  const v = this.mirror.getId(k);
12208
12208
  if (this.snapshotInProgressMap.get(v)) {
@@ -12218,8 +12218,8 @@ class pg {
12218
12218
  const { width: w, height: g } = k.getBoundingClientRect(), { actualWidth: R, actualHeight: J } = {
12219
12219
  actualWidth: k.videoWidth,
12220
12220
  actualHeight: k.videoHeight
12221
- }, M = Math.max(R, J);
12222
- if (M === 0) {
12221
+ }, E = Math.max(R, J);
12222
+ if (E === 0) {
12223
12223
  this.debug(k, "not yet ready", {
12224
12224
  width: k.width,
12225
12225
  height: k.height,
@@ -12231,22 +12231,22 @@ class pg {
12231
12231
  return;
12232
12232
  }
12233
12233
  let $ = a || 1;
12234
- c && ($ = Math.min($, c / M));
12234
+ c && ($ = Math.min($, c / E));
12235
12235
  const f = R * $, y = J * $, T = yield createImageBitmap(k, {
12236
12236
  resizeWidth: f,
12237
12237
  resizeHeight: y
12238
- }), F = Math.max(w, g) / M, U = R * F, N = J * F, A = (w - U) / 2, D = (g - N) / 2;
12238
+ }), U = Math.max(w, g) / E, F = R * U, N = J * U, A = (w - F) / 2, D = (g - N) / 2;
12239
12239
  this.debug(k, "created image bitmap", {
12240
12240
  actualWidth: R,
12241
12241
  actualHeight: J,
12242
12242
  boxWidth: w,
12243
12243
  boxHeight: g,
12244
- outputWidth: U,
12244
+ outputWidth: F,
12245
12245
  outputHeight: N,
12246
12246
  resizeWidth: f,
12247
12247
  resizeHeight: y,
12248
12248
  scale: $,
12249
- outputScale: F,
12249
+ outputScale: U,
12250
12250
  offsetX: A,
12251
12251
  offsetY: D
12252
12252
  }), this.worker.postMessage(
@@ -12257,7 +12257,7 @@ class pg {
12257
12257
  height: y,
12258
12258
  dx: A,
12259
12259
  dy: D,
12260
- dw: U,
12260
+ dw: F,
12261
12261
  dh: N,
12262
12262
  dataURLOptions: o.dataURLOptions,
12263
12263
  logDebug: !!this.logger
@@ -12320,13 +12320,13 @@ class pg {
12320
12320
  return;
12321
12321
  const n = this.pendingCanvasMutations.get(t);
12322
12322
  if (!n || i === -1) return;
12323
- const s = n.map((l) => Wt(l, ["type"])), { type: r } = n[0];
12323
+ const s = n.map((l) => Ct(l, ["type"])), { type: r } = n[0];
12324
12324
  this.mutationCb({ id: i, type: r, commands: s }), this.pendingCanvasMutations.delete(t);
12325
12325
  }
12326
12326
  }
12327
12327
  class mg {
12328
12328
  constructor(t) {
12329
- C(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet()), C(this, "mutationCb"), C(this, "adoptedStyleSheetCb"), C(this, "styleMirror", new Jy()), this.mutationCb = t.mutationCb, this.adoptedStyleSheetCb = t.adoptedStyleSheetCb;
12329
+ W(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet()), W(this, "mutationCb"), W(this, "adoptedStyleSheetCb"), W(this, "styleMirror", new Jy()), this.mutationCb = t.mutationCb, this.adoptedStyleSheetCb = t.adoptedStyleSheetCb;
12330
12330
  }
12331
12331
  attachLinkElement(t, i) {
12332
12332
  "_cssText" in i.attributes && this.mutationCb({
@@ -12371,7 +12371,7 @@ class mg {
12371
12371
  }
12372
12372
  class bg {
12373
12373
  constructor() {
12374
- C(this, "nodeMap", /* @__PURE__ */ new WeakMap()), C(this, "active", !1);
12374
+ W(this, "nodeMap", /* @__PURE__ */ new WeakMap()), W(this, "active", !1);
12375
12375
  }
12376
12376
  inOtherBuffer(t, i) {
12377
12377
  const n = this.nodeMap.get(t);
@@ -12408,7 +12408,7 @@ function Be(e = {}) {
12408
12408
  maskTextClass: S = "highlight-mask",
12409
12409
  maskTextSelector: I = null,
12410
12410
  inlineStylesheet: V = !0,
12411
- maskAllInputs: W,
12411
+ maskAllInputs: C,
12412
12412
  maskInputOptions: X,
12413
12413
  slimDOMOptions: G,
12414
12414
  maskInputFn: k,
@@ -12417,37 +12417,37 @@ function Be(e = {}) {
12417
12417
  packFn: g,
12418
12418
  sampling: R = {},
12419
12419
  mousemoveWait: J,
12420
- recordDOM: M = !0,
12420
+ recordDOM: E = !0,
12421
12421
  recordCanvas: $ = !1,
12422
12422
  recordCrossOriginIframes: f = !1,
12423
12423
  recordAfter: y = e.recordAfter === "DOMContentLoaded" ? e.recordAfter : "load",
12424
12424
  userTriggeredOnInput: T = !1,
12425
- collectFonts: F = !1,
12426
- inlineImages: U = !1,
12425
+ collectFonts: U = !1,
12426
+ inlineImages: F = !1,
12427
12427
  inlineVideos: N = !1,
12428
12428
  plugins: A,
12429
12429
  keepIframeSrcFn: D = () => !1,
12430
12430
  privacySetting: de = "default",
12431
12431
  ignoreCSSAttributes: me = /* @__PURE__ */ new Set([]),
12432
- errorHandler: We,
12432
+ errorHandler: Ce,
12433
12433
  logger: ce
12434
12434
  } = e, ve = Y(Y({}, e.dataURLOptions), (i = (t = e.sampling) == null ? void 0 : t.canvas) == null ? void 0 : i.dataURLOptions);
12435
- My(We);
12435
+ Ey(Ce);
12436
12436
  const tt = f ? window.parent === window : !0;
12437
- let Ke = !1;
12437
+ let Me = !1;
12438
12438
  if (!tt)
12439
12439
  try {
12440
- window.parent.document && (Ke = !1);
12440
+ window.parent.document && (Me = !1);
12441
12441
  } catch {
12442
- Ke = !0;
12442
+ Me = !0;
12443
12443
  }
12444
12444
  if (tt && !c)
12445
12445
  throw new Error("emit function is required");
12446
- if (!tt && !Ke)
12446
+ if (!tt && !Me)
12447
12447
  return () => {
12448
12448
  };
12449
12449
  J !== void 0 && R.mousemove === void 0 && (R.mousemove = J), Te.reset();
12450
- const Yt = W === !0 ? {
12450
+ const Yt = C === !0 ? {
12451
12451
  color: !0,
12452
12452
  date: !0,
12453
12453
  "datetime-local": !0,
@@ -12480,19 +12480,19 @@ function Be(e = {}) {
12480
12480
  headTitleMutations: G === "all"
12481
12481
  } : G || {};
12482
12482
  Ly();
12483
- let Ft, pt = 0;
12483
+ let Ut, pt = 0;
12484
12484
  const mt = (_) => {
12485
12485
  for (const we of A || [])
12486
12486
  we.eventProcessor && (_ = we.eventProcessor(_));
12487
12487
  return g && // Disable packing events which will be emitted to parent frames.
12488
- !Ke && (_ = g(_)), _;
12488
+ !Me && (_ = g(_)), _;
12489
12489
  };
12490
12490
  oe = (_, we) => {
12491
12491
  var se;
12492
12492
  const re = _;
12493
12493
  if (re.timestamp = vn(), (se = rt[0]) != null && se.isFrozen() && re.type !== j.FullSnapshot && !(re.type === j.IncrementalSnapshot && re.data.source === P.Mutation) && rt.forEach((Je) => Je.unfreeze()), tt)
12494
12494
  c?.(mt(re), we);
12495
- else if (Ke) {
12495
+ else if (Me) {
12496
12496
  const Je = {
12497
12497
  type: "rrweb",
12498
12498
  event: mt(re),
@@ -12502,12 +12502,12 @@ function Be(e = {}) {
12502
12502
  window.parent.postMessage(Je, "*");
12503
12503
  }
12504
12504
  if (re.type === j.FullSnapshot)
12505
- Ft = re, pt = 0;
12505
+ Ut = re, pt = 0;
12506
12506
  else if (re.type === j.IncrementalSnapshot) {
12507
12507
  if (re.data.source === P.Mutation && re.data.isAttachIframe)
12508
12508
  return;
12509
12509
  pt++;
12510
- const Je = h && pt >= h, te = u && re.timestamp - Ft.timestamp > u;
12510
+ const Je = h && pt >= h, te = u && re.timestamp - Ut.timestamp > u;
12511
12511
  (Je || te) && on(!0);
12512
12512
  }
12513
12513
  };
@@ -12518,7 +12518,7 @@ function Be(e = {}) {
12518
12518
  source: P.Mutation
12519
12519
  }, _)
12520
12520
  });
12521
- }, Hr = (_) => oe({
12521
+ }, zr = (_) => oe({
12522
12522
  type: j.IncrementalSnapshot,
12523
12523
  data: Y({
12524
12524
  source: P.Scroll
@@ -12552,7 +12552,7 @@ function Be(e = {}) {
12552
12552
  const Dn = new bg();
12553
12553
  ti = new pg({
12554
12554
  recordCanvas: $,
12555
- recordLocalVideos: U,
12555
+ recordLocalVideos: F,
12556
12556
  recordRemoteVideos: N,
12557
12557
  mutationCb: Pr,
12558
12558
  win: window,
@@ -12570,7 +12570,7 @@ function Be(e = {}) {
12570
12570
  });
12571
12571
  const Gi = new sg({
12572
12572
  mutationCb: Qe,
12573
- scrollCb: Hr,
12573
+ scrollCb: zr,
12574
12574
  bypassOptions: {
12575
12575
  blockClass: p,
12576
12576
  blockSelector: m,
@@ -12582,7 +12582,7 @@ function Be(e = {}) {
12582
12582
  maskTextFn: v,
12583
12583
  maskInputFn: k,
12584
12584
  recordCanvas: $,
12585
- inlineImages: U,
12585
+ inlineImages: F,
12586
12586
  inlineVideos: N,
12587
12587
  privacySetting: de,
12588
12588
  sampling: R,
@@ -12596,14 +12596,14 @@ function Be(e = {}) {
12596
12596
  mirror: Te
12597
12597
  });
12598
12598
  on = (_ = !1) => {
12599
- if (!M)
12599
+ if (!E)
12600
12600
  return;
12601
12601
  oe(
12602
12602
  {
12603
12603
  type: j.Meta,
12604
12604
  data: {
12605
12605
  href: window.location.href,
12606
- width: Oc(),
12606
+ width: Mc(),
12607
12607
  height: Kc()
12608
12608
  }
12609
12609
  },
@@ -12622,11 +12622,11 @@ function Be(e = {}) {
12622
12622
  slimDOM: ht,
12623
12623
  dataURLOptions: ve,
12624
12624
  recordCanvas: $,
12625
- inlineImages: U,
12625
+ inlineImages: F,
12626
12626
  inlineVideos: N,
12627
12627
  privacySetting: de,
12628
12628
  onSerialize: (se) => {
12629
- zc(se, Te) && nt.addIframe(se), Hc(se, Te) && it.trackLinkElement(se), lr(se) && Gi.addShadowRoot(H.shadowRoot(se), document);
12629
+ Hc(se, Te) && nt.addIframe(se), zc(se, Te) && it.trackLinkElement(se), lr(se) && Gi.addShadowRoot(z.shadowRoot(se), document);
12630
12630
  },
12631
12631
  onIframeLoad: (se, re) => {
12632
12632
  nt.attachIframe(se, re), Gi.observeAttachShadow(se);
@@ -12643,7 +12643,7 @@ function Be(e = {}) {
12643
12643
  type: j.FullSnapshot,
12644
12644
  data: {
12645
12645
  node: we,
12646
- initialOffset: Uc(window)
12646
+ initialOffset: Fc(window)
12647
12647
  }
12648
12648
  },
12649
12649
  _
@@ -12671,7 +12671,7 @@ function Be(e = {}) {
12671
12671
  source: P.MouseInteraction
12672
12672
  }, te)
12673
12673
  }),
12674
- scrollCb: Hr,
12674
+ scrollCb: zr,
12675
12675
  viewportResizeCb: (te) => oe({
12676
12676
  type: j.IncrementalSnapshot,
12677
12677
  data: Y({
@@ -12733,12 +12733,12 @@ function Be(e = {}) {
12733
12733
  maskInputOptions: Yt,
12734
12734
  inlineStylesheet: V,
12735
12735
  sampling: R,
12736
- recordDOM: M,
12736
+ recordDOM: E,
12737
12737
  recordCanvas: $,
12738
- inlineImages: U,
12738
+ inlineImages: F,
12739
12739
  inlineVideos: N,
12740
12740
  userTriggeredOnInput: T,
12741
- collectFonts: F,
12741
+ collectFonts: U,
12742
12742
  doc: re,
12743
12743
  maskInputFn: k,
12744
12744
  maskTextFn: v,
@@ -12798,7 +12798,7 @@ function Be(e = {}) {
12798
12798
  window
12799
12799
  )
12800
12800
  )), () => {
12801
- _.forEach((re) => re()), Dn.destroy(), xn = !1, zy();
12801
+ _.forEach((re) => re()), Dn.destroy(), xn = !1, Hy();
12802
12802
  };
12803
12803
  } catch (_) {
12804
12804
  console.warn(_);
@@ -12978,7 +12978,7 @@ const { addCustomEvent: gl } = Be, fg = (e) => {
12978
12978
  const s = !1, r = !0;
12979
12979
  for (let l = 0; l < i.length; l++) {
12980
12980
  let o = i[l].split("+");
12981
- n = [], o.length > 1 && (n = Rg(iu, o)), o = o[o.length - 1], o = o === "*" ? "*" : Wg(o), o in Ue || (Ue[o] = []), Ue[o].push({
12981
+ n = [], o.length > 1 && (n = Rg(iu, o)), o = o[o.length - 1], o = o === "*" ? "*" : Cg(o), o in Ke || (Ke[o] = []), Ke[o].push({
12982
12982
  mods: n,
12983
12983
  shortcut: i[l],
12984
12984
  key: i[l],
@@ -13002,7 +13002,7 @@ function Xg(e) {
13002
13002
  t[i - 1] += ",", t.splice(i, 1), i = t.lastIndexOf("");
13003
13003
  return t;
13004
13004
  }
13005
- const Ue = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1, Cg = {
13005
+ const Ke = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1, Wg = {
13006
13006
  backspace: 8,
13007
13007
  tab: 9,
13008
13008
  clear: 12,
@@ -13082,9 +13082,9 @@ const Ue = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().i
13082
13082
  "⌘": 91,
13083
13083
  cmd: 91,
13084
13084
  command: 91
13085
- }, Wg = (e) => (
13085
+ }, Cg = (e) => (
13086
13086
  // @ts-expect-error
13087
- Cg[e.toLowerCase()] || // @ts-expect-error
13087
+ Wg[e.toLowerCase()] || // @ts-expect-error
13088
13088
  iu[e.toLowerCase()] || e.toUpperCase().charCodeAt(0)
13089
13089
  );
13090
13090
  function Rg(e, t) {
@@ -13110,7 +13110,7 @@ function vg(e, t, i) {
13110
13110
  }
13111
13111
  }
13112
13112
  function wg(e) {
13113
- const t = Ue["*"];
13113
+ const t = Ke["*"];
13114
13114
  let i = e.keyCode || e.which || e.charCode;
13115
13115
  if ((i === 93 || i === 224) && (i = 91), be.indexOf(i) === -1 && i !== 229 && be.push(i), ["ctrlKey", "altKey", "shiftKey", "metaKey"].forEach((n) => {
13116
13116
  const s = Il[n];
@@ -13118,14 +13118,14 @@ function wg(e) {
13118
13118
  }), !(i in ye && (ye[i] = !0, !t))) {
13119
13119
  for (const n in ye)
13120
13120
  Object.prototype.hasOwnProperty.call(ye, n) && (ye[n] = e[Il[n]]);
13121
- if (e.getModifierState && !(e.altKey && !e.ctrlKey) && e.getModifierState("AltGraph") && (be.indexOf(17) === -1 && be.push(17), be.indexOf(18) === -1 && be.push(18), ye[17] = !0, ye[18] = !0), i in Ue) {
13122
- for (let n = 0; n < Ue[i].length; n++)
13121
+ if (e.getModifierState && !(e.altKey && !e.ctrlKey) && e.getModifierState("AltGraph") && (be.indexOf(17) === -1 && be.push(17), be.indexOf(18) === -1 && be.push(18), ye[17] = !0, ye[18] = !0), i in Ke) {
13122
+ for (let n = 0; n < Ke[i].length; n++)
13123
13123
  if (
13124
13124
  // @ts-expect-error
13125
- (e.type === "keydown" && Ue[i][n].keydown || // @ts-expect-error
13126
- e.type === "keyup" && Ue[i][n].keyup) && Ue[i][n].key
13125
+ (e.type === "keydown" && Ke[i][n].keydown || // @ts-expect-error
13126
+ e.type === "keyup" && Ke[i][n].keyup) && Ke[i][n].key
13127
13127
  ) {
13128
- const s = Ue[i][n];
13128
+ const s = Ke[i][n];
13129
13129
  vg(e, s, "all");
13130
13130
  }
13131
13131
  }
@@ -13145,7 +13145,7 @@ const Sl = "iframe parent ready", Gl = "iframe ok", fi = "highlightLogs", xg = (
13145
13145
  `, " ")
13146
13146
  ));
13147
13147
  };
13148
- var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
13148
+ var We = Uint8Array, ke = Uint16Array, Or = Int32Array, Er = new We([
13149
13149
  0,
13150
13150
  0,
13151
13151
  0,
@@ -13180,7 +13180,7 @@ var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
13180
13180
  0,
13181
13181
  /* impossible */
13182
13182
  0
13183
- ]), zr = new Ce([
13183
+ ]), Hr = new We([
13184
13184
  0,
13185
13185
  0,
13186
13186
  0,
@@ -13214,16 +13214,16 @@ var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
13214
13214
  /* unused */
13215
13215
  0,
13216
13216
  0
13217
- ]), Vl = new Ce([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), nu = function(e, t) {
13217
+ ]), Vl = new We([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), nu = function(e, t) {
13218
13218
  for (var i = new ke(31), n = 0; n < 31; ++n)
13219
13219
  i[n] = t += 1 << e[n - 1];
13220
- for (var s = new Er(i[30]), n = 1; n < 30; ++n)
13220
+ for (var s = new Or(i[30]), n = 1; n < 30; ++n)
13221
13221
  for (var r = i[n]; r < i[n + 1]; ++r)
13222
13222
  s[r] = r - i[n] << 5 | n;
13223
13223
  return { b: i, r: s };
13224
- }, su = nu(Mr, 2), Lg = su.b, cr = su.r;
13224
+ }, su = nu(Er, 2), Lg = su.b, cr = su.r;
13225
13225
  Lg[28] = 258, cr[258] = 28;
13226
- var Jg = nu(zr, 0), Xl = Jg.r, ru = new ke(32768);
13226
+ var Jg = nu(Hr, 0), Xl = Jg.r, ru = new ke(32768);
13227
13227
  for (var ne = 0; ne < 32768; ++ne) {
13228
13228
  var Ae = (ne & 43690) >> 1 | (ne & 21845) << 1;
13229
13229
  Ae = (Ae & 52428) >> 2 | (Ae & 13107) << 2, Ae = (Ae & 61680) >> 4 | (Ae & 3855) << 4, ru[ne] = ((Ae & 65280) >> 8 | (Ae & 255) << 8) >> 1;
@@ -13238,7 +13238,7 @@ var ii = function(e, t, i) {
13238
13238
  for (o = new ke(n), s = 0; s < n; ++s)
13239
13239
  e[s] && (o[s] = ru[l[e[s] - 1]++] >> 15 - e[s]);
13240
13240
  return o;
13241
- }, at = new Ce(288);
13241
+ }, at = new We(288);
13242
13242
  for (var ne = 0; ne < 144; ++ne)
13243
13243
  at[ne] = 8;
13244
13244
  for (var ne = 144; ne < 256; ++ne)
@@ -13247,14 +13247,14 @@ for (var ne = 256; ne < 280; ++ne)
13247
13247
  at[ne] = 7;
13248
13248
  for (var ne = 280; ne < 288; ++ne)
13249
13249
  at[ne] = 8;
13250
- var Tn = new Ce(32);
13250
+ var Tn = new We(32);
13251
13251
  for (var ne = 0; ne < 32; ++ne)
13252
13252
  Tn[ne] = 5;
13253
- var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = function(e) {
13253
+ var Yg = /* @__PURE__ */ ii(at, 9), Ug = /* @__PURE__ */ ii(Tn, 5), ou = function(e) {
13254
13254
  return (e + 7) / 8 | 0;
13255
13255
  }, lu = function(e, t, i) {
13256
- return (i == null || i > e.length) && (i = e.length), new Ce(e.subarray(t, i));
13257
- }, Me = function(e, t, i) {
13256
+ return (i == null || i > e.length) && (i = e.length), new We(e.subarray(t, i));
13257
+ }, He = function(e, t, i) {
13258
13258
  i <<= t & 7;
13259
13259
  var n = t / 8 | 0;
13260
13260
  e[n] |= i, e[n + 1] |= i >> 8;
@@ -13269,7 +13269,7 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
13269
13269
  if (!s)
13270
13270
  return { t: cu, l: 0 };
13271
13271
  if (s == 1) {
13272
- var l = new Ce(i[0].s + 1);
13272
+ var l = new We(i[0].s + 1);
13273
13273
  return l[i[0].s] = 1, { t: l, l: 1 };
13274
13274
  }
13275
13275
  i.sort(function(G, k) {
@@ -13293,8 +13293,8 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
13293
13293
  break;
13294
13294
  }
13295
13295
  for (d >>= S; d > 0; ) {
13296
- var W = r[n].s;
13297
- m[W] < t ? d -= 1 << t - m[W]++ - 1 : ++n;
13296
+ var C = r[n].s;
13297
+ m[C] < t ? d -= 1 << t - m[C]++ - 1 : ++n;
13298
13298
  }
13299
13299
  for (; n >= 0 && d; --n) {
13300
13300
  var X = r[n].s;
@@ -13302,10 +13302,10 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
13302
13302
  }
13303
13303
  b = t;
13304
13304
  }
13305
- return { t: new Ce(m), l: b };
13305
+ return { t: new We(m), l: b };
13306
13306
  }, ur = function(e, t, i) {
13307
13307
  return e.s == -1 ? Math.max(ur(e.l, t, i + 1), ur(e.r, t, i + 1)) : t[e.s] = i;
13308
- }, Cl = function(e) {
13308
+ }, Wl = function(e) {
13309
13309
  for (var t = e.length; t && !e[--t]; )
13310
13310
  ;
13311
13311
  for (var i = new ke(++t), n = 0, s = e[0], r = 1, l = function(a) {
@@ -13338,88 +13338,88 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
13338
13338
  for (var r = 0; r < n; ++r)
13339
13339
  e[s + r + 4] = i[r];
13340
13340
  return (s + 4 + n) * 8;
13341
- }, Wl = function(e, t, i, n, s, r, l, o, a, c, u) {
13342
- Me(t, u++, i), ++s[256];
13343
- for (var h = fs(s, 15), p = h.t, m = h.l, b = fs(r, 15), d = b.t, S = b.l, I = Cl(p), V = I.c, W = I.n, X = Cl(d), G = X.c, k = X.n, v = new ke(19), w = 0; w < V.length; ++w)
13341
+ }, Cl = function(e, t, i, n, s, r, l, o, a, c, u) {
13342
+ He(t, u++, i), ++s[256];
13343
+ for (var h = fs(s, 15), p = h.t, m = h.l, b = fs(r, 15), d = b.t, S = b.l, I = Wl(p), V = I.c, C = I.n, X = Wl(d), G = X.c, k = X.n, v = new ke(19), w = 0; w < V.length; ++w)
13344
13344
  ++v[V[w] & 31];
13345
13345
  for (var w = 0; w < G.length; ++w)
13346
13346
  ++v[G[w] & 31];
13347
- for (var g = fs(v, 7), R = g.t, J = g.l, M = 19; M > 4 && !R[Vl[M - 1]]; --M)
13347
+ for (var g = fs(v, 7), R = g.t, J = g.l, E = 19; E > 4 && !R[Vl[E - 1]]; --E)
13348
13348
  ;
13349
- var $ = c + 5 << 3, f = Bt(s, at) + Bt(r, Tn) + l, y = Bt(s, p) + Bt(r, d) + l + 14 + 3 * M + Bt(v, R) + 2 * v[16] + 3 * v[17] + 7 * v[18];
13349
+ var $ = c + 5 << 3, f = Bt(s, at) + Bt(r, Tn) + l, y = Bt(s, p) + Bt(r, d) + l + 14 + 3 * E + Bt(v, R) + 2 * v[16] + 3 * v[17] + 7 * v[18];
13350
13350
  if (a >= 0 && $ <= f && $ <= y)
13351
13351
  return au(t, u, e.subarray(a, a + c));
13352
- var T, F, U, N;
13353
- if (Me(t, u, 1 + (y < f)), u += 2, y < f) {
13354
- T = ii(p, m), F = p, U = ii(d, S), N = d;
13352
+ var T, U, F, N;
13353
+ if (He(t, u, 1 + (y < f)), u += 2, y < f) {
13354
+ T = ii(p, m), U = p, F = ii(d, S), N = d;
13355
13355
  var A = ii(R, J);
13356
- Me(t, u, W - 257), Me(t, u + 5, k - 1), Me(t, u + 10, M - 4), u += 14;
13357
- for (var w = 0; w < M; ++w)
13358
- Me(t, u + 3 * w, R[Vl[w]]);
13359
- u += 3 * M;
13356
+ He(t, u, C - 257), He(t, u + 5, k - 1), He(t, u + 10, E - 4), u += 14;
13357
+ for (var w = 0; w < E; ++w)
13358
+ He(t, u + 3 * w, R[Vl[w]]);
13359
+ u += 3 * E;
13360
13360
  for (var D = [V, G], de = 0; de < 2; ++de)
13361
13361
  for (var me = D[de], w = 0; w < me.length; ++w) {
13362
- var We = me[w] & 31;
13363
- Me(t, u, A[We]), u += R[We], We > 15 && (Me(t, u, me[w] >> 5 & 127), u += me[w] >> 12);
13362
+ var Ce = me[w] & 31;
13363
+ He(t, u, A[Ce]), u += R[Ce], Ce > 15 && (He(t, u, me[w] >> 5 & 127), u += me[w] >> 12);
13364
13364
  }
13365
13365
  } else
13366
- T = Yg, F = at, U = Fg, N = Tn;
13366
+ T = Yg, U = at, F = Ug, N = Tn;
13367
13367
  for (var w = 0; w < o; ++w) {
13368
13368
  var ce = n[w];
13369
13369
  if (ce > 255) {
13370
- var We = ce >> 18 & 31;
13371
- Pt(t, u, T[We + 257]), u += F[We + 257], We > 7 && (Me(t, u, ce >> 23 & 31), u += Mr[We]);
13370
+ var Ce = ce >> 18 & 31;
13371
+ Pt(t, u, T[Ce + 257]), u += U[Ce + 257], Ce > 7 && (He(t, u, ce >> 23 & 31), u += Er[Ce]);
13372
13372
  var ve = ce & 31;
13373
- Pt(t, u, U[ve]), u += N[ve], ve > 3 && (Pt(t, u, ce >> 5 & 8191), u += zr[ve]);
13373
+ Pt(t, u, F[ve]), u += N[ve], ve > 3 && (Pt(t, u, ce >> 5 & 8191), u += Hr[ve]);
13374
13374
  } else
13375
- Pt(t, u, T[ce]), u += F[ce];
13375
+ Pt(t, u, T[ce]), u += U[ce];
13376
13376
  }
13377
- return Pt(t, u, T[256]), u + F[256];
13378
- }, Ug = /* @__PURE__ */ new Er([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), cu = /* @__PURE__ */ new Ce(0), Kg = function(e, t, i, n, s, r) {
13379
- var l = r.z || e.length, o = new Ce(n + l + 5 * (1 + Math.ceil(l / 7e3)) + s), a = o.subarray(n, o.length - s), c = r.l, u = (r.r || 0) & 7;
13377
+ return Pt(t, u, T[256]), u + U[256];
13378
+ }, Fg = /* @__PURE__ */ new Or([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), cu = /* @__PURE__ */ new We(0), Kg = function(e, t, i, n, s, r) {
13379
+ var l = r.z || e.length, o = new We(n + l + 5 * (1 + Math.ceil(l / 7e3)) + s), a = o.subarray(n, o.length - s), c = r.l, u = (r.r || 0) & 7;
13380
13380
  if (t) {
13381
13381
  u && (a[0] = r.r >> 3);
13382
- for (var h = Ug[t - 1], p = h >> 13, m = h & 8191, b = (1 << i) - 1, d = r.p || new ke(32768), S = r.h || new ke(b + 1), I = Math.ceil(i / 3), V = 2 * I, W = function(Qe) {
13382
+ for (var h = Fg[t - 1], p = h >> 13, m = h & 8191, b = (1 << i) - 1, d = r.p || new ke(32768), S = r.h || new ke(b + 1), I = Math.ceil(i / 3), V = 2 * I, C = function(Qe) {
13383
13383
  return (e[Qe] ^ e[Qe + 1] << I ^ e[Qe + 2] << V) & b;
13384
- }, X = new Er(25e3), G = new ke(288), k = new ke(32), v = 0, w = 0, g = r.i || 0, R = 0, J = r.w || 0, M = 0; g + 2 < l; ++g) {
13385
- var $ = W(g), f = g & 32767, y = S[$];
13384
+ }, X = new Or(25e3), G = new ke(288), k = new ke(32), v = 0, w = 0, g = r.i || 0, R = 0, J = r.w || 0, E = 0; g + 2 < l; ++g) {
13385
+ var $ = C(g), f = g & 32767, y = S[$];
13386
13386
  if (d[f] = y, S[$] = f, J <= g) {
13387
13387
  var T = l - g;
13388
13388
  if ((v > 7e3 || R > 24576) && (T > 423 || !c)) {
13389
- u = Wl(e, a, 0, X, G, k, w, R, M, g - M, u), R = v = w = 0, M = g;
13390
- for (var F = 0; F < 286; ++F)
13391
- G[F] = 0;
13392
- for (var F = 0; F < 30; ++F)
13393
- k[F] = 0;
13389
+ u = Cl(e, a, 0, X, G, k, w, R, E, g - E, u), R = v = w = 0, E = g;
13390
+ for (var U = 0; U < 286; ++U)
13391
+ G[U] = 0;
13392
+ for (var U = 0; U < 30; ++U)
13393
+ k[U] = 0;
13394
13394
  }
13395
- var U = 2, N = 0, A = m, D = f - y & 32767;
13396
- if (T > 2 && $ == W(g - D))
13397
- for (var de = Math.min(p, T) - 1, me = Math.min(32767, g), We = Math.min(258, T); D <= me && --A && f != y; ) {
13398
- if (e[g + U] == e[g + U - D]) {
13399
- for (var ce = 0; ce < We && e[g + ce] == e[g + ce - D]; ++ce)
13395
+ var F = 2, N = 0, A = m, D = f - y & 32767;
13396
+ if (T > 2 && $ == C(g - D))
13397
+ for (var de = Math.min(p, T) - 1, me = Math.min(32767, g), Ce = Math.min(258, T); D <= me && --A && f != y; ) {
13398
+ if (e[g + F] == e[g + F - D]) {
13399
+ for (var ce = 0; ce < Ce && e[g + ce] == e[g + ce - D]; ++ce)
13400
13400
  ;
13401
- if (ce > U) {
13402
- if (U = ce, N = D, ce > de)
13401
+ if (ce > F) {
13402
+ if (F = ce, N = D, ce > de)
13403
13403
  break;
13404
- for (var ve = Math.min(D, ce - 2), tt = 0, F = 0; F < ve; ++F) {
13405
- var Ke = g - D + F & 32767, Yt = d[Ke], ht = Ke - Yt & 32767;
13406
- ht > tt && (tt = ht, y = Ke);
13404
+ for (var ve = Math.min(D, ce - 2), tt = 0, U = 0; U < ve; ++U) {
13405
+ var Me = g - D + U & 32767, Yt = d[Me], ht = Me - Yt & 32767;
13406
+ ht > tt && (tt = ht, y = Me);
13407
13407
  }
13408
13408
  }
13409
13409
  }
13410
13410
  f = y, y = d[f], D += f - y & 32767;
13411
13411
  }
13412
13412
  if (N) {
13413
- X[R++] = 268435456 | cr[U] << 18 | Xl[N];
13414
- var Ft = cr[U] & 31, pt = Xl[N] & 31;
13415
- w += Mr[Ft] + zr[pt], ++G[257 + Ft], ++k[pt], J = g + U, ++v;
13413
+ X[R++] = 268435456 | cr[F] << 18 | Xl[N];
13414
+ var Ut = cr[F] & 31, pt = Xl[N] & 31;
13415
+ w += Er[Ut] + Hr[pt], ++G[257 + Ut], ++k[pt], J = g + F, ++v;
13416
13416
  } else
13417
13417
  X[R++] = e[g], ++G[e[g]];
13418
13418
  }
13419
13419
  }
13420
13420
  for (g = Math.max(g, J); g < l; ++g)
13421
13421
  X[R++] = e[g], ++G[e[g]];
13422
- u = Wl(e, a, c, X, G, k, w, R, M, g - M, u), c || (r.r = u & 7 | a[u / 8 | 0] << 3, u -= 7, r.h = S, r.p = d, r.i = g, r.w = J);
13422
+ u = Cl(e, a, c, X, G, k, w, R, E, g - E, u), c || (r.r = u & 7 | a[u / 8 | 0] << 3, u -= 7, r.h = S, r.p = d, r.i = g, r.w = J);
13423
13423
  } else {
13424
13424
  for (var g = r.w || 0; g < l + c; g += 65535) {
13425
13425
  var mt = g + 65535;
@@ -13428,50 +13428,50 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
13428
13428
  r.i = l;
13429
13429
  }
13430
13430
  return lu(o, 0, n + ou(u) + s);
13431
- }, Og = /* @__PURE__ */ function() {
13431
+ }, Mg = /* @__PURE__ */ function() {
13432
13432
  for (var e = new Int32Array(256), t = 0; t < 256; ++t) {
13433
13433
  for (var i = t, n = 9; --n; )
13434
13434
  i = (i & 1 && -306674912) ^ i >>> 1;
13435
13435
  e[t] = i;
13436
13436
  }
13437
13437
  return e;
13438
- }(), Eg = function() {
13438
+ }(), Og = function() {
13439
13439
  var e = -1;
13440
13440
  return {
13441
13441
  p: function(t) {
13442
13442
  for (var i = e, n = 0; n < t.length; ++n)
13443
- i = Og[i & 255 ^ t[n]] ^ i >>> 8;
13443
+ i = Mg[i & 255 ^ t[n]] ^ i >>> 8;
13444
13444
  e = i;
13445
13445
  },
13446
13446
  d: function() {
13447
13447
  return ~e;
13448
13448
  }
13449
13449
  };
13450
- }, Mg = function(e, t, i, n, s) {
13450
+ }, Eg = function(e, t, i, n, s) {
13451
13451
  if (!s && (s = { l: 1 }, t.dictionary)) {
13452
- var r = t.dictionary.subarray(-32768), l = new Ce(r.length + e.length);
13452
+ var r = t.dictionary.subarray(-32768), l = new We(r.length + e.length);
13453
13453
  l.set(r), l.set(e, r.length), e = l, s.w = r.length;
13454
13454
  }
13455
13455
  return Kg(e, t.level == null ? 6 : t.level, t.mem == null ? s.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(e.length))) * 1.5) : 20 : 12 + t.mem, i, n, s);
13456
13456
  }, dr = function(e, t, i) {
13457
13457
  for (; i; ++t)
13458
13458
  e[t] = i, i >>>= 8;
13459
- }, zg = function(e, t) {
13459
+ }, Hg = function(e, t) {
13460
13460
  var i = t.filename;
13461
13461
  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 && dr(e, 4, Math.floor(new Date(t.mtime || Date.now()) / 1e3)), i) {
13462
13462
  e[3] = 8;
13463
13463
  for (var n = 0; n <= i.length; ++n)
13464
13464
  e[n + 10] = i.charCodeAt(n);
13465
13465
  }
13466
- }, Hg = function(e) {
13466
+ }, zg = function(e) {
13467
13467
  return 10 + (e.filename ? e.filename.length + 1 : 0);
13468
13468
  };
13469
13469
  function Pg(e, t) {
13470
13470
  t || (t = {});
13471
- var i = Eg(), n = e.length;
13471
+ var i = Og(), n = e.length;
13472
13472
  i.p(e);
13473
- var s = Mg(e, t, Hg(t), 8), r = s.length;
13474
- return zg(s, t), dr(s, r - 8, i.d()), dr(s, r - 4, n), s;
13473
+ var s = Eg(e, t, zg(t), 8), r = s.length;
13474
+ return Hg(s, t), dr(s, r - 8, i.d()), dr(s, r - 4, n), s;
13475
13475
  }
13476
13476
  var Rl = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), Bg = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder();
13477
13477
  try {
@@ -13482,11 +13482,11 @@ function Dg(e, t) {
13482
13482
  var i;
13483
13483
  if (Rl)
13484
13484
  return Rl.encode(e);
13485
- for (var n = e.length, s = new Ce(e.length + (e.length >> 1)), r = 0, l = function(u) {
13485
+ for (var n = e.length, s = new We(e.length + (e.length >> 1)), r = 0, l = function(u) {
13486
13486
  s[r++] = u;
13487
13487
  }, i = 0; i < n; ++i) {
13488
13488
  if (r + 5 > s.length) {
13489
- var o = new Ce(r + 8 + (n - i << 1));
13489
+ var o = new We(r + 8 + (n - i << 1));
13490
13490
  o.set(s), s = o;
13491
13491
  }
13492
13492
  var a = e.charCodeAt(i);
@@ -13507,7 +13507,7 @@ function jg(e) {
13507
13507
  };
13508
13508
  });
13509
13509
  }
13510
- const uu = "dmFyIFZyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgcXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbm49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgZnQ9KEYsUCxNKT0+UCBpbiBGP1ZyKEYsUCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pOkZbUF09TSxEPShGLFApPT57Zm9yKHZhciBNIGluIFB8fChQPXt9KSl0bi5jYWxsKFAsTSkmJmZ0KEYsTSxQW01dKTtpZigkZSlmb3IodmFyIE0gb2YgJGUoUCkpbm4uY2FsbChQLE0pJiZmdChGLE0sUFtNXSk7cmV0dXJuIEZ9LEJlPShGLFApPT5qcihGLHFyKFApKTt2YXIgdmU9KEYsUCk9Pnt2YXIgTT17fTtmb3IodmFyIFggaW4gRil0bi5jYWxsKEYsWCkmJlAuaW5kZXhPZihYKTwwJiYoTVtYXT1GW1hdKTtpZihGIT1udWxsJiYkZSlmb3IodmFyIFggb2YgJGUoRikpUC5pbmRleE9mKFgpPDAmJm5uLmNhbGwoRixYKSYmKE1bWF09RltYXSk7cmV0dXJuIE19O3ZhciBodD0oRixQLE0pPT5mdChGLHR5cGVvZiBQIT0ic3ltYm9sIj9QKyIiOlAsTSk7dmFyIFE9KEYsUCxNKT0+bmV3IFByb21pc2UoKFgsSWUpPT57dmFyIFVlPXJlPT57dHJ5e29lKE0ubmV4dChyZSkpfWNhdGNoKEVlKXtJZShFZSl9fSxWZT1yZT0+e3RyeXtvZShNLnRocm93KHJlKSl9Y2F0Y2goRWUpe0llKEVlKX19LG9lPXJlPT5yZS5kb25lP1gocmUudmFsdWUpOlByb21pc2UucmVzb2x2ZShyZS52YWx1ZSkudGhlbihVZSxWZSk7b2UoKE09TS5hcHBseShGLFApKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEYoZSx0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJnR5cGVvZiBuIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaSE9PSJkZWZhdWx0IiYmIShpIGluIGUpKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuW2ldfX0pfX0pfSksT2JqZWN0LmZyZWV6ZShlKX1jb25zdCBQPUpTT04sTT1lPT5lLnRvVXBwZXJDYXNlKCksWD1lPT57Y29uc3QgdD17fTtyZXR1cm4gZS5mb3JFYWNoKChuLGkpPT57dFtpXT1ufSksdH0sSWU9KGUsdCxuKT0+ZS5kb2N1bWVudD9lOntkb2N1bWVudDplLHZhcmlhYmxlczp0LHJlcXVlc3RIZWFkZXJzOm4sc2lnbmFsOnZvaWQgMH0sVWU9KGUsdCxuKT0+ZS5xdWVyeT9lOntxdWVyeTplLHZhcmlhYmxlczp0LHJlcXVlc3RIZWFkZXJzOm4sc2lnbmFsOnZvaWQgMH0sVmU9KGUsdCk9PmUuZG9jdW1lbnRzP2U6e2RvY3VtZW50czplLHJlcXVlc3RIZWFkZXJzOnQsc2lnbmFsOnZvaWQgMH07ZnVuY3Rpb24gb2UoZSx0KXtpZighISFlKXRocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiByZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbH1mdW5jdGlvbiBFZShlLHQpe2lmKCEhIWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGludmFyaWFudCB0cmlnZ2VyZWQuIil9Y29uc3Qgcm49L1xyXG58W1xuXHJdL2c7ZnVuY3Rpb24gamUoZSx0KXtsZXQgbj0wLGk9MTtmb3IoY29uc3QgciBvZiBlLmJvZHkubWF0Y2hBbGwocm4pKXtpZih0eXBlb2Ygci5pbmRleD09Im51bWJlciJ8fEVlKCExKSxyLmluZGV4Pj10KWJyZWFrO249ci5pbmRleCtyWzBdLmxlbmd0aCxpKz0xfXJldHVybntsaW5lOmksY29sdW1uOnQrMS1ufX1mdW5jdGlvbiBzbihlKXtyZXR1cm4gZHQoZS5zb3VyY2UsamUoZS5zb3VyY2UsZS5zdGFydCkpfWZ1bmN0aW9uIGR0KGUsdCl7Y29uc3Qgbj1lLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbi0xLGk9IiIucGFkU3RhcnQobikrZS5ib2R5LHI9dC5saW5lLTEscz1lLmxvY2F0aW9uT2Zmc2V0LmxpbmUtMSxvPXQubGluZStzLGM9dC5saW5lPT09MT9uOjAsZj10LmNvbHVtbitjLGQ9YCR7ZS5uYW1lfToke299OiR7Zn0KYCx1PWkuc3BsaXQoL1xyXG58W1xuXHJdL2cpLHk9dVtyXTtpZih5Lmxlbmd0aD4xMjApe2NvbnN0IHY9TWF0aC5mbG9vcihmLzgwKSxiPWYlODAsbT1bXTtmb3IobGV0IE49MDtOPHkubGVuZ3RoO04rPTgwKW0ucHVzaCh5LnNsaWNlKE4sTis4MCkpO3JldHVybiBkK3B0KFtbYCR7b30gfGAsbVswXV0sLi4ubS5zbGljZSgxLHYrMSkubWFwKE49PlsifCIsTl0pLFsifCIsIl4iLnBhZFN0YXJ0KGIpXSxbInwiLG1bdisxXV1dKX1yZXR1cm4gZCtwdChbW2Ake28tMX0gfGAsdVtyLTFdXSxbYCR7b30gfGAseV0sWyJ8IiwiXiIucGFkU3RhcnQoZildLFtgJHtvKzF9IHxgLHVbcisxXV1dKX1mdW5jdGlvbiBwdChlKXtjb25zdCB0PWUuZmlsdGVyKChbaSxyXSk9PnIhPT12b2lkIDApLG49TWF0aC5tYXgoLi4udC5tYXAoKFtpXSk9PmkubGVuZ3RoKSk7cmV0dXJuIHQubWFwKChbaSxyXSk9PmkucGFkU3RhcnQobikrKHI/IiAiK3I6IiIpKS5qb2luKGAKYCl9ZnVuY3Rpb24gb24oZSl7Y29uc3QgdD1lWzBdO3JldHVybiB0PT1udWxsfHwia2luZCJpbiB0fHwibGVuZ3RoImluIHQ/e25vZGVzOnQsc291cmNlOmVbMV0scG9zaXRpb25zOmVbMl0scGF0aDplWzNdLG9yaWdpbmFsRXJyb3I6ZVs0XSxleHRlbnNpb25zOmVbNV19OnR9Y2xhc3MgcWUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LC4uLm4pe3ZhciBpLHIscztjb25zdHtub2RlczpvLHNvdXJjZTpjLHBvc2l0aW9uczpmLHBhdGg6ZCxvcmlnaW5hbEVycm9yOnUsZXh0ZW5zaW9uczp5fT1vbihuKTtzdXBlcih0KSx0aGlzLm5hbWU9IkdyYXBoUUxFcnJvciIsdGhpcy5wYXRoPWQhPW51bGw/ZDp2b2lkIDAsdGhpcy5vcmlnaW5hbEVycm9yPXUhPW51bGw/dTp2b2lkIDAsdGhpcy5ub2Rlcz1tdChBcnJheS5pc0FycmF5KG8pP286bz9bb106dm9pZCAwKTtjb25zdCB2PW10KChpPXRoaXMubm9kZXMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5tYXAobT0+bS5sb2MpLmZpbHRlcihtPT5tIT1udWxsKSk7dGhpcy5zb3VyY2U9YyE9bnVsbD9jOnY9PW51bGx8fChyPXZbMF0pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5zb3VyY2UsdGhpcy5wb3NpdGlvbnM9ZiE9bnVsbD9mOnY9PW51bGw/dm9pZCAwOnYubWFwKG09Pm0uc3RhcnQpLHRoaXMubG9jYXRpb25zPWYmJmM/Zi5tYXAobT0+amUoYyxtKSk6dj09bnVsbD92b2lkIDA6di5tYXAobT0+amUobS5zb3VyY2UsbS5zdGFydCkpO2NvbnN0IGI9cmUodT09bnVsbD92b2lkIDA6dS5leHRlbnNpb25zKT91PT1udWxsP3ZvaWQgMDp1LmV4dGVuc2lvbnM6dm9pZCAwO3RoaXMuZXh0ZW5zaW9ucz0ocz15IT1udWxsP3k6YikhPT1udWxsJiZzIT09dm9pZCAwP3M6T2JqZWN0LmNyZWF0ZShudWxsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHttZXNzYWdlOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwfSxuYW1lOntlbnVtZXJhYmxlOiExfSxub2Rlczp7ZW51bWVyYWJsZTohMX0sc291cmNlOntlbnVtZXJhYmxlOiExfSxwb3NpdGlvbnM6e2VudW1lcmFibGU6ITF9LG9yaWdpbmFsRXJyb3I6e2VudW1lcmFibGU6ITF9fSksdSE9bnVsbCYmdS5zdGFjaz9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTp1LnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOkVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscWUpOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGFjayIse3ZhbHVlOkVycm9yKCkuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iR3JhcGhRTEVycm9yIn10b1N0cmluZygpe2xldCB0PXRoaXMubWVzc2FnZTtpZih0aGlzLm5vZGVzKWZvcihjb25zdCBuIG9mIHRoaXMubm9kZXMpbi5sb2MmJih0Kz1gCgpgK3NuKG4ubG9jKSk7ZWxzZSBpZih0aGlzLnNvdXJjZSYmdGhpcy5sb2NhdGlvbnMpZm9yKGNvbnN0IG4gb2YgdGhpcy5sb2NhdGlvbnMpdCs9YAoKYCtkdCh0aGlzLnNvdXJjZSxuKTtyZXR1cm4gdH10b0pTT04oKXtjb25zdCB0PXttZXNzYWdlOnRoaXMubWVzc2FnZX07cmV0dXJuIHRoaXMubG9jYXRpb25zIT1udWxsJiYodC5sb2NhdGlvbnM9dGhpcy5sb2NhdGlvbnMpLHRoaXMucGF0aCE9bnVsbCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuZXh0ZW5zaW9ucyE9bnVsbCYmT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5sZW5ndGg+MCYmKHQuZXh0ZW5zaW9ucz10aGlzLmV4dGVuc2lvbnMpLHR9fWZ1bmN0aW9uIG10KGUpe3JldHVybiBlPT09dm9pZCAwfHxlLmxlbmd0aD09PTA/dm9pZCAwOmV9ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIG5ldyBxZShgU3ludGF4IEVycm9yOiAke259YCx7c291cmNlOmUscG9zaXRpb25zOlt0XX0pfWNsYXNzIGFue2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnN0YXJ0PXQuc3RhcnQsdGhpcy5lbmQ9bi5lbmQsdGhpcy5zdGFydFRva2VuPXQsdGhpcy5lbmRUb2tlbj1uLHRoaXMuc291cmNlPWl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iTG9jYXRpb24ifXRvSlNPTigpe3JldHVybntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH19fWNsYXNzIHl0e2NvbnN0cnVjdG9yKHQsbixpLHIscyxvKXt0aGlzLmtpbmQ9dCx0aGlzLnN0YXJ0PW4sdGhpcy5lbmQ9aSx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1zLHRoaXMudmFsdWU9byx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbH1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJUb2tlbiJ9dG9KU09OKCl7cmV0dXJue2tpbmQ6dGhpcy5raW5kLHZhbHVlOnRoaXMudmFsdWUsbGluZTp0aGlzLmxpbmUsY29sdW1uOnRoaXMuY29sdW1ufX19Y29uc3QgZ3Q9e05hbWU6W10sRG9jdW1lbnQ6WyJkZWZpbml0aW9ucyJdLE9wZXJhdGlvbkRlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxWYXJpYWJsZURlZmluaXRpb246WyJ2YXJpYWJsZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkaXJlY3RpdmVzIl0sVmFyaWFibGU6WyJuYW1lIl0sU2VsZWN0aW9uU2V0Olsic2VsZWN0aW9ucyJdLEZpZWxkOlsiYWxpYXMiLCJuYW1lIiwiYXJndW1lbnRzIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEFyZ3VtZW50OlsibmFtZSIsInZhbHVlIl0sRnJhZ21lbnRTcHJlYWQ6WyJuYW1lIiwiZGlyZWN0aXZlcyJdLElubGluZUZyYWdtZW50OlsidHlwZUNvbmRpdGlvbiIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxGcmFnbWVudERlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sSW50VmFsdWU6W10sRmxvYXRWYWx1ZTpbXSxTdHJpbmdWYWx1ZTpbXSxCb29sZWFuVmFsdWU6W10sTnVsbFZhbHVlOltdLEVudW1WYWx1ZTpbXSxMaXN0VmFsdWU6WyJ2YWx1ZXMiXSxPYmplY3RWYWx1ZTpbImZpZWxkcyJdLE9iamVjdEZpZWxkOlsibmFtZSIsInZhbHVlIl0sRGlyZWN0aXZlOlsibmFtZSIsImFyZ3VtZW50cyJdLE5hbWVkVHlwZTpbIm5hbWUiXSxMaXN0VHlwZTpbInR5cGUiXSxOb25OdWxsVHlwZTpbInR5cGUiXSxTY2hlbWFEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJkaXJlY3RpdmVzIiwib3BlcmF0aW9uVHlwZXMiXSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjpbInR5cGUiXSxTY2FsYXJUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRmllbGREZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwidHlwZSIsImRpcmVjdGl2ZXMiXSxJbnB1dFZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkaXJlY3RpdmVzIl0sSW50ZXJmYWNlVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sRW51bVZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLERpcmVjdGl2ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJhcmd1bWVudHMiLCJsb2NhdGlvbnMiXSxTY2hlbWFFeHRlbnNpb246WyJkaXJlY3RpdmVzIiwib3BlcmF0aW9uVHlwZXMiXSxTY2FsYXJUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxPYmplY3RUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXX0sY249bmV3IFNldChPYmplY3Qua2V5cyhndCkpO2Z1bmN0aW9uIHZ0KGUpe2NvbnN0IHQ9ZT09bnVsbD92b2lkIDA6ZS5raW5kO3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJmNuLmhhcyh0KX12YXIgZmU7KGZ1bmN0aW9uKGUpe2UuUVVFUlk9InF1ZXJ5IixlLk1VVEFUSU9OPSJtdXRhdGlvbiIsZS5TVUJTQ1JJUFRJT049InN1YnNjcmlwdGlvbiJ9KShmZXx8KGZlPXt9KSk7dmFyIEdlOyhmdW5jdGlvbihlKXtlLlFVRVJZPSJRVUVSWSIsZS5NVVRBVElPTj0iTVVUQVRJT04iLGUuU1VCU0NSSVBUSU9OPSJTVUJTQ1JJUFRJT04iLGUuRklFTEQ9IkZJRUxEIixlLkZSQUdNRU5UX0RFRklOSVRJT049IkZSQUdNRU5UX0RFRklOSVRJT04iLGUuRlJBR01FTlRfU1BSRUFEPSJGUkFHTUVOVF9TUFJFQUQiLGUuSU5MSU5FX0ZSQUdNRU5UPSJJTkxJTkVfRlJBR01FTlQiLGUuVkFSSUFCTEVfREVGSU5JVElPTj0iVkFSSUFCTEVfREVGSU5JVElPTiIsZS5TQ0hFTUE9IlNDSEVNQSIsZS5TQ0FMQVI9IlNDQUxBUiIsZS5PQkpFQ1Q9Ik9CSkVDVCIsZS5GSUVMRF9ERUZJTklUSU9OPSJGSUVMRF9ERUZJTklUSU9OIixlLkFSR1VNRU5UX0RFRklOSVRJT049IkFSR1VNRU5UX0RFRklOSVRJT04iLGUuSU5URVJGQUNFPSJJTlRFUkZBQ0UiLGUuVU5JT049IlVOSU9OIixlLkVOVU09IkVOVU0iLGUuRU5VTV9WQUxVRT0iRU5VTV9WQUxVRSIsZS5JTlBVVF9PQkpFQ1Q9IklOUFVUX09CSkVDVCIsZS5JTlBVVF9GSUVMRF9ERUZJTklUSU9OPSJJTlBVVF9GSUVMRF9ERUZJTklUSU9OIn0pKEdlfHwoR2U9e30pKTt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5OQU1FPSJOYW1lIixlLkRPQ1VNRU5UPSJEb2N1bWVudCIsZS5PUEVSQVRJT05fREVGSU5JVElPTj0iT3BlcmF0aW9uRGVmaW5pdGlvbiIsZS5WQVJJQUJMRV9ERUZJTklUSU9OPSJWYXJpYWJsZURlZmluaXRpb24iLGUuU0VMRUNUSU9OX1NFVD0iU2VsZWN0aW9uU2V0IixlLkZJRUxEPSJGaWVsZCIsZS5BUkdVTUVOVD0iQXJndW1lbnQiLGUuRlJBR01FTlRfU1BSRUFEPSJGcmFnbWVudFNwcmVhZCIsZS5JTkxJTkVfRlJBR01FTlQ9IklubGluZUZyYWdtZW50IixlLkZSQUdNRU5UX0RFRklOSVRJT049IkZyYWdtZW50RGVmaW5pdGlvbiIsZS5WQVJJQUJMRT0iVmFyaWFibGUiLGUuSU5UPSJJbnRWYWx1ZSIsZS5GTE9BVD0iRmxvYXRWYWx1ZSIsZS5TVFJJTkc9IlN0cmluZ1ZhbHVlIixlLkJPT0xFQU49IkJvb2xlYW5WYWx1ZSIsZS5OVUxMPSJOdWxsVmFsdWUiLGUuRU5VTT0iRW51bVZhbHVlIixlLkxJU1Q9Ikxpc3RWYWx1ZSIsZS5PQkpFQ1Q9Ik9iamVjdFZhbHVlIixlLk9CSkVDVF9GSUVMRD0iT2JqZWN0RmllbGQiLGUuRElSRUNUSVZFPSJEaXJlY3RpdmUiLGUuTkFNRURfVFlQRT0iTmFtZWRUeXBlIixlLkxJU1RfVFlQRT0iTGlzdFR5cGUiLGUuTk9OX05VTExfVFlQRT0iTm9uTnVsbFR5cGUiLGUuU0NIRU1BX0RFRklOSVRJT049IlNjaGVtYURlZmluaXRpb24iLGUuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTj0iT3BlcmF0aW9uVHlwZURlZmluaXRpb24iLGUuU0NBTEFSX1RZUEVfREVGSU5JVElPTj0iU2NhbGFyVHlwZURlZmluaXRpb24iLGUuT0JKRUNUX1RZUEVfREVGSU5JVElPTj0iT2JqZWN0VHlwZURlZmluaXRpb24iLGUuRklFTERfREVGSU5JVElPTj0iRmllbGREZWZpbml0aW9uIixlLklOUFVUX1ZBTFVFX0RFRklOSVRJT049IklucHV0VmFsdWVEZWZpbml0aW9uIixlLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT049IkludGVyZmFjZVR5cGVEZWZpbml0aW9uIixlLlVOSU9OX1RZUEVfREVGSU5JVElPTj0iVW5pb25UeXBlRGVmaW5pdGlvbiIsZS5FTlVNX1RZUEVfREVGSU5JVElPTj0iRW51bVR5cGVEZWZpbml0aW9uIixlLkVOVU1fVkFMVUVfREVGSU5JVElPTj0iRW51bVZhbHVlRGVmaW5pdGlvbiIsZS5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OPSJJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uIixlLkRJUkVDVElWRV9ERUZJTklUSU9OPSJEaXJlY3RpdmVEZWZpbml0aW9uIixlLlNDSEVNQV9FWFRFTlNJT049IlNjaGVtYUV4dGVuc2lvbiIsZS5TQ0FMQVJfVFlQRV9FWFRFTlNJT049IlNjYWxhclR5cGVFeHRlbnNpb24iLGUuT0JKRUNUX1RZUEVfRVhURU5TSU9OPSJPYmplY3RUeXBlRXh0ZW5zaW9uIixlLklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTj0iSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsZS5VTklPTl9UWVBFX0VYVEVOU0lPTj0iVW5pb25UeXBlRXh0ZW5zaW9uIixlLkVOVU1fVFlQRV9FWFRFTlNJT049IkVudW1UeXBlRXh0ZW5zaW9uIixlLklOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTj0iSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIn0pKFR8fChUPXt9KSk7ZnVuY3Rpb24gemUoZSl7cmV0dXJuIGU9PT05fHxlPT09MzJ9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N31mdW5jdGlvbiBFdChlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfWZ1bmN0aW9uIF90KGUpe3JldHVybiBFdChlKXx8ZT09PTk1fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBFdChlKXx8X2UoZSl8fGU9PT05NX1mdW5jdGlvbiBsbihlKXt2YXIgdDtsZXQgbj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixpPW51bGwscj0tMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoOysrbyl7dmFyIHM7Y29uc3QgYz1lW29dLGY9Zm4oYyk7ZiE9PWMubGVuZ3RoJiYoaT0ocz1pKSE9PW51bGwmJnMhPT12b2lkIDA/czpvLHI9byxvIT09MCYmZjxuJiYobj1mKSl9cmV0dXJuIGUubWFwKChvLGMpPT5jPT09MD9vOm8uc2xpY2UobikpLnNsaWNlKCh0PWkpIT09bnVsbCYmdCE9PXZvaWQgMD90OjAscisxKX1mdW5jdGlvbiBmbihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmemUoZS5jaGFyQ29kZUF0KHQpKTspKyt0O3JldHVybiB0fWZ1bmN0aW9uIGhuKGUsdCl7Y29uc3Qgbj1lLnJlcGxhY2UoLyIiIi9nLCdcXCIiIicpLGk9bi5zcGxpdCgvXHJcbnxbXG5ccl0vZykscj1pLmxlbmd0aD09PTEscz1pLmxlbmd0aD4xJiZpLnNsaWNlKDEpLmV2ZXJ5KGI9PmIubGVuZ3RoPT09MHx8emUoYi5jaGFyQ29kZUF0KDApKSksbz1uLmVuZHNXaXRoKCdcXCIiIicpLGM9ZS5lbmRzV2l0aCgnIicpJiYhbyxmPWUuZW5kc1dpdGgoIlxcIiksZD1jfHxmLHU9IXJ8fGUubGVuZ3RoPjcwfHxkfHxzfHxvO2xldCB5PSIiO2NvbnN0IHY9ciYmemUoZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4odSYmIXZ8fHMpJiYoeSs9YApgKSx5Kz1uLCh1fHxkKSYmKHkrPWAKYCksJyIiIicreSsnIiIiJ312YXIgbDsoZnVuY3Rpb24oZSl7ZS5TT0Y9IjxTT0Y+IixlLkVPRj0iPEVPRj4iLGUuQkFORz0iISIsZS5ET0xMQVI9IiQiLGUuQU1QPSImIixlLlBBUkVOX0w9IigiLGUuUEFSRU5fUj0iKSIsZS5TUFJFQUQ9Ii4uLiIsZS5DT0xPTj0iOiIsZS5FUVVBTFM9Ij0iLGUuQVQ9IkAiLGUuQlJBQ0tFVF9MPSJbIixlLkJSQUNLRVRfUj0iXSIsZS5CUkFDRV9MPSJ7IixlLlBJUEU9InwiLGUuQlJBQ0VfUj0ifSIsZS5OQU1FPSJOYW1lIixlLklOVD0iSW50IixlLkZMT0FUPSJGbG9hdCIsZS5TVFJJTkc9IlN0cmluZyIsZS5CTE9DS19TVFJJTkc9IkJsb2NrU3RyaW5nIixlLkNPTU1FTlQ9IkNvbW1lbnQifSkobHx8KGw9e30pKTtjbGFzcyBkbntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPW5ldyB5dChsLlNPRiwwLDAsMCwwKTt0aGlzLnNvdXJjZT10LHRoaXMubGFzdFRva2VuPW4sdGhpcy50b2tlbj1uLHRoaXMubGluZT0xLHRoaXMubGluZVN0YXJ0PTB9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iTGV4ZXIifWFkdmFuY2UoKXtyZXR1cm4gdGhpcy5sYXN0VG9rZW49dGhpcy50b2tlbix0aGlzLnRva2VuPXRoaXMubG9va2FoZWFkKCl9bG9va2FoZWFkKCl7bGV0IHQ9dGhpcy50b2tlbjtpZih0LmtpbmQhPT1sLkVPRilkbyBpZih0Lm5leHQpdD10Lm5leHQ7ZWxzZXtjb25zdCBuPW1uKHRoaXMsdC5lbmQpO3QubmV4dD1uLG4ucHJldj10LHQ9bn13aGlsZSh0LmtpbmQ9PT1sLkNPTU1FTlQpO3JldHVybiB0fX1mdW5jdGlvbiBwbihlKXtyZXR1cm4gZT09PWwuQkFOR3x8ZT09PWwuRE9MTEFSfHxlPT09bC5BTVB8fGU9PT1sLlBBUkVOX0x8fGU9PT1sLlBBUkVOX1J8fGU9PT1sLlNQUkVBRHx8ZT09PWwuQ09MT058fGU9PT1sLkVRVUFMU3x8ZT09PWwuQVR8fGU9PT1sLkJSQUNLRVRfTHx8ZT09PWwuQlJBQ0tFVF9SfHxlPT09bC5CUkFDRV9MfHxlPT09bC5QSVBFfHxlPT09bC5CUkFDRV9SfWZ1bmN0aW9uIGhlKGUpe3JldHVybiBlPj0wJiZlPD01NTI5NXx8ZT49NTczNDQmJmU8PTExMTQxMTF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gVHQoZS5jaGFyQ29kZUF0KHQpKSYmYnQoZS5jaGFyQ29kZUF0KHQrMSkpfWZ1bmN0aW9uIFR0KGUpe3JldHVybiBlPj01NTI5NiYmZTw9NTYzMTl9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIGU+PTU2MzIwJiZlPD01NzM0M31mdW5jdGlvbiB1ZShlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keS5jb2RlUG9pbnRBdCh0KTtpZihuPT09dm9pZCAwKXJldHVybiBsLkVPRjtpZihuPj0zMiYmbjw9MTI2KXtjb25zdCBpPVN0cmluZy5mcm9tQ29kZVBvaW50KG4pO3JldHVybiBpPT09JyInP2AnIidgOmAiJHtpfSJgfXJldHVybiJVKyIrbi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5wYWRTdGFydCg0LCIwIil9ZnVuY3Rpb24gVihlLHQsbixpLHIpe2NvbnN0IHM9ZS5saW5lLG89MStuLWUubGluZVN0YXJ0O3JldHVybiBuZXcgeXQodCxuLGkscyxvLHIpfWZ1bmN0aW9uIG1uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dDtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO3N3aXRjaChzKXtjYXNlIDY1Mjc5OmNhc2UgOTpjYXNlIDMyOmNhc2UgNDQ6KytyO2NvbnRpbnVlO2Nhc2UgMTA6KytyLCsrZS5saW5lLGUubGluZVN0YXJ0PXI7Y29udGludWU7Y2FzZSAxMzpuLmNoYXJDb2RlQXQocisxKT09PTEwP3IrPTI6KytyLCsrZS5saW5lLGUubGluZVN0YXJ0PXI7Y29udGludWU7Y2FzZSAzNTpyZXR1cm4geW4oZSxyKTtjYXNlIDMzOnJldHVybiBWKGUsbC5CQU5HLHIscisxKTtjYXNlIDM2OnJldHVybiBWKGUsbC5ET0xMQVIscixyKzEpO2Nhc2UgMzg6cmV0dXJuIFYoZSxsLkFNUCxyLHIrMSk7Y2FzZSA0MDpyZXR1cm4gVihlLGwuUEFSRU5fTCxyLHIrMSk7Y2FzZSA0MTpyZXR1cm4gVihlLGwuUEFSRU5fUixyLHIrMSk7Y2FzZSA0NjppZihuLmNoYXJDb2RlQXQocisxKT09PTQ2JiZuLmNoYXJDb2RlQXQocisyKT09PTQ2KXJldHVybiBWKGUsbC5TUFJFQUQscixyKzMpO2JyZWFrO2Nhc2UgNTg6cmV0dXJuIFYoZSxsLkNPTE9OLHIscisxKTtjYXNlIDYxOnJldHVybiBWKGUsbC5FUVVBTFMscixyKzEpO2Nhc2UgNjQ6cmV0dXJuIFYoZSxsLkFULHIscisxKTtjYXNlIDkxOnJldHVybiBWKGUsbC5CUkFDS0VUX0wscixyKzEpO2Nhc2UgOTM6cmV0dXJuIFYoZSxsLkJSQUNLRVRfUixyLHIrMSk7Y2FzZSAxMjM6cmV0dXJuIFYoZSxsLkJSQUNFX0wscixyKzEpO2Nhc2UgMTI0OnJldHVybiBWKGUsbC5QSVBFLHIscisxKTtjYXNlIDEyNTpyZXR1cm4gVihlLGwuQlJBQ0VfUixyLHIrMSk7Y2FzZSAzNDpyZXR1cm4gbi5jaGFyQ29kZUF0KHIrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHIrMik9PT0zND9ibihlLHIpOnZuKGUscil9aWYoX2Uocyl8fHM9PT00NSlyZXR1cm4gZ24oZSxyLHMpO2lmKF90KHMpKXJldHVybiBObihlLHIpO3Rocm93IEcoZS5zb3VyY2UscixzPT09Mzk/YFVuZXhwZWN0ZWQgc2luZ2xlIHF1b3RlIGNoYXJhY3RlciAoJyksIGRpZCB5b3UgbWVhbiB0byB1c2UgYSBkb3VibGUgcXVvdGUgKCIpP2A6aGUocyl8fFNlKG4scik/YFVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAke3VlKGUscil9LmA6YEludmFsaWQgY2hhcmFjdGVyOiAke3VlKGUscil9LmApfXJldHVybiBWKGUsbC5FT0YsaSxpKX1mdW5jdGlvbiB5bihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMTtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO2lmKHM9PT0xMHx8cz09PTEzKWJyZWFrO2lmKGhlKHMpKSsrcjtlbHNlIGlmKFNlKG4scikpcis9MjtlbHNlIGJyZWFrfXJldHVybiBWKGUsbC5DT01NRU5ULHQscixuLnNsaWNlKHQrMSxyKSl9ZnVuY3Rpb24gZ24oZSx0LG4pe2NvbnN0IGk9ZS5zb3VyY2UuYm9keTtsZXQgcj10LHM9bixvPSExO2lmKHM9PT00NSYmKHM9aS5jaGFyQ29kZUF0KCsrcikpLHM9PT00OCl7aWYocz1pLmNoYXJDb2RlQXQoKytyKSxfZShzKSl0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgbnVtYmVyLCB1bmV4cGVjdGVkIGRpZ2l0IGFmdGVyIDA6ICR7dWUoZSxyKX0uYCl9ZWxzZSByPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKTtpZihzPT09NDYmJihvPSEwLHM9aS5jaGFyQ29kZUF0KCsrcikscj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocikpLChzPT09Njl8fHM9PT0xMDEpJiYobz0hMCxzPWkuY2hhckNvZGVBdCgrK3IpLChzPT09NDN8fHM9PT00NSkmJihzPWkuY2hhckNvZGVBdCgrK3IpKSxyPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKSkscz09PTQ2fHxfdChzKSl0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAke3VlKGUscil9LmApO3JldHVybiBWKGUsbz9sLkZMT0FUOmwuSU5ULHQscixpLnNsaWNlKHQscikpfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighX2UobikpdGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogJHt1ZShlLHQpfS5gKTtjb25zdCBpPWUuc291cmNlLmJvZHk7bGV0IHI9dCsxO2Zvcig7X2UoaS5jaGFyQ29kZUF0KHIpKTspKytyO3JldHVybiByfWZ1bmN0aW9uIHZuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxLHM9cixvPSIiO2Zvcig7cjxpOyl7Y29uc3QgYz1uLmNoYXJDb2RlQXQocik7aWYoYz09PTM0KXJldHVybiBvKz1uLnNsaWNlKHMsciksVihlLGwuU1RSSU5HLHQscisxLG8pO2lmKGM9PT05Mil7bys9bi5zbGljZShzLHIpO2NvbnN0IGY9bi5jaGFyQ29kZUF0KHIrMSk9PT0xMTc/bi5jaGFyQ29kZUF0KHIrMik9PT0xMjM/RW4oZSxyKTpfbihlLHIpOlRuKGUscik7bys9Zi52YWx1ZSxyKz1mLnNpemUscz1yO2NvbnRpbnVlfWlmKGM9PT0xMHx8Yz09PTEzKWJyZWFrO2lmKGhlKGMpKSsrcjtlbHNlIGlmKFNlKG4scikpcis9MjtlbHNlIHRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBjaGFyYWN0ZXIgd2l0aGluIFN0cmluZzogJHt1ZShlLHIpfS5gKX10aHJvdyBHKGUuc291cmNlLHIsIlVudGVybWluYXRlZCBzdHJpbmcuIil9ZnVuY3Rpb24gRW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHk7bGV0IGk9MCxyPTM7Zm9yKDtyPDEyOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQodCtyKyspO2lmKHM9PT0xMjUpe2lmKHI8NXx8IWhlKGkpKWJyZWFrO3JldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxzaXplOnJ9fWlmKGk9aTw8NHxUZShzKSxpPDApYnJlYWt9dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCtyKX0iLmApfWZ1bmN0aW9uIF9uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9TnQobix0KzIpO2lmKGhlKGkpKXJldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxzaXplOjZ9O2lmKFR0KGkpJiZuLmNoYXJDb2RlQXQodCs2KT09PTkyJiZuLmNoYXJDb2RlQXQodCs3KT09PTExNyl7Y29uc3Qgcj1OdChuLHQrOCk7aWYoYnQocikpcmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGksciksc2l6ZToxMn19dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCs2KX0iLmApfWZ1bmN0aW9uIE50KGUsdCl7cmV0dXJuIFRlKGUuY2hhckNvZGVBdCh0KSk8PDEyfFRlKGUuY2hhckNvZGVBdCh0KzEpKTw8OHxUZShlLmNoYXJDb2RlQXQodCsyKSk8PDR8VGUoZS5jaGFyQ29kZUF0KHQrMykpfWZ1bmN0aW9uIFRlKGUpe3JldHVybiBlPj00OCYmZTw9NTc/ZS00ODplPj02NSYmZTw9NzA/ZS01NTplPj05NyYmZTw9MTAyP2UtODc6LTF9ZnVuY3Rpb24gVG4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHk7c3dpdGNoKG4uY2hhckNvZGVBdCh0KzEpKXtjYXNlIDM0OnJldHVybnt2YWx1ZTonIicsc2l6ZToyfTtjYXNlIDkyOnJldHVybnt2YWx1ZToiXFwiLHNpemU6Mn07Y2FzZSA0NzpyZXR1cm57dmFsdWU6Ii8iLHNpemU6Mn07Y2FzZSA5ODpyZXR1cm57dmFsdWU6IlxiIixzaXplOjJ9O2Nhc2UgMTAyOnJldHVybnt2YWx1ZToiXGYiLHNpemU6Mn07Y2FzZSAxMTA6cmV0dXJue3ZhbHVlOmAKYCxzaXplOjJ9O2Nhc2UgMTE0OnJldHVybnt2YWx1ZToiXHIiLHNpemU6Mn07Y2FzZSAxMTY6cmV0dXJue3ZhbHVlOiIJIixzaXplOjJ9fXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCsyKX0iLmApfWZ1bmN0aW9uIGJuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9ZS5saW5lU3RhcnQscz10KzMsbz1zLGM9IiI7Y29uc3QgZj1bXTtmb3IoO3M8aTspe2NvbnN0IGQ9bi5jaGFyQ29kZUF0KHMpO2lmKGQ9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMik9PT0zNCl7Yys9bi5zbGljZShvLHMpLGYucHVzaChjKTtjb25zdCB1PVYoZSxsLkJMT0NLX1NUUklORyx0LHMrMyxsbihmKS5qb2luKGAKYCkpO3JldHVybiBlLmxpbmUrPWYubGVuZ3RoLTEsZS5saW5lU3RhcnQ9cix1fWlmKGQ9PT05MiYmbi5jaGFyQ29kZUF0KHMrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMik9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMyk9PT0zNCl7Yys9bi5zbGljZShvLHMpLG89cysxLHMrPTQ7Y29udGludWV9aWYoZD09PTEwfHxkPT09MTMpe2MrPW4uc2xpY2UobyxzKSxmLnB1c2goYyksZD09PTEzJiZuLmNoYXJDb2RlQXQocysxKT09PTEwP3MrPTI6KytzLGM9IiIsbz1zLHI9cztjb250aW51ZX1pZihoZShkKSkrK3M7ZWxzZSBpZihTZShuLHMpKXMrPTI7ZWxzZSB0aHJvdyBHKGUuc291cmNlLHMsYEludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICR7dWUoZSxzKX0uYCl9dGhyb3cgRyhlLnNvdXJjZSxzLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIE5uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxO2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7aWYodW4ocykpKytyO2Vsc2UgYnJlYWt9cmV0dXJuIFYoZSxsLk5BTUUsdCxyLG4uc2xpY2UodCxyKSl9Y29uc3QgeG49MTAseHQ9MjtmdW5jdGlvbiBZZShlKXtyZXR1cm4gT2UoZSxbXSl9ZnVuY3Rpb24gT2UoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIGUubmFtZT9gW2Z1bmN0aW9uICR7ZS5uYW1lfV1gOiJbZnVuY3Rpb25dIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFuKGUsdCk7ZGVmYXVsdDpyZXR1cm4gU3RyaW5nKGUpfX1mdW5jdGlvbiBBbihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJudWxsIjtpZih0LmluY2x1ZGVzKGUpKXJldHVybiJbQ2lyY3VsYXJdIjtjb25zdCBuPVsuLi50LGVdO2lmKEluKGUpKXtjb25zdCBpPWUudG9KU09OKCk7aWYoaSE9PWUpcmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9pOk9lKGksbil9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBPbihlLG4pO3JldHVybiBTbihlLG4pfWZ1bmN0aW9uIEluKGUpe3JldHVybiB0eXBlb2YgZS50b0pTT049PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gU24oZSx0KXtjb25zdCBuPU9iamVjdC5lbnRyaWVzKGUpO3JldHVybiBuLmxlbmd0aD09PTA/Int9Ijp0Lmxlbmd0aD54dD8iWyIrd24oZSkrIl0iOiJ7ICIrbi5tYXAoKFtyLHNdKT0+cisiOiAiK09lKHMsdCkpLmpvaW4oIiwgIikrIiB9In1mdW5jdGlvbiBPbihlLHQpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iW10iO2lmKHQubGVuZ3RoPnh0KXJldHVybiJbQXJyYXldIjtjb25zdCBuPU1hdGgubWluKHhuLGUubGVuZ3RoKSxpPWUubGVuZ3RoLW4scj1bXTtmb3IobGV0IHM9MDtzPG47KytzKXIucHVzaChPZShlW3NdLHQpKTtyZXR1cm4gaT09PTE/ci5wdXNoKCIuLi4gMSBtb3JlIGl0ZW0iKTppPjEmJnIucHVzaChgLi4uICR7aX0gbW9yZSBpdGVtc2ApLCJbIityLmpvaW4oIiwgIikrIl0ifWZ1bmN0aW9uIHduKGUpe2NvbnN0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnJlcGxhY2UoL15cW29iamVjdCAvLCIiKS5yZXBsYWNlKC9dJC8sIiIpO2lmKHQ9PT0iT2JqZWN0IiYmdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiIpe2NvbnN0IG49ZS5jb25zdHJ1Y3Rvci5uYW1lO2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmbiE9PSIiKXJldHVybiBufXJldHVybiB0fWNvbnN0IERuPWdsb2JhbFRoaXMucHJvY2VzcyYmcHJvY2Vzcy5lbnYuTk9ERV9FTlY9PT0icHJvZHVjdGlvbiI/ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG59OmZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIG4pcmV0dXJuITA7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCl7dmFyIGk7Y29uc3Qgcj1uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLHM9U3ltYm9sLnRvU3RyaW5nVGFnIGluIHQ/dFtTeW1ib2wudG9TdHJpbmdUYWddOihpPXQuY29uc3RydWN0b3IpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5uYW1lO2lmKHI9PT1zKXtjb25zdCBvPVllKHQpO3Rocm93IG5ldyBFcnJvcihgQ2Fubm90IHVzZSAke3J9ICIke299IiBmcm9tIGFub3RoZXIgbW9kdWxlIG9yIHJlYWxtLgoKRW5zdXJlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgImdyYXBocWwiIGluIHRoZSBub2RlX21vZHVsZXMKZGlyZWN0b3J5LiBJZiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgImdyYXBocWwiIGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIG90aGVyCnJlbGllZCBvbiBtb2R1bGVzLCB1c2UgInJlc29sdXRpb25zIiB0byBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBpbnN0YWxsZWQuCgpodHRwczovL3lhcm5wa2cuY29tL2VuL2RvY3Mvc2VsZWN0aXZlLXZlcnNpb24tcmVzb2x1dGlvbnMKCkR1cGxpY2F0ZSAiZ3JhcGhxbCIgbW9kdWxlcyBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIHNpbmNlIGRpZmZlcmVudAp2ZXJzaW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzIGFuZCBiZWhhdmlvci4gVGhlIGRhdGEgZnJvbSBvbmUKdmVyc2lvbiB1c2VkIGluIHRoZSBmdW5jdGlvbiBmcm9tIGFub3RoZXIgY291bGQgcHJvZHVjZSBjb25mdXNpbmcgYW5kCnNwdXJpb3VzIHJlc3VsdHMuYCl9fXJldHVybiExfTtjbGFzcyBBdHtjb25zdHJ1Y3Rvcih0LG49IkdyYXBoUUwgcmVxdWVzdCIsaT17bGluZToxLGNvbHVtbjoxfSl7dHlwZW9mIHQ9PSJzdHJpbmcifHxvZSghMSxgQm9keSBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZDogJHtZZSh0KX0uYCksdGhpcy5ib2R5PXQsdGhpcy5uYW1lPW4sdGhpcy5sb2NhdGlvbk9mZnNldD1pLHRoaXMubG9jYXRpb25PZmZzZXQubGluZT4wfHxvZSghMSwibGluZSBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIiksdGhpcy5sb2NhdGlvbk9mZnNldC5jb2x1bW4+MHx8b2UoITEsImNvbHVtbiBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIil9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iU291cmNlIn19ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIERuKGUsQXQpfWZ1bmN0aW9uIEl0KGUsdCl7Y29uc3Qgbj1uZXcga24oZSx0KSxpPW4ucGFyc2VEb2N1bWVudCgpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwidG9rZW5Db3VudCIse2VudW1lcmFibGU6ITEsdmFsdWU6bi50b2tlbkNvdW50fSksaX1jbGFzcyBrbntjb25zdHJ1Y3Rvcih0LG49e30pe2NvbnN0IGk9Q24odCk/dDpuZXcgQXQodCk7dGhpcy5fbGV4ZXI9bmV3IGRuKGkpLHRoaXMuX29wdGlvbnM9bix0aGlzLl90b2tlbkNvdW50ZXI9MH1nZXQgdG9rZW5Db3VudCgpe3JldHVybiB0aGlzLl90b2tlbkNvdW50ZXJ9cGFyc2VOYW1lKCl7Y29uc3QgdD10aGlzLmV4cGVjdFRva2VuKGwuTkFNRSk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuTkFNRSx2YWx1ZTp0LnZhbHVlfSl9cGFyc2VEb2N1bWVudCgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5ET0NVTUVOVCxkZWZpbml0aW9uczp0aGlzLm1hbnkobC5TT0YsdGhpcy5wYXJzZURlZmluaXRpb24sbC5FT0YpfSl9cGFyc2VEZWZpbml0aW9uKCl7aWYodGhpcy5wZWVrKGwuQlJBQ0VfTCkpcmV0dXJuIHRoaXMucGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCk7Y29uc3QgdD10aGlzLnBlZWtEZXNjcmlwdGlvbigpLG49dD90aGlzLl9sZXhlci5sb29rYWhlYWQoKTp0aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT1sLk5BTUUpe3N3aXRjaChuLnZhbHVlKXtjYXNlInNjaGVtYSI6cmV0dXJuIHRoaXMucGFyc2VTY2hlbWFEZWZpbml0aW9uKCk7Y2FzZSJzY2FsYXIiOnJldHVybiB0aGlzLnBhcnNlU2NhbGFyVHlwZURlZmluaXRpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZURlZmluaXRpb24oKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIHRoaXMucGFyc2VJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbigpO2Nhc2UidW5pb24iOnJldHVybiB0aGlzLnBhcnNlVW5pb25UeXBlRGVmaW5pdGlvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZURlZmluaXRpb24oKTtjYXNlImlucHV0IjpyZXR1cm4gdGhpcy5wYXJzZUlucHV0T2JqZWN0VHlwZURlZmluaXRpb24oKTtjYXNlImRpcmVjdGl2ZSI6cmV0dXJuIHRoaXMucGFyc2VEaXJlY3RpdmVEZWZpbml0aW9uKCl9aWYodCl0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSx0aGlzLl9sZXhlci50b2tlbi5zdGFydCwiVW5leHBlY3RlZCBkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25zIGFyZSBzdXBwb3J0ZWQgb25seSBvbiB0eXBlIGRlZmluaXRpb25zLiIpO3N3aXRjaChuLnZhbHVlKXtjYXNlInF1ZXJ5IjpjYXNlIm11dGF0aW9uIjpjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIHRoaXMucGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCk7Y2FzZSJmcmFnbWVudCI6cmV0dXJuIHRoaXMucGFyc2VGcmFnbWVudERlZmluaXRpb24oKTtjYXNlImV4dGVuZCI6cmV0dXJuIHRoaXMucGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uKCl9fXRocm93IHRoaXMudW5leHBlY3RlZChuKX1wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO2lmKHRoaXMucGVlayhsLkJSQUNFX0wpKXJldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpmZS5RVUVSWSxuYW1lOnZvaWQgMCx2YXJpYWJsZURlZmluaXRpb25zOltdLGRpcmVjdGl2ZXM6W10sc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pO2NvbnN0IG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTtsZXQgaTtyZXR1cm4gdGhpcy5wZWVrKGwuTkFNRSkmJihpPXRoaXMucGFyc2VOYW1lKCkpLHRoaXMubm9kZSh0LHtraW5kOlQuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sbmFtZTppLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VPcGVyYXRpb25UeXBlKCl7Y29uc3QgdD10aGlzLmV4cGVjdFRva2VuKGwuTkFNRSk7c3dpdGNoKHQudmFsdWUpe2Nhc2UicXVlcnkiOnJldHVybiBmZS5RVUVSWTtjYXNlIm11dGF0aW9uIjpyZXR1cm4gZmUuTVVUQVRJT047Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiBmZS5TVUJTQ1JJUFRJT059dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfXBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsdGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbixsLlBBUkVOX1IpfXBhcnNlVmFyaWFibGVEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpULlZBUklBQkxFX0RFRklOSVRJT04sdmFyaWFibGU6dGhpcy5wYXJzZVZhcmlhYmxlKCksdHlwZToodGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpKSxkZWZhdWx0VmFsdWU6dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKT90aGlzLnBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCl9KX1wYXJzZVZhcmlhYmxlKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkRPTExBUiksdGhpcy5ub2RlKHQse2tpbmQ6VC5WQVJJQUJMRSxuYW1lOnRoaXMucGFyc2VOYW1lKCl9KX1wYXJzZVNlbGVjdGlvblNldCgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5TRUxFQ1RJT05fU0VULHNlbGVjdGlvbnM6dGhpcy5tYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlU2VsZWN0aW9uLGwuQlJBQ0VfUil9KX1wYXJzZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnBlZWsobC5TUFJFQUQpP3RoaXMucGFyc2VGcmFnbWVudCgpOnRoaXMucGFyc2VGaWVsZCgpfXBhcnNlRmllbGQoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU5hbWUoKTtsZXQgaSxyO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5DT0xPTik/KGk9bixyPXRoaXMucGFyc2VOYW1lKCkpOnI9bix0aGlzLm5vZGUodCx7a2luZDpULkZJRUxELGFsaWFzOmksbmFtZTpyLGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKCExKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wZWVrKGwuQlJBQ0VfTCk/dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpOnZvaWQgMH0pfXBhcnNlQXJndW1lbnRzKHQpe2NvbnN0IG49dD90aGlzLnBhcnNlQ29uc3RBcmd1bWVudDp0aGlzLnBhcnNlQXJndW1lbnQ7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCxuLGwuUEFSRU5fUil9cGFyc2VBcmd1bWVudCh0PSExKXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuLGk9dGhpcy5wYXJzZU5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLm5vZGUobix7a2luZDpULkFSR1VNRU5ULG5hbWU6aSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpfSl9cGFyc2VDb25zdEFyZ3VtZW50KCl7cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudCghMCl9cGFyc2VGcmFnbWVudCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RUb2tlbihsLlNQUkVBRCk7Y29uc3Qgbj10aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgib24iKTtyZXR1cm4hbiYmdGhpcy5wZWVrKGwuTkFNRSk/dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9TUFJFQUQsbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSl9KTp0aGlzLm5vZGUodCx7a2luZDpULklOTElORV9GUkFHTUVOVCx0eXBlQ29uZGl0aW9uOm4/dGhpcy5wYXJzZU5hbWVkVHlwZSgpOnZvaWQgMCxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VGcmFnbWVudERlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdEtleXdvcmQoImZyYWdtZW50IiksdGhpcy5fb3B0aW9ucy5hbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzPT09ITA/dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSk6dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHR5cGVDb25kaXRpb246KHRoaXMuZXhwZWN0S2V5d29yZCgib24iKSx0aGlzLnBhcnNlTmFtZWRUeXBlKCkpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZUZyYWdtZW50TmFtZSgpe2lmKHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09Im9uIil0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5wYXJzZU5hbWUoKX1wYXJzZVZhbHVlTGl0ZXJhbCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3N3aXRjaChuLmtpbmQpe2Nhc2UgbC5CUkFDS0VUX0w6cmV0dXJuIHRoaXMucGFyc2VMaXN0KHQpO2Nhc2UgbC5CUkFDRV9MOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0KHQpO2Nhc2UgbC5JTlQ6cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKG4se2tpbmQ6VC5JTlQsdmFsdWU6bi52YWx1ZX0pO2Nhc2UgbC5GTE9BVDpyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUobix7a2luZDpULkZMT0FULHZhbHVlOm4udmFsdWV9KTtjYXNlIGwuU1RSSU5HOmNhc2UgbC5CTE9DS19TVFJJTkc6cmV0dXJuIHRoaXMucGFyc2VTdHJpbmdMaXRlcmFsKCk7Y2FzZSBsLk5BTUU6c3dpdGNoKHRoaXMuYWR2YW5jZUxleGVyKCksbi52YWx1ZSl7Y2FzZSJ0cnVlIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6VC5CT09MRUFOLHZhbHVlOiEwfSk7Y2FzZSJmYWxzZSI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuQk9PTEVBTix2YWx1ZTohMX0pO2Nhc2UibnVsbCI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuTlVMTH0pO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuRU5VTSx2YWx1ZTpuLnZhbHVlfSl9Y2FzZSBsLkRPTExBUjppZih0KWlmKHRoaXMuZXhwZWN0VG9rZW4obC5ET0xMQVIpLHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT1sLk5BTUUpe2NvbnN0IGk9dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU7dGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgVW5leHBlY3RlZCB2YXJpYWJsZSAiJCR7aX0iIGluIGNvbnN0YW50IHZhbHVlLmApfWVsc2UgdGhyb3cgdGhpcy51bmV4cGVjdGVkKG4pO3JldHVybiB0aGlzLnBhcnNlVmFyaWFibGUoKTtkZWZhdWx0OnRocm93IHRoaXMudW5leHBlY3RlZCgpfX1wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZUxpdGVyYWwoITApfXBhcnNlU3RyaW5nTGl0ZXJhbCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKHQse2tpbmQ6VC5TVFJJTkcsdmFsdWU6dC52YWx1ZSxibG9jazp0LmtpbmQ9PT1sLkJMT0NLX1NUUklOR30pfXBhcnNlTGlzdCh0KXtjb25zdCBuPSgpPT50aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpO3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5MSVNULHZhbHVlczp0aGlzLmFueShsLkJSQUNLRVRfTCxuLGwuQlJBQ0tFVF9SKX0pfXBhcnNlT2JqZWN0KHQpe2NvbnN0IG49KCk9PnRoaXMucGFyc2VPYmplY3RGaWVsZCh0KTtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuT0JKRUNULGZpZWxkczp0aGlzLmFueShsLkJSQUNFX0wsbixsLkJSQUNFX1IpfSl9cGFyc2VPYmplY3RGaWVsZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuLGk9dGhpcy5wYXJzZU5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLm5vZGUobix7a2luZDpULk9CSkVDVF9GSUVMRCxuYW1lOmksdmFsdWU6dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KX0pfXBhcnNlRGlyZWN0aXZlcyh0KXtjb25zdCBuPVtdO2Zvcig7dGhpcy5wZWVrKGwuQVQpOyluLnB1c2godGhpcy5wYXJzZURpcmVjdGl2ZSh0KSk7cmV0dXJuIG59cGFyc2VDb25zdERpcmVjdGl2ZXMoKXtyZXR1cm4gdGhpcy5wYXJzZURpcmVjdGl2ZXMoITApfXBhcnNlRGlyZWN0aXZlKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5BVCksdGhpcy5ub2RlKG4se2tpbmQ6VC5ESVJFQ1RJVkUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpLGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKHQpfSl9cGFyc2VUeXBlUmVmZXJlbmNlKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtsZXQgbjtpZih0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5CUkFDS0VUX0wpKXtjb25zdCBpPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCk7dGhpcy5leHBlY3RUb2tlbihsLkJSQUNLRVRfUiksbj10aGlzLm5vZGUodCx7a2luZDpULkxJU1RfVFlQRSx0eXBlOml9KX1lbHNlIG49dGhpcy5wYXJzZU5hbWVkVHlwZSgpO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5CQU5HKT90aGlzLm5vZGUodCx7a2luZDpULk5PTl9OVUxMX1RZUEUsdHlwZTpufSk6bn1wYXJzZU5hbWVkVHlwZSgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5OQU1FRF9UWVBFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKX0pfXBlZWtEZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLnBlZWsobC5TVFJJTkcpfHx0aGlzLnBlZWsobC5CTE9DS19TVFJJTkcpfXBhcnNlRGVzY3JpcHRpb24oKXtpZih0aGlzLnBlZWtEZXNjcmlwdGlvbigpKXJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpfXBhcnNlU2NoZW1hRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO2NvbnN0IGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5tYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24sbC5CUkFDRV9SKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5TQ0hFTUFfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLGRpcmVjdGl2ZXM6aSxvcGVyYXRpb25UeXBlczpyfSl9cGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlT3BlcmF0aW9uVHlwZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZWRUeXBlKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTixvcGVyYXRpb246bix0eXBlOml9KX1wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgic2NhbGFyIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDQUxBUl9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyfSl9cGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInR5cGUiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxzPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxvPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczpzLGZpZWxkczpvfSl9cGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgiaW1wbGVtZW50cyIpP3RoaXMuZGVsaW1pdGVkTWFueShsLkFNUCx0aGlzLnBhcnNlTmFtZWRUeXBlKTpbXX1wYXJzZUZpZWxkc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VGaWVsZERlZmluaXRpb24sbC5CUkFDRV9SKX1wYXJzZUZpZWxkRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQXJndW1lbnREZWZzKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCBzPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCksbz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRklFTERfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxhcmd1bWVudHM6cix0eXBlOnMsZGlyZWN0aXZlczpvfSl9cGFyc2VBcmd1bWVudERlZnMoKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLHRoaXMucGFyc2VJbnB1dFZhbHVlRGVmLGwuUEFSRU5fUil9cGFyc2VJbnB1dFZhbHVlRGVmKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZU5hbWUoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IHI9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKTtsZXQgczt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpJiYocz10aGlzLnBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKSk7Y29uc3Qgbz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5QVVRfVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSx0eXBlOnIsZGVmYXVsdFZhbHVlOnMsZGlyZWN0aXZlczpvfSl9cGFyc2VJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImludGVyZmFjZSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHM9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLG89dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGludGVyZmFjZXM6cixkaXJlY3RpdmVzOnMsZmllbGRzOm99KX1wYXJzZVVuaW9uVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ1bmlvbiIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuVU5JT05fVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cix0eXBlczpzfSl9cGFyc2VVbmlvbk1lbWJlclR5cGVzKCl7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUyk/dGhpcy5kZWxpbWl0ZWRNYW55KGwuUElQRSx0aGlzLnBhcnNlTmFtZWRUeXBlKTpbXX1wYXJzZUVudW1UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5FTlVNX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsdmFsdWVzOnN9KX1wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbixsLkJSQUNFX1IpfXBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VFbnVtVmFsdWVOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9WQUxVRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cn0pfXBhcnNlRW51bVZhbHVlTmFtZSgpe2lmKHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09InRydWUifHx0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJmYWxzZSJ8fHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09Im51bGwiKXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLHRoaXMuX2xleGVyLnRva2VuLnN0YXJ0LGAke3dlKHRoaXMuX2xleGVyLnRva2VuKX0gaXMgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBhbiBlbnVtIHZhbHVlLmApO3JldHVybiB0aGlzLnBhcnNlTmFtZSgpfXBhcnNlSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VJbnB1dFZhbHVlRGVmLGwuQlJBQ0VfUil9cGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci5sb29rYWhlYWQoKTtpZih0LmtpbmQ9PT1sLk5BTUUpc3dpdGNoKHQudmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYUV4dGVuc2lvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZUV4dGVuc2lvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVFeHRlbnNpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZUV4dGVuc2lvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKCl9dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfXBhcnNlU2NoZW1hRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgic2NoZW1hIik7Y29uc3Qgbj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksaT10aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGwuQlJBQ0VfUik7aWYobi5sZW5ndGg9PT0wJiZpLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NIRU1BX0VYVEVOU0lPTixkaXJlY3RpdmVzOm4sb3BlcmF0aW9uVHlwZXM6aX0pfXBhcnNlU2NhbGFyVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtpZihpLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NBTEFSX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOml9KX1wYXJzZU9iamVjdFR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wJiZzLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT0JKRUNUX1RZUEVfRVhURU5TSU9OLG5hbWU6bixpbnRlcmZhY2VzOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiaW50ZXJmYWNlIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wJiZzLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5URVJGQUNFX1RZUEVfRVhURU5TSU9OLG5hbWU6bixpbnRlcmZhY2VzOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VVbmlvblR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJ1bmlvbiIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuVU5JT05fVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSx0eXBlczpyfSl9cGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5FTlVNX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksdmFsdWVzOnJ9KX1wYXJzZUlucHV0T2JqZWN0VHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSl9cGFyc2VEaXJlY3RpdmVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiZGlyZWN0aXZlIiksdGhpcy5leHBlY3RUb2tlbihsLkFUKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQXJndW1lbnREZWZzKCkscz10aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgicmVwZWF0YWJsZSIpO3RoaXMuZXhwZWN0S2V5d29yZCgib24iKTtjb25zdCBvPXRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5ESVJFQ1RJVkVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxhcmd1bWVudHM6cixyZXBlYXRhYmxlOnMsbG9jYXRpb25zOm99KX1wYXJzZURpcmVjdGl2ZUxvY2F0aW9ucygpe3JldHVybiB0aGlzLmRlbGltaXRlZE1hbnkobC5QSVBFLHRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbil9cGFyc2VEaXJlY3RpdmVMb2NhdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlTmFtZSgpO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHZSxuLnZhbHVlKSlyZXR1cm4gbjt0aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9bm9kZSh0LG4pe3JldHVybiB0aGlzLl9vcHRpb25zLm5vTG9jYXRpb24hPT0hMCYmKG4ubG9jPW5ldyBhbih0LHRoaXMuX2xleGVyLmxhc3RUb2tlbix0aGlzLl9sZXhlci5zb3VyY2UpKSxufXBlZWsodCl7cmV0dXJuIHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT10fWV4cGVjdFRva2VuKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09dClyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSxuO3Rocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYEV4cGVjdGVkICR7U3QodCl9LCBmb3VuZCAke3dlKG4pfS5gKX1leHBlY3RPcHRpb25hbFRva2VuKHQpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09dD8odGhpcy5hZHZhbmNlTGV4ZXIoKSwhMCk6ITF9ZXhwZWN0S2V5d29yZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PWwuTkFNRSYmbi52YWx1ZT09PXQpdGhpcy5hZHZhbmNlTGV4ZXIoKTtlbHNlIHRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYEV4cGVjdGVkICIke3R9IiwgZm91bmQgJHt3ZShuKX0uYCl9ZXhwZWN0T3B0aW9uYWxLZXl3b3JkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIG4ua2luZD09PWwuTkFNRSYmbi52YWx1ZT09PXQ/KHRoaXMuYWR2YW5jZUxleGVyKCksITApOiExfXVuZXhwZWN0ZWQodCl7Y29uc3Qgbj10IT1udWxsP3Q6dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYFVuZXhwZWN0ZWQgJHt3ZShuKX0uYCl9YW55KHQsbixpKXt0aGlzLmV4cGVjdFRva2VuKHQpO2NvbnN0IHI9W107Zm9yKDshdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpOylyLnB1c2gobi5jYWxsKHRoaXMpKTtyZXR1cm4gcn1vcHRpb25hbE1hbnkodCxuLGkpe2lmKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KSl7Y29uc3Qgcj1bXTtkbyByLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSghdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpKTtyZXR1cm4gcn1yZXR1cm5bXX1tYW55KHQsbixpKXt0aGlzLmV4cGVjdFRva2VuKHQpO2NvbnN0IHI9W107ZG8gci5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUoIXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKSk7cmV0dXJuIHJ9ZGVsaW1pdGVkTWFueSh0LG4pe3RoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KTtjb25zdCBpPVtdO2RvIGkucHVzaChuLmNhbGwodGhpcykpO3doaWxlKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KSk7cmV0dXJuIGl9YWR2YW5jZUxleGVyKCl7Y29uc3R7bWF4VG9rZW5zOnR9PXRoaXMuX29wdGlvbnMsbj10aGlzLl9sZXhlci5hZHZhbmNlKCk7aWYobi5raW5kIT09bC5FT0YmJigrK3RoaXMuX3Rva2VuQ291bnRlcix0IT09dm9pZCAwJiZ0aGlzLl90b2tlbkNvdW50ZXI+dCkpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRG9jdW1lbnQgY29udGFpbnMgbW9yZSB0aGF0ICR7dH0gdG9rZW5zLiBQYXJzaW5nIGFib3J0ZWQuYCl9fWZ1bmN0aW9uIHdlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gU3QoZS5raW5kKSsodCE9bnVsbD9gICIke3R9ImA6IiIpfWZ1bmN0aW9uIFN0KGUpe3JldHVybiBwbihlKT9gIiR7ZX0iYDplfWZ1bmN0aW9uIFJuKGUpe3JldHVybmAiJHtlLnJlcGxhY2UoUG4sTG4pfSJgfWNvbnN0IFBuPS9bXHgwMC1ceDFmXHgyMlx4NWNceDdmLVx4OWZdL2c7ZnVuY3Rpb24gTG4oZSl7cmV0dXJuIEZuW2UuY2hhckNvZGVBdCgwKV19Y29uc3QgRm49WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiLCIiLCIiLCdcXCInLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJcXFxcIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiXFx1MDA3RiIsIlxcdTAwODAiLCJcXHUwMDgxIiwiXFx1MDA4MiIsIlxcdTAwODMiLCJcXHUwMDg0IiwiXFx1MDA4NSIsIlxcdTAwODYiLCJcXHUwMDg3IiwiXFx1MDA4OCIsIlxcdTAwODkiLCJcXHUwMDhBIiwiXFx1MDA4QiIsIlxcdTAwOEMiLCJcXHUwMDhEIiwiXFx1MDA4RSIsIlxcdTAwOEYiLCJcXHUwMDkwIiwiXFx1MDA5MSIsIlxcdTAwOTIiLCJcXHUwMDkzIiwiXFx1MDA5NCIsIlxcdTAwOTUiLCJcXHUwMDk2IiwiXFx1MDA5NyIsIlxcdTAwOTgiLCJcXHUwMDk5IiwiXFx1MDA5QSIsIlxcdTAwOUIiLCJcXHUwMDlDIiwiXFx1MDA5RCIsIlxcdTAwOUUiLCJcXHUwMDlGIl0sTW49T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gJG4oZSx0LG49Z3Qpe2NvbnN0IGk9bmV3IE1hcDtmb3IoY29uc3QgRSBvZiBPYmplY3QudmFsdWVzKFQpKWkuc2V0KEUsQm4odCxFKSk7bGV0IHIscz1BcnJheS5pc0FycmF5KGUpLG89W2VdLGM9LTEsZj1bXSxkPWUsdSx5O2NvbnN0IHY9W10sYj1bXTtkb3tjKys7Y29uc3QgRT1jPT09by5sZW5ndGgsQz1FJiZmLmxlbmd0aCE9PTA7aWYoRSl7aWYodT1iLmxlbmd0aD09PTA/dm9pZCAwOnZbdi5sZW5ndGgtMV0sZD15LHk9Yi5wb3AoKSxDKWlmKHMpe2Q9ZC5zbGljZSgpO2xldCBSPTA7Zm9yKGNvbnN0WyQscV1vZiBmKXtjb25zdCBCPSQtUjtxPT09bnVsbD8oZC5zcGxpY2UoQiwxKSxSKyspOmRbQl09cX19ZWxzZXtkPUQoe30sZCk7Zm9yKGNvbnN0W1IsJF1vZiBmKWRbUl09JH1jPXIuaW5kZXgsbz1yLmtleXMsZj1yLmVkaXRzLHM9ci5pbkFycmF5LHI9ci5wcmV2fWVsc2UgaWYoeSl7aWYodT1zP2M6b1tjXSxkPXlbdV0sZD09bnVsbCljb250aW51ZTt2LnB1c2godSl9bGV0IHc7aWYoIUFycmF5LmlzQXJyYXkoZCkpe3ZhciBtLE47dnQoZCl8fG9lKCExLGBJbnZhbGlkIEFTVCBOb2RlOiAke1llKGQpfS5gKTtjb25zdCBSPUU/KG09aS5nZXQoZC5raW5kKSk9PT1udWxsfHxtPT09dm9pZCAwP3ZvaWQgMDptLmxlYXZlOihOPWkuZ2V0KGQua2luZCkpPT09bnVsbHx8Tj09PXZvaWQgMD92b2lkIDA6Ti5lbnRlcjtpZih3PVI9PW51bGw/dm9pZCAwOlIuY2FsbCh0LGQsdSx5LHYsYiksdz09PU1uKWJyZWFrO2lmKHc9PT0hMSl7aWYoIUUpe3YucG9wKCk7Y29udGludWV9fWVsc2UgaWYodyE9PXZvaWQgMCYmKGYucHVzaChbdSx3XSksIUUpKWlmKHZ0KHcpKWQ9dztlbHNle3YucG9wKCk7Y29udGludWV9fWlmKHc9PT12b2lkIDAmJkMmJmYucHVzaChbdSxkXSksRSl2LnBvcCgpO2Vsc2V7dmFyIGc7cj17aW5BcnJheTpzLGluZGV4OmMsa2V5czpvLGVkaXRzOmYscHJldjpyfSxzPUFycmF5LmlzQXJyYXkoZCksbz1zP2Q6KGc9bltkLmtpbmRdKSE9PW51bGwmJmchPT12b2lkIDA/ZzpbXSxjPS0xLGY9W10seSYmYi5wdXNoKHkpLHk9ZH19d2hpbGUociE9PXZvaWQgMCk7cmV0dXJuIGYubGVuZ3RoIT09MD9mW2YubGVuZ3RoLTFdWzFdOmV9ZnVuY3Rpb24gQm4oZSx0KXtjb25zdCBuPWVbdF07cmV0dXJuIHR5cGVvZiBuPT0ib2JqZWN0Ij9uOnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tlbnRlcjpuLGxlYXZlOnZvaWQgMH06e2VudGVyOmUuZW50ZXIsbGVhdmU6ZS5sZWF2ZX19ZnVuY3Rpb24gVW4oZSl7cmV0dXJuICRuKGUsam4pfWNvbnN0IFZuPTgwLGpuPXtOYW1lOntsZWF2ZTplPT5lLnZhbHVlfSxWYXJpYWJsZTp7bGVhdmU6ZT0+IiQiK2UubmFtZX0sRG9jdW1lbnQ6e2xlYXZlOmU9PnAoZS5kZWZpbml0aW9ucyxgCgpgKX0sT3BlcmF0aW9uRGVmaW5pdGlvbjp7bGVhdmUoZSl7Y29uc3QgdD1PKCIoIixwKGUudmFyaWFibGVEZWZpbml0aW9ucywiLCAiKSwiKSIpLG49cChbZS5vcGVyYXRpb24scChbZS5uYW1lLHRdKSxwKGUuZGlyZWN0aXZlcywiICIpXSwiICIpO3JldHVybihuPT09InF1ZXJ5Ij8iIjpuKyIgIikrZS5zZWxlY3Rpb25TZXR9fSxWYXJpYWJsZURlZmluaXRpb246e2xlYXZlOih7dmFyaWFibGU6ZSx0eXBlOnQsZGVmYXVsdFZhbHVlOm4sZGlyZWN0aXZlczppfSk9PmUrIjogIit0K08oIiA9ICIsbikrTygiICIscChpLCIgIikpfSxTZWxlY3Rpb25TZXQ6e2xlYXZlOih7c2VsZWN0aW9uczplfSk9PmVlKGUpfSxGaWVsZDp7bGVhdmUoe2FsaWFzOmUsbmFtZTp0LGFyZ3VtZW50czpuLGRpcmVjdGl2ZXM6aSxzZWxlY3Rpb25TZXQ6cn0pe2NvbnN0IHM9TygiIixlLCI6ICIpK3Q7bGV0IG89cytPKCIoIixwKG4sIiwgIiksIikiKTtyZXR1cm4gby5sZW5ndGg+Vm4mJihvPXMrTyhgKApgLERlKHAobixgCmApKSxgCilgKSkscChbbyxwKGksIiAiKSxyXSwiICIpfX0sQXJndW1lbnQ6e2xlYXZlOih7bmFtZTplLHZhbHVlOnR9KT0+ZSsiOiAiK3R9LEZyYWdtZW50U3ByZWFkOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnR9KT0+Ii4uLiIrZStPKCIgIixwKHQsIiAiKSl9LElubGluZUZyYWdtZW50OntsZWF2ZTooe3R5cGVDb25kaXRpb246ZSxkaXJlY3RpdmVzOnQsc2VsZWN0aW9uU2V0Om59KT0+cChbIi4uLiIsTygib24gIixlKSxwKHQsIiAiKSxuXSwiICIpfSxGcmFnbWVudERlZmluaXRpb246e2xlYXZlOih7bmFtZTplLHR5cGVDb25kaXRpb246dCx2YXJpYWJsZURlZmluaXRpb25zOm4sZGlyZWN0aXZlczppLHNlbGVjdGlvblNldDpyfSk9PmBmcmFnbWVudCAke2V9JHtPKCIoIixwKG4sIiwgIiksIikiKX0gb24gJHt0fSAke08oIiIscChpLCIgIiksIiAiKX1gK3J9LEludFZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sRmxvYXRWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LFN0cmluZ1ZhbHVlOntsZWF2ZTooe3ZhbHVlOmUsYmxvY2s6dH0pPT50P2huKGUpOlJuKGUpfSxCb29sZWFuVmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lPyJ0cnVlIjoiZmFsc2UifSxOdWxsVmFsdWU6e2xlYXZlOigpPT4ibnVsbCJ9LEVudW1WYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LExpc3RWYWx1ZTp7bGVhdmU6KHt2YWx1ZXM6ZX0pPT4iWyIrcChlLCIsICIpKyJdIn0sT2JqZWN0VmFsdWU6e2xlYXZlOih7ZmllbGRzOmV9KT0+InsiK3AoZSwiLCAiKSsifSJ9LE9iamVjdEZpZWxkOntsZWF2ZTooe25hbWU6ZSx2YWx1ZTp0fSk9PmUrIjogIit0fSxEaXJlY3RpdmU6e2xlYXZlOih7bmFtZTplLGFyZ3VtZW50czp0fSk9PiJAIitlK08oIigiLHAodCwiLCAiKSwiKSIpfSxOYW1lZFR5cGU6e2xlYXZlOih7bmFtZTplfSk9PmV9LExpc3RUeXBlOntsZWF2ZTooe3R5cGU6ZX0pPT4iWyIrZSsiXSJ9LE5vbk51bGxUeXBlOntsZWF2ZTooe3R5cGU6ZX0pPT5lKyIhIn0sU2NoZW1hRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLGRpcmVjdGl2ZXM6dCxvcGVyYXRpb25UeXBlczpufSk9Pk8oIiIsZSxgCmApK3AoWyJzY2hlbWEiLHAodCwiICIpLGVlKG4pXSwiICIpfSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtvcGVyYXRpb246ZSx0eXBlOnR9KT0+ZSsiOiAiK3R9LFNjYWxhclR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bn0pPT5PKCIiLGUsYApgKStwKFsic2NhbGFyIix0LHAobiwiICIpXSwiICIpfSxPYmplY3RUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxpbnRlcmZhY2VzOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSk9Pk8oIiIsZSxgCmApK3AoWyJ0eXBlIix0LE8oImltcGxlbWVudHMgIixwKG4sIiAmICIpKSxwKGksIiAiKSxlZShyKV0sIiAiKX0sRmllbGREZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGFyZ3VtZW50czpuLHR5cGU6aSxkaXJlY3RpdmVzOnJ9KT0+TygiIixlLGAKYCkrdCsoT3Qobik/TyhgKApgLERlKHAobixgCmApKSxgCilgKTpPKCIoIixwKG4sIiwgIiksIikiKSkrIjogIitpK08oIiAiLHAociwiICIpKX0sSW5wdXRWYWx1ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsdHlwZTpuLGRlZmF1bHRWYWx1ZTppLGRpcmVjdGl2ZXM6cn0pPT5PKCIiLGUsYApgKStwKFt0KyI6ICIrbixPKCI9ICIsaSkscChyLCIgIildLCIgIil9LEludGVyZmFjZVR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGludGVyZmFjZXM6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KT0+TygiIixlLGAKYCkrcChbImludGVyZmFjZSIsdCxPKCJpbXBsZW1lbnRzICIscChuLCIgJiAiKSkscChpLCIgIiksZWUocildLCIgIil9LFVuaW9uVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLHR5cGVzOml9KT0+TygiIixlLGAKYCkrcChbInVuaW9uIix0LHAobiwiICIpLE8oIj0gIixwKGksIiB8ICIpKV0sIiAiKX0sRW51bVR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bix2YWx1ZXM6aX0pPT5PKCIiLGUsYApgKStwKFsiZW51bSIsdCxwKG4sIiAiKSxlZShpKV0sIiAiKX0sRW51bVZhbHVlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm59KT0+TygiIixlLGAKYCkrcChbdCxwKG4sIiAiKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+TygiIixlLGAKYCkrcChbImlucHV0Iix0LHAobiwiICIpLGVlKGkpXSwiICIpfSxEaXJlY3RpdmVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGFyZ3VtZW50czpuLHJlcGVhdGFibGU6aSxsb2NhdGlvbnM6cn0pPT5PKCIiLGUsYApgKSsiZGlyZWN0aXZlIEAiK3QrKE90KG4pP08oYCgKYCxEZShwKG4sYApgKSksYAopYCk6TygiKCIscChuLCIsICIpLCIpIikpKyhpPyIgcmVwZWF0YWJsZSI6IiIpKyIgb24gIitwKHIsIiB8ICIpfSxTY2hlbWFFeHRlbnNpb246e2xlYXZlOih7ZGlyZWN0aXZlczplLG9wZXJhdGlvblR5cGVzOnR9KT0+cChbImV4dGVuZCBzY2hlbWEiLHAoZSwiICIpLGVlKHQpXSwiICIpfSxTY2FsYXJUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnR9KT0+cChbImV4dGVuZCBzY2FsYXIiLGUscCh0LCIgIildLCIgIil9LE9iamVjdFR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGludGVyZmFjZXM6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+cChbImV4dGVuZCB0eXBlIixlLE8oImltcGxlbWVudHMgIixwKHQsIiAmICIpKSxwKG4sIiAiKSxlZShpKV0sIiAiKX0sSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsaW50ZXJmYWNlczp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5wKFsiZXh0ZW5kIGludGVyZmFjZSIsZSxPKCJpbXBsZW1lbnRzICIscCh0LCIgJiAiKSkscChuLCIgIiksZWUoaSldLCIgIil9LFVuaW9uVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LHR5cGVzOm59KT0+cChbImV4dGVuZCB1bmlvbiIsZSxwKHQsIiAiKSxPKCI9ICIscChuLCIgfCAiKSldLCIgIil9LEVudW1UeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsdmFsdWVzOm59KT0+cChbImV4dGVuZCBlbnVtIixlLHAodCwiICIpLGVlKG4pXSwiICIpfSxJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCxmaWVsZHM6bn0pPT5wKFsiZXh0ZW5kIGlucHV0IixlLHAodCwiICIpLGVlKG4pXSwiICIpfX07ZnVuY3Rpb24gcChlLHQ9IiIpe3ZhciBuO3JldHVybihuPWU9PW51bGw/dm9pZCAwOmUuZmlsdGVyKGk9PmkpLmpvaW4odCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOiIifWZ1bmN0aW9uIGVlKGUpe3JldHVybiBPKGB7CmAsRGUocChlLGAKYCkpLGAKfWApfWZ1bmN0aW9uIE8oZSx0LG49IiIpe3JldHVybiB0IT1udWxsJiZ0IT09IiI/ZSt0K246IiJ9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIE8oIiAgIixlLnJlcGxhY2UoL1xuL2csYAogIGApKX1mdW5jdGlvbiBPdChlKXt2YXIgdDtyZXR1cm4odD1lPT1udWxsP3ZvaWQgMDplLnNvbWUobj0+bi5pbmNsdWRlcyhgCmApKSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6ITF9Y29uc3Qgd3Q9ZT0+e3ZhciBpLHI7bGV0IHQ7Y29uc3Qgbj1lLmRlZmluaXRpb25zLmZpbHRlcihzPT5zLmtpbmQ9PT0iT3BlcmF0aW9uRGVmaW5pdGlvbiIpO3JldHVybiBuLmxlbmd0aD09PTEmJih0PShyPShpPW5bMF0pPT1udWxsP3ZvaWQgMDppLm5hbWUpPT1udWxsP3ZvaWQgMDpyLnZhbHVlKSx0fSxKZT1lPT57aWYodHlwZW9mIGU9PSJzdHJpbmciKXtsZXQgbjt0cnl7Y29uc3QgaT1JdChlKTtuPXd0KGkpfWNhdGNoKGkpe31yZXR1cm57cXVlcnk6ZSxvcGVyYXRpb25OYW1lOm59fWNvbnN0IHQ9d3QoZSk7cmV0dXJue3F1ZXJ5OlVuKGUpLG9wZXJhdGlvbk5hbWU6dH19O2NsYXNzIGRlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuKXtjb25zdCBpPWAke2RlLmV4dHJhY3RNZXNzYWdlKHQpfTogJHtKU09OLnN0cmluZ2lmeSh7cmVzcG9uc2U6dCxyZXF1ZXN0Om59KX1gO3N1cGVyKGkpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGRlLnByb3RvdHlwZSksdGhpcy5yZXNwb25zZT10LHRoaXMucmVxdWVzdD1uLHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT09ImZ1bmN0aW9uIiYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxkZSl9c3RhdGljIGV4dHJhY3RNZXNzYWdlKHQpe3ZhciBuLGkscjtyZXR1cm4ocj0oaT0obj10LmVycm9ycyk9PW51bGw/dm9pZCAwOm5bMF0pPT1udWxsP3ZvaWQgMDppLm1lc3NhZ2UpIT1udWxsP3I6YEdyYXBoUUwgRXJyb3IgKENvZGU6ICR7dC5zdGF0dXN9KWB9fXZhciBxbj10eXBlb2YgZ2xvYmFsVGhpcyE9InVuZGVmaW5lZCI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIj93aW5kb3c6dHlwZW9mIGdsb2JhbCE9InVuZGVmaW5lZCI/Z2xvYmFsOnR5cGVvZiBzZWxmIT0idW5kZWZpbmVkIj9zZWxmOnt9O2Z1bmN0aW9uIER0KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9dmFyIFFlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjpxbixpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe3RoaXMuZmV0Y2g9ITEsdGhpcy5ET01FeGNlcHRpb249bi5ET01FeGNlcHRpb259cmV0dXJuIHMucHJvdG90eXBlPW4sbmV3IHN9KCk7KGZ1bmN0aW9uKHMpeyhmdW5jdGlvbihvKXt2YXIgYz17c2VhcmNoUGFyYW1zOiJVUkxTZWFyY2hQYXJhbXMiaW4gcyxpdGVyYWJsZToiU3ltYm9sImluIHMmJiJpdGVyYXRvciJpbiBTeW1ib2wsYmxvYjoiRmlsZVJlYWRlciJpbiBzJiYiQmxvYiJpbiBzJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goYSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOiJGb3JtRGF0YSJpbiBzLGFycmF5QnVmZmVyOiJBcnJheUJ1ZmZlciJpbiBzfTtmdW5jdGlvbiBmKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX1pZihjLmFycmF5QnVmZmVyKXZhciBkPVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZkLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZnVuY3Rpb24geShhKXtpZih0eXBlb2YgYSE9InN0cmluZyImJihhPVN0cmluZyhhKSksL1teYS16MC05XC0jJCUmJyorLl5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHYoYSl7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIiYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGIoYSl7dmFyIGg9e25leHQ6ZnVuY3Rpb24oKXt2YXIgXz1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6Xz09PXZvaWQgMCx2YWx1ZTpffX19O3JldHVybiBjLml0ZXJhYmxlJiYoaFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxofWZ1bmN0aW9uIG0oYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIG0/YS5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7dGhpcy5hcHBlbmQoXyxoKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpcy5hcHBlbmQoaFswXSxoWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihoKXt0aGlzLmFwcGVuZChoLGFbaF0pfSx0aGlzKX1tLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxoKXthPXkoYSksaD12KGgpO3ZhciBfPXRoaXMubWFwW2FdO3RoaXMubWFwW2FdPV8/XysiLCAiK2g6aH0sbS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFt5KGEpXX0sbS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPXkoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sbS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eSh5KGEpKX0sbS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsaCl7dGhpcy5tYXBbeShhKV09dihoKX0sbS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGgpe2Zvcih2YXIgXyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShfKSYmYS5jYWxsKGgsdGhpcy5tYXBbX10sXyx0aGlzKX0sbS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oaCxfKXthLnB1c2goXyl9KSxiKGEpfSxtLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgpe2EucHVzaChoKX0pLGIoYSl9LG0ucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7YS5wdXNoKFtfLGhdKX0pLGIoYSl9LGMuaXRlcmFibGUmJihtLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPW0ucHJvdG90eXBlLmVudHJpZXMpO2Z1bmN0aW9uIE4oYSl7aWYoYS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaCxfKXthLm9ubG9hZD1mdW5jdGlvbigpe2goYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtfKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIEUoYSl7dmFyIGg9bmV3IEZpbGVSZWFkZXIsXz1nKGgpO3JldHVybiBoLnJlYWRBc0FycmF5QnVmZmVyKGEpLF99ZnVuY3Rpb24gQyhhKXt2YXIgaD1uZXcgRmlsZVJlYWRlcixfPWcoaCk7cmV0dXJuIGgucmVhZEFzVGV4dChhKSxffWZ1bmN0aW9uIHcoYSl7Zm9yKHZhciBoPW5ldyBVaW50OEFycmF5KGEpLF89bmV3IEFycmF5KGgubGVuZ3RoKSxBPTA7QTxoLmxlbmd0aDtBKyspX1tBXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbQV0pO3JldHVybiBfLmpvaW4oIiIpfWZ1bmN0aW9uIFIoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgaD1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBoLnNldChuZXcgVWludDhBcnJheShhKSksaC5idWZmZXJ9ZnVuY3Rpb24gJCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe3RoaXMuX2JvZHlJbml0PWEsYT90eXBlb2YgYT09InN0cmluZyI/dGhpcy5fYm9keVRleHQ9YTpjLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keUJsb2I9YTpjLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5Rm9ybURhdGE9YTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlUZXh0PWEudG9TdHJpbmcoKTpjLmFycmF5QnVmZmVyJiZjLmJsb2ImJmYoYSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1SKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOmMuYXJyYXlCdWZmZXImJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKXx8dShhKSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPVIoYSk6dGhpcy5fYm9keVRleHQ9YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk6dGhpcy5fYm9keVRleHQ9IiIsdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCh0eXBlb2YgYT09InN0cmluZyI/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYy5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Tih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP04odGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oRSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1OKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIEModGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHcodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMuZm9ybURhdGEmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oUyl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc312YXIgcT1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2Z1bmN0aW9uIEIoYSl7dmFyIGg9YS50b1VwcGVyQ2FzZSgpO3JldHVybiBxLmluZGV4T2YoaCk+LTE/aDphfWZ1bmN0aW9uIEkoYSxoKXtoPWh8fHt9O3ZhciBfPWguYm9keTtpZihhIGluc3RhbmNlb2YgSSl7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD1hLnVybCx0aGlzLmNyZWRlbnRpYWxzPWEuY3JlZGVudGlhbHMsaC5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBtKGEuaGVhZGVycykpLHRoaXMubWV0aG9kPWEubWV0aG9kLHRoaXMubW9kZT1hLm1vZGUsdGhpcy5zaWduYWw9YS5zaWduYWwsIV8mJmEuX2JvZHlJbml0IT1udWxsJiYoXz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWguY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJzYW1lLW9yaWdpbiIsKGguaGVhZGVyc3x8IXRoaXMuaGVhZGVycykmJih0aGlzLmhlYWRlcnM9bmV3IG0oaC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9QihoLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiKSx0aGlzLm1vZGU9aC5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9aC5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwodGhpcy5tZXRob2Q9PT0iR0VUInx8dGhpcy5tZXRob2Q9PT0iSEVBRCIpJiZfKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkoXyl9SS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfTtmdW5jdGlvbiBTKGEpe3ZhciBoPW5ldyBGb3JtRGF0YTtyZXR1cm4gYS50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe2lmKF8pe3ZhciBBPV8uc3BsaXQoIj0iKSxrPUEuc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIikseD1BLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7aC5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KGspLGRlY29kZVVSSUNvbXBvbmVudCh4KSl9fSksaH1mdW5jdGlvbiBqKGEpe3ZhciBoPW5ldyBtLF89YS5yZXBsYWNlKC9ccj9cbltcdCBdKy9nLCIgIik7cmV0dXJuIF8uc3BsaXQoL1xyP1xuLykuZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgaz1BLnNwbGl0KCI6IikseD1rLnNoaWZ0KCkudHJpbSgpO2lmKHgpe3ZhciBjZT1rLmpvaW4oIjoiKS50cmltKCk7aC5hcHBlbmQoeCxjZSl9fSksaH0kLmNhbGwoSS5wcm90b3R5cGUpO2Z1bmN0aW9uIFUoYSxoKXtofHwoaD17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz1oLnN0YXR1cz09PXZvaWQgMD8yMDA6aC5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGg/aC5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBtKGguaGVhZGVycyksdGhpcy51cmw9aC51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGEpfSQuY2FsbChVLnByb3RvdHlwZSksVS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFUodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBtKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LFUuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIGEudHlwZT0iZXJyb3IiLGF9O3ZhciB6PVszMDEsMzAyLDMwMywzMDcsMzA4XTtVLnJlZGlyZWN0PWZ1bmN0aW9uKGEsaCl7aWYoei5pbmRleE9mKGgpPT09LTEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IFUobnVsbCx7c3RhdHVzOmgsaGVhZGVyczp7bG9jYXRpb246YX19KX0sby5ET01FeGNlcHRpb249cy5ET01FeGNlcHRpb247dHJ5e25ldyBvLkRPTUV4Y2VwdGlvbn1jYXRjaChhKXtvLkRPTUV4Y2VwdGlvbj1mdW5jdGlvbihoLF8pe3RoaXMubWVzc2FnZT1oLHRoaXMubmFtZT1fO3ZhciBBPUVycm9yKGgpO3RoaXMuc3RhY2s9QS5zdGFja30sby5ET01FeGNlcHRpb24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I9by5ET01FeGNlcHRpb259ZnVuY3Rpb24gSyhhLGgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfLEEpe3ZhciBrPW5ldyBJKGEsaCk7aWYoay5zaWduYWwmJmsuc2lnbmFsLmFib3J0ZWQpcmV0dXJuIEEobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gY2UoKXt4LmFib3J0KCl9eC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgSD17c3RhdHVzOnguc3RhdHVzLHN0YXR1c1RleHQ6eC5zdGF0dXNUZXh0LGhlYWRlcnM6aih4LmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O0gudXJsPSJyZXNwb25zZVVSTCJpbiB4P3gucmVzcG9uc2VVUkw6SC5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBzZT0icmVzcG9uc2UiaW4geD94LnJlc3BvbnNlOngucmVzcG9uc2VUZXh0O18obmV3IFUoc2UsSCkpfSx4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtBKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LHgub250aW1lb3V0PWZ1bmN0aW9uKCl7QShuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSx4Lm9uYWJvcnQ9ZnVuY3Rpb24oKXtBKG5ldyBvLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LHgub3BlbihrLm1ldGhvZCxrLnVybCwhMCksay5jcmVkZW50aWFscz09PSJpbmNsdWRlIj94LndpdGhDcmVkZW50aWFscz0hMDprLmNyZWRlbnRpYWxzPT09Im9taXQiJiYoeC53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4geCYmYy5ibG9iJiYoeC5yZXNwb25zZVR5cGU9ImJsb2IiKSxrLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihILHNlKXt4LnNldFJlcXVlc3RIZWFkZXIoc2UsSCl9KSxrLnNpZ25hbCYmKGsuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjZSkseC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt4LnJlYWR5U3RhdGU9PT00JiZrLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpfSkseC5zZW5kKHR5cGVvZiBrLl9ib2R5SW5pdD09InVuZGVmaW5lZCI/bnVsbDprLl9ib2R5SW5pdCl9KX1yZXR1cm4gSy5wb2x5ZmlsbD0hMCxzLmZldGNofHwocy5mZXRjaD1LLHMuSGVhZGVycz1tLHMuUmVxdWVzdD1JLHMuUmVzcG9uc2U9VSksby5IZWFkZXJzPW0sby5SZXF1ZXN0PUksby5SZXNwb25zZT1VLG8uZmV0Y2g9SyxPYmplY3QuZGVmaW5lUHJvcGVydHkobywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksb30pKHt9KX0pKGkpLGkuZmV0Y2gucG9ueWZpbGw9ITAsZGVsZXRlIGkuZmV0Y2gucG9seWZpbGw7dmFyIHI9aTt0PXIuZmV0Y2gsdC5kZWZhdWx0PXIuZmV0Y2gsdC5mZXRjaD1yLmZldGNoLHQuSGVhZGVycz1yLkhlYWRlcnMsdC5SZXF1ZXN0PXIuUmVxdWVzdCx0LlJlc3BvbnNlPXIuUmVzcG9uc2UsZS5leHBvcnRzPXR9KShRZSxRZS5leHBvcnRzKTt2YXIgQ2U9UWUuZXhwb3J0cyxrZT1EdChDZSksR249Rih7X19wcm90b19fOm51bGwsZGVmYXVsdDprZX0sW0NlXSk7Y29uc3QgcGU9ZT0+e2xldCB0PXt9O3JldHVybiBlJiYodHlwZW9mIEhlYWRlcnMhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSGVhZGVyc3x8R24mJkNlLkhlYWRlcnMmJmUgaW5zdGFuY2VvZiBDZS5IZWFkZXJzP3Q9WChlKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoW24saV0pPT57biYmaSE9PXZvaWQgMCYmKHRbbl09aSl9KTp0PWUpLHR9LEN0PWU9PmUucmVwbGFjZSgvKFtccyxdfCNbXlxuXHJdKykrL2csIiAiKS50cmltKCksem49ZT0+e2lmKCFBcnJheS5pc0FycmF5KGUucXVlcnkpKXtjb25zdCBpPWUscj1bYHF1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEN0KGkucXVlcnkpKX1gXTtyZXR1cm4gZS52YXJpYWJsZXMmJnIucHVzaChgdmFyaWFibGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuanNvblNlcmlhbGl6ZXIuc3RyaW5naWZ5KGkudmFyaWFibGVzKSl9YCksaS5vcGVyYXRpb25OYW1lJiZyLnB1c2goYG9wZXJhdGlvbk5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoaS5vcGVyYXRpb25OYW1lKX1gKSxyLmpvaW4oIiYiKX1pZih0eXBlb2YgZS52YXJpYWJsZXMhPSJ1bmRlZmluZWQiJiYhQXJyYXkuaXNBcnJheShlLnZhcmlhYmxlcykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHF1ZXJ5IHdpdGggZ2l2ZW4gdmFyaWFibGUgdHlwZSwgYXJyYXkgZXhwZWN0ZWQiKTtjb25zdCB0PWUsbj1lLnF1ZXJ5LnJlZHVjZSgoaSxyLHMpPT4oaS5wdXNoKHtxdWVyeTpDdChyKSx2YXJpYWJsZXM6dC52YXJpYWJsZXM/dC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkodC52YXJpYWJsZXNbc10pOnZvaWQgMH0pLGkpLFtdKTtyZXR1cm5gcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQodC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkobikpfWB9LEhuPWU9PnQ9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe3ZhciBOO2NvbnN0e3VybDpuLHF1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGZldGNoOm8sZmV0Y2hPcHRpb25zOmMsbWlkZGxld2FyZTpmfT10LGQ9RCh7fSx0LmhlYWRlcnMpO2xldCB1PSIiLHk7ZT09PSJQT1NUIj8oeT1KbihpLHIscyxjLmpzb25TZXJpYWxpemVyKSx0eXBlb2YgeT09InN0cmluZyImJihkWyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24vanNvbiIpKTp1PXpuKHtxdWVyeTppLHZhcmlhYmxlczpyLG9wZXJhdGlvbk5hbWU6cyxqc29uU2VyaWFsaXplcjooTj1jLmpzb25TZXJpYWxpemVyKSE9bnVsbD9OOlB9KTtjb25zdCB2PUQoe21ldGhvZDplLGhlYWRlcnM6ZCxib2R5Onl9LGMpO2xldCBiPW4sbT12O2lmKGYpe2NvbnN0IGc9eWllbGQgUHJvbWlzZS5yZXNvbHZlKGYoQmUoRCh7fSx2KSx7dXJsOm4sb3BlcmF0aW9uTmFtZTpzLHZhcmlhYmxlczpyfSkpKSx7dXJsOkN9PWcsdz12ZShnLFsidXJsIl0pO2I9QyxtPXd9cmV0dXJuIHUmJihiPWAke2J9PyR7dX1gKSx5aWVsZCBvKGIsbSl9KTtjbGFzcyBZbntjb25zdHJ1Y3Rvcih0LG49e30pe3RoaXMudXJsPXQsdGhpcy5yZXF1ZXN0Q29uZmlnPW4sdGhpcy5yYXdSZXF1ZXN0PSguLi5pKT0+USh0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3RbcixzLG9dPWksYz1VZShyLHMsbyksZz10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6ZixmZXRjaDpkPWtlLG1ldGhvZDp1PSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTp5LHJlc3BvbnNlTWlkZGxld2FyZTp2fT1nLGI9dmUoZyxbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6bX09dGhpcztjLnNpZ25hbCE9PXZvaWQgMCYmKGIuc2lnbmFsPWMuc2lnbmFsKTtjb25zdHtvcGVyYXRpb25OYW1lOk59PUplKGMucXVlcnkpO3JldHVybiBYZSh7dXJsOm0scXVlcnk6Yy5xdWVyeSx2YXJpYWJsZXM6Yy52YXJpYWJsZXMsaGVhZGVyczpEKEQoe30scGUoV2UoZikpKSxwZShjLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTpOLGZldGNoOmQsbWV0aG9kOnUsZmV0Y2hPcHRpb25zOmIsbWlkZGxld2FyZTp5fSkudGhlbihFPT4odiYmdihFKSxFKSkuY2F0Y2goRT0+e3Rocm93IHYmJnYoRSksRX0pfSl9cmVxdWVzdCh0LC4uLm4pe3JldHVybiBRKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtpLHJdPW4scz1JZSh0LGksciksTj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6byxmZXRjaDpjPWtlLG1ldGhvZDpmPSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTpkLHJlc3BvbnNlTWlkZGxld2FyZTp1fT1OLHk9dmUoTixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6dn09dGhpcztzLnNpZ25hbCE9PXZvaWQgMCYmKHkuc2lnbmFsPXMuc2lnbmFsKTtjb25zdHtxdWVyeTpiLG9wZXJhdGlvbk5hbWU6bX09SmUocy5kb2N1bWVudCk7cmV0dXJuIFhlKHt1cmw6dixxdWVyeTpiLHZhcmlhYmxlczpzLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShXZShvKSkpLHBlKHMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOm0sZmV0Y2g6YyxtZXRob2Q6ZixmZXRjaE9wdGlvbnM6eSxtaWRkbGV3YXJlOmR9KS50aGVuKGc9Pih1JiZ1KGcpLGcuZGF0YSkpLmNhdGNoKGc9Pnt0aHJvdyB1JiZ1KGcpLGd9KX0pfWJhdGNoUmVxdWVzdHModCxuKXt2YXIgZDtjb25zdCBpPVZlKHQsbiksZj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6cn09ZixzPXZlKGYsWyJoZWFkZXJzIl0pO2kuc2lnbmFsIT09dm9pZCAwJiYocy5zaWduYWw9aS5zaWduYWwpO2NvbnN0IG89aS5kb2N1bWVudHMubWFwKCh7ZG9jdW1lbnQ6dX0pPT5KZSh1KS5xdWVyeSksYz1pLmRvY3VtZW50cy5tYXAoKHt2YXJpYWJsZXM6dX0pPT51KTtyZXR1cm4gWGUoe3VybDp0aGlzLnVybCxxdWVyeTpvLHZhcmlhYmxlczpjLGhlYWRlcnM6RChEKHt9LHBlKFdlKHIpKSkscGUoaS5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6dm9pZCAwLGZldGNoOihkPXRoaXMucmVxdWVzdENvbmZpZy5mZXRjaCkhPW51bGw/ZDprZSxtZXRob2Q6dGhpcy5yZXF1ZXN0Q29uZmlnLm1ldGhvZHx8IlBPU1QiLGZldGNoT3B0aW9uczpzLG1pZGRsZXdhcmU6dGhpcy5yZXF1ZXN0Q29uZmlnLnJlcXVlc3RNaWRkbGV3YXJlfSkudGhlbih1PT4odGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1LmRhdGEpKS5jYXRjaCh1PT57dGhyb3cgdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1fSl9c2V0SGVhZGVycyh0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q29uZmlnLmhlYWRlcnM9dCx0aGlzfXNldEhlYWRlcih0LG4pe2NvbnN0e2hlYWRlcnM6aX09dGhpcy5yZXF1ZXN0Q29uZmlnO3JldHVybiBpP2lbdF09bjp0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz17W3RdOm59LHRoaXN9c2V0RW5kcG9pbnQodCl7cmV0dXJuIHRoaXMudXJsPXQsdGhpc319Y29uc3QgWGU9ZT0+USh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIHUseTtjb25zdHtxdWVyeTp0LHZhcmlhYmxlczpuLGZldGNoT3B0aW9uczppfT1lLHI9SG4oTSgodT1lLm1ldGhvZCkhPW51bGw/dToicG9zdCIpKSxzPUFycmF5LmlzQXJyYXkoZS5xdWVyeSksbz15aWVsZCByKGUpLGM9eWllbGQgUW4obywoeT1pLmpzb25TZXJpYWxpemVyKSE9bnVsbD95OlApLGY9QXJyYXkuaXNBcnJheShjKT8hYy5zb21lKCh7ZGF0YTpifSk9PiFiKTohIWMuZGF0YSxkPUFycmF5LmlzQXJyYXkoYyl8fCFjLmVycm9yc3x8QXJyYXkuaXNBcnJheShjLmVycm9ycykmJiFjLmVycm9ycy5sZW5ndGh8fGkuZXJyb3JQb2xpY3k9PT0iYWxsInx8aS5lcnJvclBvbGljeT09PSJpZ25vcmUiO2lmKG8ub2smJmQmJmYpe2NvbnN0IHY9KEFycmF5LmlzQXJyYXkoYyksYykse2Vycm9yczpifT12LG09dmUodixbImVycm9ycyJdKSxOPWkuZXJyb3JQb2xpY3k9PT0iaWdub3JlIj9tOmM7cmV0dXJuIEJlKEQoe30scz97ZGF0YTpOfTpOKSx7aGVhZGVyczpvLmhlYWRlcnMsc3RhdHVzOm8uc3RhdHVzfSl9ZWxzZXtjb25zdCBiPXR5cGVvZiBjPT0ic3RyaW5nIj97ZXJyb3I6Y306Yzt0aHJvdyBuZXcgZGUoQmUoRCh7fSxiKSx7c3RhdHVzOm8uc3RhdHVzLGhlYWRlcnM6by5oZWFkZXJzfSkse3F1ZXJ5OnQsdmFyaWFibGVzOm59KX19KSxKbj0oZSx0LG4saSk9Pntjb25zdCByPWkhPW51bGw/aTpQO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiByLnN0cmluZ2lmeSh7cXVlcnk6ZSx2YXJpYWJsZXM6dCxvcGVyYXRpb25OYW1lOm59KTtpZih0eXBlb2YgdCE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHM9ZS5yZWR1Y2UoKG8sYyxmKT0+KG8ucHVzaCh7cXVlcnk6Yyx2YXJpYWJsZXM6dD90W2ZdOnZvaWQgMH0pLG8pLFtdKTtyZXR1cm4gci5zdHJpbmdpZnkocyl9LFFuPShlLHQpPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgbjtyZXR1cm4gZS5oZWFkZXJzLmZvckVhY2goKGkscik9PntyLnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIiYmKG49aSl9KSxuJiYobi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKXx8bi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2dyYXBocWwranNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbC1yZXNwb25zZStqc29uIikpP3QucGFyc2UoeWllbGQgZS50ZXh0KCkpOmUudGV4dCgpfSksV2U9ZT0+dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSgpOmU7dmFyIFplPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt0PWUuZXhwb3J0cz1uLHQuZ2V0U2VyaWFsaXplPWk7ZnVuY3Rpb24gbihyLHMsbyxjKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixpKHMsYyksbyl9ZnVuY3Rpb24gaShyLHMpe3ZhciBvPVtdLGM9W107cmV0dXJuIHM9PW51bGwmJihzPWZ1bmN0aW9uKGYsZCl7cmV0dXJuIG9bMF09PT1kPyJbQ2lyY3VsYXIgfl0iOiJbQ2lyY3VsYXIgfi4iK2Muc2xpY2UoMCxvLmluZGV4T2YoZCkpLmpvaW4oIi4iKSsiXSJ9KSxmdW5jdGlvbihmLGQpe2lmKG8ubGVuZ3RoPjApe3ZhciB1PW8uaW5kZXhPZih0aGlzKTt+dT9vLnNwbGljZSh1KzEpOm8ucHVzaCh0aGlzKSx+dT9jLnNwbGljZSh1LDEvMCxmKTpjLnB1c2goZiksfm8uaW5kZXhPZihkKSYmKGQ9cy5jYWxsKHRoaXMsZixkKSl9ZWxzZSBvLnB1c2goZCk7cmV0dXJuIHI9PW51bGw/ZDpyLmNhbGwodGhpcyxmLGQpfX19KShaZSxaZS5leHBvcnRzKTt2YXIgWG49WmUuZXhwb3J0cyxtZT1EdChYbik7Y29uc3Qga3Q9MWUzKjE1O3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBSZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0xLHI9YXJndW1lbnRzLmxlbmd0aDtpPHI7aSsrKXtuPWFyZ3VtZW50c1tpXTtmb3IodmFyIHMgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixzKSYmKHRbc109bltzXSl9cmV0dXJuIHR9LFJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dHlwZW9mIFN1cHByZXNzZWRFcnJvcj09ImZ1bmN0aW9uIiYmU3VwcHJlc3NlZEVycm9yO3ZhciBQZT1uZXcgTWFwLEtlPW5ldyBNYXAsUnQ9ITAsTGU9ITE7ZnVuY3Rpb24gUHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xzLF0rL2csIiAiKS50cmltKCl9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIFB0KGUuc291cmNlLmJvZHkuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpKX1mdW5jdGlvbiBabihlKXt2YXIgdD1uZXcgU2V0LG49W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLmtpbmQ9PT0iRnJhZ21lbnREZWZpbml0aW9uIil7dmFyIHI9aS5uYW1lLnZhbHVlLHM9V24oaS5sb2MpLG89S2UuZ2V0KHIpO28mJiFvLmhhcyhzKT9SdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBmcmFnbWVudCB3aXRoIG5hbWUgIityK2AgYWxyZWFkeSBleGlzdHMuCmdyYXBocWwtdGFnIGVuZm9yY2VzIGFsbCBmcmFnbWVudCBuYW1lcyBhY3Jvc3MgeW91ciBhcHBsaWNhdGlvbiB0byBiZSB1bmlxdWU7IHJlYWQgbW9yZSBhYm91dAp0aGlzIGluIHRoZSBkb2NzOiBodHRwOi8vZGV2LmFwb2xsb2RhdGEuY29tL2NvcmUvZnJhZ21lbnRzLmh0bWwjdW5pcXVlLW5hbWVzYCk6b3x8S2Uuc2V0KHIsbz1uZXcgU2V0KSxvLmFkZChzKSx0LmhhcyhzKXx8KHQuYWRkKHMpLG4ucHVzaChpKSl9ZWxzZSBuLnB1c2goaSl9KSxSZShSZSh7fSxlKSx7ZGVmaW5pdGlvbnM6bn0pfWZ1bmN0aW9uIEtuKGUpe3ZhciB0PW5ldyBTZXQoZS5kZWZpbml0aW9ucyk7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubG9jJiZkZWxldGUgaS5sb2MsT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgcz1pW3JdO3MmJnR5cGVvZiBzPT0ib2JqZWN0IiYmdC5hZGQocyl9KX0pO3ZhciBuPWUubG9jO3JldHVybiBuJiYoZGVsZXRlIG4uc3RhcnRUb2tlbixkZWxldGUgbi5lbmRUb2tlbiksZX1mdW5jdGlvbiBlcihlKXt2YXIgdD1QdChlKTtpZighUGUuaGFzKHQpKXt2YXIgbj1JdChlLHtleHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpMZSxhbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzOkxlfSk7aWYoIW58fG4ua2luZCE9PSJEb2N1bWVudCIpdGhyb3cgbmV3IEVycm9yKCJOb3QgYSB2YWxpZCBHcmFwaFFMIGRvY3VtZW50LiIpO1BlLnNldCh0LEtuKFpuKG4pKSl9cmV0dXJuIFBlLmdldCh0KX1mdW5jdGlvbiBKKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9W2VdKTt2YXIgaT1lWzBdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocixzKXtyJiZyLmtpbmQ9PT0iRG9jdW1lbnQiP2krPXIubG9jLnNvdXJjZS5ib2R5OmkrPXIsaSs9ZVtzKzFdfSksZXIoaSl9ZnVuY3Rpb24gdHIoKXtQZS5jbGVhcigpLEtlLmNsZWFyKCl9ZnVuY3Rpb24gbnIoKXtSdD0hMX1mdW5jdGlvbiBycigpe0xlPSEwfWZ1bmN0aW9uIGlyKCl7TGU9ITF9dmFyIGJlPXtncWw6SixyZXNldENhY2hlczp0cixkaXNhYmxlRnJhZ21lbnRXYXJuaW5nczpucixlbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpycixkaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM6aXJ9OyhmdW5jdGlvbihlKXtlLmdxbD1iZS5ncWwsZS5yZXNldENhY2hlcz1iZS5yZXNldENhY2hlcyxlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzPWJlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzLGUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9YmUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXMsZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9YmUuZGlzYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzfSkoSnx8KEo9e30pKSxKLmRlZmF1bHQ9Sjtjb25zdCBMdD1KYAoJZnJhZ21lbnQgTWF0Y2hQYXJ0cyBvbiBNYXRjaENvbmZpZyB7CgkJcmVnZXhWYWx1ZQoJCW1hdGNoVmFsdWUKCX0KYCxzcj1KYAoJbXV0YXRpb24gUHVzaFBheWxvYWQoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IElEIQoJCSRldmVudHM6IFJlcGxheUV2ZW50c0lucHV0IQoJCSRtZXNzYWdlczogU3RyaW5nIQoJCSRyZXNvdXJjZXM6IFN0cmluZyEKCQkkd2ViX3NvY2tldF9ldmVudHM6IFN0cmluZyEKCQkkZXJyb3JzOiBbRXJyb3JPYmplY3RJbnB1dF0hCgkJJGlzX2JlYWNvbjogQm9vbGVhbgoJCSRoYXNfc2Vzc2lvbl91bmxvYWRlZDogQm9vbGVhbgoJCSRoaWdobGlnaHRfbG9nczogU3RyaW5nCgkpIHsKCQlwdXNoUGF5bG9hZCgKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwYXlsb2FkX2lkOiAkcGF5bG9hZF9pZAoJCQlldmVudHM6ICRldmVudHMKCQkJbWVzc2FnZXM6ICRtZXNzYWdlcwoJCQlyZXNvdXJjZXM6ICRyZXNvdXJjZXMKCQkJd2ViX3NvY2tldF9ldmVudHM6ICR3ZWJfc29ja2V0X2V2ZW50cwoJCQllcnJvcnM6ICRlcnJvcnMKCQkJaXNfYmVhY29uOiAkaXNfYmVhY29uCgkJCWhhc19zZXNzaW9uX3VubG9hZGVkOiAkaGFzX3Nlc3Npb25fdW5sb2FkZWQKCQkJaGlnaGxpZ2h0X2xvZ3M6ICRoaWdobGlnaHRfbG9ncwoJCSkKCX0KYCxvcj1KYAoJbXV0YXRpb24gUHVzaFNlc3Npb25FdmVudHMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IEludDY0SUQhCgkJJGRhdGE6IFN0cmluZyEKCSkgewoJCXB1c2hTZXNzaW9uRXZlbnRzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWRhdGE6ICRkYXRhCgkJKQoJfQpgLGFyPUpgCgltdXRhdGlvbiBpZGVudGlmeVNlc3Npb24oCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfaWRlbnRpZmllcjogU3RyaW5nIQoJCSR1c2VyX29iamVjdDogQW55CgkpIHsKCQlpZGVudGlmeVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9pZGVudGlmaWVyOiAkdXNlcl9pZGVudGlmaWVyCgkJCXVzZXJfb2JqZWN0OiAkdXNlcl9vYmplY3QKCQkpCgl9CmAsY3I9SmAKCW11dGF0aW9uIGFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRwcm9wZXJ0aWVzX29iamVjdDogQW55CgkpIHsKCQlhZGRTZXNzaW9uUHJvcGVydGllcygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwcm9wZXJ0aWVzX29iamVjdDogJHByb3BlcnRpZXNfb2JqZWN0CgkJKQoJfQpgLHVyPUpgCgltdXRhdGlvbiBwdXNoTWV0cmljcygkbWV0cmljczogW01ldHJpY0lucHV0XSEpIHsKCQlwdXNoTWV0cmljcyhtZXRyaWNzOiAkbWV0cmljcykKCX0KYCxscj1KYAoJbXV0YXRpb24gYWRkU2Vzc2lvbkZlZWRiYWNrKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSR1c2VyX25hbWU6IFN0cmluZwoJCSR1c2VyX2VtYWlsOiBTdHJpbmcKCQkkdmVyYmF0aW06IFN0cmluZyEKCQkkdGltZXN0YW1wOiBUaW1lc3RhbXAhCgkpIHsKCQlhZGRTZXNzaW9uRmVlZGJhY2soCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9uYW1lOiAkdXNlcl9uYW1lCgkJCXVzZXJfZW1haWw6ICR1c2VyX2VtYWlsCgkJCXZlcmJhdGltOiAkdmVyYmF0aW0KCQkJdGltZXN0YW1wOiAkdGltZXN0YW1wCgkJKQoJfQpgLGZyPUpgCgltdXRhdGlvbiBpbml0aWFsaXplU2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkc2Vzc2lvbl9rZXk6IFN0cmluZwoJCSRvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogU3RyaW5nIQoJCSRlbmFibGVfc3RyaWN0X3ByaXZhY3k6IEJvb2xlYW4hCgkJJHByaXZhY3lfc2V0dGluZzogU3RyaW5nIQoJCSRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6IEJvb2xlYW4hCgkJJGNsaWVudFZlcnNpb246IFN0cmluZyEKCQkkZmlyc3Rsb2FkVmVyc2lvbjogU3RyaW5nIQoJCSRjbGllbnRDb25maWc6IFN0cmluZyEKCQkkZW52aXJvbm1lbnQ6IFN0cmluZyEKCQkkaWQ6IFN0cmluZyEKCQkkYXBwVmVyc2lvbjogU3RyaW5nCgkJJHNlcnZpY2VOYW1lOiBTdHJpbmchCgkJJGNsaWVudF9pZDogU3RyaW5nIQoJCSRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiBbU3RyaW5nIV0KCQkkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZzogQm9vbGVhbgoJKSB7CgkJaW5pdGlhbGl6ZVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJc2Vzc2lvbl9rZXk6ICRzZXNzaW9uX2tleQoJCQlvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkCgkJCWVuYWJsZV9zdHJpY3RfcHJpdmFjeTogJGVuYWJsZV9zdHJpY3RfcHJpdmFjeQoJCQllbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6ICRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHMKCQkJY2xpZW50VmVyc2lvbjogJGNsaWVudFZlcnNpb24KCQkJZmlyc3Rsb2FkVmVyc2lvbjogJGZpcnN0bG9hZFZlcnNpb24KCQkJY2xpZW50Q29uZmlnOiAkY2xpZW50Q29uZmlnCgkJCWVudmlyb25tZW50OiAkZW52aXJvbm1lbnQKCQkJYXBwVmVyc2lvbjogJGFwcFZlcnNpb24KCQkJc2VydmljZU5hbWU6ICRzZXJ2aWNlTmFtZQoJCQlmaW5nZXJwcmludDogJGlkCgkJCWNsaWVudF9pZDogJGNsaWVudF9pZAoJCQluZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiAkbmV0d29ya19yZWNvcmRpbmdfZG9tYWlucwoJCQlkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiAkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZwoJCQlwcml2YWN5X3NldHRpbmc6ICRwcml2YWN5X3NldHRpbmcKCQkpIHsKCQkJc2VjdXJlX2lkCgkJCXByb2plY3RfaWQKCQkJc2FtcGxpbmcgewoJCQkJc3BhbnMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQkJZXZlbnRzIHsKCQkJCQkJbmFtZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCQlrZXkgewoJCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJCX0KCQkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJCWxvZ3MgewoJCQkJCW1lc3NhZ2UgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlzYW1wbGluZ1JhdGlvCgkJCQl9CgkJCX0KCQl9Cgl9Cgkke0x0fQpgLGhyPUpgCglxdWVyeSBJZ25vcmUoJGlkOiBJRCEpIHsKCQlpZ25vcmUoaWQ6ICRpZCkKCX0KYCxkcj1KYAoJcXVlcnkgR2V0U2FtcGxpbmdDb25maWcoJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchKSB7CgkJc2FtcGxpbmcob3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6ICRvcmdhbml6YXRpb25fdmVyYm9zZV9pZCkgewoJCQlzcGFucyB7CgkJCQluYW1lIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlhdHRyaWJ1dGVzIHsKCQkJCQlrZXkgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQl9CgkJCQlldmVudHMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlzYW1wbGluZ1JhdGlvCgkJCX0KCQkJbG9ncyB7CgkJCQltZXNzYWdlIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlzZXZlcml0eVRleHQgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCX0KCX0KCSR7THR9CmAscHI9KGUsdCxuLGkpPT5lKCk7ZnVuY3Rpb24gbXIoZSx0PXByKXtyZXR1cm57UHVzaFBheWxvYWQobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3Qoc3IsbixEKEQoe30saSkscikpLCJQdXNoUGF5bG9hZCIsIm11dGF0aW9uIixuKX0sUHVzaFNlc3Npb25FdmVudHMobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3Qob3IsbixEKEQoe30saSkscikpLCJQdXNoU2Vzc2lvbkV2ZW50cyIsIm11dGF0aW9uIixuKX0saWRlbnRpZnlTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGFyLG4sRChEKHt9LGkpLHIpKSwiaWRlbnRpZnlTZXNzaW9uIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uUHJvcGVydGllcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChjcixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25Qcm9wZXJ0aWVzIiwibXV0YXRpb24iLG4pfSxwdXNoTWV0cmljcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdCh1cixuLEQoRCh7fSxpKSxyKSksInB1c2hNZXRyaWNzIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uRmVlZGJhY2sobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QobHIsbixEKEQoe30saSkscikpLCJhZGRTZXNzaW9uRmVlZGJhY2siLCJtdXRhdGlvbiIsbil9LGluaXRpYWxpemVTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGZyLG4sRChEKHt9LGkpLHIpKSwiaW5pdGlhbGl6ZVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LElnbm9yZShuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChocixuLEQoRCh7fSxpKSxyKSksIklnbm9yZSIsInF1ZXJ5IixuKX0sR2V0U2FtcGxpbmdDb25maWcobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZHIsbixEKEQoe30saSkscikpLCJHZXRTYW1wbGluZ0NvbmZpZyIsInF1ZXJ5IixuKX19fXZhciBXPVVpbnQ4QXJyYXksWj1VaW50MTZBcnJheSxldD1JbnQzMkFycmF5LHR0PW5ldyBXKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxudD1uZXcgVyhbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxGdD1uZXcgVyhbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLE10PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBaKDMxKSxpPTA7aTwzMTsrK2kpbltpXT10Kz0xPDxlW2ktMV07Zm9yKHZhciByPW5ldyBldChuWzMwXSksaT0xO2k8MzA7KytpKWZvcih2YXIgcz1uW2ldO3M8bltpKzFdOysrcylyW3NdPXMtbltpXTw8NXxpO3JldHVybntiOm4scn19LCR0PU10KHR0LDIpLHlyPSR0LmIscnQ9JHQucjt5clsyOF09MjU4LHJ0WzI1OF09Mjg7Zm9yKHZhciBncj1NdChudCwwKSxCdD1nci5yLGl0PW5ldyBaKDMyNzY4KSxMPTA7TDwzMjc2ODsrK0wpe3ZhciBhZT0oTCY0MzY5MCk+PjF8KEwmMjE4NDUpPDwxO2FlPShhZSY1MjQyOCk+PjJ8KGFlJjEzMTA3KTw8MixhZT0oYWUmNjE2ODApPj40fChhZSYzODU1KTw8NCxpdFtMXT0oKGFlJjY1MjgwKT4+OHwoYWUmMjU1KTw8OCk+PjF9Zm9yKHZhciBOZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxzPW5ldyBaKHQpO3I8aTsrK3IpZVtyXSYmKytzW2Vbcl0tMV07dmFyIG89bmV3IFoodCk7Zm9yKHI9MTtyPHQ7KytyKW9bcl09b1tyLTFdK3Nbci0xXTw8MTt2YXIgYztpZihuKXtjPW5ldyBaKDE8PHQpO3ZhciBmPTE1LXQ7Zm9yKHI9MDtyPGk7KytyKWlmKGVbcl0pZm9yKHZhciBkPXI8PDR8ZVtyXSx1PXQtZVtyXSx5PW9bZVtyXS0xXSsrPDx1LHY9eXwoMTw8dSktMTt5PD12OysreSljW2l0W3ldPj5mXT1kfWVsc2UgZm9yKGM9bmV3IFooaSkscj0wO3I8aTsrK3IpZVtyXSYmKGNbcl09aXRbb1tlW3JdLTFdKytdPj4xNS1lW3JdKTtyZXR1cm4gY30sbGU9bmV3IFcoMjg4KSxMPTA7TDwxNDQ7KytMKWxlW0xdPTg7Zm9yKHZhciBMPTE0NDtMPDI1NjsrK0wpbGVbTF09OTtmb3IodmFyIEw9MjU2O0w8MjgwOysrTClsZVtMXT03O2Zvcih2YXIgTD0yODA7TDwyODg7KytMKWxlW0xdPTg7Zm9yKHZhciBGZT1uZXcgVygzMiksTD0wO0w8MzI7KytMKUZlW0xdPTU7dmFyIHZyPU5lKGxlLDksMCksRXI9TmUoRmUsNSwwKSxVdD1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LFZ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgVyhlLnN1YmFycmF5KHQsbikpfSxpZT1mdW5jdGlvbihlLHQsbil7bjw8PXQmNzt2YXIgaT10Lzh8MDtlW2ldfD1uLGVbaSsxXXw9bj4+OH0seGU9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIGk9dC84fDA7ZVtpXXw9bixlW2krMV18PW4+PjgsZVtpKzJdfD1uPj4xNn0sc3Q9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7KytpKWVbaV0mJm4ucHVzaCh7czppLGY6ZVtpXX0pO3ZhciByPW4ubGVuZ3RoLHM9bi5zbGljZSgpO2lmKCFyKXJldHVybnt0Onp0LGw6MH07aWYocj09MSl7dmFyIG89bmV3IFcoblswXS5zKzEpO3JldHVybiBvW25bMF0uc109MSx7dDpvLGw6MX19bi5zb3J0KGZ1bmN0aW9uKCQscSl7cmV0dXJuICQuZi1xLmZ9KSxuLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBjPW5bMF0sZj1uWzFdLGQ9MCx1PTEseT0yO2ZvcihuWzBdPXtzOi0xLGY6Yy5mK2YuZixsOmMscjpmfTt1IT1yLTE7KWM9bltuW2RdLmY8blt5XS5mP2QrKzp5KytdLGY9bltkIT11JiZuW2RdLmY8blt5XS5mP2QrKzp5KytdLG5bdSsrXT17czotMSxmOmMuZitmLmYsbDpjLHI6Zn07Zm9yKHZhciB2PXNbMF0ucyxpPTE7aTxyOysraSlzW2ldLnM+diYmKHY9c1tpXS5zKTt2YXIgYj1uZXcgWih2KzEpLG09b3Qoblt1LTFdLGIsMCk7aWYobT50KXt2YXIgaT0wLE49MCxnPW0tdCxFPTE8PGc7Zm9yKHMuc29ydChmdW5jdGlvbihxLEIpe3JldHVybiBiW0Iuc10tYltxLnNdfHxxLmYtQi5mfSk7aTxyOysraSl7dmFyIEM9c1tpXS5zO2lmKGJbQ10+dClOKz1FLSgxPDxtLWJbQ10pLGJbQ109dDtlbHNlIGJyZWFrfWZvcihOPj49ZztOPjA7KXt2YXIgdz1zW2ldLnM7Ylt3XTx0P04tPTE8PHQtYlt3XSsrLTE6KytpfWZvcig7aT49MCYmTjstLWkpe3ZhciBSPXNbaV0ucztiW1JdPT10JiYoLS1iW1JdLCsrTil9bT10fXJldHVybnt0Om5ldyBXKGIpLGw6bX19LG90PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5zPT0tMT9NYXRoLm1heChvdChlLmwsdCxuKzEpLG90KGUucix0LG4rMSkpOnRbZS5zXT1ufSxqdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dCYmIWVbLS10XTspO2Zvcih2YXIgbj1uZXcgWigrK3QpLGk9MCxyPWVbMF0scz0xLG89ZnVuY3Rpb24oZil7bltpKytdPWZ9LGM9MTtjPD10OysrYylpZihlW2NdPT1yJiZjIT10KSsrcztlbHNle2lmKCFyJiZzPjIpe2Zvcig7cz4xMzg7cy09MTM4KW8oMzI3NTQpO3M+MiYmKG8ocz4xMD9zLTExPDw1fDI4NjkwOnMtMzw8NXwxMjMwNSkscz0wKX1lbHNlIGlmKHM+Myl7Zm9yKG8ociksLS1zO3M+NjtzLT02KW8oODMwNCk7cz4yJiYobyhzLTM8PDV8ODIwOCkscz0wKX1mb3IoO3MtLTspbyhyKTtzPTEscj1lW2NdfXJldHVybntjOm4uc3ViYXJyYXkoMCxpKSxuOnR9fSxBZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSluKz1lW2ldKnRbaV07cmV0dXJuIG59LHF0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uLmxlbmd0aCxyPVV0KHQrMik7ZVtyXT1pJjI1NSxlW3IrMV09aT4+OCxlW3IrMl09ZVtyXV4yNTUsZVtyKzNdPWVbcisxXV4yNTU7Zm9yKHZhciBzPTA7czxpOysrcyllW3Ircys0XT1uW3NdO3JldHVybihyKzQraSkqOH0sR3Q9ZnVuY3Rpb24oZSx0LG4saSxyLHMsbyxjLGYsZCx1KXtpZSh0LHUrKyxuKSwrK3JbMjU2XTtmb3IodmFyIHk9c3QociwxNSksdj15LnQsYj15LmwsbT1zdChzLDE1KSxOPW0udCxnPW0ubCxFPWp0KHYpLEM9RS5jLHc9RS5uLFI9anQoTiksJD1SLmMscT1SLm4sQj1uZXcgWigxOSksST0wO0k8Qy5sZW5ndGg7KytJKSsrQltDW0ldJjMxXTtmb3IodmFyIEk9MDtJPCQubGVuZ3RoOysrSSkrK0JbJFtJXSYzMV07Zm9yKHZhciBTPXN0KEIsNyksaj1TLnQsVT1TLmwsej0xOTt6PjQmJiFqW0Z0W3otMV1dOy0teik7dmFyIEs9ZCs1PDwzLGE9QWUocixsZSkrQWUocyxGZSkrbyxoPUFlKHIsdikrQWUocyxOKStvKzE0KzMqeitBZShCLGopKzIqQlsxNl0rMypCWzE3XSs3KkJbMThdO2lmKGY+PTAmJks8PWEmJks8PWgpcmV0dXJuIHF0KHQsdSxlLnN1YmFycmF5KGYsZitkKSk7dmFyIF8sQSxrLHg7aWYoaWUodCx1LDErKGg8YSkpLHUrPTIsaDxhKXtfPU5lKHYsYiwwKSxBPXYsaz1OZShOLGcsMCkseD1OO3ZhciBjZT1OZShqLFUsMCk7aWUodCx1LHctMjU3KSxpZSh0LHUrNSxxLTEpLGllKHQsdSsxMCx6LTQpLHUrPTE0O2Zvcih2YXIgST0wO0k8ejsrK0kpaWUodCx1KzMqSSxqW0Z0W0ldXSk7dSs9Myp6O2Zvcih2YXIgSD1bQywkXSxzZT0wO3NlPDI7KytzZSlmb3IodmFyIHllPUhbc2VdLEk9MDtJPHllLmxlbmd0aDsrK0kpe3ZhciBuZT15ZVtJXSYzMTtpZSh0LHUsY2VbbmVdKSx1Kz1qW25lXSxuZT4xNSYmKGllKHQsdSx5ZVtJXT4+NSYxMjcpLHUrPXllW0ldPj4xMil9fWVsc2UgXz12cixBPWxlLGs9RXIseD1GZTtmb3IodmFyIEk9MDtJPGM7KytJKXt2YXIgWT1pW0ldO2lmKFk+MjU1KXt2YXIgbmU9WT4+MTgmMzE7eGUodCx1LF9bbmUrMjU3XSksdSs9QVtuZSsyNTddLG5lPjcmJihpZSh0LHUsWT4+MjMmMzEpLHUrPXR0W25lXSk7dmFyIGdlPVkmMzE7eGUodCx1LGtbZ2VdKSx1Kz14W2dlXSxnZT4zJiYoeGUodCx1LFk+PjUmODE5MSksdSs9bnRbZ2VdKX1lbHNlIHhlKHQsdSxfW1ldKSx1Kz1BW1ldfXJldHVybiB4ZSh0LHUsX1syNTZdKSx1K0FbMjU2XX0sX3I9bmV3IGV0KFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLHp0PW5ldyBXKDApLFRyPWZ1bmN0aW9uKGUsdCxuLGkscixzKXt2YXIgbz1zLnp8fGUubGVuZ3RoLGM9bmV3IFcoaStvKzUqKDErTWF0aC5jZWlsKG8vN2UzKSkrciksZj1jLnN1YmFycmF5KGksYy5sZW5ndGgtciksZD1zLmwsdT0ocy5yfHwwKSY3O2lmKHQpe3UmJihmWzBdPXMucj4+Myk7Zm9yKHZhciB5PV9yW3QtMV0sdj15Pj4xMyxiPXkmODE5MSxtPSgxPDxuKS0xLE49cy5wfHxuZXcgWigzMjc2OCksZz1zLmh8fG5ldyBaKG0rMSksRT1NYXRoLmNlaWwobi8zKSxDPTIqRSx3PWZ1bmN0aW9uKGx0KXtyZXR1cm4oZVtsdF1eZVtsdCsxXTw8RV5lW2x0KzJdPDxDKSZtfSxSPW5ldyBldCgyNWUzKSwkPW5ldyBaKDI4OCkscT1uZXcgWigzMiksQj0wLEk9MCxTPXMuaXx8MCxqPTAsVT1zLnd8fDAsej0wO1MrMjxvOysrUyl7dmFyIEs9dyhTKSxhPVMmMzI3NjcsaD1nW0tdO2lmKE5bYV09aCxnW0tdPWEsVTw9Uyl7dmFyIF89by1TO2lmKChCPjdlM3x8aj4yNDU3NikmJihfPjQyM3x8IWQpKXt1PUd0KGUsZiwwLFIsJCxxLEksaix6LFMteix1KSxqPUI9ST0wLHo9Uztmb3IodmFyIEE9MDtBPDI4NjsrK0EpJFtBXT0wO2Zvcih2YXIgQT0wO0E8MzA7KytBKXFbQV09MH12YXIgaz0yLHg9MCxjZT1iLEg9YS1oJjMyNzY3O2lmKF8+MiYmSz09dyhTLUgpKWZvcih2YXIgc2U9TWF0aC5taW4odixfKS0xLHllPU1hdGgubWluKDMyNzY3LFMpLG5lPU1hdGgubWluKDI1OCxfKTtIPD15ZSYmLS1jZSYmYSE9aDspe2lmKGVbUytrXT09ZVtTK2stSF0pe2Zvcih2YXIgWT0wO1k8bmUmJmVbUytZXT09ZVtTK1ktSF07KytZKTtpZihZPmspe2lmKGs9WSx4PUgsWT5zZSlicmVhaztmb3IodmFyIGdlPU1hdGgubWluKEgsWS0yKSxXdD0wLEE9MDtBPGdlOysrQSl7dmFyIGN0PVMtSCtBJjMyNzY3LFVyPU5bY3RdLFp0PWN0LVVyJjMyNzY3O1p0Pld0JiYoV3Q9WnQsaD1jdCl9fX1hPWgsaD1OW2FdLEgrPWEtaCYzMjc2N31pZih4KXtSW2orK109MjY4NDM1NDU2fHJ0W2tdPDwxOHxCdFt4XTt2YXIgS3Q9cnRba10mMzEsZW49QnRbeF0mMzE7SSs9dHRbS3RdK250W2VuXSwrKyRbMjU3K0t0XSwrK3FbZW5dLFU9UytrLCsrQn1lbHNlIFJbaisrXT1lW1NdLCsrJFtlW1NdXX19Zm9yKFM9TWF0aC5tYXgoUyxVKTtTPG87KytTKVJbaisrXT1lW1NdLCsrJFtlW1NdXTt1PUd0KGUsZixkLFIsJCxxLEksaix6LFMteix1KSxkfHwocy5yPXUmN3xmW3UvOHwwXTw8Myx1LT03LHMuaD1nLHMucD1OLHMuaT1TLHMudz1VKX1lbHNle2Zvcih2YXIgUz1zLnd8fDA7UzxvK2Q7Uys9NjU1MzUpe3ZhciB1dD1TKzY1NTM1O3V0Pj1vJiYoZlt1Lzh8MF09ZCx1dD1vKSx1PXF0KGYsdSsxLGUuc3ViYXJyYXkoUyx1dCkpfXMuaT1vfXJldHVybiBWdChjLDAsaStVdCh1KStyKX0sYnI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEludDMyQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KXtmb3IodmFyIG49dCxpPTk7LS1pOyluPShuJjEmJi0zMDY2NzQ5MTIpXm4+Pj4xO2VbdF09bn1yZXR1cm4gZX0oKSxOcj1mdW5jdGlvbigpe3ZhciBlPS0xO3JldHVybntwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLGk9MDtpPHQubGVuZ3RoOysraSluPWJyW24mMjU1XnRbaV1dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LHhyPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIXImJihyPXtsOjF9LHQuZGljdGlvbmFyeSkpe3ZhciBzPXQuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpLG89bmV3IFcocy5sZW5ndGgrZS5sZW5ndGgpO28uc2V0KHMpLG8uc2V0KGUscy5sZW5ndGgpLGU9byxyLnc9cy5sZW5ndGh9cmV0dXJuIFRyKGUsdC5sZXZlbD09bnVsbD82OnQubGV2ZWwsdC5tZW09PW51bGw/ci5sP01hdGguY2VpbChNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKGUubGVuZ3RoKSkpKjEuNSk6MjA6MTIrdC5tZW0sbixpLHIpfSxhdD1mdW5jdGlvbihlLHQsbil7Zm9yKDtuOysrdCllW3RdPW4sbj4+Pj04fSxBcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsZW5hbWU7aWYoZVswXT0zMSxlWzFdPTEzOSxlWzJdPTgsZVs4XT10LmxldmVsPDI/NDp0LmxldmVsPT05PzI6MCxlWzldPTMsdC5tdGltZSE9MCYmYXQoZSw0LE1hdGguZmxvb3IobmV3IERhdGUodC5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSksbil7ZVszXT04O2Zvcih2YXIgaT0wO2k8PW4ubGVuZ3RoOysraSllW2krMTBdPW4uY2hhckNvZGVBdChpKX19LElyPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZT9lLmZpbGVuYW1lLmxlbmd0aCsxOjApfTtmdW5jdGlvbiBTcihlLHQpe3R8fCh0PXt9KTt2YXIgbj1OcigpLGk9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPXhyKGUsdCxJcih0KSw4KSxzPXIubGVuZ3RoO3JldHVybiBBcihyLHQpLGF0KHIscy04LG4uZCgpKSxhdChyLHMtNCxpKSxyfXZhciBIdD10eXBlb2YgVGV4dEVuY29kZXIhPSJ1bmRlZmluZWQiJiZuZXcgVGV4dEVuY29kZXIsT3I9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHREZWNvZGVyLHdyPTA7dHJ5e09yLmRlY29kZSh6dCx7c3RyZWFtOiEwfSksd3I9MX1jYXRjaChlKXt9ZnVuY3Rpb24gRHIoZSx0KXt2YXIgbjtpZihIdClyZXR1cm4gSHQuZW5jb2RlKGUpO2Zvcih2YXIgaT1lLmxlbmd0aCxyPW5ldyBXKGUubGVuZ3RoKyhlLmxlbmd0aD4+MSkpLHM9MCxvPWZ1bmN0aW9uKGQpe3JbcysrXT1kfSxuPTA7bjxpOysrbil7aWYocys1PnIubGVuZ3RoKXt2YXIgYz1uZXcgVyhzKzgrKGktbjw8MSkpO2Muc2V0KHIpLHI9Y312YXIgZj1lLmNoYXJDb2RlQXQobik7ZjwxMjh8fHQ/byhmKTpmPDIwNDg/KG8oMTkyfGY+PjYpLG8oMTI4fGYmNjMpKTpmPjU1Mjk1JiZmPDU3MzQ0PyhmPTY1NTM2KyhmJjEwNDc1NTIpfGUuY2hhckNvZGVBdCgrK24pJjEwMjMsbygyNDB8Zj4+MTgpLG8oMTI4fGY+PjEyJjYzKSxvKDEyOHxmPj42JjYzKSxvKDEyOHxmJjYzKSk6KG8oMjI0fGY+PjEyKSxvKDEyOHxmPj42JjYzKSxvKDEyOHxmJjYzKSl9cmV0dXJuIFZ0KHIsMCxzKX1mdW5jdGlvbiBDcihlKXtyZXR1cm4gUSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3QgdD1EcihKU09OLnN0cmluZ2lmeShlKSksbj1Tcih0KSxpPXlpZWxkIG5ldyBQcm9taXNlKHI9Pntjb25zdCBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPSgpPT5yKHMucmVzdWx0KSxzLnJlYWRBc0RhdGFVUkwobmV3IEJsb2IoW25ldyBVaW50OEFycmF5KG4pXSkpfSk7cmV0dXJue2NvbXByZXNzZWRCYXNlNjQ6aS5zbGljZShpLmluZGV4T2YoIiwiKSsxKSxjb21wcmVzc2VkU2l6ZTpuLmxlbmd0aCxidWZmZXJMZW5ndGg6dC5sZW5ndGh9fSl9Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXtodCh0aGlzLCJkZWJ1ZyIpO2h0KHRoaXMsIm5hbWUiKTt0aGlzLmRlYnVnPXQsdGhpcy5uYW1lPW59bG9nKC4uLnQpe2lmKHRoaXMuZGVidWcpe2xldCBuPWBbJHtEYXRlLm5vdygpfV1gO3RoaXMubmFtZSYmKG4rPWAgLSAke3RoaXMubmFtZX1gKSxjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLFtuLC4uLnRdKX19d2FybiguLi50KXtsZXQgbj1gWyR7RGF0ZS5ub3coKX1dYDt0aGlzLm5hbWUmJihuKz1gIC0gJHt0aGlzLm5hbWV9YCksY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsW24sLi4udF0pfX12YXIgWXQ9KGU9PihlLkJpbGxpbmdRdW90YUV4Y2VlZGVkPSJCaWxsaW5nUXVvdGFFeGNlZWRlZCIsZSkpKFl0fHx7fSk7Y29uc3QgUnI9MyxQcj0xZTMsTHI9NTAwLEZyPVtZdC5CaWxsaW5nUXVvdGFFeGNlZWRlZC50b1N0cmluZygpXSxNcj1lPT57dmFyIG47cmV0dXJuKChuPWUucmVzcG9uc2UuZXJyb3JzKT09bnVsbD92b2lkIDA6bi5maW5kKGk9PkZyLmluY2x1ZGVzKGkubWVzc2FnZSkpKT09PXZvaWQgMH0sJHI9KCk9Pntjb25zdCBlPSh0LG4saSxyLHM9MCk9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgdCgpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBkZSYmIU1yKG8pKXRocm93IG87aWYoczxScilyZXR1cm4geWllbGQgbmV3IFByb21pc2UoYz0+c2V0VGltZW91dChjLFByK0xyKk1hdGgucG93KDIscykpKSx5aWVsZCBlKHQsbixpLHIscysxKTt0aHJvdyBjb25zb2xlLmVycm9yKGBoaWdobGlnaHQuaW86IGRhdGEgcmVxdWVzdCBmYWlsZWQgYWZ0ZXIgJHtzfSByZXRyaWVzYCksb319KTtyZXR1cm4gZX0sSnQ9NSxRdD0yZTMsQnI9WyJudW1iZXIiLCJzdHJpbmciLCJib29sZWFuIl07dmFyIHRlPShlPT4oZVtlLkluaXRpYWxpemU9MF09IkluaXRpYWxpemUiLGVbZS5Bc3luY0V2ZW50cz0xXT0iQXN5bmNFdmVudHMiLGVbZS5JZGVudGlmeT0yXT0iSWRlbnRpZnkiLGVbZS5Qcm9wZXJ0aWVzPTNdPSJQcm9wZXJ0aWVzIixlW2UuTWV0cmljcz00XT0iTWV0cmljcyIsZVtlLkZlZWRiYWNrPTVdPSJGZWVkYmFjayIsZVtlLkN1c3RvbUV2ZW50PTZdPSJDdXN0b21FdmVudCIsZVtlLlN0b3A9N109IlN0b3AiLGUpKSh0ZXx8e30pO2NvbnN0IE1lPXNlbGY7ZnVuY3Rpb24gWHQoZSx0KXtjb25zdCBuPXt9LGk9W10scj1bXTtmb3IoY29uc3RbcyxvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtpZihvPT1udWxsKWNvbnRpbnVlO0JyLmluY2x1ZGVzKHR5cGVvZiBvKXx8aS5wdXNoKHtbc106b30pO2xldCBjO3R5cGVvZiBvPT0ic3RyaW5nIj9jPW86Yz1tZShvKSxjLmxlbmd0aD5RdCYmKHIucHVzaCh7W3NdOm99KSxjPWMuc3Vic3RyaW5nKDAsUXQpKSxuW3NdPWN9cmV0dXJuIHQhPT0ic2Vzc2lvbiImJihpLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oYEhpZ2hsaWdodCB3YXMgcGFzc2VkIG9uZSBvciBtb3JlICR7dH0gcHJvcGVydGllcyBub3Qgb2YgdHlwZSBzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbi5gLGkpLHIubGVuZ3RoPjAmJmNvbnNvbGUud2FybihgSGlnaGxpZ2h0IHdhcyBwYXNzZWQgb25lIG9yIG1vcmUgJHt0fSBwcm9wZXJ0aWVzIGV4Y2VlZGluZyAyMDAwIGNoYXJhY3RlcnMsIHdoaWNoIHdpbGwgYmUgdHJ1bmNhdGVkLmAscikpLG59e2xldCBlLHQsbixpPTAscj0wLHM9ITEsbz0wLGM9bmV3IGtyKCExLCJbd29ya2VyXSIpO2NvbnN0IGY9W10sZD0oKT0+byE9PTAmJmk8SnQmJiEhKG4hPW51bGwmJm4ubGVuZ3RoKSx1PShnLEUpPT57TWUucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOnRlLkN1c3RvbUV2ZW50LHRhZzpnLHBheWxvYWQ6RX19KX0seT1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHtpZDpFLGV2ZW50czpDLG1lc3NhZ2VzOncsZXJyb3JzOlIscmVzb3VyY2VzU3RyaW5nOiQsd2ViU29ja2V0RXZlbnRzU3RyaW5nOnEsaGFzU2Vzc2lvblVubG9hZGVkOkIsaGlnaGxpZ2h0TG9nczpJfT1nLFM9bWUoe21lc3NhZ2VzOnd9KTtsZXQgaj17c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxldmVudHM6e2V2ZW50czpDfSxtZXNzYWdlczpTLHJlc291cmNlczokLHdlYl9zb2NrZXRfZXZlbnRzOnEsZXJyb3JzOlIsaXNfYmVhY29uOiExLGhhc19zZXNzaW9uX3VubG9hZGVkOkJ9O0kmJihqLmhpZ2hsaWdodF9sb2dzPUkpO2NvbnN0e2NvbXByZXNzZWRCYXNlNjQ6VSxidWZmZXJMZW5ndGg6eixjb21wcmVzc2VkU2l6ZTpLfT15aWVsZCBDcihqKSxhPXt0eXBlOnRlLkFzeW5jRXZlbnRzLGlkOkUsZXZlbnRzU2l6ZTp6LGNvbXByZXNzZWRTaXplOlUubGVuZ3RofTtjLmxvZyhgUHVzaGluZyBwYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KHtzZXNzaW9uU2VjdXJlSUQ6bixpZDpFLGZpcnN0U0lEOk1hdGgubWluKC4uLmouZXZlbnRzLmV2ZW50cy5tYXAoeD0+eD09bnVsbD92b2lkIDA6eC5fc2lkKS5maWx0ZXIoeD0+ISF4KSksZXZlbnRzTGVuZ3RoOmouZXZlbnRzLmV2ZW50cy5sZW5ndGgsbWVzc2FnZXNMZW5ndGg6dy5sZW5ndGgscmVzb3VyY2VzTGVuZ3RoOiQubGVuZ3RoLHdlYlNvY2tldExlbmd0aDpxLmxlbmd0aCxlcnJvcnNMZW5ndGg6Ui5sZW5ndGgsYnVmTGVuZ3RoOnosY29tcHJlc3NlZExlbmd0aDpLLGNvbXByZXNzZWRCYXNlNjRMZW5ndGg6VS5sZW5ndGh9LHZvaWQgMCwyKX1gKTtjb25zdCBoPWUuUHVzaFNlc3Npb25FdmVudHMoe3Nlc3Npb25fc2VjdXJlX2lkOm4scGF5bG9hZF9pZDpFLnRvU3RyaW5nKCksZGF0YTpVfSk7bGV0IF89UHJvbWlzZS5yZXNvbHZlKCk7Zi5sZW5ndGgmJihfPWUucHVzaE1ldHJpY3Moe21ldHJpY3M6Zn0pLGYuc3BsaWNlKDApKTtsZXQgQT1wZXJmb3JtYW5jZS5ub3coKTtjb25zdCBrPXNldEludGVydmFsKCgpPT57QSYmcGVyZm9ybWFuY2Uubm93KCktQT5rdCYmKGNvbnNvbGUud2FybihgVXBsb2FkaW5nIHB1c2hQYXlsb2FkIHRvb2sgdG9vIGxvbmcsIGZhaWx1cmUgbnVtYmVyICMke3J9LmApLHIrPTEsY2xlYXJJbnRlcnZhbChrKSxyPj1KdCYmKGNvbnNvbGUud2FybigiVXBsb2FkaW5nIHB1c2hQYXlsb2FkIHRvb2sgdG9vIGxvbmcsIHN0b3BwaW5nIHJlY29yZGluZyB0byBhdm9pZCBPT00uIiksTWUucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOnRlLlN0b3AscmVxdWVzdFN0YXJ0OkEsYXN5bmNFdmVudHNSZXNwb25zZTphfX0pLGIoe3R5cGU6dGUuUHJvcGVydGllcyxwcm9wZXJ0aWVzT2JqZWN0OntzdG9wUmVhc29uOiJQdXNoIFBheWxvYWQgVGltZW91dCJ9LHByb3BlcnR5VHlwZTp7dHlwZToidHJhY2sifX0pKSl9LDEwMCk7dHJ5e3lpZWxkIFByb21pc2UuYWxsKFtoLF9dKSxyJiZwZXJmb3JtYW5jZS5ub3coKS1BPD1rdCYmKGNvbnNvbGUud2FybihgcHVzaFBheWxvYWQgc3VjY2VlZGVkIGFmdGVyICMke3J9IGZhaWx1cmVzLCByZXNldHRpbmcgc3RvcCBzd2l0Y2guYCkscj0wKX1maW5hbGx5e0E9MCxjbGVhckludGVydmFsKGspfU1lLnBvc3RNZXNzYWdlKHtyZXNwb25zZTphfSl9KSx2PWc9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3VzZXJPYmplY3Q6RSx1c2VySWRlbnRpZmllcjpDLHNvdXJjZTp3fT1nO3c9PT0ic2VnbWVudCI/dSgiU2VnbWVudCBJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6Q30sRSkpKTp1KCJJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6Q30sRSkpKSx5aWVsZCBlLmlkZW50aWZ5U2Vzc2lvbih7c2Vzc2lvbl9zZWN1cmVfaWQ6bix1c2VyX2lkZW50aWZpZXI6Qyx1c2VyX29iamVjdDpYdChFLCJ1c2VyIil9KTtjb25zdCBSPXc9PT0ic2VnbWVudCI/dzoiZGVmYXVsdCI7Yy5sb2coYElkZW50aWZ5ICgke0N9LCBzb3VyY2U6ICR7Un0pIHcvIG9iajogJHttZShFKX0gQCAke3R9YCl9KSxiPWc9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3Byb3BlcnRpZXNPYmplY3Q6RSxwcm9wZXJ0eVR5cGU6Q309ZztsZXQgdzsoQz09bnVsbD92b2lkIDA6Qy50eXBlKT09PSJzZXNzaW9uIj8odz0iU2Vzc2lvbiIseWllbGQgZS5hZGRTZXNzaW9uUHJvcGVydGllcyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwcm9wZXJ0aWVzX29iamVjdDpYdChFLCJzZXNzaW9uIil9KSk6KEM9PW51bGw/dm9pZCAwOkMuc291cmNlKT09PSJzZWdtZW50Ij93PSJTZWdtZW50Ijp3PSJUcmFjayIsdyE9PSJTZXNzaW9uIiYmdSh3LG1lKEUpKSxjLmxvZyhgQWRkaW5nICR7d30gUHJvcGVydGllcyB0byBzZXNzaW9uICgke259KSB3LyBvYmo6ICR7SlNPTi5zdHJpbmdpZnkoRSl9IEAgJHt0fWApfSksbT1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmLnB1c2goLi4uZy5tZXRyaWNzLm1hcChFPT4oe25hbWU6RS5uYW1lLHZhbHVlOkUudmFsdWUsc2Vzc2lvbl9zZWN1cmVfaWQ6bixjYXRlZ29yeTpFLmNhdGVnb3J5LGdyb3VwOkUuZ3JvdXAsdGltZXN0YW1wOkUudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksdGFnczpFLnRhZ3N9KSkpfSksTj1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHt0aW1lc3RhbXA6RSx2ZXJiYXRpbTpDLHVzZXJFbWFpbDp3LHVzZXJOYW1lOlJ9PWc7eWllbGQgZS5hZGRTZXNzaW9uRmVlZGJhY2soe3Nlc3Npb25fc2VjdXJlX2lkOm4sdGltZXN0YW1wOkUsdmVyYmF0aW06Qyx1c2VyX2VtYWlsOncsdXNlcl9uYW1lOlJ9KX0pO01lLm9ubWVzc2FnZT1mdW5jdGlvbihnKXtyZXR1cm4gUSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoZy5kYXRhLm1lc3NhZ2UudHlwZT09PXRlLkluaXRpYWxpemUpe3Q9Zy5kYXRhLm1lc3NhZ2UuYmFja2VuZCxuPWcuZGF0YS5tZXNzYWdlLnNlc3Npb25TZWN1cmVJRCxzPWcuZGF0YS5tZXNzYWdlLmRlYnVnLG89Zy5kYXRhLm1lc3NhZ2UucmVjb3JkaW5nU3RhcnRUaW1lLGMuZGVidWc9cyxlPW1yKG5ldyBZbih0LHtoZWFkZXJzOnt9fSksJHIoKSk7cmV0dXJufWlmKGQoKSl0cnl7Zy5kYXRhLm1lc3NhZ2UudHlwZT09PXRlLkFzeW5jRXZlbnRzP3lpZWxkIHkoZy5kYXRhLm1lc3NhZ2UpOmcuZGF0YS5tZXNzYWdlLnR5cGU9PT10ZS5JZGVudGlmeT95aWVsZCB2KGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuUHJvcGVydGllcz95aWVsZCBiKGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuTWV0cmljcz95aWVsZCBtKGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuRmVlZGJhY2smJih5aWVsZCBOKGcuZGF0YS5tZXNzYWdlKSksaT0wfWNhdGNoKEUpe3MmJmNvbnNvbGUuZXJyb3IoRSksaSs9MX19KX19fSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGlnaGxpZ2h0LWNsaWVudC13b3JrZXItQkRSd0N1OU8uanMubWFwCg==", Qg = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), kl = typeof self < "u" && self.Blob && new Blob([Qg(uu)], { type: "text/javascript;charset=utf-8" });
13510
+ const uu = "dmFyIFZyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgcXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbm49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgZnQ9KCQsRixCKT0+RiBpbiAkP1ZyKCQsRix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Qn0pOiRbRl09QixEPSgkLEYpPT57Zm9yKHZhciBCIGluIEZ8fChGPXt9KSl0bi5jYWxsKEYsQikmJmZ0KCQsQixGW0JdKTtpZigkZSlmb3IodmFyIEIgb2YgJGUoRikpbm4uY2FsbChGLEIpJiZmdCgkLEIsRltCXSk7cmV0dXJuICR9LEJlPSgkLEYpPT5qcigkLHFyKEYpKTt2YXIgZ2U9KCQsRik9Pnt2YXIgQj17fTtmb3IodmFyIGVlIGluICQpdG4uY2FsbCgkLGVlKSYmRi5pbmRleE9mKGVlKTwwJiYoQltlZV09JFtlZV0pO2lmKCQhPW51bGwmJiRlKWZvcih2YXIgZWUgb2YgJGUoJCkpRi5pbmRleE9mKGVlKTwwJiZubi5jYWxsKCQsZWUpJiYoQltlZV09JFtlZV0pO3JldHVybiBCfTt2YXIgaHQ9KCQsRixCKT0+ZnQoJCx0eXBlb2YgRiE9InN5bWJvbCI/RisiIjpGLEIpO3ZhciBKPSgkLEYsQik9Pm5ldyBQcm9taXNlKChlZSxTZSk9Pnt2YXIgVWU9c2U9Pnt0cnl7YWUoQi5uZXh0KHNlKSl9Y2F0Y2goRWUpe1NlKEVlKX19LFZlPXNlPT57dHJ5e2FlKEIudGhyb3coc2UpKX1jYXRjaChFZSl7U2UoRWUpfX0sYWU9c2U9PnNlLmRvbmU/ZWUoc2UudmFsdWUpOlByb21pc2UucmVzb2x2ZShzZS52YWx1ZSkudGhlbihVZSxWZSk7YWUoKEI9Qi5hcHBseSgkLEYpKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uICQoZSx0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJnR5cGVvZiBuIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaSE9PSJkZWZhdWx0IiYmIShpIGluIGUpKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuW2ldfX0pfX0pfSksT2JqZWN0LmZyZWV6ZShlKX1jb25zdCBGPUpTT04sQj1lPT5lLnRvVXBwZXJDYXNlKCksZWU9ZT0+e2NvbnN0IHQ9e307cmV0dXJuIGUuZm9yRWFjaCgobixpKT0+e3RbaV09bn0pLHR9LFNlPShlLHQsbik9PmUuZG9jdW1lbnQ/ZTp7ZG9jdW1lbnQ6ZSx2YXJpYWJsZXM6dCxyZXF1ZXN0SGVhZGVyczpuLHNpZ25hbDp2b2lkIDB9LFVlPShlLHQsbik9PmUucXVlcnk/ZTp7cXVlcnk6ZSx2YXJpYWJsZXM6dCxyZXF1ZXN0SGVhZGVyczpuLHNpZ25hbDp2b2lkIDB9LFZlPShlLHQpPT5lLmRvY3VtZW50cz9lOntkb2N1bWVudHM6ZSxyZXF1ZXN0SGVhZGVyczp0LHNpZ25hbDp2b2lkIDB9O2Z1bmN0aW9uIGFlKGUsdCl7aWYoISEhZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx9ZnVuY3Rpb24gRWUoZSx0KXtpZighISFlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnZhcmlhbnQgdHJpZ2dlcmVkLiIpfWNvbnN0IHJuPS9cclxufFtcblxyXS9nO2Z1bmN0aW9uIGplKGUsdCl7bGV0IG49MCxpPTE7Zm9yKGNvbnN0IHIgb2YgZS5ib2R5Lm1hdGNoQWxsKHJuKSl7aWYodHlwZW9mIHIuaW5kZXg9PSJudW1iZXIifHxFZSghMSksci5pbmRleD49dClicmVhaztuPXIuaW5kZXgrclswXS5sZW5ndGgsaSs9MX1yZXR1cm57bGluZTppLGNvbHVtbjp0KzEtbn19ZnVuY3Rpb24gc24oZSl7cmV0dXJuIGR0KGUuc291cmNlLGplKGUuc291cmNlLGUuc3RhcnQpKX1mdW5jdGlvbiBkdChlLHQpe2NvbnN0IG49ZS5sb2NhdGlvbk9mZnNldC5jb2x1bW4tMSxpPSIiLnBhZFN0YXJ0KG4pK2UuYm9keSxyPXQubGluZS0xLHM9ZS5sb2NhdGlvbk9mZnNldC5saW5lLTEsbz10LmxpbmUrcyxjPXQubGluZT09PTE/bjowLGY9dC5jb2x1bW4rYyxkPWAke2UubmFtZX06JHtvfToke2Z9CmAsdT1pLnNwbGl0KC9cclxufFtcblxyXS9nKSx5PXVbcl07aWYoeS5sZW5ndGg+MTIwKXtjb25zdCBnPU1hdGguZmxvb3IoZi84MCksYj1mJTgwLG09W107Zm9yKGxldCBOPTA7Tjx5Lmxlbmd0aDtOKz04MCltLnB1c2goeS5zbGljZShOLE4rODApKTtyZXR1cm4gZCtwdChbW2Ake299IHxgLG1bMF1dLC4uLm0uc2xpY2UoMSxnKzEpLm1hcChOPT5bInwiLE5dKSxbInwiLCJeIi5wYWRTdGFydChiKV0sWyJ8IixtW2crMV1dXSl9cmV0dXJuIGQrcHQoW1tgJHtvLTF9IHxgLHVbci0xXV0sW2Ake299IHxgLHldLFsifCIsIl4iLnBhZFN0YXJ0KGYpXSxbYCR7bysxfSB8YCx1W3IrMV1dXSl9ZnVuY3Rpb24gcHQoZSl7Y29uc3QgdD1lLmZpbHRlcigoW2kscl0pPT5yIT09dm9pZCAwKSxuPU1hdGgubWF4KC4uLnQubWFwKChbaV0pPT5pLmxlbmd0aCkpO3JldHVybiB0Lm1hcCgoW2kscl0pPT5pLnBhZFN0YXJ0KG4pKyhyPyIgIityOiIiKSkuam9pbihgCmApfWZ1bmN0aW9uIG9uKGUpe2NvbnN0IHQ9ZVswXTtyZXR1cm4gdD09bnVsbHx8ImtpbmQiaW4gdHx8Imxlbmd0aCJpbiB0P3tub2Rlczp0LHNvdXJjZTplWzFdLHBvc2l0aW9uczplWzJdLHBhdGg6ZVszXSxvcmlnaW5hbEVycm9yOmVbNF0sZXh0ZW5zaW9uczplWzVdfTp0fWNsYXNzIHFlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCwuLi5uKXt2YXIgaSxyLHM7Y29uc3R7bm9kZXM6byxzb3VyY2U6Yyxwb3NpdGlvbnM6ZixwYXRoOmQsb3JpZ2luYWxFcnJvcjp1LGV4dGVuc2lvbnM6eX09b24obik7c3VwZXIodCksdGhpcy5uYW1lPSJHcmFwaFFMRXJyb3IiLHRoaXMucGF0aD1kIT1udWxsP2Q6dm9pZCAwLHRoaXMub3JpZ2luYWxFcnJvcj11IT1udWxsP3U6dm9pZCAwLHRoaXMubm9kZXM9bXQoQXJyYXkuaXNBcnJheShvKT9vOm8/W29dOnZvaWQgMCk7Y29uc3QgZz1tdCgoaT10aGlzLm5vZGVzKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubWFwKG09Pm0ubG9jKS5maWx0ZXIobT0+bSE9bnVsbCkpO3RoaXMuc291cmNlPWMhPW51bGw/YzpnPT1udWxsfHwocj1nWzBdKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuc291cmNlLHRoaXMucG9zaXRpb25zPWYhPW51bGw/ZjpnPT1udWxsP3ZvaWQgMDpnLm1hcChtPT5tLnN0YXJ0KSx0aGlzLmxvY2F0aW9ucz1mJiZjP2YubWFwKG09PmplKGMsbSkpOmc9PW51bGw/dm9pZCAwOmcubWFwKG09PmplKG0uc291cmNlLG0uc3RhcnQpKTtjb25zdCBiPXNlKHU9PW51bGw/dm9pZCAwOnUuZXh0ZW5zaW9ucyk/dT09bnVsbD92b2lkIDA6dS5leHRlbnNpb25zOnZvaWQgMDt0aGlzLmV4dGVuc2lvbnM9KHM9eSE9bnVsbD95OmIpIT09bnVsbCYmcyE9PXZvaWQgMD9zOk9iamVjdC5jcmVhdGUobnVsbCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bWVzc2FnZTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMH0sbmFtZTp7ZW51bWVyYWJsZTohMX0sbm9kZXM6e2VudW1lcmFibGU6ITF9LHNvdXJjZTp7ZW51bWVyYWJsZTohMX0scG9zaXRpb25zOntlbnVtZXJhYmxlOiExfSxvcmlnaW5hbEVycm9yOntlbnVtZXJhYmxlOiExfX0pLHUhPW51bGwmJnUuc3RhY2s/T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YWNrIix7dmFsdWU6dS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTpFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHFlKTpPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTpFcnJvcigpLnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkdyYXBoUUxFcnJvciJ9dG9TdHJpbmcoKXtsZXQgdD10aGlzLm1lc3NhZ2U7aWYodGhpcy5ub2Rlcylmb3IoY29uc3QgbiBvZiB0aGlzLm5vZGVzKW4ubG9jJiYodCs9YAoKYCtzbihuLmxvYykpO2Vsc2UgaWYodGhpcy5zb3VyY2UmJnRoaXMubG9jYXRpb25zKWZvcihjb25zdCBuIG9mIHRoaXMubG9jYXRpb25zKXQrPWAKCmArZHQodGhpcy5zb3VyY2Usbik7cmV0dXJuIHR9dG9KU09OKCl7Y29uc3QgdD17bWVzc2FnZTp0aGlzLm1lc3NhZ2V9O3JldHVybiB0aGlzLmxvY2F0aW9ucyE9bnVsbCYmKHQubG9jYXRpb25zPXRoaXMubG9jYXRpb25zKSx0aGlzLnBhdGghPW51bGwmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLmV4dGVuc2lvbnMhPW51bGwmJk9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9ucykubGVuZ3RoPjAmJih0LmV4dGVuc2lvbnM9dGhpcy5leHRlbnNpb25zKSx0fX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZT09PXZvaWQgMHx8ZS5sZW5ndGg9PT0wP3ZvaWQgMDplfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBuZXcgcWUoYFN5bnRheCBFcnJvcjogJHtufWAse3NvdXJjZTplLHBvc2l0aW9uczpbdF19KX1jbGFzcyBhbntjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5zdGFydD10LnN0YXJ0LHRoaXMuZW5kPW4uZW5kLHRoaXMuc3RhcnRUb2tlbj10LHRoaXMuZW5kVG9rZW49bix0aGlzLnNvdXJjZT1pfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxvY2F0aW9uIn10b0pTT04oKXtyZXR1cm57c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9fX1jbGFzcyB5dHtjb25zdHJ1Y3Rvcih0LG4saSxyLHMsbyl7dGhpcy5raW5kPXQsdGhpcy5zdGFydD1uLHRoaXMuZW5kPWksdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49cyx0aGlzLnZhbHVlPW8sdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGx9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iVG9rZW4ifXRvSlNPTigpe3JldHVybntraW5kOnRoaXMua2luZCx2YWx1ZTp0aGlzLnZhbHVlLGxpbmU6dGhpcy5saW5lLGNvbHVtbjp0aGlzLmNvbHVtbn19fWNvbnN0IHZ0PXtOYW1lOltdLERvY3VtZW50OlsiZGVmaW5pdGlvbnMiXSxPcGVyYXRpb25EZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sVmFyaWFibGVEZWZpbml0aW9uOlsidmFyaWFibGUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLFZhcmlhYmxlOlsibmFtZSJdLFNlbGVjdGlvblNldDpbInNlbGVjdGlvbnMiXSxGaWVsZDpbImFsaWFzIiwibmFtZSIsImFyZ3VtZW50cyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxBcmd1bWVudDpbIm5hbWUiLCJ2YWx1ZSJdLEZyYWdtZW50U3ByZWFkOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxJbmxpbmVGcmFnbWVudDpbInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sRnJhZ21lbnREZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJ0eXBlQ29uZGl0aW9uIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEludFZhbHVlOltdLEZsb2F0VmFsdWU6W10sU3RyaW5nVmFsdWU6W10sQm9vbGVhblZhbHVlOltdLE51bGxWYWx1ZTpbXSxFbnVtVmFsdWU6W10sTGlzdFZhbHVlOlsidmFsdWVzIl0sT2JqZWN0VmFsdWU6WyJmaWVsZHMiXSxPYmplY3RGaWVsZDpbIm5hbWUiLCJ2YWx1ZSJdLERpcmVjdGl2ZTpbIm5hbWUiLCJhcmd1bWVudHMiXSxOYW1lZFR5cGU6WyJuYW1lIl0sTGlzdFR5cGU6WyJ0eXBlIl0sTm9uTnVsbFR5cGU6WyJ0eXBlIl0sU2NoZW1hRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246WyJ0eXBlIl0sU2NhbGFyVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEZpZWxkRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsInR5cGUiLCJkaXJlY3RpdmVzIl0sSW5wdXRWYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLEludGVyZmFjZVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLEVudW1WYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxEaXJlY3RpdmVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwibG9jYXRpb25zIl0sU2NoZW1hRXh0ZW5zaW9uOlsiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sU2NhbGFyVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEludGVyZmFjZVR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl19LGNuPW5ldyBTZXQoT2JqZWN0LmtleXModnQpKTtmdW5jdGlvbiBndChlKXtjb25zdCB0PWU9PW51bGw/dm9pZCAwOmUua2luZDtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiZjbi5oYXModCl9dmFyIGZlOyhmdW5jdGlvbihlKXtlLlFVRVJZPSJxdWVyeSIsZS5NVVRBVElPTj0ibXV0YXRpb24iLGUuU1VCU0NSSVBUSU9OPSJzdWJzY3JpcHRpb24ifSkoZmV8fChmZT17fSkpO3ZhciBHZTsoZnVuY3Rpb24oZSl7ZS5RVUVSWT0iUVVFUlkiLGUuTVVUQVRJT049Ik1VVEFUSU9OIixlLlNVQlNDUklQVElPTj0iU1VCU0NSSVBUSU9OIixlLkZJRUxEPSJGSUVMRCIsZS5GUkFHTUVOVF9ERUZJTklUSU9OPSJGUkFHTUVOVF9ERUZJTklUSU9OIixlLkZSQUdNRU5UX1NQUkVBRD0iRlJBR01FTlRfU1BSRUFEIixlLklOTElORV9GUkFHTUVOVD0iSU5MSU5FX0ZSQUdNRU5UIixlLlZBUklBQkxFX0RFRklOSVRJT049IlZBUklBQkxFX0RFRklOSVRJT04iLGUuU0NIRU1BPSJTQ0hFTUEiLGUuU0NBTEFSPSJTQ0FMQVIiLGUuT0JKRUNUPSJPQkpFQ1QiLGUuRklFTERfREVGSU5JVElPTj0iRklFTERfREVGSU5JVElPTiIsZS5BUkdVTUVOVF9ERUZJTklUSU9OPSJBUkdVTUVOVF9ERUZJTklUSU9OIixlLklOVEVSRkFDRT0iSU5URVJGQUNFIixlLlVOSU9OPSJVTklPTiIsZS5FTlVNPSJFTlVNIixlLkVOVU1fVkFMVUU9IkVOVU1fVkFMVUUiLGUuSU5QVVRfT0JKRUNUPSJJTlBVVF9PQkpFQ1QiLGUuSU5QVVRfRklFTERfREVGSU5JVElPTj0iSU5QVVRfRklFTERfREVGSU5JVElPTiJ9KShHZXx8KEdlPXt9KSk7dmFyIFQ7KGZ1bmN0aW9uKGUpe2UuTkFNRT0iTmFtZSIsZS5ET0NVTUVOVD0iRG9jdW1lbnQiLGUuT1BFUkFUSU9OX0RFRklOSVRJT049Ik9wZXJhdGlvbkRlZmluaXRpb24iLGUuVkFSSUFCTEVfREVGSU5JVElPTj0iVmFyaWFibGVEZWZpbml0aW9uIixlLlNFTEVDVElPTl9TRVQ9IlNlbGVjdGlvblNldCIsZS5GSUVMRD0iRmllbGQiLGUuQVJHVU1FTlQ9IkFyZ3VtZW50IixlLkZSQUdNRU5UX1NQUkVBRD0iRnJhZ21lbnRTcHJlYWQiLGUuSU5MSU5FX0ZSQUdNRU5UPSJJbmxpbmVGcmFnbWVudCIsZS5GUkFHTUVOVF9ERUZJTklUSU9OPSJGcmFnbWVudERlZmluaXRpb24iLGUuVkFSSUFCTEU9IlZhcmlhYmxlIixlLklOVD0iSW50VmFsdWUiLGUuRkxPQVQ9IkZsb2F0VmFsdWUiLGUuU1RSSU5HPSJTdHJpbmdWYWx1ZSIsZS5CT09MRUFOPSJCb29sZWFuVmFsdWUiLGUuTlVMTD0iTnVsbFZhbHVlIixlLkVOVU09IkVudW1WYWx1ZSIsZS5MSVNUPSJMaXN0VmFsdWUiLGUuT0JKRUNUPSJPYmplY3RWYWx1ZSIsZS5PQkpFQ1RfRklFTEQ9Ik9iamVjdEZpZWxkIixlLkRJUkVDVElWRT0iRGlyZWN0aXZlIixlLk5BTUVEX1RZUEU9Ik5hbWVkVHlwZSIsZS5MSVNUX1RZUEU9Ikxpc3RUeXBlIixlLk5PTl9OVUxMX1RZUEU9Ik5vbk51bGxUeXBlIixlLlNDSEVNQV9ERUZJTklUSU9OPSJTY2hlbWFEZWZpbml0aW9uIixlLk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT049Ik9wZXJhdGlvblR5cGVEZWZpbml0aW9uIixlLlNDQUxBUl9UWVBFX0RFRklOSVRJT049IlNjYWxhclR5cGVEZWZpbml0aW9uIixlLk9CSkVDVF9UWVBFX0RFRklOSVRJT049Ik9iamVjdFR5cGVEZWZpbml0aW9uIixlLkZJRUxEX0RFRklOSVRJT049IkZpZWxkRGVmaW5pdGlvbiIsZS5JTlBVVF9WQUxVRV9ERUZJTklUSU9OPSJJbnB1dFZhbHVlRGVmaW5pdGlvbiIsZS5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OPSJJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbiIsZS5VTklPTl9UWVBFX0RFRklOSVRJT049IlVuaW9uVHlwZURlZmluaXRpb24iLGUuRU5VTV9UWVBFX0RFRklOSVRJT049IkVudW1UeXBlRGVmaW5pdGlvbiIsZS5FTlVNX1ZBTFVFX0RFRklOSVRJT049IkVudW1WYWx1ZURlZmluaXRpb24iLGUuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTj0iSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbiIsZS5ESVJFQ1RJVkVfREVGSU5JVElPTj0iRGlyZWN0aXZlRGVmaW5pdGlvbiIsZS5TQ0hFTUFfRVhURU5TSU9OPSJTY2hlbWFFeHRlbnNpb24iLGUuU0NBTEFSX1RZUEVfRVhURU5TSU9OPSJTY2FsYXJUeXBlRXh0ZW5zaW9uIixlLk9CSkVDVF9UWVBFX0VYVEVOU0lPTj0iT2JqZWN0VHlwZUV4dGVuc2lvbiIsZS5JTlRFUkZBQ0VfVFlQRV9FWFRFTlNJT049IkludGVyZmFjZVR5cGVFeHRlbnNpb24iLGUuVU5JT05fVFlQRV9FWFRFTlNJT049IlVuaW9uVHlwZUV4dGVuc2lvbiIsZS5FTlVNX1RZUEVfRVhURU5TSU9OPSJFbnVtVHlwZUV4dGVuc2lvbiIsZS5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT049IklucHV0T2JqZWN0VHlwZUV4dGVuc2lvbiJ9KShUfHwoVD17fSkpO2Z1bmN0aW9uIHplKGUpe3JldHVybiBlPT09OXx8ZT09PTMyfWZ1bmN0aW9uIF9lKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MH1mdW5jdGlvbiBfdChlKXtyZXR1cm4gRXQoZSl8fGU9PT05NX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gRXQoZSl8fF9lKGUpfHxlPT09OTV9ZnVuY3Rpb24gbG4oZSl7dmFyIHQ7bGV0IG49TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsaT1udWxsLHI9LTE7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzO2NvbnN0IGM9ZVtvXSxmPWZuKGMpO2YhPT1jLmxlbmd0aCYmKGk9KHM9aSkhPT1udWxsJiZzIT09dm9pZCAwP3M6byxyPW8sbyE9PTAmJmY8biYmKG49ZikpfXJldHVybiBlLm1hcCgobyxjKT0+Yz09PTA/bzpvLnNsaWNlKG4pKS5zbGljZSgodD1pKSE9PW51bGwmJnQhPT12b2lkIDA/dDowLHIrMSl9ZnVuY3Rpb24gZm4oZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJnplKGUuY2hhckNvZGVBdCh0KSk7KSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBobihlLHQpe2NvbnN0IG49ZS5yZXBsYWNlKC8iIiIvZywnXFwiIiInKSxpPW4uc3BsaXQoL1xyXG58W1xuXHJdL2cpLHI9aS5sZW5ndGg9PT0xLHM9aS5sZW5ndGg+MSYmaS5zbGljZSgxKS5ldmVyeShiPT5iLmxlbmd0aD09PTB8fHplKGIuY2hhckNvZGVBdCgwKSkpLG89bi5lbmRzV2l0aCgnXFwiIiInKSxjPWUuZW5kc1dpdGgoJyInKSYmIW8sZj1lLmVuZHNXaXRoKCJcXCIpLGQ9Y3x8Zix1PSFyfHxlLmxlbmd0aD43MHx8ZHx8c3x8bztsZXQgeT0iIjtjb25zdCBnPXImJnplKGUuY2hhckNvZGVBdCgwKSk7cmV0dXJuKHUmJiFnfHxzKSYmKHkrPWAKYCkseSs9biwodXx8ZCkmJih5Kz1gCmApLCciIiInK3krJyIiIid9dmFyIGw7KGZ1bmN0aW9uKGUpe2UuU09GPSI8U09GPiIsZS5FT0Y9IjxFT0Y+IixlLkJBTkc9IiEiLGUuRE9MTEFSPSIkIixlLkFNUD0iJiIsZS5QQVJFTl9MPSIoIixlLlBBUkVOX1I9IikiLGUuU1BSRUFEPSIuLi4iLGUuQ09MT049IjoiLGUuRVFVQUxTPSI9IixlLkFUPSJAIixlLkJSQUNLRVRfTD0iWyIsZS5CUkFDS0VUX1I9Il0iLGUuQlJBQ0VfTD0ieyIsZS5QSVBFPSJ8IixlLkJSQUNFX1I9In0iLGUuTkFNRT0iTmFtZSIsZS5JTlQ9IkludCIsZS5GTE9BVD0iRmxvYXQiLGUuU1RSSU5HPSJTdHJpbmciLGUuQkxPQ0tfU1RSSU5HPSJCbG9ja1N0cmluZyIsZS5DT01NRU5UPSJDb21tZW50In0pKGx8fChsPXt9KSk7Y2xhc3MgZG57Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1uZXcgeXQobC5TT0YsMCwwLDAsMCk7dGhpcy5zb3VyY2U9dCx0aGlzLmxhc3RUb2tlbj1uLHRoaXMudG9rZW49bix0aGlzLmxpbmU9MSx0aGlzLmxpbmVTdGFydD0wfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxleGVyIn1hZHZhbmNlKCl7cmV0dXJuIHRoaXMubGFzdFRva2VuPXRoaXMudG9rZW4sdGhpcy50b2tlbj10aGlzLmxvb2thaGVhZCgpfWxvb2thaGVhZCgpe2xldCB0PXRoaXMudG9rZW47aWYodC5raW5kIT09bC5FT0YpZG8gaWYodC5uZXh0KXQ9dC5uZXh0O2Vsc2V7Y29uc3Qgbj1tbih0aGlzLHQuZW5kKTt0Lm5leHQ9bixuLnByZXY9dCx0PW59d2hpbGUodC5raW5kPT09bC5DT01NRU5UKTtyZXR1cm4gdH19ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGU9PT1sLkJBTkd8fGU9PT1sLkRPTExBUnx8ZT09PWwuQU1QfHxlPT09bC5QQVJFTl9MfHxlPT09bC5QQVJFTl9SfHxlPT09bC5TUFJFQUR8fGU9PT1sLkNPTE9OfHxlPT09bC5FUVVBTFN8fGU9PT1sLkFUfHxlPT09bC5CUkFDS0VUX0x8fGU9PT1sLkJSQUNLRVRfUnx8ZT09PWwuQlJBQ0VfTHx8ZT09PWwuUElQRXx8ZT09PWwuQlJBQ0VfUn1mdW5jdGlvbiBoZShlKXtyZXR1cm4gZT49MCYmZTw9NTUyOTV8fGU+PTU3MzQ0JiZlPD0xMTE0MTExfWZ1bmN0aW9uIE9lKGUsdCl7cmV0dXJuIFR0KGUuY2hhckNvZGVBdCh0KSkmJmJ0KGUuY2hhckNvZGVBdCh0KzEpKX1mdW5jdGlvbiBUdChlKXtyZXR1cm4gZT49NTUyOTYmJmU8PTU2MzE5fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlPj01NjMyMCYmZTw9NTczNDN9ZnVuY3Rpb24gdWUoZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHkuY29kZVBvaW50QXQodCk7aWYobj09PXZvaWQgMClyZXR1cm4gbC5FT0Y7aWYobj49MzImJm48PTEyNil7Y29uc3QgaT1TdHJpbmcuZnJvbUNvZGVQb2ludChuKTtyZXR1cm4gaT09PSciJz9gJyInYDpgIiR7aX0iYH1yZXR1cm4iVSsiK24udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkU3RhcnQoNCwiMCIpfWZ1bmN0aW9uIFUoZSx0LG4saSxyKXtjb25zdCBzPWUubGluZSxvPTErbi1lLmxpbmVTdGFydDtyZXR1cm4gbmV3IHl0KHQsbixpLHMsbyxyKX1mdW5jdGlvbiBtbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQ7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtzd2l0Y2gocyl7Y2FzZSA2NTI3OTpjYXNlIDk6Y2FzZSAzMjpjYXNlIDQ0Oisrcjtjb250aW51ZTtjYXNlIDEwOisrciwrK2UubGluZSxlLmxpbmVTdGFydD1yO2NvbnRpbnVlO2Nhc2UgMTM6bi5jaGFyQ29kZUF0KHIrMSk9PT0xMD9yKz0yOisrciwrK2UubGluZSxlLmxpbmVTdGFydD1yO2NvbnRpbnVlO2Nhc2UgMzU6cmV0dXJuIHluKGUscik7Y2FzZSAzMzpyZXR1cm4gVShlLGwuQkFORyxyLHIrMSk7Y2FzZSAzNjpyZXR1cm4gVShlLGwuRE9MTEFSLHIscisxKTtjYXNlIDM4OnJldHVybiBVKGUsbC5BTVAscixyKzEpO2Nhc2UgNDA6cmV0dXJuIFUoZSxsLlBBUkVOX0wscixyKzEpO2Nhc2UgNDE6cmV0dXJuIFUoZSxsLlBBUkVOX1IscixyKzEpO2Nhc2UgNDY6aWYobi5jaGFyQ29kZUF0KHIrMSk9PT00NiYmbi5jaGFyQ29kZUF0KHIrMik9PT00NilyZXR1cm4gVShlLGwuU1BSRUFELHIsciszKTticmVhaztjYXNlIDU4OnJldHVybiBVKGUsbC5DT0xPTixyLHIrMSk7Y2FzZSA2MTpyZXR1cm4gVShlLGwuRVFVQUxTLHIscisxKTtjYXNlIDY0OnJldHVybiBVKGUsbC5BVCxyLHIrMSk7Y2FzZSA5MTpyZXR1cm4gVShlLGwuQlJBQ0tFVF9MLHIscisxKTtjYXNlIDkzOnJldHVybiBVKGUsbC5CUkFDS0VUX1IscixyKzEpO2Nhc2UgMTIzOnJldHVybiBVKGUsbC5CUkFDRV9MLHIscisxKTtjYXNlIDEyNDpyZXR1cm4gVShlLGwuUElQRSxyLHIrMSk7Y2FzZSAxMjU6cmV0dXJuIFUoZSxsLkJSQUNFX1IscixyKzEpO2Nhc2UgMzQ6cmV0dXJuIG4uY2hhckNvZGVBdChyKzEpPT09MzQmJm4uY2hhckNvZGVBdChyKzIpPT09MzQ/Ym4oZSxyKTpnbihlLHIpfWlmKF9lKHMpfHxzPT09NDUpcmV0dXJuIHZuKGUscixzKTtpZihfdChzKSlyZXR1cm4gTm4oZSxyKTt0aHJvdyBHKGUuc291cmNlLHIscz09PTM5P2BVbmV4cGVjdGVkIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXIgKCcpLCBkaWQgeW91IG1lYW4gdG8gdXNlIGEgZG91YmxlIHF1b3RlICgiKT9gOmhlKHMpfHxPZShuLHIpP2BVbmV4cGVjdGVkIGNoYXJhY3RlcjogJHt1ZShlLHIpfS5gOmBJbnZhbGlkIGNoYXJhY3RlcjogJHt1ZShlLHIpfS5gKX1yZXR1cm4gVShlLGwuRU9GLGksaSl9ZnVuY3Rpb24geW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzE7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtpZihzPT09MTB8fHM9PT0xMylicmVhaztpZihoZShzKSkrK3I7ZWxzZSBpZihPZShuLHIpKXIrPTI7ZWxzZSBicmVha31yZXR1cm4gVShlLGwuQ09NTUVOVCx0LHIsbi5zbGljZSh0KzEscikpfWZ1bmN0aW9uIHZuKGUsdCxuKXtjb25zdCBpPWUuc291cmNlLmJvZHk7bGV0IHI9dCxzPW4sbz0hMTtpZihzPT09NDUmJihzPWkuY2hhckNvZGVBdCgrK3IpKSxzPT09NDgpe2lmKHM9aS5jaGFyQ29kZUF0KCsrciksX2UocykpdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIG51bWJlciwgdW5leHBlY3RlZCBkaWdpdCBhZnRlciAwOiAke3VlKGUscil9LmApfWVsc2Ugcj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocik7aWYocz09PTQ2JiYobz0hMCxzPWkuY2hhckNvZGVBdCgrK3IpLHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpKSwocz09PTY5fHxzPT09MTAxKSYmKG89ITAscz1pLmNoYXJDb2RlQXQoKytyKSwocz09PTQzfHxzPT09NDUpJiYocz1pLmNoYXJDb2RlQXQoKytyKSkscj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocikpLHM9PT00Nnx8X3QocykpdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogJHt1ZShlLHIpfS5gKTtyZXR1cm4gVShlLG8/bC5GTE9BVDpsLklOVCx0LHIsaS5zbGljZSh0LHIpKX1mdW5jdGlvbiBIZShlLHQsbil7aWYoIV9lKG4pKXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBudW1iZXIsIGV4cGVjdGVkIGRpZ2l0IGJ1dCBnb3Q6ICR7dWUoZSx0KX0uYCk7Y29uc3QgaT1lLnNvdXJjZS5ib2R5O2xldCByPXQrMTtmb3IoO19lKGkuY2hhckNvZGVBdChyKSk7KSsrcjtyZXR1cm4gcn1mdW5jdGlvbiBnbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMSxzPXIsbz0iIjtmb3IoO3I8aTspe2NvbnN0IGM9bi5jaGFyQ29kZUF0KHIpO2lmKGM9PT0zNClyZXR1cm4gbys9bi5zbGljZShzLHIpLFUoZSxsLlNUUklORyx0LHIrMSxvKTtpZihjPT09OTIpe28rPW4uc2xpY2UocyxyKTtjb25zdCBmPW4uY2hhckNvZGVBdChyKzEpPT09MTE3P24uY2hhckNvZGVBdChyKzIpPT09MTIzP0VuKGUscik6X24oZSxyKTpUbihlLHIpO28rPWYudmFsdWUscis9Zi5zaXplLHM9cjtjb250aW51ZX1pZihjPT09MTB8fGM9PT0xMylicmVhaztpZihoZShjKSkrK3I7ZWxzZSBpZihPZShuLHIpKXIrPTI7ZWxzZSB0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICR7dWUoZSxyKX0uYCl9dGhyb3cgRyhlLnNvdXJjZSxyLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIEVuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5O2xldCBpPTAscj0zO2Zvcig7cjwxMjspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHQrcisrKTtpZihzPT09MTI1KXtpZihyPDV8fCFoZShpKSlicmVhaztyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSksc2l6ZTpyfX1pZihpPWk8PDR8VGUocyksaTwwKWJyZWFrfXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrcil9Ii5gKX1mdW5jdGlvbiBfbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPU50KG4sdCsyKTtpZihoZShpKSlyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSksc2l6ZTo2fTtpZihUdChpKSYmbi5jaGFyQ29kZUF0KHQrNik9PT05MiYmbi5jaGFyQ29kZUF0KHQrNyk9PT0xMTcpe2NvbnN0IHI9TnQobix0KzgpO2lmKGJ0KHIpKXJldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpLHIpLHNpemU6MTJ9fXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrNil9Ii5gKX1mdW5jdGlvbiBOdChlLHQpe3JldHVybiBUZShlLmNoYXJDb2RlQXQodCkpPDwxMnxUZShlLmNoYXJDb2RlQXQodCsxKSk8PDh8VGUoZS5jaGFyQ29kZUF0KHQrMikpPDw0fFRlKGUuY2hhckNvZGVBdCh0KzMpKX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gZT49NDgmJmU8PTU3P2UtNDg6ZT49NjUmJmU8PTcwP2UtNTU6ZT49OTcmJmU8PTEwMj9lLTg3Oi0xfWZ1bmN0aW9uIFRuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5O3N3aXRjaChuLmNoYXJDb2RlQXQodCsxKSl7Y2FzZSAzNDpyZXR1cm57dmFsdWU6JyInLHNpemU6Mn07Y2FzZSA5MjpyZXR1cm57dmFsdWU6IlxcIixzaXplOjJ9O2Nhc2UgNDc6cmV0dXJue3ZhbHVlOiIvIixzaXplOjJ9O2Nhc2UgOTg6cmV0dXJue3ZhbHVlOiJcYiIsc2l6ZToyfTtjYXNlIDEwMjpyZXR1cm57dmFsdWU6IlxmIixzaXplOjJ9O2Nhc2UgMTEwOnJldHVybnt2YWx1ZTpgCmAsc2l6ZToyfTtjYXNlIDExNDpyZXR1cm57dmFsdWU6IlxyIixzaXplOjJ9O2Nhc2UgMTE2OnJldHVybnt2YWx1ZToiCSIsc2l6ZToyfX10aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrMil9Ii5gKX1mdW5jdGlvbiBibihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPWUubGluZVN0YXJ0LHM9dCszLG89cyxjPSIiO2NvbnN0IGY9W107Zm9yKDtzPGk7KXtjb25zdCBkPW4uY2hhckNvZGVBdChzKTtpZihkPT09MzQmJm4uY2hhckNvZGVBdChzKzEpPT09MzQmJm4uY2hhckNvZGVBdChzKzIpPT09MzQpe2MrPW4uc2xpY2UobyxzKSxmLnB1c2goYyk7Y29uc3QgdT1VKGUsbC5CTE9DS19TVFJJTkcsdCxzKzMsbG4oZikuam9pbihgCmApKTtyZXR1cm4gZS5saW5lKz1mLmxlbmd0aC0xLGUubGluZVN0YXJ0PXIsdX1pZihkPT09OTImJm4uY2hhckNvZGVBdChzKzEpPT09MzQmJm4uY2hhckNvZGVBdChzKzIpPT09MzQmJm4uY2hhckNvZGVBdChzKzMpPT09MzQpe2MrPW4uc2xpY2UobyxzKSxvPXMrMSxzKz00O2NvbnRpbnVlfWlmKGQ9PT0xMHx8ZD09PTEzKXtjKz1uLnNsaWNlKG8scyksZi5wdXNoKGMpLGQ9PT0xMyYmbi5jaGFyQ29kZUF0KHMrMSk9PT0xMD9zKz0yOisrcyxjPSIiLG89cyxyPXM7Y29udGludWV9aWYoaGUoZCkpKytzO2Vsc2UgaWYoT2UobixzKSlzKz0yO2Vsc2UgdGhyb3cgRyhlLnNvdXJjZSxzLGBJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAke3VlKGUscyl9LmApfXRocm93IEcoZS5zb3VyY2UscywiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBObihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMTtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO2lmKHVuKHMpKSsrcjtlbHNlIGJyZWFrfXJldHVybiBVKGUsbC5OQU1FLHQscixuLnNsaWNlKHQscikpfWNvbnN0IHhuPTEwLHh0PTI7ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIHdlKGUsW10pfWZ1bmN0aW9uIHdlKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlInN0cmluZyI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBlLm5hbWU/YFtmdW5jdGlvbiAke2UubmFtZX1dYDoiW2Z1bmN0aW9uXSI7Y2FzZSJvYmplY3QiOnJldHVybiBBbihlLHQpO2RlZmF1bHQ6cmV0dXJuIFN0cmluZyhlKX19ZnVuY3Rpb24gQW4oZSx0KXtpZihlPT09bnVsbClyZXR1cm4ibnVsbCI7aWYodC5pbmNsdWRlcyhlKSlyZXR1cm4iW0NpcmN1bGFyXSI7Y29uc3Qgbj1bLi4udCxlXTtpZihJbihlKSl7Y29uc3QgaT1lLnRvSlNPTigpO2lmKGkhPT1lKXJldHVybiB0eXBlb2YgaT09InN0cmluZyI/aTp3ZShpLG4pfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gT24oZSxuKTtyZXR1cm4gU24oZSxuKX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gdHlwZW9mIGUudG9KU09OPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIFNuKGUsdCl7Y29uc3Qgbj1PYmplY3QuZW50cmllcyhlKTtyZXR1cm4gbi5sZW5ndGg9PT0wPyJ7fSI6dC5sZW5ndGg+eHQ/IlsiK3duKGUpKyJdIjoieyAiK24ubWFwKChbcixzXSk9PnIrIjogIit3ZShzLHQpKS5qb2luKCIsICIpKyIgfSJ9ZnVuY3Rpb24gT24oZSx0KXtpZihlLmxlbmd0aD09PTApcmV0dXJuIltdIjtpZih0Lmxlbmd0aD54dClyZXR1cm4iW0FycmF5XSI7Y29uc3Qgbj1NYXRoLm1pbih4bixlLmxlbmd0aCksaT1lLmxlbmd0aC1uLHI9W107Zm9yKGxldCBzPTA7czxuOysrcylyLnB1c2god2UoZVtzXSx0KSk7cmV0dXJuIGk9PT0xP3IucHVzaCgiLi4uIDEgbW9yZSBpdGVtIik6aT4xJiZyLnB1c2goYC4uLiAke2l9IG1vcmUgaXRlbXNgKSwiWyIrci5qb2luKCIsICIpKyJdIn1mdW5jdGlvbiB3bihlKXtjb25zdCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5yZXBsYWNlKC9eXFtvYmplY3QgLywiIikucmVwbGFjZSgvXSQvLCIiKTtpZih0PT09Ik9iamVjdCImJnR5cGVvZiBlLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iKXtjb25zdCBuPWUuY29uc3RydWN0b3IubmFtZTtpZih0eXBlb2Ygbj09InN0cmluZyImJm4hPT0iIilyZXR1cm4gbn1yZXR1cm4gdH1jb25zdCBEbj1nbG9iYWxUaGlzLnByb2Nlc3MmJnByb2Nlc3MuZW52Lk5PREVfRU5WPT09InByb2R1Y3Rpb24iP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBufTpmdW5jdGlvbih0LG4pe2lmKHQgaW5zdGFuY2VvZiBuKXJldHVybiEwO2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwpe3ZhciBpO2NvbnN0IHI9bi5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSxzPVN5bWJvbC50b1N0cmluZ1RhZyBpbiB0P3RbU3ltYm9sLnRvU3RyaW5nVGFnXTooaT10LmNvbnN0cnVjdG9yKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubmFtZTtpZihyPT09cyl7Y29uc3Qgbz1ZZSh0KTt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1c2UgJHtyfSAiJHtvfSIgZnJvbSBhbm90aGVyIG1vZHVsZSBvciByZWFsbS4KCkVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlIG9mICJncmFwaHFsIiBpbiB0aGUgbm9kZV9tb2R1bGVzCmRpcmVjdG9yeS4gSWYgZGlmZmVyZW50IHZlcnNpb25zIG9mICJncmFwaHFsIiBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiBvdGhlcgpyZWxpZWQgb24gbW9kdWxlcywgdXNlICJyZXNvbHV0aW9ucyIgdG8gZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgaW5zdGFsbGVkLgoKaHR0cHM6Ly95YXJucGtnLmNvbS9lbi9kb2NzL3NlbGVjdGl2ZS12ZXJzaW9uLXJlc29sdXRpb25zCgpEdXBsaWNhdGUgImdyYXBocWwiIG1vZHVsZXMgY2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBzaW5jZSBkaWZmZXJlbnQKdmVyc2lvbnMgbWF5IGhhdmUgZGlmZmVyZW50IGNhcGFiaWxpdGllcyBhbmQgYmVoYXZpb3IuIFRoZSBkYXRhIGZyb20gb25lCnZlcnNpb24gdXNlZCBpbiB0aGUgZnVuY3Rpb24gZnJvbSBhbm90aGVyIGNvdWxkIHByb2R1Y2UgY29uZnVzaW5nIGFuZApzcHVyaW91cyByZXN1bHRzLmApfX1yZXR1cm4hMX07Y2xhc3MgQXR7Y29uc3RydWN0b3IodCxuPSJHcmFwaFFMIHJlcXVlc3QiLGk9e2xpbmU6MSxjb2x1bW46MX0pe3R5cGVvZiB0PT0ic3RyaW5nInx8YWUoITEsYEJvZHkgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQ6ICR7WWUodCl9LmApLHRoaXMuYm9keT10LHRoaXMubmFtZT1uLHRoaXMubG9jYXRpb25PZmZzZXQ9aSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmxpbmU+MHx8YWUoITEsImxpbmUgaW4gbG9jYXRpb25PZmZzZXQgaXMgMS1pbmRleGVkIGFuZCBtdXN0IGJlIHBvc2l0aXZlLiIpLHRoaXMubG9jYXRpb25PZmZzZXQuY29sdW1uPjB8fGFlKCExLCJjb2x1bW4gaW4gbG9jYXRpb25PZmZzZXQgaXMgMS1pbmRleGVkIGFuZCBtdXN0IGJlIHBvc2l0aXZlLiIpfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlNvdXJjZSJ9fWZ1bmN0aW9uIENuKGUpe3JldHVybiBEbihlLEF0KX1mdW5jdGlvbiBJdChlLHQpe2NvbnN0IG49bmV3IGtuKGUsdCksaT1uLnBhcnNlRG9jdW1lbnQoKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInRva2VuQ291bnQiLHtlbnVtZXJhYmxlOiExLHZhbHVlOm4udG9rZW5Db3VudH0pLGl9Y2xhc3Mga257Y29uc3RydWN0b3IodCxuPXt9KXtjb25zdCBpPUNuKHQpP3Q6bmV3IEF0KHQpO3RoaXMuX2xleGVyPW5ldyBkbihpKSx0aGlzLl9vcHRpb25zPW4sdGhpcy5fdG9rZW5Db3VudGVyPTB9Z2V0IHRva2VuQ291bnQoKXtyZXR1cm4gdGhpcy5fdG9rZW5Db3VudGVyfXBhcnNlTmFtZSgpe2NvbnN0IHQ9dGhpcy5leHBlY3RUb2tlbihsLk5BTUUpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk5BTUUsdmFsdWU6dC52YWx1ZX0pfXBhcnNlRG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuRE9DVU1FTlQsZGVmaW5pdGlvbnM6dGhpcy5tYW55KGwuU09GLHRoaXMucGFyc2VEZWZpbml0aW9uLGwuRU9GKX0pfXBhcnNlRGVmaW5pdGlvbigpe2lmKHRoaXMucGVlayhsLkJSQUNFX0wpKXJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2NvbnN0IHQ9dGhpcy5wZWVrRGVzY3JpcHRpb24oKSxuPXQ/dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk6dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09bC5OQU1FKXtzd2l0Y2gobi52YWx1ZSl7Y2FzZSJzY2hlbWEiOnJldHVybiB0aGlzLnBhcnNlU2NoZW1hRGVmaW5pdGlvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uKCk7Y2FzZSJ0eXBlIjpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdFR5cGVEZWZpbml0aW9uKCk7Y2FzZSJpbnRlcmZhY2UiOnJldHVybiB0aGlzLnBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZURlZmluaXRpb24oKTtjYXNlImVudW0iOnJldHVybiB0aGlzLnBhcnNlRW51bVR5cGVEZWZpbml0aW9uKCk7Y2FzZSJpbnB1dCI6cmV0dXJuIHRoaXMucGFyc2VJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uKCk7Y2FzZSJkaXJlY3RpdmUiOnJldHVybiB0aGlzLnBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbigpfWlmKHQpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2UsdGhpcy5fbGV4ZXIudG9rZW4uc3RhcnQsIlVuZXhwZWN0ZWQgZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9ucyBhcmUgc3VwcG9ydGVkIG9ubHkgb24gdHlwZSBkZWZpbml0aW9ucy4iKTtzd2l0Y2gobi52YWx1ZSl7Y2FzZSJxdWVyeSI6Y2FzZSJtdXRhdGlvbiI6Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2Nhc2UiZnJhZ21lbnQiOnJldHVybiB0aGlzLnBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCk7Y2FzZSJleHRlbmQiOnJldHVybiB0aGlzLnBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpfX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQobil9cGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtpZih0aGlzLnBlZWsobC5CUkFDRV9MKSlyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5PUEVSQVRJT05fREVGSU5JVElPTixvcGVyYXRpb246ZmUuUVVFUlksbmFtZTp2b2lkIDAsdmFyaWFibGVEZWZpbml0aW9uczpbXSxkaXJlY3RpdmVzOltdLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KTtjb25zdCBuPXRoaXMucGFyc2VPcGVyYXRpb25UeXBlKCk7bGV0IGk7cmV0dXJuIHRoaXMucGVlayhsLk5BTUUpJiYoaT10aGlzLnBhcnNlTmFtZSgpKSx0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLG5hbWU6aSx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlT3BlcmF0aW9uVHlwZSgpe2NvbnN0IHQ9dGhpcy5leHBlY3RUb2tlbihsLk5BTUUpO3N3aXRjaCh0LnZhbHVlKXtjYXNlInF1ZXJ5IjpyZXR1cm4gZmUuUVVFUlk7Y2FzZSJtdXRhdGlvbiI6cmV0dXJuIGZlLk1VVEFUSU9OO2Nhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4gZmUuU1VCU0NSSVBUSU9OfXRocm93IHRoaXMudW5leHBlY3RlZCh0KX1wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLHRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb24sbC5QQVJFTl9SKX1wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5WQVJJQUJMRV9ERUZJTklUSU9OLHZhcmlhYmxlOnRoaXMucGFyc2VWYXJpYWJsZSgpLHR5cGU6KHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSksZGVmYXVsdFZhbHVlOnRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUyk/dGhpcy5wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCk6dm9pZCAwLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpfSl9cGFyc2VWYXJpYWJsZSgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5ET0xMQVIpLHRoaXMubm9kZSh0LHtraW5kOlQuVkFSSUFCTEUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpfSl9cGFyc2VTZWxlY3Rpb25TZXQoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuU0VMRUNUSU9OX1NFVCxzZWxlY3Rpb25zOnRoaXMubWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZVNlbGVjdGlvbixsLkJSQUNFX1IpfSl9cGFyc2VTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5wZWVrKGwuU1BSRUFEKT90aGlzLnBhcnNlRnJhZ21lbnQoKTp0aGlzLnBhcnNlRmllbGQoKX1wYXJzZUZpZWxkKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VOYW1lKCk7bGV0IGkscjtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQ09MT04pPyhpPW4scj10aGlzLnBhcnNlTmFtZSgpKTpyPW4sdGhpcy5ub2RlKHQse2tpbmQ6VC5GSUVMRCxhbGlhczppLG5hbWU6cixhcmd1bWVudHM6dGhpcy5wYXJzZUFyZ3VtZW50cyghMSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGVlayhsLkJSQUNFX0wpP3RoaXMucGFyc2VTZWxlY3Rpb25TZXQoKTp2b2lkIDB9KX1wYXJzZUFyZ3VtZW50cyh0KXtjb25zdCBuPXQ/dGhpcy5wYXJzZUNvbnN0QXJndW1lbnQ6dGhpcy5wYXJzZUFyZ3VtZW50O3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsbixsLlBBUkVOX1IpfXBhcnNlQXJndW1lbnQodD0hMSl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbixpPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5ub2RlKG4se2tpbmQ6VC5BUkdVTUVOVCxuYW1lOmksdmFsdWU6dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KX0pfXBhcnNlQ29uc3RBcmd1bWVudCgpe3JldHVybiB0aGlzLnBhcnNlQXJndW1lbnQoITApfXBhcnNlRnJhZ21lbnQoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0VG9rZW4obC5TUFJFQUQpO2NvbnN0IG49dGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoIm9uIik7cmV0dXJuIW4mJnRoaXMucGVlayhsLk5BTUUpP3RoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfU1BSRUFELG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpfSk6dGhpcy5ub2RlKHQse2tpbmQ6VC5JTkxJTkVfRlJBR01FTlQsdHlwZUNvbmRpdGlvbjpuP3RoaXMucGFyc2VOYW1lZFR5cGUoKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RLZXl3b3JkKCJmcmFnbWVudCIpLHRoaXMuX29wdGlvbnMuYWxsb3dMZWdhY3lGcmFnbWVudFZhcmlhYmxlcz09PSEwP3RoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksdHlwZUNvbmRpdGlvbjoodGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpLHRoaXMucGFyc2VOYW1lZFR5cGUoKSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pOnRoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VGcmFnbWVudE5hbWUoKXtpZih0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJvbiIpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMucGFyc2VOYW1lKCl9cGFyc2VWYWx1ZUxpdGVyYWwodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtzd2l0Y2gobi5raW5kKXtjYXNlIGwuQlJBQ0tFVF9MOnJldHVybiB0aGlzLnBhcnNlTGlzdCh0KTtjYXNlIGwuQlJBQ0VfTDpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdCh0KTtjYXNlIGwuSU5UOnJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZShuLHtraW5kOlQuSU5ULHZhbHVlOm4udmFsdWV9KTtjYXNlIGwuRkxPQVQ6cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKG4se2tpbmQ6VC5GTE9BVCx2YWx1ZTpuLnZhbHVlfSk7Y2FzZSBsLlNUUklORzpjYXNlIGwuQkxPQ0tfU1RSSU5HOnJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpO2Nhc2UgbC5OQU1FOnN3aXRjaCh0aGlzLmFkdmFuY2VMZXhlcigpLG4udmFsdWUpe2Nhc2UidHJ1ZSI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuQk9PTEVBTix2YWx1ZTohMH0pO2Nhc2UiZmFsc2UiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULkJPT0xFQU4sdmFsdWU6ITF9KTtjYXNlIm51bGwiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULk5VTEx9KTtkZWZhdWx0OnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULkVOVU0sdmFsdWU6bi52YWx1ZX0pfWNhc2UgbC5ET0xMQVI6aWYodClpZih0aGlzLmV4cGVjdFRva2VuKGwuRE9MTEFSKSx0aGlzLl9sZXhlci50b2tlbi5raW5kPT09bC5OQU1FKXtjb25zdCBpPXRoaXMuX2xleGVyLnRva2VuLnZhbHVlO3Rocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYFVuZXhwZWN0ZWQgdmFyaWFibGUgIiQke2l9IiBpbiBjb25zdGFudCB2YWx1ZS5gKX1lbHNlIHRocm93IHRoaXMudW5leHBlY3RlZChuKTtyZXR1cm4gdGhpcy5wYXJzZVZhcmlhYmxlKCk7ZGVmYXVsdDp0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19cGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKCEwKX1wYXJzZVN0cmluZ0xpdGVyYWwoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZSh0LHtraW5kOlQuU1RSSU5HLHZhbHVlOnQudmFsdWUsYmxvY2s6dC5raW5kPT09bC5CTE9DS19TVFJJTkd9KX1wYXJzZUxpc3QodCl7Y29uc3Qgbj0oKT0+dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KTtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuTElTVCx2YWx1ZXM6dGhpcy5hbnkobC5CUkFDS0VUX0wsbixsLkJSQUNLRVRfUil9KX1wYXJzZU9iamVjdCh0KXtjb25zdCBuPSgpPT50aGlzLnBhcnNlT2JqZWN0RmllbGQodCk7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpULk9CSkVDVCxmaWVsZHM6dGhpcy5hbnkobC5CUkFDRV9MLG4sbC5CUkFDRV9SKX0pfXBhcnNlT2JqZWN0RmllbGQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbixpPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5ub2RlKG4se2tpbmQ6VC5PQkpFQ1RfRklFTEQsbmFtZTppLHZhbHVlOnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCl9KX1wYXJzZURpcmVjdGl2ZXModCl7Y29uc3Qgbj1bXTtmb3IoO3RoaXMucGVlayhsLkFUKTspbi5wdXNoKHRoaXMucGFyc2VEaXJlY3RpdmUodCkpO3JldHVybiBufXBhcnNlQ29uc3REaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKX1wYXJzZURpcmVjdGl2ZSh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQVQpLHRoaXMubm9kZShuLHtraW5kOlQuRElSRUNUSVZFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKSxhcmd1bWVudHM6dGhpcy5wYXJzZUFyZ3VtZW50cyh0KX0pfXBhcnNlVHlwZVJlZmVyZW5jZSgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47bGV0IG47aWYodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQlJBQ0tFVF9MKSl7Y29uc3QgaT10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5CUkFDS0VUX1IpLG49dGhpcy5ub2RlKHQse2tpbmQ6VC5MSVNUX1RZUEUsdHlwZTppfSl9ZWxzZSBuPXRoaXMucGFyc2VOYW1lZFR5cGUoKTtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQkFORyk/dGhpcy5ub2RlKHQse2tpbmQ6VC5OT05fTlVMTF9UWVBFLHR5cGU6bn0pOm59cGFyc2VOYW1lZFR5cGUoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuTkFNRURfVFlQRSxuYW1lOnRoaXMucGFyc2VOYW1lKCl9KX1wZWVrRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5wZWVrKGwuU1RSSU5HKXx8dGhpcy5wZWVrKGwuQkxPQ0tfU1RSSU5HKX1wYXJzZURlc2NyaXB0aW9uKCl7aWYodGhpcy5wZWVrRGVzY3JpcHRpb24oKSlyZXR1cm4gdGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwoKX1wYXJzZVNjaGVtYURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzY2hlbWEiKTtjb25zdCBpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMubWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGwuQlJBQ0VfUik7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NIRU1BX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixkaXJlY3RpdmVzOmksb3BlcmF0aW9uVHlwZXM6cn0pfXBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWVkVHlwZSgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sdHlwZTppfSl9cGFyc2VTY2FsYXJUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cn0pfXBhcnNlT2JqZWN0VHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksbz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9CSkVDVF9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksaW50ZXJmYWNlczpyLGRpcmVjdGl2ZXM6cyxmaWVsZHM6b30pfXBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKXtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoImltcGxlbWVudHMiKT90aGlzLmRlbGltaXRlZE1hbnkobC5BTVAsdGhpcy5wYXJzZU5hbWVkVHlwZSk6W119cGFyc2VGaWVsZHNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlRmllbGREZWZpbml0aW9uLGwuQlJBQ0VfUil9cGFyc2VGaWVsZERlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3Qgcz10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpLG89dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULkZJRUxEX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksYXJndW1lbnRzOnIsdHlwZTpzLGRpcmVjdGl2ZXM6b30pfXBhcnNlQXJndW1lbnREZWZzKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixsLlBBUkVOX1IpfXBhcnNlSW5wdXRWYWx1ZURlZigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VOYW1lKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCByPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCk7bGV0IHM7dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKSYmKHM9dGhpcy5wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCkpO2NvbnN0IG89dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksdHlwZTpyLGRlZmF1bHRWYWx1ZTpzLGRpcmVjdGl2ZXM6b30pfXBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbnRlcmZhY2UiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxzPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxvPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczpzLGZpZWxkczpvfSl9cGFyc2VVbmlvblR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgidW5pb24iKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlVW5pb25NZW1iZXJUeXBlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlVOSU9OX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsdHlwZXM6c30pfXBhcnNlVW5pb25NZW1iZXJUeXBlcygpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpP3RoaXMuZGVsaW1pdGVkTWFueShsLlBJUEUsdGhpcy5wYXJzZU5hbWVkVHlwZSk6W119cGFyc2VFbnVtVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJlbnVtIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLHZhbHVlczpzfSl9cGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUVudW1WYWx1ZURlZmluaXRpb24sbC5CUkFDRV9SKX1wYXJzZUVudW1WYWx1ZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlRW51bVZhbHVlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULkVOVU1fVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnJ9KX1wYXJzZUVudW1WYWx1ZU5hbWUoKXtpZih0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJ0cnVlInx8dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0iZmFsc2UifHx0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJudWxsIil0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSx0aGlzLl9sZXhlci50b2tlbi5zdGFydCxgJHtEZSh0aGlzLl9sZXhlci50b2tlbil9IGlzIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgYW4gZW51bSB2YWx1ZS5gKTtyZXR1cm4gdGhpcy5wYXJzZU5hbWUoKX1wYXJzZUlucHV0T2JqZWN0VHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbnB1dCIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixsLkJSQUNFX1IpfXBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk7aWYodC5raW5kPT09bC5OQU1FKXN3aXRjaCh0LnZhbHVlKXtjYXNlInNjaGVtYSI6cmV0dXJuIHRoaXMucGFyc2VTY2hlbWFFeHRlbnNpb24oKTtjYXNlInNjYWxhciI6cmV0dXJuIHRoaXMucGFyc2VTY2FsYXJUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJ0eXBlIjpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdFR5cGVFeHRlbnNpb24oKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIHRoaXMucGFyc2VJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHRoaXMucGFyc2VVbmlvblR5cGVFeHRlbnNpb24oKTtjYXNlImVudW0iOnJldHVybiB0aGlzLnBhcnNlRW51bVR5cGVFeHRlbnNpb24oKTtjYXNlImlucHV0IjpyZXR1cm4gdGhpcy5wYXJzZUlucHV0T2JqZWN0VHlwZUV4dGVuc2lvbigpfXRocm93IHRoaXMudW5leHBlY3RlZCh0KX1wYXJzZVNjaGVtYUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO2NvbnN0IG49dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLGk9dGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbixsLkJSQUNFX1IpO2lmKG4ubGVuZ3RoPT09MCYmaS5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDSEVNQV9FWFRFTlNJT04sZGlyZWN0aXZlczpuLG9wZXJhdGlvblR5cGVzOml9KX1wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJzY2FsYXIiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7aWYoaS5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDQUxBUl9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppfSl9cGFyc2VPYmplY3RUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgidHlwZSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCYmcy5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOm4saW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlSW50ZXJmYWNlVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImludGVyZmFjZSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCYmcy5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTixuYW1lOm4saW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlVW5pb25UeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgidW5pb24iKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlVW5pb25NZW1iZXJUeXBlcygpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlVOSU9OX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksdHlwZXM6cn0pfXBhcnNlRW51bVR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJlbnVtIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLHZhbHVlczpyfSl9cGFyc2VJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJpbnB1dCIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pfXBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImRpcmVjdGl2ZSIpLHRoaXMuZXhwZWN0VG9rZW4obC5BVCk7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpLHM9dGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoInJlcGVhdGFibGUiKTt0aGlzLmV4cGVjdEtleXdvcmQoIm9uIik7Y29uc3Qgbz10aGlzLnBhcnNlRGlyZWN0aXZlTG9jYXRpb25zKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRElSRUNUSVZFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksYXJndW1lbnRzOnIscmVwZWF0YWJsZTpzLGxvY2F0aW9uczpvfSl9cGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKXtyZXR1cm4gdGhpcy5kZWxpbWl0ZWRNYW55KGwuUElQRSx0aGlzLnBhcnNlRGlyZWN0aXZlTG9jYXRpb24pfXBhcnNlRGlyZWN0aXZlTG9jYXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU5hbWUoKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR2Usbi52YWx1ZSkpcmV0dXJuIG47dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfW5vZGUodCxuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ub0xvY2F0aW9uIT09ITAmJihuLmxvYz1uZXcgYW4odCx0aGlzLl9sZXhlci5sYXN0VG9rZW4sdGhpcy5fbGV4ZXIuc291cmNlKSksbn1wZWVrKHQpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09dH1leHBlY3RUb2tlbih0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PXQpcmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksbjt0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBFeHBlY3RlZCAke1N0KHQpfSwgZm91bmQgJHtEZShuKX0uYCl9ZXhwZWN0T3B0aW9uYWxUb2tlbih0KXtyZXR1cm4gdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PXQ/KHRoaXMuYWR2YW5jZUxleGVyKCksITApOiExfWV4cGVjdEtleXdvcmQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT1sLk5BTUUmJm4udmFsdWU9PT10KXRoaXMuYWR2YW5jZUxleGVyKCk7ZWxzZSB0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBFeHBlY3RlZCAiJHt0fSIsIGZvdW5kICR7RGUobil9LmApfWV4cGVjdE9wdGlvbmFsS2V5d29yZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3JldHVybiBuLmtpbmQ9PT1sLk5BTUUmJm4udmFsdWU9PT10Pyh0aGlzLmFkdmFuY2VMZXhlcigpLCEwKTohMX11bmV4cGVjdGVkKHQpe2NvbnN0IG49dCE9bnVsbD90OnRoaXMuX2xleGVyLnRva2VuO3JldHVybiBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBVbmV4cGVjdGVkICR7RGUobil9LmApfWFueSh0LG4saSl7dGhpcy5leHBlY3RUb2tlbih0KTtjb25zdCByPVtdO2Zvcig7IXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKTspci5wdXNoKG4uY2FsbCh0aGlzKSk7cmV0dXJuIHJ9b3B0aW9uYWxNYW55KHQsbixpKXtpZih0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCkpe2NvbnN0IHI9W107ZG8gci5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUoIXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKSk7cmV0dXJuIHJ9cmV0dXJuW119bWFueSh0LG4saSl7dGhpcy5leHBlY3RUb2tlbih0KTtjb25zdCByPVtdO2RvIHIucHVzaChuLmNhbGwodGhpcykpO3doaWxlKCF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSkpO3JldHVybiByfWRlbGltaXRlZE1hbnkodCxuKXt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCk7Y29uc3QgaT1bXTtkbyBpLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSh0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCkpO3JldHVybiBpfWFkdmFuY2VMZXhlcigpe2NvbnN0e21heFRva2Vuczp0fT10aGlzLl9vcHRpb25zLG49dGhpcy5fbGV4ZXIuYWR2YW5jZSgpO2lmKG4ua2luZCE9PWwuRU9GJiYoKyt0aGlzLl90b2tlbkNvdW50ZXIsdCE9PXZvaWQgMCYmdGhpcy5fdG9rZW5Db3VudGVyPnQpKXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYERvY3VtZW50IGNvbnRhaW5zIG1vcmUgdGhhdCAke3R9IHRva2Vucy4gUGFyc2luZyBhYm9ydGVkLmApfX1mdW5jdGlvbiBEZShlKXtjb25zdCB0PWUudmFsdWU7cmV0dXJuIFN0KGUua2luZCkrKHQhPW51bGw/YCAiJHt0fSJgOiIiKX1mdW5jdGlvbiBTdChlKXtyZXR1cm4gcG4oZSk/YCIke2V9ImA6ZX1mdW5jdGlvbiBSbihlKXtyZXR1cm5gIiR7ZS5yZXBsYWNlKFBuLExuKX0iYH1jb25zdCBQbj0vW1x4MDAtXHgxZlx4MjJceDVjXHg3Zi1ceDlmXS9nO2Z1bmN0aW9uIExuKGUpe3JldHVybiBGbltlLmNoYXJDb2RlQXQoMCldfWNvbnN0IEZuPVsiXFx1MDAwMCIsIlxcdTAwMDEiLCJcXHUwMDAyIiwiXFx1MDAwMyIsIlxcdTAwMDQiLCJcXHUwMDA1IiwiXFx1MDAwNiIsIlxcdTAwMDciLCJcXGIiLCJcXHQiLCJcXG4iLCJcXHUwMDBCIiwiXFxmIiwiXFxyIiwiXFx1MDAwRSIsIlxcdTAwMEYiLCJcXHUwMDEwIiwiXFx1MDAxMSIsIlxcdTAwMTIiLCJcXHUwMDEzIiwiXFx1MDAxNCIsIlxcdTAwMTUiLCJcXHUwMDE2IiwiXFx1MDAxNyIsIlxcdTAwMTgiLCJcXHUwMDE5IiwiXFx1MDAxQSIsIlxcdTAwMUIiLCJcXHUwMDFDIiwiXFx1MDAxRCIsIlxcdTAwMUUiLCJcXHUwMDFGIiwiIiwiIiwnXFwiJywiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiXFxcXCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIlxcdTAwN0YiLCJcXHUwMDgwIiwiXFx1MDA4MSIsIlxcdTAwODIiLCJcXHUwMDgzIiwiXFx1MDA4NCIsIlxcdTAwODUiLCJcXHUwMDg2IiwiXFx1MDA4NyIsIlxcdTAwODgiLCJcXHUwMDg5IiwiXFx1MDA4QSIsIlxcdTAwOEIiLCJcXHUwMDhDIiwiXFx1MDA4RCIsIlxcdTAwOEUiLCJcXHUwMDhGIiwiXFx1MDA5MCIsIlxcdTAwOTEiLCJcXHUwMDkyIiwiXFx1MDA5MyIsIlxcdTAwOTQiLCJcXHUwMDk1IiwiXFx1MDA5NiIsIlxcdTAwOTciLCJcXHUwMDk4IiwiXFx1MDA5OSIsIlxcdTAwOUEiLCJcXHUwMDlCIiwiXFx1MDA5QyIsIlxcdTAwOUQiLCJcXHUwMDlFIiwiXFx1MDA5RiJdLE1uPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uICRuKGUsdCxuPXZ0KXtjb25zdCBpPW5ldyBNYXA7Zm9yKGNvbnN0IFAgb2YgT2JqZWN0LnZhbHVlcyhUKSlpLnNldChQLEJuKHQsUCkpO2xldCByLHM9QXJyYXkuaXNBcnJheShlKSxvPVtlXSxjPS0xLGY9W10sZD1lLHUseTtjb25zdCBnPVtdLGI9W107ZG97YysrO2NvbnN0IFA9Yz09PW8ubGVuZ3RoLGo9UCYmZi5sZW5ndGghPT0wO2lmKFApe2lmKHU9Yi5sZW5ndGg9PT0wP3ZvaWQgMDpnW2cubGVuZ3RoLTFdLGQ9eSx5PWIucG9wKCksailpZihzKXtkPWQuc2xpY2UoKTtsZXQgRT0wO2Zvcihjb25zdFt3LENdb2YgZil7Y29uc3QgTD13LUU7Qz09PW51bGw/KGQuc3BsaWNlKEwsMSksRSsrKTpkW0xdPUN9fWVsc2V7ZD1EKHt9LGQpO2Zvcihjb25zdFtFLHddb2YgZilkW0VdPXd9Yz1yLmluZGV4LG89ci5rZXlzLGY9ci5lZGl0cyxzPXIuaW5BcnJheSxyPXIucHJldn1lbHNlIGlmKHkpe2lmKHU9cz9jOm9bY10sZD15W3VdLGQ9PW51bGwpY29udGludWU7Zy5wdXNoKHUpfWxldCB2O2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgbSxOO2d0KGQpfHxhZSghMSxgSW52YWxpZCBBU1QgTm9kZTogJHtZZShkKX0uYCk7Y29uc3QgRT1QPyhtPWkuZ2V0KGQua2luZCkpPT09bnVsbHx8bT09PXZvaWQgMD92b2lkIDA6bS5sZWF2ZTooTj1pLmdldChkLmtpbmQpKT09PW51bGx8fE49PT12b2lkIDA/dm9pZCAwOk4uZW50ZXI7aWYodj1FPT1udWxsP3ZvaWQgMDpFLmNhbGwodCxkLHUseSxnLGIpLHY9PT1NbilicmVhaztpZih2PT09ITEpe2lmKCFQKXtnLnBvcCgpO2NvbnRpbnVlfX1lbHNlIGlmKHYhPT12b2lkIDAmJihmLnB1c2goW3Usdl0pLCFQKSlpZihndCh2KSlkPXY7ZWxzZXtnLnBvcCgpO2NvbnRpbnVlfX1pZih2PT09dm9pZCAwJiZqJiZmLnB1c2goW3UsZF0pLFApZy5wb3AoKTtlbHNle3ZhciBSO3I9e2luQXJyYXk6cyxpbmRleDpjLGtleXM6byxlZGl0czpmLHByZXY6cn0scz1BcnJheS5pc0FycmF5KGQpLG89cz9kOihSPW5bZC5raW5kXSkhPT1udWxsJiZSIT09dm9pZCAwP1I6W10sYz0tMSxmPVtdLHkmJmIucHVzaCh5KSx5PWR9fXdoaWxlKHIhPT12b2lkIDApO3JldHVybiBmLmxlbmd0aCE9PTA/ZltmLmxlbmd0aC0xXVsxXTplfWZ1bmN0aW9uIEJuKGUsdCl7Y29uc3Qgbj1lW3RdO3JldHVybiB0eXBlb2Ygbj09Im9iamVjdCI/bjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj97ZW50ZXI6bixsZWF2ZTp2b2lkIDB9OntlbnRlcjplLmVudGVyLGxlYXZlOmUubGVhdmV9fWZ1bmN0aW9uIFVuKGUpe3JldHVybiAkbihlLGpuKX1jb25zdCBWbj04MCxqbj17TmFtZTp7bGVhdmU6ZT0+ZS52YWx1ZX0sVmFyaWFibGU6e2xlYXZlOmU9PiIkIitlLm5hbWV9LERvY3VtZW50OntsZWF2ZTplPT5wKGUuZGVmaW5pdGlvbnMsYAoKYCl9LE9wZXJhdGlvbkRlZmluaXRpb246e2xlYXZlKGUpe2NvbnN0IHQ9TygiKCIscChlLnZhcmlhYmxlRGVmaW5pdGlvbnMsIiwgIiksIikiKSxuPXAoW2Uub3BlcmF0aW9uLHAoW2UubmFtZSx0XSkscChlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKTtyZXR1cm4obj09PSJxdWVyeSI/IiI6bisiICIpK2Uuc2VsZWN0aW9uU2V0fX0sVmFyaWFibGVEZWZpbml0aW9uOntsZWF2ZTooe3ZhcmlhYmxlOmUsdHlwZTp0LGRlZmF1bHRWYWx1ZTpuLGRpcmVjdGl2ZXM6aX0pPT5lKyI6ICIrdCtPKCIgPSAiLG4pK08oIiAiLHAoaSwiICIpKX0sU2VsZWN0aW9uU2V0OntsZWF2ZTooe3NlbGVjdGlvbnM6ZX0pPT5yZShlKX0sRmllbGQ6e2xlYXZlKHthbGlhczplLG5hbWU6dCxhcmd1bWVudHM6bixkaXJlY3RpdmVzOmksc2VsZWN0aW9uU2V0OnJ9KXtjb25zdCBzPU8oIiIsZSwiOiAiKSt0O2xldCBvPXMrTygiKCIscChuLCIsICIpLCIpIik7cmV0dXJuIG8ubGVuZ3RoPlZuJiYobz1zK08oYCgKYCxDZShwKG4sYApgKSksYAopYCkpLHAoW28scChpLCIgIikscl0sIiAiKX19LEFyZ3VtZW50OntsZWF2ZTooe25hbWU6ZSx2YWx1ZTp0fSk9PmUrIjogIit0fSxGcmFnbWVudFNwcmVhZDp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0fSk9PiIuLi4iK2UrTygiICIscCh0LCIgIikpfSxJbmxpbmVGcmFnbWVudDp7bGVhdmU6KHt0eXBlQ29uZGl0aW9uOmUsZGlyZWN0aXZlczp0LHNlbGVjdGlvblNldDpufSk9PnAoWyIuLi4iLE8oIm9uICIsZSkscCh0LCIgIiksbl0sIiAiKX0sRnJhZ21lbnREZWZpbml0aW9uOntsZWF2ZTooe25hbWU6ZSx0eXBlQ29uZGl0aW9uOnQsdmFyaWFibGVEZWZpbml0aW9uczpuLGRpcmVjdGl2ZXM6aSxzZWxlY3Rpb25TZXQ6cn0pPT5gZnJhZ21lbnQgJHtlfSR7TygiKCIscChuLCIsICIpLCIpIil9IG9uICR7dH0gJHtPKCIiLHAoaSwiICIpLCIgIil9YCtyfSxJbnRWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LEZsb2F0VmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxTdHJpbmdWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplLGJsb2NrOnR9KT0+dD9obihlKTpSbihlKX0sQm9vbGVhblZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZT8idHJ1ZSI6ImZhbHNlIn0sTnVsbFZhbHVlOntsZWF2ZTooKT0+Im51bGwifSxFbnVtVmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxMaXN0VmFsdWU6e2xlYXZlOih7dmFsdWVzOmV9KT0+IlsiK3AoZSwiLCAiKSsiXSJ9LE9iamVjdFZhbHVlOntsZWF2ZTooe2ZpZWxkczplfSk9PiJ7IitwKGUsIiwgIikrIn0ifSxPYmplY3RGaWVsZDp7bGVhdmU6KHtuYW1lOmUsdmFsdWU6dH0pPT5lKyI6ICIrdH0sRGlyZWN0aXZlOntsZWF2ZTooe25hbWU6ZSxhcmd1bWVudHM6dH0pPT4iQCIrZStPKCIoIixwKHQsIiwgIiksIikiKX0sTmFtZWRUeXBlOntsZWF2ZTooe25hbWU6ZX0pPT5lfSxMaXN0VHlwZTp7bGVhdmU6KHt0eXBlOmV9KT0+IlsiK2UrIl0ifSxOb25OdWxsVHlwZTp7bGVhdmU6KHt0eXBlOmV9KT0+ZSsiISJ9LFNjaGVtYURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxkaXJlY3RpdmVzOnQsb3BlcmF0aW9uVHlwZXM6bn0pPT5PKCIiLGUsYApgKStwKFsic2NoZW1hIixwKHQsIiAiKSxyZShuKV0sIiAiKX0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246e2xlYXZlOih7b3BlcmF0aW9uOmUsdHlwZTp0fSk9PmUrIjogIit0fSxTY2FsYXJUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm59KT0+TygiIixlLGAKYCkrcChbInNjYWxhciIsdCxwKG4sIiAiKV0sIiAiKX0sT2JqZWN0VHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pPT5PKCIiLGUsYApgKStwKFsidHlwZSIsdCxPKCJpbXBsZW1lbnRzICIscChuLCIgJiAiKSkscChpLCIgIikscmUocildLCIgIil9LEZpZWxkRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxhcmd1bWVudHM6bix0eXBlOmksZGlyZWN0aXZlczpyfSk9Pk8oIiIsZSxgCmApK3QrKE90KG4pP08oYCgKYCxDZShwKG4sYApgKSksYAopYCk6TygiKCIscChuLCIsICIpLCIpIikpKyI6ICIraStPKCIgIixwKHIsIiAiKSl9LElucHV0VmFsdWVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LHR5cGU6bixkZWZhdWx0VmFsdWU6aSxkaXJlY3RpdmVzOnJ9KT0+TygiIixlLGAKYCkrcChbdCsiOiAiK24sTygiPSAiLGkpLHAociwiICIpXSwiICIpfSxJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxpbnRlcmZhY2VzOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSk9Pk8oIiIsZSxgCmApK3AoWyJpbnRlcmZhY2UiLHQsTygiaW1wbGVtZW50cyAiLHAobiwiICYgIikpLHAoaSwiICIpLHJlKHIpXSwiICIpfSxVbmlvblR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bix0eXBlczppfSk9Pk8oIiIsZSxgCmApK3AoWyJ1bmlvbiIsdCxwKG4sIiAiKSxPKCI9ICIscChpLCIgfCAiKSldLCIgIil9LEVudW1UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sdmFsdWVzOml9KT0+TygiIixlLGAKYCkrcChbImVudW0iLHQscChuLCIgIikscmUoaSldLCIgIil9LEVudW1WYWx1ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpufSk9Pk8oIiIsZSxgCmApK3AoW3QscChuLCIgIildLCIgIil9LElucHV0T2JqZWN0VHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9Pk8oIiIsZSxgCmApK3AoWyJpbnB1dCIsdCxwKG4sIiAiKSxyZShpKV0sIiAiKX0sRGlyZWN0aXZlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxhcmd1bWVudHM6bixyZXBlYXRhYmxlOmksbG9jYXRpb25zOnJ9KT0+TygiIixlLGAKYCkrImRpcmVjdGl2ZSBAIit0KyhPdChuKT9PKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApOk8oIigiLHAobiwiLCAiKSwiKSIpKSsoaT8iIHJlcGVhdGFibGUiOiIiKSsiIG9uICIrcChyLCIgfCAiKX0sU2NoZW1hRXh0ZW5zaW9uOntsZWF2ZTooe2RpcmVjdGl2ZXM6ZSxvcGVyYXRpb25UeXBlczp0fSk9PnAoWyJleHRlbmQgc2NoZW1hIixwKGUsIiAiKSxyZSh0KV0sIiAiKX0sU2NhbGFyVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0fSk9PnAoWyJleHRlbmQgc2NhbGFyIixlLHAodCwiICIpXSwiICIpfSxPYmplY3RUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxpbnRlcmZhY2VzOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9PnAoWyJleHRlbmQgdHlwZSIsZSxPKCJpbXBsZW1lbnRzICIscCh0LCIgJiAiKSkscChuLCIgIikscmUoaSldLCIgIil9LEludGVyZmFjZVR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGludGVyZmFjZXM6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+cChbImV4dGVuZCBpbnRlcmZhY2UiLGUsTygiaW1wbGVtZW50cyAiLHAodCwiICYgIikpLHAobiwiICIpLHJlKGkpXSwiICIpfSxVbmlvblR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCx0eXBlczpufSk9PnAoWyJleHRlbmQgdW5pb24iLGUscCh0LCIgIiksTygiPSAiLHAobiwiIHwgIikpXSwiICIpfSxFbnVtVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LHZhbHVlczpufSk9PnAoWyJleHRlbmQgZW51bSIsZSxwKHQsIiAiKSxyZShuKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsZmllbGRzOm59KT0+cChbImV4dGVuZCBpbnB1dCIsZSxwKHQsIiAiKSxyZShuKV0sIiAiKX19O2Z1bmN0aW9uIHAoZSx0PSIiKXt2YXIgbjtyZXR1cm4obj1lPT1udWxsP3ZvaWQgMDplLmZpbHRlcihpPT5pKS5qb2luKHQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjoiIn1mdW5jdGlvbiByZShlKXtyZXR1cm4gTyhgewpgLENlKHAoZSxgCmApKSxgCn1gKX1mdW5jdGlvbiBPKGUsdCxuPSIiKXtyZXR1cm4gdCE9bnVsbCYmdCE9PSIiP2UrdCtuOiIifWZ1bmN0aW9uIENlKGUpe3JldHVybiBPKCIgICIsZS5yZXBsYWNlKC9cbi9nLGAKICBgKSl9ZnVuY3Rpb24gT3QoZSl7dmFyIHQ7cmV0dXJuKHQ9ZT09bnVsbD92b2lkIDA6ZS5zb21lKG49Pm4uaW5jbHVkZXMoYApgKSkpIT09bnVsbCYmdCE9PXZvaWQgMD90OiExfWNvbnN0IHd0PWU9Pnt2YXIgaSxyO2xldCB0O2NvbnN0IG49ZS5kZWZpbml0aW9ucy5maWx0ZXIocz0+cy5raW5kPT09Ik9wZXJhdGlvbkRlZmluaXRpb24iKTtyZXR1cm4gbi5sZW5ndGg9PT0xJiYodD0ocj0oaT1uWzBdKT09bnVsbD92b2lkIDA6aS5uYW1lKT09bnVsbD92b2lkIDA6ci52YWx1ZSksdH0sSmU9ZT0+e2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7bGV0IG47dHJ5e2NvbnN0IGk9SXQoZSk7bj13dChpKX1jYXRjaChpKXt9cmV0dXJue3F1ZXJ5OmUsb3BlcmF0aW9uTmFtZTpufX1jb25zdCB0PXd0KGUpO3JldHVybntxdWVyeTpVbihlKSxvcGVyYXRpb25OYW1lOnR9fTtjbGFzcyBkZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7Y29uc3QgaT1gJHtkZS5leHRyYWN0TWVzc2FnZSh0KX06ICR7SlNPTi5zdHJpbmdpZnkoe3Jlc3BvbnNlOnQscmVxdWVzdDpufSl9YDtzdXBlcihpKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkZS5wcm90b3R5cGUpLHRoaXMucmVzcG9uc2U9dCx0aGlzLnJlcXVlc3Q9bix0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U9PSJmdW5jdGlvbiImJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZGUpfXN0YXRpYyBleHRyYWN0TWVzc2FnZSh0KXt2YXIgbixpLHI7cmV0dXJuKHI9KGk9KG49dC5lcnJvcnMpPT1udWxsP3ZvaWQgMDpuWzBdKT09bnVsbD92b2lkIDA6aS5tZXNzYWdlKSE9bnVsbD9yOmBHcmFwaFFMIEVycm9yIChDb2RlOiAke3Quc3RhdHVzfSlgfX12YXIgcW49dHlwZW9mIGdsb2JhbFRoaXMhPSJ1bmRlZmluZWQiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCI/d2luZG93OnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiP2dsb2JhbDp0eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjp7fTtmdW5jdGlvbiBEdChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfXZhciBRZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6cW4saT1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt0aGlzLmZldGNoPSExLHRoaXMuRE9NRXhjZXB0aW9uPW4uRE9NRXhjZXB0aW9ufXJldHVybiBzLnByb3RvdHlwZT1uLG5ldyBzfSgpOyhmdW5jdGlvbihzKXsoZnVuY3Rpb24obyl7dmFyIGM9e3NlYXJjaFBhcmFtczoiVVJMU2VhcmNoUGFyYW1zImluIHMsaXRlcmFibGU6IlN5bWJvbCJpbiBzJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGJsb2I6IkZpbGVSZWFkZXIiaW4gcyYmIkJsb2IiaW4gcyYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YToiRm9ybURhdGEiaW4gcyxhcnJheUJ1ZmZlcjoiQXJyYXlCdWZmZXIiaW4gc307ZnVuY3Rpb24gZihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9aWYoYy5hcnJheUJ1ZmZlcil2YXIgZD1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmZC5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2Z1bmN0aW9uIHkoYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBnKGEpe3JldHVybiB0eXBlb2YgYSE9InN0cmluZyImJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBiKGEpe3ZhciBoPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIF89YS5zaGlmdCgpO3JldHVybntkb25lOl89PT12b2lkIDAsdmFsdWU6X319fTtyZXR1cm4gYy5pdGVyYWJsZSYmKGhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBofSksaH1mdW5jdGlvbiBtKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBtP2EuZm9yRWFjaChmdW5jdGlvbihoLF8pe3RoaXMuYXBwZW5kKF8saCl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3RoaXMuYXBwZW5kKGhbMF0saFsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpcy5hcHBlbmQoaCxhW2hdKX0sdGhpcyl9bS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsaCl7YT15KGEpLGg9ZyhoKTt2YXIgXz10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1fP18rIiwgIitoOmh9LG0ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5tYXBbeShhKV19LG0ucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYT15KGEpLHRoaXMuaGFzKGEpP3RoaXMubWFwW2FdOm51bGx9LG0ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoeShhKSl9LG0ucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGgpe3RoaXMubWFwW3koYSldPWcoaCl9LG0ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxoKXtmb3IodmFyIF8gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoXykmJmEuY2FsbChoLHRoaXMubWFwW19dLF8sdGhpcyl9LG0ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7YS5wdXNoKF8pfSksYihhKX0sbS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihoKXthLnB1c2goaCl9KSxiKGEpfSxtLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihoLF8pe2EucHVzaChbXyxoXSl9KSxiKGEpfSxjLml0ZXJhYmxlJiYobS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1tLnByb3RvdHlwZS5lbnRyaWVzKTtmdW5jdGlvbiBOKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIFIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGgsXyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtoKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7XyhhLmVycm9yKX19KX1mdW5jdGlvbiBQKGEpe3ZhciBoPW5ldyBGaWxlUmVhZGVyLF89UihoKTtyZXR1cm4gaC5yZWFkQXNBcnJheUJ1ZmZlcihhKSxffWZ1bmN0aW9uIGooYSl7dmFyIGg9bmV3IEZpbGVSZWFkZXIsXz1SKGgpO3JldHVybiBoLnJlYWRBc1RleHQoYSksX31mdW5jdGlvbiB2KGEpe2Zvcih2YXIgaD1uZXcgVWludDhBcnJheShhKSxfPW5ldyBBcnJheShoLmxlbmd0aCksUz0wO1M8aC5sZW5ndGg7UysrKV9bU109U3RyaW5nLmZyb21DaGFyQ29kZShoW1NdKTtyZXR1cm4gXy5qb2luKCIiKX1mdW5jdGlvbiBFKGEpe2lmKGEuc2xpY2UpcmV0dXJuIGEuc2xpY2UoMCk7dmFyIGg9bmV3IFVpbnQ4QXJyYXkoYS5ieXRlTGVuZ3RoKTtyZXR1cm4gaC5zZXQobmV3IFVpbnQ4QXJyYXkoYSkpLGguYnVmZmVyfWZ1bmN0aW9uIHcoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihhKXt0aGlzLl9ib2R5SW5pdD1hLGE/dHlwZW9mIGE9PSJzdHJpbmciP3RoaXMuX2JvZHlUZXh0PWE6Yy5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlCbG9iPWE6Yy5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keUZvcm1EYXRhPWE6Yy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk6Yy5hcnJheUJ1ZmZlciYmYy5ibG9iJiZmKGEpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9RShhLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpjLmFycmF5QnVmZmVyJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl8fHUoYSkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1FKGEpOnRoaXMuX2JvZHlUZXh0PWE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwodHlwZW9mIGE9PSJzdHJpbmciP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6Yy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSl9LGMuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPU4odGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj9OKHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKFApfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIGE9Tih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBqKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxjLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKHgpfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9dmFyIEM9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtmdW5jdGlvbiBMKGEpe3ZhciBoPWEudG9VcHBlckNhc2UoKTtyZXR1cm4gQy5pbmRleE9mKGgpPi0xP2g6YX1mdW5jdGlvbiBJKGEsaCl7aD1ofHx7fTt2YXIgXz1oLmJvZHk7aWYoYSBpbnN0YW5jZW9mIEkpe2lmKGEuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGguaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLHRoaXMuc2lnbmFsPWEuc2lnbmFsLCFfJiZhLl9ib2R5SW5pdCE9bnVsbCYmKF89YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1oLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHwic2FtZS1vcmlnaW4iLChoLmhlYWRlcnN8fCF0aGlzLmhlYWRlcnMpJiYodGhpcy5oZWFkZXJzPW5ldyBtKGguaGVhZGVycykpLHRoaXMubWV0aG9kPUwoaC5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIiksdGhpcy5tb2RlPWgubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMuc2lnbmFsPWguc2lnbmFsfHx0aGlzLnNpZ25hbCx0aGlzLnJlZmVycmVyPW51bGwsKHRoaXMubWV0aG9kPT09IkdFVCJ8fHRoaXMubWV0aG9kPT09IkhFQUQiKSYmXyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KF8pfUkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX07ZnVuY3Rpb24geChhKXt2YXIgaD1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihfKXtpZihfKXt2YXIgUz1fLnNwbGl0KCI9Iiksaz1TLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLEE9Uy5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO2guYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChrKSxkZWNvZGVVUklDb21wb25lbnQoQSkpfX0pLGh9ZnVuY3Rpb24geihhKXt2YXIgaD1uZXcgbSxfPWEucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpO3JldHVybiBfLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oUyl7dmFyIGs9Uy5zcGxpdCgiOiIpLEE9ay5zaGlmdCgpLnRyaW0oKTtpZihBKXt2YXIgSz1rLmpvaW4oIjoiKS50cmltKCk7aC5hcHBlbmQoQSxLKX19KSxofXcuY2FsbChJLnByb3RvdHlwZSk7ZnVuY3Rpb24gVihhLGgpe2h8fChoPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPWguc3RhdHVzPT09dm9pZCAwPzIwMDpoLnN0YXR1cyx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gaD9oLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IG0oaC5oZWFkZXJzKSx0aGlzLnVybD1oLnVybHx8IiIsdGhpcy5faW5pdEJvZHkoYSl9dy5jYWxsKFYucHJvdG90eXBlKSxWLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVih0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IG0odGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0sVi5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBWKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6IiJ9KTtyZXR1cm4gYS50eXBlPSJlcnJvciIsYX07dmFyIEg9WzMwMSwzMDIsMzAzLDMwNywzMDhdO1YucmVkaXJlY3Q9ZnVuY3Rpb24oYSxoKXtpZihILmluZGV4T2YoaCk9PT0tMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZSIpO3JldHVybiBuZXcgVihudWxsLHtzdGF0dXM6aCxoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxvLkRPTUV4Y2VwdGlvbj1zLkRPTUV4Y2VwdGlvbjt0cnl7bmV3IG8uRE9NRXhjZXB0aW9ufWNhdGNoKGEpe28uRE9NRXhjZXB0aW9uPWZ1bmN0aW9uKGgsXyl7dGhpcy5tZXNzYWdlPWgsdGhpcy5uYW1lPV87dmFyIFM9RXJyb3IoaCk7dGhpcy5zdGFjaz1TLnN0YWNrfSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLG8uRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vLkRPTUV4Y2VwdGlvbn1mdW5jdGlvbiBYKGEsaCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sUyl7dmFyIGs9bmV3IEkoYSxoKTtpZihrLnNpZ25hbCYmay5zaWduYWwuYWJvcnRlZClyZXR1cm4gUyhuZXcgby5ET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBBPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBLKCl7QS5hYm9ydCgpfUEub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHE9e3N0YXR1czpBLnN0YXR1cyxzdGF0dXNUZXh0OkEuc3RhdHVzVGV4dCxoZWFkZXJzOnooQS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTtxLnVybD0icmVzcG9uc2VVUkwiaW4gQT9BLnJlc3BvbnNlVVJMOnEuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgVz0icmVzcG9uc2UiaW4gQT9BLnJlc3BvbnNlOkEucmVzcG9uc2VUZXh0O18obmV3IFYoVyxxKSl9LEEub25lcnJvcj1mdW5jdGlvbigpe1MobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0sQS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtTKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LEEub25hYm9ydD1mdW5jdGlvbigpe1MobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX0sQS5vcGVuKGsubWV0aG9kLGsudXJsLCEwKSxrLmNyZWRlbnRpYWxzPT09ImluY2x1ZGUiP0Eud2l0aENyZWRlbnRpYWxzPSEwOmsuY3JlZGVudGlhbHM9PT0ib21pdCImJihBLndpdGhDcmVkZW50aWFscz0hMSksInJlc3BvbnNlVHlwZSJpbiBBJiZjLmJsb2ImJihBLnJlc3BvbnNlVHlwZT0iYmxvYiIpLGsuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHEsVyl7QS5zZXRSZXF1ZXN0SGVhZGVyKFcscSl9KSxrLnNpZ25hbCYmKGsuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixLKSxBLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0EucmVhZHlTdGF0ZT09PTQmJmsuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixLKX0pLEEuc2VuZCh0eXBlb2Ygay5fYm9keUluaXQ9PSJ1bmRlZmluZWQiP251bGw6ay5fYm9keUluaXQpfSl9cmV0dXJuIFgucG9seWZpbGw9ITAscy5mZXRjaHx8KHMuZmV0Y2g9WCxzLkhlYWRlcnM9bSxzLlJlcXVlc3Q9SSxzLlJlc3BvbnNlPVYpLG8uSGVhZGVycz1tLG8uUmVxdWVzdD1JLG8uUmVzcG9uc2U9VixvLmZldGNoPVgsT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG99KSh7fSl9KShpKSxpLmZldGNoLnBvbnlmaWxsPSEwLGRlbGV0ZSBpLmZldGNoLnBvbHlmaWxsO3ZhciByPWk7dD1yLmZldGNoLHQuZGVmYXVsdD1yLmZldGNoLHQuZmV0Y2g9ci5mZXRjaCx0LkhlYWRlcnM9ci5IZWFkZXJzLHQuUmVxdWVzdD1yLlJlcXVlc3QsdC5SZXNwb25zZT1yLlJlc3BvbnNlLGUuZXhwb3J0cz10fSkoUWUsUWUuZXhwb3J0cyk7dmFyIGtlPVFlLmV4cG9ydHMsUmU9RHQoa2UpLEduPSQoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6UmV9LFtrZV0pO2NvbnN0IHBlPWU9PntsZXQgdD17fTtyZXR1cm4gZSYmKHR5cGVvZiBIZWFkZXJzIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhlYWRlcnN8fEduJiZrZS5IZWFkZXJzJiZlIGluc3RhbmNlb2Yga2UuSGVhZGVycz90PWVlKGUpOkFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKChbbixpXSk9PntuJiZpIT09dm9pZCAwJiYodFtuXT1pKX0pOnQ9ZSksdH0sQ3Q9ZT0+ZS5yZXBsYWNlKC8oW1xzLF18I1teXG5ccl0rKSsvZywiICIpLnRyaW0oKSx6bj1lPT57aWYoIUFycmF5LmlzQXJyYXkoZS5xdWVyeSkpe2NvbnN0IGk9ZSxyPVtgcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQoQ3QoaS5xdWVyeSkpfWBdO3JldHVybiBlLnZhcmlhYmxlcyYmci5wdXNoKGB2YXJpYWJsZXM9JHtlbmNvZGVVUklDb21wb25lbnQoaS5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkoaS52YXJpYWJsZXMpKX1gKSxpLm9wZXJhdGlvbk5hbWUmJnIucHVzaChgb3BlcmF0aW9uTmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChpLm9wZXJhdGlvbk5hbWUpfWApLHIuam9pbigiJiIpfWlmKHR5cGVvZiBlLnZhcmlhYmxlcyE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KGUudmFyaWFibGVzKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgcXVlcnkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHQ9ZSxuPWUucXVlcnkucmVkdWNlKChpLHIscyk9PihpLnB1c2goe3F1ZXJ5OkN0KHIpLHZhcmlhYmxlczp0LnZhcmlhYmxlcz90Lmpzb25TZXJpYWxpemVyLnN0cmluZ2lmeSh0LnZhcmlhYmxlc1tzXSk6dm9pZCAwfSksaSksW10pO3JldHVybmBxdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudCh0Lmpzb25TZXJpYWxpemVyLnN0cmluZ2lmeShuKSl9YH0sSG49ZT0+dD0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIE47Y29uc3R7dXJsOm4scXVlcnk6aSx2YXJpYWJsZXM6cixvcGVyYXRpb25OYW1lOnMsZmV0Y2g6byxmZXRjaE9wdGlvbnM6YyxtaWRkbGV3YXJlOmZ9PXQsZD1EKHt9LHQuaGVhZGVycyk7bGV0IHU9IiIseTtlPT09IlBPU1QiPyh5PUpuKGkscixzLGMuanNvblNlcmlhbGl6ZXIpLHR5cGVvZiB5PT0ic3RyaW5nIiYmKGRbIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi9qc29uIikpOnU9em4oe3F1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGpzb25TZXJpYWxpemVyOihOPWMuanNvblNlcmlhbGl6ZXIpIT1udWxsP046Rn0pO2NvbnN0IGc9RCh7bWV0aG9kOmUsaGVhZGVyczpkLGJvZHk6eX0sYyk7bGV0IGI9bixtPWc7aWYoZil7Y29uc3QgUj15aWVsZCBQcm9taXNlLnJlc29sdmUoZihCZShEKHt9LGcpLHt1cmw6bixvcGVyYXRpb25OYW1lOnMsdmFyaWFibGVzOnJ9KSkpLHt1cmw6an09Uix2PWdlKFIsWyJ1cmwiXSk7Yj1qLG09dn1yZXR1cm4gdSYmKGI9YCR7Yn0/JHt1fWApLHlpZWxkIG8oYixtKX0pO2NsYXNzIFlue2NvbnN0cnVjdG9yKHQsbj17fSl7dGhpcy51cmw9dCx0aGlzLnJlcXVlc3RDb25maWc9bix0aGlzLnJhd1JlcXVlc3Q9KC4uLmkpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtyLHMsb109aSxjPVVlKHIscyxvKSxSPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpmLGZldGNoOmQ9UmUsbWV0aG9kOnU9IlBPU1QiLHJlcXVlc3RNaWRkbGV3YXJlOnkscmVzcG9uc2VNaWRkbGV3YXJlOmd9PVIsYj1nZShSLFsiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwicmVxdWVzdE1pZGRsZXdhcmUiLCJyZXNwb25zZU1pZGRsZXdhcmUiXSkse3VybDptfT10aGlzO2Muc2lnbmFsIT09dm9pZCAwJiYoYi5zaWduYWw9Yy5zaWduYWwpO2NvbnN0e29wZXJhdGlvbk5hbWU6Tn09SmUoYy5xdWVyeSk7cmV0dXJuIFhlKHt1cmw6bSxxdWVyeTpjLnF1ZXJ5LHZhcmlhYmxlczpjLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShXZShmKSkpLHBlKGMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOk4sZmV0Y2g6ZCxtZXRob2Q6dSxmZXRjaE9wdGlvbnM6YixtaWRkbGV3YXJlOnl9KS50aGVuKFA9PihnJiZnKFApLFApKS5jYXRjaChQPT57dGhyb3cgZyYmZyhQKSxQfSl9KX1yZXF1ZXN0KHQsLi4ubil7cmV0dXJuIEoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0W2kscl09bixzPVNlKHQsaSxyKSxOPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpvLGZldGNoOmM9UmUsbWV0aG9kOmY9IlBPU1QiLHJlcXVlc3RNaWRkbGV3YXJlOmQscmVzcG9uc2VNaWRkbGV3YXJlOnV9PU4seT1nZShOLFsiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwicmVxdWVzdE1pZGRsZXdhcmUiLCJyZXNwb25zZU1pZGRsZXdhcmUiXSkse3VybDpnfT10aGlzO3Muc2lnbmFsIT09dm9pZCAwJiYoeS5zaWduYWw9cy5zaWduYWwpO2NvbnN0e3F1ZXJ5OmIsb3BlcmF0aW9uTmFtZTptfT1KZShzLmRvY3VtZW50KTtyZXR1cm4gWGUoe3VybDpnLHF1ZXJ5OmIsdmFyaWFibGVzOnMudmFyaWFibGVzLGhlYWRlcnM6RChEKHt9LHBlKFdlKG8pKSkscGUocy5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6bSxmZXRjaDpjLG1ldGhvZDpmLGZldGNoT3B0aW9uczp5LG1pZGRsZXdhcmU6ZH0pLnRoZW4oUj0+KHUmJnUoUiksUi5kYXRhKSkuY2F0Y2goUj0+e3Rocm93IHUmJnUoUiksUn0pfSl9YmF0Y2hSZXF1ZXN0cyh0LG4pe3ZhciBkO2NvbnN0IGk9VmUodCxuKSxmPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpyfT1mLHM9Z2UoZixbImhlYWRlcnMiXSk7aS5zaWduYWwhPT12b2lkIDAmJihzLnNpZ25hbD1pLnNpZ25hbCk7Y29uc3Qgbz1pLmRvY3VtZW50cy5tYXAoKHtkb2N1bWVudDp1fSk9PkplKHUpLnF1ZXJ5KSxjPWkuZG9jdW1lbnRzLm1hcCgoe3ZhcmlhYmxlczp1fSk9PnUpO3JldHVybiBYZSh7dXJsOnRoaXMudXJsLHF1ZXJ5Om8sdmFyaWFibGVzOmMsaGVhZGVyczpEKEQoe30scGUoV2UocikpKSxwZShpLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTp2b2lkIDAsZmV0Y2g6KGQ9dGhpcy5yZXF1ZXN0Q29uZmlnLmZldGNoKSE9bnVsbD9kOlJlLG1ldGhvZDp0aGlzLnJlcXVlc3RDb25maWcubWV0aG9kfHwiUE9TVCIsZmV0Y2hPcHRpb25zOnMsbWlkZGxld2FyZTp0aGlzLnJlcXVlc3RDb25maWcucmVxdWVzdE1pZGRsZXdhcmV9KS50aGVuKHU9Pih0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlJiZ0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlKHUpLHUuZGF0YSkpLmNhdGNoKHU9Pnt0aHJvdyB0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlJiZ0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlKHUpLHV9KX1zZXRIZWFkZXJzKHQpe3JldHVybiB0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz10LHRoaXN9c2V0SGVhZGVyKHQsbil7Y29uc3R7aGVhZGVyczppfT10aGlzLnJlcXVlc3RDb25maWc7cmV0dXJuIGk/aVt0XT1uOnRoaXMucmVxdWVzdENvbmZpZy5oZWFkZXJzPXtbdF06bn0sdGhpc31zZXRFbmRwb2ludCh0KXtyZXR1cm4gdGhpcy51cmw9dCx0aGlzfX1jb25zdCBYZT1lPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt2YXIgdSx5O2NvbnN0e3F1ZXJ5OnQsdmFyaWFibGVzOm4sZmV0Y2hPcHRpb25zOml9PWUscj1IbihCKCh1PWUubWV0aG9kKSE9bnVsbD91OiJwb3N0IikpLHM9QXJyYXkuaXNBcnJheShlLnF1ZXJ5KSxvPXlpZWxkIHIoZSksYz15aWVsZCBRbihvLCh5PWkuanNvblNlcmlhbGl6ZXIpIT1udWxsP3k6RiksZj1BcnJheS5pc0FycmF5KGMpPyFjLnNvbWUoKHtkYXRhOmJ9KT0+IWIpOiEhYy5kYXRhLGQ9QXJyYXkuaXNBcnJheShjKXx8IWMuZXJyb3JzfHxBcnJheS5pc0FycmF5KGMuZXJyb3JzKSYmIWMuZXJyb3JzLmxlbmd0aHx8aS5lcnJvclBvbGljeT09PSJhbGwifHxpLmVycm9yUG9saWN5PT09Imlnbm9yZSI7aWYoby5vayYmZCYmZil7Y29uc3QgZz0oQXJyYXkuaXNBcnJheShjKSxjKSx7ZXJyb3JzOmJ9PWcsbT1nZShnLFsiZXJyb3JzIl0pLE49aS5lcnJvclBvbGljeT09PSJpZ25vcmUiP206YztyZXR1cm4gQmUoRCh7fSxzP3tkYXRhOk59Ok4pLHtoZWFkZXJzOm8uaGVhZGVycyxzdGF0dXM6by5zdGF0dXN9KX1lbHNle2NvbnN0IGI9dHlwZW9mIGM9PSJzdHJpbmciP3tlcnJvcjpjfTpjO3Rocm93IG5ldyBkZShCZShEKHt9LGIpLHtzdGF0dXM6by5zdGF0dXMsaGVhZGVyczpvLmhlYWRlcnN9KSx7cXVlcnk6dCx2YXJpYWJsZXM6bn0pfX0pLEpuPShlLHQsbixpKT0+e2NvbnN0IHI9aSE9bnVsbD9pOkY7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHIuc3RyaW5naWZ5KHtxdWVyeTplLHZhcmlhYmxlczp0LG9wZXJhdGlvbk5hbWU6bn0pO2lmKHR5cGVvZiB0IT0idW5kZWZpbmVkIiYmIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHJlcXVlc3QgYm9keSB3aXRoIGdpdmVuIHZhcmlhYmxlIHR5cGUsIGFycmF5IGV4cGVjdGVkIik7Y29uc3Qgcz1lLnJlZHVjZSgobyxjLGYpPT4oby5wdXNoKHtxdWVyeTpjLHZhcmlhYmxlczp0P3RbZl06dm9pZCAwfSksbyksW10pO3JldHVybiByLnN0cmluZ2lmeShzKX0sUW49KGUsdCk9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuO3JldHVybiBlLmhlYWRlcnMuZm9yRWFjaCgoaSxyKT0+e3IudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiJiYobj1pKX0pLG4mJihuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbCtqc29uIil8fG4udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJhcHBsaWNhdGlvbi9ncmFwaHFsLXJlc3BvbnNlK2pzb24iKSk/dC5wYXJzZSh5aWVsZCBlLnRleHQoKSk6ZS50ZXh0KCl9KSxXZT1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIj9lKCk6ZTt2YXIgWmU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe3Q9ZS5leHBvcnRzPW4sdC5nZXRTZXJpYWxpemU9aTtmdW5jdGlvbiBuKHIscyxvLGMpe3JldHVybiBKU09OLnN0cmluZ2lmeShyLGkocyxjKSxvKX1mdW5jdGlvbiBpKHIscyl7dmFyIG89W10sYz1bXTtyZXR1cm4gcz09bnVsbCYmKHM9ZnVuY3Rpb24oZixkKXtyZXR1cm4gb1swXT09PWQ/IltDaXJjdWxhciB+XSI6IltDaXJjdWxhciB+LiIrYy5zbGljZSgwLG8uaW5kZXhPZihkKSkuam9pbigiLiIpKyJdIn0pLGZ1bmN0aW9uKGYsZCl7aWYoby5sZW5ndGg+MCl7dmFyIHU9by5pbmRleE9mKHRoaXMpO351P28uc3BsaWNlKHUrMSk6by5wdXNoKHRoaXMpLH51P2Muc3BsaWNlKHUsMS8wLGYpOmMucHVzaChmKSx+by5pbmRleE9mKGQpJiYoZD1zLmNhbGwodGhpcyxmLGQpKX1lbHNlIG8ucHVzaChkKTtyZXR1cm4gcj09bnVsbD9kOnIuY2FsbCh0aGlzLGYsZCl9fX0pKFplLFplLmV4cG9ydHMpO3ZhciBYbj1aZS5leHBvcnRzLG1lPUR0KFhuKTtjb25zdCBrdD0xZTMqMTU7dmFyIFBlPWZ1bmN0aW9uKCl7cmV0dXJuIFBlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTEscj1hcmd1bWVudHMubGVuZ3RoO2k8cjtpKyspe249YXJndW1lbnRzW2ldO2Zvcih2YXIgcyBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHMpJiYodFtzXT1uW3NdKX1yZXR1cm4gdH0sUGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt0eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iJiZTdXBwcmVzc2VkRXJyb3I7dmFyIExlPW5ldyBNYXAsS2U9bmV3IE1hcCxSdD0hMCxGZT0hMTtmdW5jdGlvbiBQdChlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXHMsXSsvZywiICIpLnRyaW0oKX1mdW5jdGlvbiBXbihlKXtyZXR1cm4gUHQoZS5zb3VyY2UuYm9keS5zdWJzdHJpbmcoZS5zdGFydCxlLmVuZCkpfWZ1bmN0aW9uIFpuKGUpe3ZhciB0PW5ldyBTZXQsbj1bXTtyZXR1cm4gZS5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKGkua2luZD09PSJGcmFnbWVudERlZmluaXRpb24iKXt2YXIgcj1pLm5hbWUudmFsdWUscz1XbihpLmxvYyksbz1LZS5nZXQocik7byYmIW8uaGFzKHMpP1J0JiZjb25zb2xlLndhcm4oIldhcm5pbmc6IGZyYWdtZW50IHdpdGggbmFtZSAiK3IrYCBhbHJlYWR5IGV4aXN0cy4KZ3JhcGhxbC10YWcgZW5mb3JjZXMgYWxsIGZyYWdtZW50IG5hbWVzIGFjcm9zcyB5b3VyIGFwcGxpY2F0aW9uIHRvIGJlIHVuaXF1ZTsgcmVhZCBtb3JlIGFib3V0CnRoaXMgaW4gdGhlIGRvY3M6IGh0dHA6Ly9kZXYuYXBvbGxvZGF0YS5jb20vY29yZS9mcmFnbWVudHMuaHRtbCN1bmlxdWUtbmFtZXNgKTpvfHxLZS5zZXQocixvPW5ldyBTZXQpLG8uYWRkKHMpLHQuaGFzKHMpfHwodC5hZGQocyksbi5wdXNoKGkpKX1lbHNlIG4ucHVzaChpKX0pLFBlKFBlKHt9LGUpLHtkZWZpbml0aW9uczpufSl9ZnVuY3Rpb24gS24oZSl7dmFyIHQ9bmV3IFNldChlLmRlZmluaXRpb25zKTt0LmZvckVhY2goZnVuY3Rpb24oaSl7aS5sb2MmJmRlbGV0ZSBpLmxvYyxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPWlbcl07cyYmdHlwZW9mIHM9PSJvYmplY3QiJiZ0LmFkZChzKX0pfSk7dmFyIG49ZS5sb2M7cmV0dXJuIG4mJihkZWxldGUgbi5zdGFydFRva2VuLGRlbGV0ZSBuLmVuZFRva2VuKSxlfWZ1bmN0aW9uIGVyKGUpe3ZhciB0PVB0KGUpO2lmKCFMZS5oYXModCkpe3ZhciBuPUl0KGUse2V4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOkZlLGFsbG93TGVnYWN5RnJhZ21lbnRWYXJpYWJsZXM6RmV9KTtpZighbnx8bi5raW5kIT09IkRvY3VtZW50Iil0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIHZhbGlkIEdyYXBoUUwgZG9jdW1lbnQuIik7TGUuc2V0KHQsS24oWm4obikpKX1yZXR1cm4gTGUuZ2V0KHQpfWZ1bmN0aW9uIFEoZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dHlwZW9mIGU9PSJzdHJpbmciJiYoZT1bZV0pO3ZhciBpPWVbMF07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihyLHMpe3ImJnIua2luZD09PSJEb2N1bWVudCI/aSs9ci5sb2Muc291cmNlLmJvZHk6aSs9cixpKz1lW3MrMV19KSxlcihpKX1mdW5jdGlvbiB0cigpe0xlLmNsZWFyKCksS2UuY2xlYXIoKX1mdW5jdGlvbiBucigpe1J0PSExfWZ1bmN0aW9uIHJyKCl7RmU9ITB9ZnVuY3Rpb24gaXIoKXtGZT0hMX12YXIgYmU9e2dxbDpRLHJlc2V0Q2FjaGVzOnRyLGRpc2FibGVGcmFnbWVudFdhcm5pbmdzOm5yLGVuYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOnJyLGRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczppcn07KGZ1bmN0aW9uKGUpe2UuZ3FsPWJlLmdxbCxlLnJlc2V0Q2FjaGVzPWJlLnJlc2V0Q2FjaGVzLGUuZGlzYWJsZUZyYWdtZW50V2FybmluZ3M9YmUuZGlzYWJsZUZyYWdtZW50V2FybmluZ3MsZS5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1iZS5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcyxlLmRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1iZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXN9KShRfHwoUT17fSkpLFEuZGVmYXVsdD1RO2NvbnN0IEx0PVFgCglmcmFnbWVudCBNYXRjaFBhcnRzIG9uIE1hdGNoQ29uZmlnIHsKCQlyZWdleFZhbHVlCgkJbWF0Y2hWYWx1ZQoJfQpgLHNyPVFgCgltdXRhdGlvbiBQdXNoUGF5bG9hZCgKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkcGF5bG9hZF9pZDogSUQhCgkJJGV2ZW50czogUmVwbGF5RXZlbnRzSW5wdXQhCgkJJG1lc3NhZ2VzOiBTdHJpbmchCgkJJHJlc291cmNlczogU3RyaW5nIQoJCSR3ZWJfc29ja2V0X2V2ZW50czogU3RyaW5nIQoJCSRlcnJvcnM6IFtFcnJvck9iamVjdElucHV0XSEKCQkkaXNfYmVhY29uOiBCb29sZWFuCgkJJGhhc19zZXNzaW9uX3VubG9hZGVkOiBCb29sZWFuCgkJJGhpZ2hsaWdodF9sb2dzOiBTdHJpbmcKCSkgewoJCXB1c2hQYXlsb2FkKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWV2ZW50czogJGV2ZW50cwoJCQltZXNzYWdlczogJG1lc3NhZ2VzCgkJCXJlc291cmNlczogJHJlc291cmNlcwoJCQl3ZWJfc29ja2V0X2V2ZW50czogJHdlYl9zb2NrZXRfZXZlbnRzCgkJCWVycm9yczogJGVycm9ycwoJCQlpc19iZWFjb246ICRpc19iZWFjb24KCQkJaGFzX3Nlc3Npb25fdW5sb2FkZWQ6ICRoYXNfc2Vzc2lvbl91bmxvYWRlZAoJCQloaWdobGlnaHRfbG9nczogJGhpZ2hsaWdodF9sb2dzCgkJKQoJfQpgLG9yPVFgCgltdXRhdGlvbiBQdXNoU2Vzc2lvbkV2ZW50cygKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkcGF5bG9hZF9pZDogSW50NjRJRCEKCQkkZGF0YTogU3RyaW5nIQoJKSB7CgkJcHVzaFNlc3Npb25FdmVudHMoCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJcGF5bG9hZF9pZDogJHBheWxvYWRfaWQKCQkJZGF0YTogJGRhdGEKCQkpCgl9CmAsYXI9UWAKCW11dGF0aW9uIGlkZW50aWZ5U2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkdXNlcl9pZGVudGlmaWVyOiBTdHJpbmchCgkJJHVzZXJfb2JqZWN0OiBBbnkKCSkgewoJCWlkZW50aWZ5U2Vzc2lvbigKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQl1c2VyX2lkZW50aWZpZXI6ICR1c2VyX2lkZW50aWZpZXIKCQkJdXNlcl9vYmplY3Q6ICR1c2VyX29iamVjdAoJCSkKCX0KYCxjcj1RYAoJbXV0YXRpb24gYWRkU2Vzc2lvblByb3BlcnRpZXMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHByb3BlcnRpZXNfb2JqZWN0OiBBbnkKCSkgewoJCWFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXByb3BlcnRpZXNfb2JqZWN0OiAkcHJvcGVydGllc19vYmplY3QKCQkpCgl9CmAsdXI9UWAKCW11dGF0aW9uIHB1c2hNZXRyaWNzKCRtZXRyaWNzOiBbTWV0cmljSW5wdXRdISkgewoJCXB1c2hNZXRyaWNzKG1ldHJpY3M6ICRtZXRyaWNzKQoJfQpgLGxyPVFgCgltdXRhdGlvbiBhZGRTZXNzaW9uRmVlZGJhY2soCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfbmFtZTogU3RyaW5nCgkJJHVzZXJfZW1haWw6IFN0cmluZwoJCSR2ZXJiYXRpbTogU3RyaW5nIQoJCSR0aW1lc3RhbXA6IFRpbWVzdGFtcCEKCSkgewoJCWFkZFNlc3Npb25GZWVkYmFjaygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQl1c2VyX25hbWU6ICR1c2VyX25hbWUKCQkJdXNlcl9lbWFpbDogJHVzZXJfZW1haWwKCQkJdmVyYmF0aW06ICR2ZXJiYXRpbQoJCQl0aW1lc3RhbXA6ICR0aW1lc3RhbXAKCQkpCgl9CmAsZnI9UWAKCW11dGF0aW9uIGluaXRpYWxpemVTZXNzaW9uKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRzZXNzaW9uX2tleTogU3RyaW5nCgkJJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchCgkJJGVuYWJsZV9zdHJpY3RfcHJpdmFjeTogQm9vbGVhbiEKCQkkcHJpdmFjeV9zZXR0aW5nOiBTdHJpbmchCgkJJGVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50czogQm9vbGVhbiEKCQkkY2xpZW50VmVyc2lvbjogU3RyaW5nIQoJCSRmaXJzdGxvYWRWZXJzaW9uOiBTdHJpbmchCgkJJGNsaWVudENvbmZpZzogU3RyaW5nIQoJCSRlbnZpcm9ubWVudDogU3RyaW5nIQoJCSRpZDogU3RyaW5nIQoJCSRhcHBWZXJzaW9uOiBTdHJpbmcKCQkkc2VydmljZU5hbWU6IFN0cmluZyEKCQkkY2xpZW50X2lkOiBTdHJpbmchCgkJJG5ldHdvcmtfcmVjb3JkaW5nX2RvbWFpbnM6IFtTdHJpbmchXQoJCSRkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiBCb29sZWFuCgkpIHsKCQlpbml0aWFsaXplU2Vzc2lvbigKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlzZXNzaW9uX2tleTogJHNlc3Npb25fa2V5CgkJCW9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiAkb3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQKCQkJZW5hYmxlX3N0cmljdF9wcml2YWN5OiAkZW5hYmxlX3N0cmljdF9wcml2YWN5CgkJCWVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50czogJGVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50cwoJCQljbGllbnRWZXJzaW9uOiAkY2xpZW50VmVyc2lvbgoJCQlmaXJzdGxvYWRWZXJzaW9uOiAkZmlyc3Rsb2FkVmVyc2lvbgoJCQljbGllbnRDb25maWc6ICRjbGllbnRDb25maWcKCQkJZW52aXJvbm1lbnQ6ICRlbnZpcm9ubWVudAoJCQlhcHBWZXJzaW9uOiAkYXBwVmVyc2lvbgoJCQlzZXJ2aWNlTmFtZTogJHNlcnZpY2VOYW1lCgkJCWZpbmdlcnByaW50OiAkaWQKCQkJY2xpZW50X2lkOiAkY2xpZW50X2lkCgkJCW5ldHdvcmtfcmVjb3JkaW5nX2RvbWFpbnM6ICRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zCgkJCWRpc2FibGVfc2Vzc2lvbl9yZWNvcmRpbmc6ICRkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nCgkJCXByaXZhY3lfc2V0dGluZzogJHByaXZhY3lfc2V0dGluZwoJCSkgewoJCQlzZWN1cmVfaWQKCQkJcHJvamVjdF9pZAoJCQlzYW1wbGluZyB7CgkJCQlzcGFucyB7CgkJCQkJbmFtZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlldmVudHMgewoJCQkJCQluYW1lIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCQlhdHRyaWJ1dGVzIHsKCQkJCQkJCWtleSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJc2FtcGxpbmdSYXRpbwoJCQkJfQoJCQkJbG9ncyB7CgkJCQkJbWVzc2FnZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJc2V2ZXJpdHlUZXh0IHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCQlhdHRyaWJ1dGVzIHsKCQkJCQkJa2V5IHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCQlhdHRyaWJ1dGUgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJfQoJCX0KCX0KCSR7THR9CmAsaHI9UWAKCXF1ZXJ5IElnbm9yZSgkaWQ6IElEISkgewoJCWlnbm9yZShpZDogJGlkKQoJfQpgLGRyPVFgCglxdWVyeSBHZXRTYW1wbGluZ0NvbmZpZygkb3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6IFN0cmluZyEpIHsKCQlzYW1wbGluZyhvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkKSB7CgkJCXNwYW5zIHsKCQkJCW5hbWUgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCWV2ZW50cyB7CgkJCQkJbmFtZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCQlsb2dzIHsKCQkJCW1lc3NhZ2UgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJfQoJCQkJYXR0cmlidXRlcyB7CgkJCQkJa2V5IHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCQlhdHRyaWJ1dGUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJfQoJCQkJc2FtcGxpbmdSYXRpbwoJCQl9CgkJfQoJfQoJJHtMdH0KYCxwcj0oZSx0LG4saSk9PmUoKTtmdW5jdGlvbiBtcihlLHQ9cHIpe3JldHVybntQdXNoUGF5bG9hZChuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChzcixuLEQoRCh7fSxpKSxyKSksIlB1c2hQYXlsb2FkIiwibXV0YXRpb24iLG4pfSxQdXNoU2Vzc2lvbkV2ZW50cyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChvcixuLEQoRCh7fSxpKSxyKSksIlB1c2hTZXNzaW9uRXZlbnRzIiwibXV0YXRpb24iLG4pfSxpZGVudGlmeVNlc3Npb24obixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoYXIsbixEKEQoe30saSkscikpLCJpZGVudGlmeVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LGFkZFNlc3Npb25Qcm9wZXJ0aWVzKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGNyLG4sRChEKHt9LGkpLHIpKSwiYWRkU2Vzc2lvblByb3BlcnRpZXMiLCJtdXRhdGlvbiIsbil9LHB1c2hNZXRyaWNzKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KHVyLG4sRChEKHt9LGkpLHIpKSwicHVzaE1ldHJpY3MiLCJtdXRhdGlvbiIsbil9LGFkZFNlc3Npb25GZWVkYmFjayhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChscixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25GZWVkYmFjayIsIm11dGF0aW9uIixuKX0saW5pdGlhbGl6ZVNlc3Npb24obixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZnIsbixEKEQoe30saSkscikpLCJpbml0aWFsaXplU2Vzc2lvbiIsIm11dGF0aW9uIixuKX0sSWdub3JlKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGhyLG4sRChEKHt9LGkpLHIpKSwiSWdub3JlIiwicXVlcnkiLG4pfSxHZXRTYW1wbGluZ0NvbmZpZyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChkcixuLEQoRCh7fSxpKSxyKSksIkdldFNhbXBsaW5nQ29uZmlnIiwicXVlcnkiLG4pfX19dmFyIHRlPVVpbnQ4QXJyYXksbmU9VWludDE2QXJyYXksZXQ9SW50MzJBcnJheSx0dD1uZXcgdGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLG50PW5ldyB0ZShbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxGdD1uZXcgdGUoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxNdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgbmUoMzEpLGk9MDtpPDMxOysraSluW2ldPXQrPTE8PGVbaS0xXTtmb3IodmFyIHI9bmV3IGV0KG5bMzBdKSxpPTE7aTwzMDsrK2kpZm9yKHZhciBzPW5baV07czxuW2krMV07KytzKXJbc109cy1uW2ldPDw1fGk7cmV0dXJue2I6bixyfX0sJHQ9TXQodHQsMikseXI9JHQuYixydD0kdC5yO3lyWzI4XT0yNTgscnRbMjU4XT0yODtmb3IodmFyIHZyPU10KG50LDApLEJ0PXZyLnIsaXQ9bmV3IG5lKDMyNzY4KSxNPTA7TTwzMjc2ODsrK00pe3ZhciBjZT0oTSY0MzY5MCk+PjF8KE0mMjE4NDUpPDwxO2NlPShjZSY1MjQyOCk+PjJ8KGNlJjEzMTA3KTw8MixjZT0oY2UmNjE2ODApPj40fChjZSYzODU1KTw8NCxpdFtNXT0oKGNlJjY1MjgwKT4+OHwoY2UmMjU1KTw8OCk+PjF9Zm9yKHZhciBOZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxzPW5ldyBuZSh0KTtyPGk7KytyKWVbcl0mJisrc1tlW3JdLTFdO3ZhciBvPW5ldyBuZSh0KTtmb3Iocj0xO3I8dDsrK3Ipb1tyXT1vW3ItMV0rc1tyLTFdPDwxO3ZhciBjO2lmKG4pe2M9bmV3IG5lKDE8PHQpO3ZhciBmPTE1LXQ7Zm9yKHI9MDtyPGk7KytyKWlmKGVbcl0pZm9yKHZhciBkPXI8PDR8ZVtyXSx1PXQtZVtyXSx5PW9bZVtyXS0xXSsrPDx1LGc9eXwoMTw8dSktMTt5PD1nOysreSljW2l0W3ldPj5mXT1kfWVsc2UgZm9yKGM9bmV3IG5lKGkpLHI9MDtyPGk7KytyKWVbcl0mJihjW3JdPWl0W29bZVtyXS0xXSsrXT4+MTUtZVtyXSk7cmV0dXJuIGN9LGxlPW5ldyB0ZSgyODgpLE09MDtNPDE0NDsrK00pbGVbTV09ODtmb3IodmFyIE09MTQ0O008MjU2OysrTSlsZVtNXT05O2Zvcih2YXIgTT0yNTY7TTwyODA7KytNKWxlW01dPTc7Zm9yKHZhciBNPTI4MDtNPDI4ODsrK00pbGVbTV09ODtmb3IodmFyIE1lPW5ldyB0ZSgzMiksTT0wO008MzI7KytNKU1lW01dPTU7dmFyIGdyPU5lKGxlLDksMCksRXI9TmUoTWUsNSwwKSxVdD1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LFZ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgdGUoZS5zdWJhcnJheSh0LG4pKX0sb2U9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIGk9dC84fDA7ZVtpXXw9bixlW2krMV18PW4+Pjh9LHhlPWZ1bmN0aW9uKGUsdCxuKXtuPDw9dCY3O3ZhciBpPXQvOHwwO2VbaV18PW4sZVtpKzFdfD1uPj44LGVbaSsyXXw9bj4+MTZ9LHN0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9MDtpPGUubGVuZ3RoOysraSllW2ldJiZuLnB1c2goe3M6aSxmOmVbaV19KTt2YXIgcj1uLmxlbmd0aCxzPW4uc2xpY2UoKTtpZighcilyZXR1cm57dDp6dCxsOjB9O2lmKHI9PTEpe3ZhciBvPW5ldyB0ZShuWzBdLnMrMSk7cmV0dXJuIG9bblswXS5zXT0xLHt0Om8sbDoxfX1uLnNvcnQoZnVuY3Rpb24odyxDKXtyZXR1cm4gdy5mLUMuZn0pLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIGM9blswXSxmPW5bMV0sZD0wLHU9MSx5PTI7Zm9yKG5bMF09e3M6LTEsZjpjLmYrZi5mLGw6YyxyOmZ9O3UhPXItMTspYz1uW25bZF0uZjxuW3ldLmY/ZCsrOnkrK10sZj1uW2QhPXUmJm5bZF0uZjxuW3ldLmY/ZCsrOnkrK10sblt1KytdPXtzOi0xLGY6Yy5mK2YuZixsOmMscjpmfTtmb3IodmFyIGc9c1swXS5zLGk9MTtpPHI7KytpKXNbaV0ucz5nJiYoZz1zW2ldLnMpO3ZhciBiPW5ldyBuZShnKzEpLG09b3Qoblt1LTFdLGIsMCk7aWYobT50KXt2YXIgaT0wLE49MCxSPW0tdCxQPTE8PFI7Zm9yKHMuc29ydChmdW5jdGlvbihDLEwpe3JldHVybiBiW0wuc10tYltDLnNdfHxDLmYtTC5mfSk7aTxyOysraSl7dmFyIGo9c1tpXS5zO2lmKGJbal0+dClOKz1QLSgxPDxtLWJbal0pLGJbal09dDtlbHNlIGJyZWFrfWZvcihOPj49UjtOPjA7KXt2YXIgdj1zW2ldLnM7Ylt2XTx0P04tPTE8PHQtYlt2XSsrLTE6KytpfWZvcig7aT49MCYmTjstLWkpe3ZhciBFPXNbaV0ucztiW0VdPT10JiYoLS1iW0VdLCsrTil9bT10fXJldHVybnt0Om5ldyB0ZShiKSxsOm19fSxvdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucz09LTE/TWF0aC5tYXgob3QoZS5sLHQsbisxKSxvdChlLnIsdCxuKzEpKTp0W2Uuc109bn0sanQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QmJiFlWy0tdF07KTtmb3IodmFyIG49bmV3IG5lKCsrdCksaT0wLHI9ZVswXSxzPTEsbz1mdW5jdGlvbihmKXtuW2krK109Zn0sYz0xO2M8PXQ7KytjKWlmKGVbY109PXImJmMhPXQpKytzO2Vsc2V7aWYoIXImJnM+Mil7Zm9yKDtzPjEzODtzLT0xMzgpbygzMjc1NCk7cz4yJiYobyhzPjEwP3MtMTE8PDV8Mjg2OTA6cy0zPDw1fDEyMzA1KSxzPTApfWVsc2UgaWYocz4zKXtmb3IobyhyKSwtLXM7cz42O3MtPTYpbyg4MzA0KTtzPjImJihvKHMtMzw8NXw4MjA4KSxzPTApfWZvcig7cy0tOylvKHIpO3M9MSxyPWVbY119cmV0dXJue2M6bi5zdWJhcnJheSgwLGkpLG46dH19LEFlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKW4rPWVbaV0qdFtpXTtyZXR1cm4gbn0scXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4ubGVuZ3RoLHI9VXQodCsyKTtlW3JdPWkmMjU1LGVbcisxXT1pPj44LGVbcisyXT1lW3JdXjI1NSxlW3IrM109ZVtyKzFdXjI1NTtmb3IodmFyIHM9MDtzPGk7KytzKWVbcitzKzRdPW5bc107cmV0dXJuKHIrNCtpKSo4fSxHdD1mdW5jdGlvbihlLHQsbixpLHIscyxvLGMsZixkLHUpe29lKHQsdSsrLG4pLCsrclsyNTZdO2Zvcih2YXIgeT1zdChyLDE1KSxnPXkudCxiPXkubCxtPXN0KHMsMTUpLE49bS50LFI9bS5sLFA9anQoZyksaj1QLmMsdj1QLm4sRT1qdChOKSx3PUUuYyxDPUUubixMPW5ldyBuZSgxOSksST0wO0k8ai5sZW5ndGg7KytJKSsrTFtqW0ldJjMxXTtmb3IodmFyIEk9MDtJPHcubGVuZ3RoOysrSSkrK0xbd1tJXSYzMV07Zm9yKHZhciB4PXN0KEwsNyksej14LnQsVj14LmwsSD0xOTtIPjQmJiF6W0Z0W0gtMV1dOy0tSCk7dmFyIFg9ZCs1PDwzLGE9QWUocixsZSkrQWUocyxNZSkrbyxoPUFlKHIsZykrQWUocyxOKStvKzE0KzMqSCtBZShMLHopKzIqTFsxNl0rMypMWzE3XSs3KkxbMThdO2lmKGY+PTAmJlg8PWEmJlg8PWgpcmV0dXJuIHF0KHQsdSxlLnN1YmFycmF5KGYsZitkKSk7dmFyIF8sUyxrLEE7aWYob2UodCx1LDErKGg8YSkpLHUrPTIsaDxhKXtfPU5lKGcsYiwwKSxTPWcsaz1OZShOLFIsMCksQT1OO3ZhciBLPU5lKHosViwwKTtvZSh0LHUsdi0yNTcpLG9lKHQsdSs1LEMtMSksb2UodCx1KzEwLEgtNCksdSs9MTQ7Zm9yKHZhciBJPTA7STxIOysrSSlvZSh0LHUrMypJLHpbRnRbSV1dKTt1Kz0zKkg7Zm9yKHZhciBxPVtqLHddLFc9MDtXPDI7KytXKWZvcih2YXIgeWU9cVtXXSxJPTA7STx5ZS5sZW5ndGg7KytJKXt2YXIgaWU9eWVbSV0mMzE7b2UodCx1LEtbaWVdKSx1Kz16W2llXSxpZT4xNSYmKG9lKHQsdSx5ZVtJXT4+NSYxMjcpLHUrPXllW0ldPj4xMil9fWVsc2UgXz1ncixTPWxlLGs9RXIsQT1NZTtmb3IodmFyIEk9MDtJPGM7KytJKXt2YXIgWT1pW0ldO2lmKFk+MjU1KXt2YXIgaWU9WT4+MTgmMzE7eGUodCx1LF9baWUrMjU3XSksdSs9U1tpZSsyNTddLGllPjcmJihvZSh0LHUsWT4+MjMmMzEpLHUrPXR0W2llXSk7dmFyIHZlPVkmMzE7eGUodCx1LGtbdmVdKSx1Kz1BW3ZlXSx2ZT4zJiYoeGUodCx1LFk+PjUmODE5MSksdSs9bnRbdmVdKX1lbHNlIHhlKHQsdSxfW1ldKSx1Kz1TW1ldfXJldHVybiB4ZSh0LHUsX1syNTZdKSx1K1NbMjU2XX0sX3I9bmV3IGV0KFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLHp0PW5ldyB0ZSgwKSxUcj1mdW5jdGlvbihlLHQsbixpLHIscyl7dmFyIG89cy56fHxlLmxlbmd0aCxjPW5ldyB0ZShpK28rNSooMStNYXRoLmNlaWwoby83ZTMpKStyKSxmPWMuc3ViYXJyYXkoaSxjLmxlbmd0aC1yKSxkPXMubCx1PShzLnJ8fDApJjc7aWYodCl7dSYmKGZbMF09cy5yPj4zKTtmb3IodmFyIHk9X3JbdC0xXSxnPXk+PjEzLGI9eSY4MTkxLG09KDE8PG4pLTEsTj1zLnB8fG5ldyBuZSgzMjc2OCksUj1zLmh8fG5ldyBuZShtKzEpLFA9TWF0aC5jZWlsKG4vMyksaj0yKlAsdj1mdW5jdGlvbihsdCl7cmV0dXJuKGVbbHRdXmVbbHQrMV08PFBeZVtsdCsyXTw8aikmbX0sRT1uZXcgZXQoMjVlMyksdz1uZXcgbmUoMjg4KSxDPW5ldyBuZSgzMiksTD0wLEk9MCx4PXMuaXx8MCx6PTAsVj1zLnd8fDAsSD0wO3grMjxvOysreCl7dmFyIFg9dih4KSxhPXgmMzI3NjcsaD1SW1hdO2lmKE5bYV09aCxSW1hdPWEsVjw9eCl7dmFyIF89by14O2lmKChMPjdlM3x8ej4yNDU3NikmJihfPjQyM3x8IWQpKXt1PUd0KGUsZiwwLEUsdyxDLEkseixILHgtSCx1KSx6PUw9ST0wLEg9eDtmb3IodmFyIFM9MDtTPDI4NjsrK1Mpd1tTXT0wO2Zvcih2YXIgUz0wO1M8MzA7KytTKUNbU109MH12YXIgaz0yLEE9MCxLPWIscT1hLWgmMzI3Njc7aWYoXz4yJiZYPT12KHgtcSkpZm9yKHZhciBXPU1hdGgubWluKGcsXyktMSx5ZT1NYXRoLm1pbigzMjc2Nyx4KSxpZT1NYXRoLm1pbigyNTgsXyk7cTw9eWUmJi0tSyYmYSE9aDspe2lmKGVbeCtrXT09ZVt4K2stcV0pe2Zvcih2YXIgWT0wO1k8aWUmJmVbeCtZXT09ZVt4K1ktcV07KytZKTtpZihZPmspe2lmKGs9WSxBPXEsWT5XKWJyZWFrO2Zvcih2YXIgdmU9TWF0aC5taW4ocSxZLTIpLFd0PTAsUz0wO1M8dmU7KytTKXt2YXIgY3Q9eC1xK1MmMzI3NjcsVXI9TltjdF0sWnQ9Y3QtVXImMzI3Njc7WnQ+V3QmJihXdD1adCxoPWN0KX19fWE9aCxoPU5bYV0scSs9YS1oJjMyNzY3fWlmKEEpe0VbeisrXT0yNjg0MzU0NTZ8cnRba108PDE4fEJ0W0FdO3ZhciBLdD1ydFtrXSYzMSxlbj1CdFtBXSYzMTtJKz10dFtLdF0rbnRbZW5dLCsrd1syNTcrS3RdLCsrQ1tlbl0sVj14K2ssKytMfWVsc2UgRVt6KytdPWVbeF0sKyt3W2VbeF1dfX1mb3IoeD1NYXRoLm1heCh4LFYpO3g8bzsrK3gpRVt6KytdPWVbeF0sKyt3W2VbeF1dO3U9R3QoZSxmLGQsRSx3LEMsSSx6LEgseC1ILHUpLGR8fChzLnI9dSY3fGZbdS84fDBdPDwzLHUtPTcscy5oPVIscy5wPU4scy5pPXgscy53PVYpfWVsc2V7Zm9yKHZhciB4PXMud3x8MDt4PG8rZDt4Kz02NTUzNSl7dmFyIHV0PXgrNjU1MzU7dXQ+PW8mJihmW3UvOHwwXT1kLHV0PW8pLHU9cXQoZix1KzEsZS5zdWJhcnJheSh4LHV0KSl9cy5pPW99cmV0dXJuIFZ0KGMsMCxpK1V0KHUpK3IpfSxicj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LGk9OTstLWk7KW49KG4mMSYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLE5yPWZ1bmN0aW9uKCl7dmFyIGU9LTE7cmV0dXJue3A6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUsaT0wO2k8dC5sZW5ndGg7KytpKW49YnJbbiYyNTVedFtpXV1ebj4+Pjg7ZT1ufSxkOmZ1bmN0aW9uKCl7cmV0dXJufmV9fX0seHI9ZnVuY3Rpb24oZSx0LG4saSxyKXtpZighciYmKHI9e2w6MX0sdC5kaWN0aW9uYXJ5KSl7dmFyIHM9dC5kaWN0aW9uYXJ5LnN1YmFycmF5KC0zMjc2OCksbz1uZXcgdGUocy5sZW5ndGgrZS5sZW5ndGgpO28uc2V0KHMpLG8uc2V0KGUscy5sZW5ndGgpLGU9byxyLnc9cy5sZW5ndGh9cmV0dXJuIFRyKGUsdC5sZXZlbD09bnVsbD82OnQubGV2ZWwsdC5tZW09PW51bGw/ci5sP01hdGguY2VpbChNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKGUubGVuZ3RoKSkpKjEuNSk6MjA6MTIrdC5tZW0sbixpLHIpfSxhdD1mdW5jdGlvbihlLHQsbil7Zm9yKDtuOysrdCllW3RdPW4sbj4+Pj04fSxBcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsZW5hbWU7aWYoZVswXT0zMSxlWzFdPTEzOSxlWzJdPTgsZVs4XT10LmxldmVsPDI/NDp0LmxldmVsPT05PzI6MCxlWzldPTMsdC5tdGltZSE9MCYmYXQoZSw0LE1hdGguZmxvb3IobmV3IERhdGUodC5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSksbil7ZVszXT04O2Zvcih2YXIgaT0wO2k8PW4ubGVuZ3RoOysraSllW2krMTBdPW4uY2hhckNvZGVBdChpKX19LElyPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZT9lLmZpbGVuYW1lLmxlbmd0aCsxOjApfTtmdW5jdGlvbiBTcihlLHQpe3R8fCh0PXt9KTt2YXIgbj1OcigpLGk9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPXhyKGUsdCxJcih0KSw4KSxzPXIubGVuZ3RoO3JldHVybiBBcihyLHQpLGF0KHIscy04LG4uZCgpKSxhdChyLHMtNCxpKSxyfXZhciBIdD10eXBlb2YgVGV4dEVuY29kZXIhPSJ1bmRlZmluZWQiJiZuZXcgVGV4dEVuY29kZXIsT3I9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHREZWNvZGVyLHdyPTA7dHJ5e09yLmRlY29kZSh6dCx7c3RyZWFtOiEwfSksd3I9MX1jYXRjaChlKXt9ZnVuY3Rpb24gRHIoZSx0KXt2YXIgbjtpZihIdClyZXR1cm4gSHQuZW5jb2RlKGUpO2Zvcih2YXIgaT1lLmxlbmd0aCxyPW5ldyB0ZShlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxzPTAsbz1mdW5jdGlvbihkKXtyW3MrK109ZH0sbj0wO248aTsrK24pe2lmKHMrNT5yLmxlbmd0aCl7dmFyIGM9bmV3IHRlKHMrOCsoaS1uPDwxKSk7Yy5zZXQocikscj1jfXZhciBmPWUuY2hhckNvZGVBdChuKTtmPDEyOHx8dD9vKGYpOmY8MjA0OD8obygxOTJ8Zj4+NiksbygxMjh8ZiY2MykpOmY+NTUyOTUmJmY8NTczNDQ/KGY9NjU1MzYrKGYmMTA0NzU1Mil8ZS5jaGFyQ29kZUF0KCsrbikmMTAyMyxvKDI0MHxmPj4xOCksbygxMjh8Zj4+MTImNjMpLG8oMTI4fGY+PjYmNjMpLG8oMTI4fGYmNjMpKToobygyMjR8Zj4+MTIpLG8oMTI4fGY+PjYmNjMpLG8oMTI4fGYmNjMpKX1yZXR1cm4gVnQociwwLHMpfWZ1bmN0aW9uIENyKGUpe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdCB0PURyKEpTT04uc3RyaW5naWZ5KGUpKSxuPVNyKHQpLGk9eWllbGQgbmV3IFByb21pc2Uocj0+e2NvbnN0IHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9KCk9PnIocy5yZXN1bHQpLHMucmVhZEFzRGF0YVVSTChuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkobildKSl9KTtyZXR1cm57Y29tcHJlc3NlZEJhc2U2NDppLnNsaWNlKGkuaW5kZXhPZigiLCIpKzEpLGNvbXByZXNzZWRTaXplOm4ubGVuZ3RoLGJ1ZmZlckxlbmd0aDp0Lmxlbmd0aH19KX1jbGFzcyBrcntjb25zdHJ1Y3Rvcih0LG4pe2h0KHRoaXMsImRlYnVnIik7aHQodGhpcywibmFtZSIpO3RoaXMuZGVidWc9dCx0aGlzLm5hbWU9bn1sb2coLi4udCl7aWYodGhpcy5kZWJ1Zyl7bGV0IG49YFske0RhdGUubm93KCl9XWA7dGhpcy5uYW1lJiYobis9YCAtICR7dGhpcy5uYW1lfWApLGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsW24sLi4udF0pfX13YXJuKC4uLnQpe2xldCBuPWBbJHtEYXRlLm5vdygpfV1gO3RoaXMubmFtZSYmKG4rPWAgLSAke3RoaXMubmFtZX1gKSxjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSxbbiwuLi50XSl9fXZhciBZdD0oZT0+KGUuQmlsbGluZ1F1b3RhRXhjZWVkZWQ9IkJpbGxpbmdRdW90YUV4Y2VlZGVkIixlKSkoWXR8fHt9KTtjb25zdCBScj0zLFByPTFlMyxMcj01MDAsRnI9W1l0LkJpbGxpbmdRdW90YUV4Y2VlZGVkLnRvU3RyaW5nKCldLE1yPWU9Pnt2YXIgbjtyZXR1cm4oKG49ZS5yZXNwb25zZS5lcnJvcnMpPT1udWxsP3ZvaWQgMDpuLmZpbmQoaT0+RnIuaW5jbHVkZXMoaS5tZXNzYWdlKSkpPT09dm9pZCAwfSwkcj0oKT0+e2NvbnN0IGU9KHQsbixpLHIscz0wKT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCB0KCl9Y2F0Y2gobyl7aWYobyBpbnN0YW5jZW9mIGRlJiYhTXIobykpdGhyb3cgbztpZihzPFJyKXJldHVybiB5aWVsZCBuZXcgUHJvbWlzZShjPT5zZXRUaW1lb3V0KGMsUHIrTHIqTWF0aC5wb3coMixzKSkpLHlpZWxkIGUodCxuLGkscixzKzEpO3Rocm93IGNvbnNvbGUuZXJyb3IoYGhpZ2hsaWdodC5pbzogZGF0YSByZXF1ZXN0IGZhaWxlZCBhZnRlciAke3N9IHJldHJpZXNgKSxvfX0pO3JldHVybiBlfSxKdD01LFF0PTJlMyxCcj1bIm51bWJlciIsInN0cmluZyIsImJvb2xlYW4iXTt2YXIgWj0oZT0+KGVbZS5Jbml0aWFsaXplPTBdPSJJbml0aWFsaXplIixlW2UuUmVzZXQ9MV09IlJlc2V0IixlW2UuQXN5bmNFdmVudHM9Ml09IkFzeW5jRXZlbnRzIixlW2UuSWRlbnRpZnk9M109IklkZW50aWZ5IixlW2UuUHJvcGVydGllcz00XT0iUHJvcGVydGllcyIsZVtlLk1ldHJpY3M9NV09Ik1ldHJpY3MiLGVbZS5GZWVkYmFjaz02XT0iRmVlZGJhY2siLGVbZS5DdXN0b21FdmVudD03XT0iQ3VzdG9tRXZlbnQiLGVbZS5TdG9wPThdPSJTdG9wIixlW2UuR2V0U3RhdHVzPTldPSJHZXRTdGF0dXMiLGUpKShafHx7fSk7Y29uc3QgSWU9c2VsZjtmdW5jdGlvbiBYdChlLHQpe2NvbnN0IG49e30saT1bXSxyPVtdO2Zvcihjb25zdFtzLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpe2lmKG89PW51bGwpY29udGludWU7QnIuaW5jbHVkZXModHlwZW9mIG8pfHxpLnB1c2goe1tzXTpvfSk7bGV0IGM7dHlwZW9mIG89PSJzdHJpbmciP2M9bzpjPW1lKG8pLGMubGVuZ3RoPlF0JiYoci5wdXNoKHtbc106b30pLGM9Yy5zdWJzdHJpbmcoMCxRdCkpLG5bc109Y31yZXR1cm4gdCE9PSJzZXNzaW9uIiYmKGkubGVuZ3RoPjAmJmNvbnNvbGUud2FybihgSGlnaGxpZ2h0IHdhcyBwYXNzZWQgb25lIG9yIG1vcmUgJHt0fSBwcm9wZXJ0aWVzIG5vdCBvZiB0eXBlIHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuLmAsaSksci5sZW5ndGg+MCYmY29uc29sZS53YXJuKGBIaWdobGlnaHQgd2FzIHBhc3NlZCBvbmUgb3IgbW9yZSAke3R9IHByb3BlcnRpZXMgZXhjZWVkaW5nIDIwMDAgY2hhcmFjdGVycywgd2hpY2ggd2lsbCBiZSB0cnVuY2F0ZWQuYCxyKSksbn17bGV0IGUsdCxuLGk9MCxyPTAscz0hMSxvPTAsYz1uZXcga3IoITEsIlt3b3JrZXJdIik7Y29uc3QgZj1bXSxkPVtdLHU9KCk9Pm8hPT0wJiZpPEp0JiYhIShuIT1udWxsJiZuLmxlbmd0aCkseT0odixFKT0+e0llLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLkN1c3RvbUV2ZW50LHRhZzp2LHBheWxvYWQ6RX19KX0sZz12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHtpZDpFLGV2ZW50czp3LG1lc3NhZ2VzOkMsZXJyb3JzOkwscmVzb3VyY2VzU3RyaW5nOkksd2ViU29ja2V0RXZlbnRzU3RyaW5nOngsaGFzU2Vzc2lvblVubG9hZGVkOnosaGlnaGxpZ2h0TG9nczpWfT12LEg9bWUoe21lc3NhZ2VzOkN9KTtsZXQgWD17c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxldmVudHM6e2V2ZW50czp3fSxtZXNzYWdlczpILHJlc291cmNlczpJLHdlYl9zb2NrZXRfZXZlbnRzOngsZXJyb3JzOkwsaXNfYmVhY29uOiExLGhhc19zZXNzaW9uX3VubG9hZGVkOnp9O1YmJihYLmhpZ2hsaWdodF9sb2dzPVYpO2NvbnN0e2NvbXByZXNzZWRCYXNlNjQ6YSxidWZmZXJMZW5ndGg6aCxjb21wcmVzc2VkU2l6ZTpffT15aWVsZCBDcihYKSxTPXt0eXBlOlouQXN5bmNFdmVudHMsaWQ6RSxldmVudHNTaXplOmgsY29tcHJlc3NlZFNpemU6YS5sZW5ndGh9O2MubG9nKGBQdXNoaW5nIHBheWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25TZWN1cmVJRDpuLGlkOkUsZmlyc3RTSUQ6TWF0aC5taW4oLi4uWC5ldmVudHMuZXZlbnRzLm1hcChXPT5XPT1udWxsP3ZvaWQgMDpXLl9zaWQpLmZpbHRlcihXPT4hIVcpKSxldmVudHNMZW5ndGg6WC5ldmVudHMuZXZlbnRzLmxlbmd0aCxtZXNzYWdlc0xlbmd0aDpDLmxlbmd0aCxyZXNvdXJjZXNMZW5ndGg6SS5sZW5ndGgsd2ViU29ja2V0TGVuZ3RoOngubGVuZ3RoLGVycm9yc0xlbmd0aDpMLmxlbmd0aCxidWZMZW5ndGg6aCxjb21wcmVzc2VkTGVuZ3RoOl8sY29tcHJlc3NlZEJhc2U2NExlbmd0aDphLmxlbmd0aH0sdm9pZCAwLDIpfWApO2NvbnN0IGs9ZS5QdXNoU2Vzc2lvbkV2ZW50cyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxkYXRhOmF9KTtsZXQgQT1Qcm9taXNlLnJlc29sdmUoKTtmLmxlbmd0aCYmKEE9ZS5wdXNoTWV0cmljcyh7bWV0cmljczpmfSksZi5zcGxpY2UoMCkpO2xldCBLPXBlcmZvcm1hbmNlLm5vdygpO2NvbnN0IHE9c2V0SW50ZXJ2YWwoKCk9PntLJiZwZXJmb3JtYW5jZS5ub3coKS1LPmt0JiYoY29uc29sZS53YXJuKGBVcGxvYWRpbmcgcHVzaFBheWxvYWQgdG9vayB0b28gbG9uZywgZmFpbHVyZSBudW1iZXIgIyR7cn0uYCkscis9MSxjbGVhckludGVydmFsKHEpLHI+PUp0JiYoY29uc29sZS53YXJuKCJVcGxvYWRpbmcgcHVzaFBheWxvYWQgdG9vayB0b28gbG9uZywgc3RvcHBpbmcgcmVjb3JkaW5nIHRvIGF2b2lkIE9PTS4iKSxJZS5wb3N0TWVzc2FnZSh7cmVzcG9uc2U6e3R5cGU6Wi5TdG9wLHJlcXVlc3RTdGFydDpLLGFzeW5jRXZlbnRzUmVzcG9uc2U6U319KSxtKHt0eXBlOlouUHJvcGVydGllcyxwcm9wZXJ0aWVzT2JqZWN0OntzdG9wUmVhc29uOiJQdXNoIFBheWxvYWQgVGltZW91dCJ9LHByb3BlcnR5VHlwZTp7dHlwZToidHJhY2sifX0pKSl9LDEwMCk7dHJ5e3lpZWxkIFByb21pc2UuYWxsKFtrLEFdKSxyJiZwZXJmb3JtYW5jZS5ub3coKS1LPD1rdCYmKGNvbnNvbGUud2FybihgcHVzaFBheWxvYWQgc3VjY2VlZGVkIGFmdGVyICMke3J9IGZhaWx1cmVzLCByZXNldHRpbmcgc3RvcCBzd2l0Y2guYCkscj0wKX1maW5hbGx5e0s9MCxjbGVhckludGVydmFsKHEpfUllLnBvc3RNZXNzYWdlKHtyZXNwb25zZTpTfSl9KSxiPXY9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3VzZXJPYmplY3Q6RSx1c2VySWRlbnRpZmllcjp3LHNvdXJjZTpDfT12O0M9PT0ic2VnbWVudCI/eSgiU2VnbWVudCBJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6d30sRSkpKTp5KCJJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6d30sRSkpKSx5aWVsZCBlLmlkZW50aWZ5U2Vzc2lvbih7c2Vzc2lvbl9zZWN1cmVfaWQ6bix1c2VyX2lkZW50aWZpZXI6dyx1c2VyX29iamVjdDpYdChFLCJ1c2VyIil9KTtjb25zdCBMPUM9PT0ic2VnbWVudCI/QzoiZGVmYXVsdCI7Yy5sb2coYElkZW50aWZ5ICgke3d9LCBzb3VyY2U6ICR7TH0pIHcvIG9iajogJHttZShFKX0gQCAke3R9YCl9KSxtPXY9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3Byb3BlcnRpZXNPYmplY3Q6RSxwcm9wZXJ0eVR5cGU6d309djtsZXQgQzsodz09bnVsbD92b2lkIDA6dy50eXBlKT09PSJzZXNzaW9uIj8oQz0iU2Vzc2lvbiIseWllbGQgZS5hZGRTZXNzaW9uUHJvcGVydGllcyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwcm9wZXJ0aWVzX29iamVjdDpYdChFLCJzZXNzaW9uIil9KSk6KHc9PW51bGw/dm9pZCAwOncuc291cmNlKT09PSJzZWdtZW50Ij9DPSJTZWdtZW50IjpDPSJUcmFjayIsQyE9PSJTZXNzaW9uIiYmeShDLG1lKEUpKSxjLmxvZyhgQWRkaW5nICR7Q30gUHJvcGVydGllcyB0byBzZXNzaW9uICgke259KSB3LyBvYmo6ICR7SlNPTi5zdHJpbmdpZnkoRSl9IEAgJHt0fWApfSksTj12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmLnB1c2goLi4udi5tZXRyaWNzLm1hcChFPT4oe25hbWU6RS5uYW1lLHZhbHVlOkUudmFsdWUsc2Vzc2lvbl9zZWN1cmVfaWQ6bixjYXRlZ29yeTpFLmNhdGVnb3J5LGdyb3VwOkUuZ3JvdXAsdGltZXN0YW1wOkUudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksdGFnczpFLnRhZ3N9KSkpfSksUj12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHt0aW1lc3RhbXA6RSx2ZXJiYXRpbTp3LHVzZXJFbWFpbDpDLHVzZXJOYW1lOkx9PXY7eWllbGQgZS5hZGRTZXNzaW9uRmVlZGJhY2soe3Nlc3Npb25fc2VjdXJlX2lkOm4sdGltZXN0YW1wOkUsdmVyYmF0aW06dyx1c2VyX2VtYWlsOkMsdXNlcl9uYW1lOkx9KX0pLFA9dj0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7di50eXBlPT09Wi5Bc3luY0V2ZW50cz95aWVsZCBnKHYpOnYudHlwZT09PVouSWRlbnRpZnk/eWllbGQgYih2KTp2LnR5cGU9PT1aLlByb3BlcnRpZXM/eWllbGQgbSh2KTp2LnR5cGU9PT1aLk1ldHJpY3M/eWllbGQgTih2KTp2LnR5cGU9PT1aLkZlZWRiYWNrJiYoeWllbGQgUih2KSl9KSxqPSgpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmb3IoO2QubGVuZ3RoPjAmJnUoKTspe2NvbnN0IHY9ZC5zaGlmdCgpO3RyeXt5aWVsZCBQKHYpLGk9MH1jYXRjaChFKXtzJiZjb25zb2xlLmVycm9yKEUpLGkrPTF9fX0pO0llLm9ubWVzc2FnZT1mdW5jdGlvbih2KXtyZXR1cm4gSih0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodi5kYXRhLm1lc3NhZ2UudHlwZT09PVouSW5pdGlhbGl6ZSl7dD12LmRhdGEubWVzc2FnZS5iYWNrZW5kLG49di5kYXRhLm1lc3NhZ2Uuc2Vzc2lvblNlY3VyZUlELHM9di5kYXRhLm1lc3NhZ2UuZGVidWcsbz12LmRhdGEubWVzc2FnZS5yZWNvcmRpbmdTdGFydFRpbWUsYy5kZWJ1Zz1zLGU9bXIobmV3IFluKHQse2hlYWRlcnM6e319KSwkcigpKSx5aWVsZCBqKCk7cmV0dXJufWlmKHYuZGF0YS5tZXNzYWdlLnR5cGU9PT1aLlJlc2V0KXtkLmxlbmd0aD0wLGYubGVuZ3RoPTAsaT0wLHI9MCxuPSIiLG89MDtyZXR1cm59aWYodi5kYXRhLm1lc3NhZ2UudHlwZT09PVouR2V0U3RhdHVzKXtJZS5wb3N0TWVzc2FnZSh7cmVzcG9uc2U6e3R5cGU6Wi5HZXRTdGF0dXMscGVuZGluZ0NvdW50OmQubGVuZ3RoLGluaXRpYWxpemVkOnUoKX19KTtyZXR1cm59aWYoIXUoKSl7ZC5wdXNoKHYuZGF0YS5tZXNzYWdlKTtyZXR1cm59dHJ5e3lpZWxkIFAodi5kYXRhLm1lc3NhZ2UpLGk9MCx5aWVsZCBqKCl9Y2F0Y2goRSl7cyYmY29uc29sZS5lcnJvcihFKSxpKz0xfX0pfX19KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1oaWdobGlnaHQtY2xpZW50LXdvcmtlci1CQVJKeVZqWC5qcy5tYXAK", Qg = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), kl = typeof self < "u" && self.Blob && new Blob([Qg(uu)], { type: "text/javascript;charset=utf-8" });
13511
13511
  function Ag(e) {
13512
13512
  let t;
13513
13513
  try {
@@ -13529,7 +13529,7 @@ function Ag(e) {
13529
13529
  t && (self.URL || self.webkitURL).revokeObjectURL(t);
13530
13530
  }
13531
13531
  }
13532
- var ze = /* @__PURE__ */ ((e) => (e[e.Initialize = 0] = "Initialize", e[e.AsyncEvents = 1] = "AsyncEvents", e[e.Identify = 2] = "Identify", e[e.Properties = 3] = "Properties", e[e.Metrics = 4] = "Metrics", e[e.Feedback = 5] = "Feedback", e[e.CustomEvent = 6] = "CustomEvent", e[e.Stop = 7] = "Stop", e))(ze || {});
13532
+ var Fe = /* @__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))(Fe || {});
13533
13533
  const _g = ({
13534
13534
  apiKey: e
13535
13535
  }) => {
@@ -13671,13 +13671,13 @@ class eZ {
13671
13671
  var i, n, s, r, l;
13672
13672
  this.options = t, typeof ((i = this.options) == null ? void 0 : i.debug) == "boolean" ? this.debugOptions = this.options.debug ? { clientInteractions: !0 } : {} : this.debugOptions = (s = (n = this.options) == null ? void 0 : n.debug) != null ? s : {}, this.logger = new vl(this.debugOptions.clientInteractions), this._worker = new Ag(), this._worker.onmessage = (a) => {
13673
13673
  var c, u, h;
13674
- ((c = a.data.response) == null ? void 0 : c.type) === ze.AsyncEvents ? (this._eventBytesSinceSnapshot += a.data.response.eventsSize, this.logger.log(
13674
+ ((c = a.data.response) == null ? void 0 : c.type) === Fe.AsyncEvents ? (this._eventBytesSinceSnapshot += a.data.response.eventsSize, this.logger.log(
13675
13675
  `Web worker sent payloadID ${a.data.response.id} size ${a.data.response.eventsSize} bytes, compression ratio ${a.data.response.eventsSize / a.data.response.compressedSize}.
13676
13676
  Total since snapshot: ${(this._eventBytesSinceSnapshot / 1e6).toFixed(1)}MB`
13677
- )) : ((u = a.data.response) == null ? void 0 : u.type) === ze.CustomEvent ? this.addCustomEvent(
13677
+ )) : ((u = a.data.response) == null ? void 0 : u.type) === Fe.CustomEvent ? this.addCustomEvent(
13678
13678
  a.data.response.tag,
13679
13679
  a.data.response.payload
13680
- ) : ((h = a.data.response) == null ? void 0 : h.type) === ze.Stop && (Ve(
13680
+ ) : ((h = a.data.response) == null ? void 0 : h.type) === Fe.Stop && (Ve(
13681
13681
  "worker.onmessage",
13682
13682
  "warn",
13683
13683
  "Stopping recording due to worker failure",
@@ -13725,7 +13725,7 @@ class eZ {
13725
13725
  }
13726
13726
  for (const l of Object.values(ge))
13727
13727
  mn(l);
13728
- this.sessionData.sessionSecureID = n ? _t(`${this.organizationID}-${n}`) : _t(), this.sessionData.sessionKey = n, this.sessionData.sessionStartTime = Date.now(), this.options.sessionSecureID = this.sessionData.sessionSecureID, this.stop(), yield this.start(), s && r && this.identify(s, r);
13728
+ this.sessionData.sessionSecureID = n ? _t(`${this.organizationID}-${n}`) : _t(), this.sessionData.sessionKey = n, this.sessionData.sessionStartTime = Date.now(), this.options.sessionSecureID = this.sessionData.sessionSecureID, this.stop(), this._worker.postMessage({ message: { type: Fe.Reset } }), yield this.start(), s && r && this.identify(s, r);
13729
13729
  });
13730
13730
  }
13731
13731
  _initMembers(t) {
@@ -13734,7 +13734,7 @@ class eZ {
13734
13734
  canvasFactor: 0.5,
13735
13735
  canvasMaxSnapshotDimension: 360,
13736
13736
  canvasClearWebGLBuffer: !0,
13737
- dataUrlOptions: Ed()
13737
+ dataUrlOptions: Od()
13738
13738
  }, (o = t.samplingStrategy) != null ? o : {
13739
13739
  canvas: 2
13740
13740
  }), this._backendUrl = (a = t?.backendUrl) != null ? a : "https://pub.observability.app.launchdarkly.com", this._backendUrl[0] === "/" && (this._backendUrl = new URL(this._backendUrl, document.baseURI).href);
@@ -13743,7 +13743,7 @@ class eZ {
13743
13743
  });
13744
13744
  this.graphqlSDK = Kd(h, hh()), this.environment = (c = t.environment) != null ? c : "production", this.appVersion = t.appVersion, this.serviceName = (u = t.serviceName) != null ? u : "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 = () => {
13745
13745
  };
13746
- const p = t, m = Wt(p, ["firstloadVersion"]);
13746
+ const p = t, m = Ct(p, ["firstloadVersion"]);
13747
13747
  this._optionsInternal = m, this.listeners = [], this.events = [], this.hasSessionUnloaded = !1, this.hasPushedData = !1, window.Intercom && window.Intercom("onShow", () => {
13748
13748
  window.Intercom("update", {
13749
13749
  highlightSessionURL: this.getCurrentSessionURLWithTimestamp()
@@ -13765,7 +13765,7 @@ class eZ {
13765
13765
  t.toString()
13766
13766
  ), Pe(ge.USER_OBJECT, JSON.stringify(i)), this._worker.postMessage({
13767
13767
  message: {
13768
- type: ze.Identify,
13768
+ type: Fe.Identify,
13769
13769
  userIdentifier: t,
13770
13770
  userObject: i,
13771
13771
  source: n
@@ -13785,7 +13785,7 @@ class eZ {
13785
13785
  }
13786
13786
  }), this._worker.postMessage({
13787
13787
  message: {
13788
- type: ze.Properties,
13788
+ type: Fe.Properties,
13789
13789
  propertiesObject: n,
13790
13790
  propertyType: i
13791
13791
  }
@@ -13817,15 +13817,15 @@ class eZ {
13817
13817
  this.sessionData,
13818
13818
  this.options
13819
13819
  ), this.sessionData = (s = qi(this.sessionData.sessionSecureID)) != null ? s : this.sessionData, (r = this.sessionData) != null && r.sessionStartTime ? this._recordingStartTime = (l = this.sessionData) == null ? void 0 : l.sessionStartTime : (this._recordingStartTime = (/* @__PURE__ */ new Date()).getTime(), this.sessionData.sessionStartTime = this._recordingStartTime);
13820
- let p = Xe(Cs.CLIENT_ID);
13821
- p || (p = _t(), Pe(Cs.CLIENT_ID, p));
13820
+ let p = Xe(Ws.CLIENT_ID);
13821
+ p || (p = _t(), Pe(Ws.CLIENT_ID, p));
13822
13822
  let m;
13823
13823
  this.options.disableSessionRecording || this.options.disableNetworkRecording !== void 0 || typeof this.options.networkRecording == "boolean" ? m = !1 : m = ((o = this.options.networkRecording) == null ? void 0 : o.recordHeadersAndBody) || !1;
13824
13824
  let b = [];
13825
13825
  if (typeof this.options.networkRecording == "object" && (a = this.options.networkRecording.destinationDomains) != null && a.length && (b = this.options.networkRecording.destinationDomains), this._isCrossOriginIframe)
13826
13826
  yield this._setupCrossOriginIframe();
13827
13827
  else {
13828
- const W = yield this.graphqlSDK.initializeSession({
13828
+ const C = yield this.graphqlSDK.initializeSession({
13829
13829
  organization_verbose_id: this.organizationID,
13830
13830
  enable_strict_privacy: this.privacySetting === "strict",
13831
13831
  privacy_setting: this.privacySetting,
@@ -13843,10 +13843,10 @@ class eZ {
13843
13843
  network_recording_domains: b,
13844
13844
  disable_session_recording: this.options.disableSessionRecording
13845
13845
  });
13846
- if (W.initializeSession.secure_id !== this.sessionData.sessionSecureID && this.logger.log(
13847
- `Unexpected secure id returned by initializeSession: ${W.initializeSession.secure_id}, expected ${this.sessionData.sessionSecureID}`
13848
- ), this.sessionData.sessionSecureID = W.initializeSession.secure_id, this.sessionData.projectID = parseInt(
13849
- ((c = W?.initializeSession) == null ? void 0 : c.project_id) || "0"
13846
+ if (C.initializeSession.secure_id !== this.sessionData.sessionSecureID && this.logger.log(
13847
+ `Unexpected secure id returned by initializeSession: ${C.initializeSession.secure_id}, expected ${this.sessionData.sessionSecureID}`
13848
+ ), this.sessionData.sessionSecureID = C.initializeSession.secure_id, this.sessionData.projectID = parseInt(
13849
+ ((c = C?.initializeSession) == null ? void 0 : c.project_id) || "0"
13850
13850
  ), !this.sessionData.projectID || !this.sessionData.sessionSecureID) {
13851
13851
  console.error(
13852
13852
  "Failed to initialize Highlight; an error occurred on our end.",
@@ -13862,15 +13862,15 @@ Project ID: ${this.sessionData.projectID}
13862
13862
  SessionSecureID: ${this.sessionData.sessionSecureID}`
13863
13863
  ), this.options.sessionSecureID = this.sessionData.sessionSecureID, this._worker.postMessage({
13864
13864
  message: {
13865
- type: ze.Initialize,
13865
+ type: Fe.Initialize,
13866
13866
  sessionSecureID: this.sessionData.sessionSecureID,
13867
13867
  backend: this._backendUrl,
13868
13868
  debug: !!this.debugOptions.clientInteractions,
13869
13869
  recordingStartTime: this._recordingStartTime
13870
13870
  }
13871
13871
  });
13872
- for (const W of this._integrations)
13873
- W.init(this.sessionData.sessionSecureID);
13872
+ for (const C of this._integrations)
13873
+ C.init(this.sessionData.sessionSecureID);
13874
13874
  if (this.sessionData.userIdentifier && this.identify(
13875
13875
  this.sessionData.userIdentifier,
13876
13876
  this.sessionData.userObject
@@ -13882,8 +13882,8 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
13882
13882
  ), this.ready = !0, this.state = "Recording", this.manualStopped = !1;
13883
13883
  return;
13884
13884
  }
13885
- const d = (W, X) => {
13886
- X && this.logger.log("received isCheckout emit", { event: W }), this.events.push(W);
13885
+ const d = (C, X) => {
13886
+ X && this.logger.log("received isCheckout emit", { event: C }), this.events.push(C);
13887
13887
  };
13888
13888
  d.bind(this);
13889
13889
  const S = !!this._recordStop;
@@ -13915,12 +13915,12 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
13915
13915
  maxSnapshotDimension: this.samplingStrategy.canvasMaxSnapshotDimension
13916
13916
  }
13917
13917
  },
13918
- keepIframeSrcFn: (W) => !this.options.recordCrossOriginIframe,
13918
+ keepIframeSrcFn: (C) => !this.options.recordCrossOriginIframe,
13919
13919
  inlineImages: this.inlineImages,
13920
13920
  inlineVideos: this.inlineVideos,
13921
13921
  collectFonts: this.inlineImages,
13922
13922
  inlineStylesheet: this.inlineStylesheet,
13923
- plugins: [Fh()],
13923
+ plugins: [Uh()],
13924
13924
  logger: typeof this.options.debug == "boolean" && this.options.debug || typeof this.options.debug == "object" && this.options.debug.domRecording ? {
13925
13925
  debug: this.logger.log,
13926
13926
  warn: Ve.bind("RecordSDK", "warn")
@@ -14019,7 +14019,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
14019
14019
  )) : this.addCustomEvent("Navigate", r);
14020
14020
  })
14021
14021
  ), this.listeners.push(
14022
- Wh(
14022
+ Ch(
14023
14023
  (r) => {
14024
14024
  this.addCustomEvent("Viewport", r);
14025
14025
  }
@@ -14112,7 +14112,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
14112
14112
  var r;
14113
14113
  this._worker.postMessage({
14114
14114
  message: {
14115
- type: ze.Feedback,
14115
+ type: Fe.Feedback,
14116
14116
  verbatim: i,
14117
14117
  timestamp: t,
14118
14118
  userName: s || this.sessionData.userIdentifier,
@@ -14151,7 +14151,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
14151
14151
  }
14152
14152
  this.state === "Recording" && (this.pushPayloadTimerId && (clearTimeout(this.pushPayloadTimerId), this.pushPayloadTimerId = void 0), this.pushPayloadTimerId = setTimeout(() => {
14153
14153
  this._save();
14154
- }, Hd));
14154
+ }, zd));
14155
14155
  });
14156
14156
  }
14157
14157
  /**
@@ -14202,7 +14202,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
14202
14202
  } else
14203
14203
  this._worker.postMessage({
14204
14204
  message: {
14205
- type: ze.AsyncEvents,
14205
+ type: Fe.AsyncEvents,
14206
14206
  id: l,
14207
14207
  events: n,
14208
14208
  messages: [],
@@ -14332,8 +14332,8 @@ class hZ extends wh {
14332
14332
  getHooks(t) {
14333
14333
  var i, n, s, r;
14334
14334
  const l = Y(Y({
14335
- [Md]: t.sdk.name,
14336
- [zd]: t.sdk.version,
14335
+ [Ed]: t.sdk.name,
14336
+ [Hd]: t.sdk.version,
14337
14337
  [ph]: t.clientSideId,
14338
14338
  [mh]: "LaunchDarkly"
14339
14339
  }, (i = t.application) != null && i.id ? { [bh]: t.application.id } : {}), (n = t.application) != null && n.version ? {
@@ -14391,4 +14391,4 @@ export {
14391
14391
  jt as t,
14392
14392
  wl as x
14393
14393
  };
14394
- //# sourceMappingURL=index-DDMbSYLF.js.map
14394
+ //# sourceMappingURL=index-6I8VmpDC.js.map