@getopenpay/openpay-js-react 0.2.33 → 0.2.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -67,7 +67,7 @@ ${e.message}`), e.message);
67
67
  };
68
68
  var $ = /* @__PURE__ */ ((e) => (e.pockytPaypal = "pockyt-paypal", e.airwallexGooglePay = "airwallex-google-pay", e.airwallexApplePay = "airwallex-apple-pay", e.authorizenetGooglePay = "authorizenet-google-pay", e.authorizenetApplePay = "authorizenet-apple-pay", e.loopCrypto = "loop-crypto", e))($ || {});
69
69
  n.nativeEnum($);
70
- const x = n.string().trim().min(1, { message: "Cannot be blank" }), S = n.string().trim().optional(), z = (e) => n.nullable(e.optional());
70
+ const O = n.string().trim().min(1, { message: "Cannot be blank" }), S = n.string().trim().optional(), N = (e) => n.nullable(e.optional());
71
71
  var h = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(h || {});
72
72
  const zr = n.nativeEnum(h);
73
73
  var Vr = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(Vr || {});
@@ -75,8 +75,8 @@ const Gr = n.nativeEnum(Vr), $r = n.union([zr, Gr]);
75
75
  var oe = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e.CDE_BRIDGE = "cde-bridge", e))(oe || {});
76
76
  const _o = n.nativeEnum(oe), mt = n.object({
77
77
  provider: n.string(),
78
- processor_name: z(n.string()),
79
- metadata: z(n.record(n.string(), n.any()))
78
+ processor_name: N(n.string()),
79
+ metadata: N(n.record(n.string(), n.any()))
80
80
  }), go = n.object({
81
81
  id: n.string()
82
82
  });
@@ -124,7 +124,7 @@ const W = n.enum([
124
124
  errors: n.array(n.string()).optional()
125
125
  }), Po = W.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Co = n.object({
126
126
  type: Po,
127
- message: x,
127
+ message: O,
128
128
  headers: n.record(n.string(), n.string()).optional()
129
129
  }), So = W.extract(["VALIDATION_ERROR"]), ko = n.object({
130
130
  type: So,
@@ -132,10 +132,10 @@ const W = n.enum([
132
132
  errors: n.array(n.string())
133
133
  }), Ao = n.object({
134
134
  type: n.literal(W.enum.LAYOUT),
135
- height: x
135
+ height: O
136
136
  }), Io = n.object({
137
137
  type: n.literal(W.enum.LOADED),
138
- sessionId: x,
138
+ sessionId: O,
139
139
  totalAmountAtoms: n.number(),
140
140
  currency: S,
141
141
  checkoutPaymentMethods: n.array(mt)
@@ -148,33 +148,34 @@ const W = n.enum([
148
148
  type: n.literal(W.enum.SETUP_PAYMENT_METHOD_SUCCESS),
149
149
  paymentMethodId: n.string()
150
150
  }), He = n.object({
151
- firstName: x,
152
- lastName: x,
153
- email: x,
154
- zipCode: x,
155
- country: x,
151
+ firstName: O,
152
+ lastName: O,
153
+ email: O,
154
+ zipCode: O,
155
+ country: O,
156
156
  promotionCode: S
157
- }), xo = n.object({
157
+ }), Oo = n.object({
158
158
  firstName: S,
159
159
  lastName: S,
160
- email: x,
161
- zipCode: x,
162
- country: x,
160
+ email: O,
161
+ zipCode: O,
162
+ country: O,
163
163
  promotionCode: S,
164
164
  address: S,
165
165
  city: S,
166
166
  state: S
167
- }), Oo = W.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), jo = n.object({
168
- type: Oo,
169
- sessionId: x,
167
+ }), xo = W.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), jo = n.object({
168
+ type: xo,
169
+ sessionId: O,
170
170
  checkoutPaymentMethod: mt,
171
171
  paymentFlowMetadata: n.any().optional(),
172
172
  doNotUseLegacyCCFlow: n.boolean().optional(),
173
- existingCCPMId: S
174
- }).extend(He.shape), Lo = n.object({
173
+ existingCCPMId: S,
174
+ paymentRouteId: S
175
+ }).extend(He.shape), Mo = n.object({
175
176
  type: n.literal(W.enum.TOKENIZE_SUCCESS),
176
177
  isReadyForCheckout: n.boolean()
177
- }), Mo = n.object({
178
+ }), Lo = n.object({
178
179
  type: n.literal(W.enum.CHECKOUT_SUCCESS),
179
180
  invoiceUrls: n.array(n.string()),
180
181
  subscriptionIds: n.array(n.string()),
@@ -187,22 +188,22 @@ const W = n.enum([
187
188
  Ao,
188
189
  Io,
189
190
  jo,
190
- Lo,
191
191
  Mo,
192
+ Lo,
192
193
  To,
193
194
  Ro
194
195
  ]), Do = n.object({
195
196
  payload: No,
196
- nonce: x,
197
- formId: x,
198
- elementId: x
197
+ nonce: O,
198
+ formId: O,
199
+ elementId: O
199
200
  });
200
201
  n.object({
201
202
  amountAtom: n.number(),
202
203
  /**
203
204
  * The three-letter ISO 4217 currency code for the payment.
204
205
  */
205
- currency: x
206
+ currency: O
206
207
  });
207
208
  n.enum(["apple_pay", "google_pay"]);
208
209
  n.object({
@@ -211,16 +212,16 @@ n.object({
211
212
  });
212
213
  n.object({
213
214
  secure_token: n.string(),
214
- existing_cc_pm_id: z(n.string()),
215
- their_pm_id: z(n.string()),
216
- checkout_attempt_id: z(n.string()),
217
- processor_specific_metadata: z(n.record(n.string(), n.any()))
215
+ existing_cc_pm_id: N(n.string()),
216
+ their_pm_id: N(n.string()),
217
+ checkout_attempt_id: N(n.string()),
218
+ processor_specific_metadata: N(n.record(n.string(), n.any()))
218
219
  });
219
220
  const Bt = n.object({
220
221
  invoice_urls: n.array(n.string()),
221
222
  subscription_ids: n.array(n.string()),
222
223
  customer_id: n.string(),
223
- processors_used: z(n.array(n.string()))
224
+ processors_used: N(n.array(n.string()))
224
225
  }), Uo = n.object({
225
226
  elementType: n.string(),
226
227
  errors: n.array(n.string())
@@ -241,16 +242,18 @@ n.object({
241
242
  checkout_payment_method: mt,
242
243
  non_cde_form_fields: He,
243
244
  do_not_use_legacy_cc_flow: n.boolean().optional(),
244
- existing_cc_pm_id: z(n.string()),
245
- extra_metadata: n.record(n.string(), n.any())
245
+ existing_cc_pm_id: N(n.string()),
246
+ extra_metadata: n.record(n.string(), n.any()),
247
+ payment_route_id: N(n.string())
246
248
  });
247
249
  n.object({
248
250
  session_id: n.string(),
249
251
  checkout_payment_method: mt,
250
252
  non_cde_form_fields: He,
251
- extra_metadata: n.record(n.string(), n.any()).optional()
253
+ extra_metadata: n.record(n.string(), n.any()).optional(),
254
+ payment_route_id: N(n.string())
252
255
  });
253
- var L = /* @__PURE__ */ ((e) => (e.SUCCESS = "success", e.FAILURE = "failure", e.CANCELLED = "cancelled", e))(L || {});
256
+ var M = /* @__PURE__ */ ((e) => (e.SUCCESS = "success", e.FAILURE = "failure", e.CANCELLED = "cancelled", e))(M || {});
254
257
  const zo = n.object({
255
258
  status: n.enum([
256
259
  "success",
@@ -271,18 +274,18 @@ const Vo = n.object({
271
274
  their_pm_id: n.string().optional()
272
275
  }), Br = n.object({
273
276
  type: n.string(),
274
- redirect_url: z(n.string()),
275
- initial_intent_id: z(n.string()),
276
- consent_id: z(n.string()),
277
- their_pm_id: z(n.string()),
278
- payment_session: z(n.record(n.string(), n.any()))
277
+ redirect_url: N(n.string()),
278
+ initial_intent_id: N(n.string()),
279
+ consent_id: N(n.string()),
280
+ their_pm_id: N(n.string()),
281
+ payment_session: N(n.record(n.string(), n.any()))
279
282
  }), Go = n.discriminatedUnion("present", [
280
283
  n.object({ present: n.literal(!0), href: n.string() }),
281
284
  n.object({ present: n.literal(!1) })
282
285
  ]), $o = n.object({
283
286
  payment_methods: n.array(go),
284
- pay_first_success_response: z(Bt),
285
- required_user_actions: z(n.array(Br))
287
+ pay_first_success_response: N(Bt),
288
+ required_user_actions: N(n.array(Br))
286
289
  }), Yr = (e) => {
287
290
  const t = {};
288
291
  return Object.entries(e).forEach(([r, o]) => {
@@ -503,7 +506,8 @@ n.object({
503
506
  checkout_payment_method: je,
504
507
  promotion_code: n.string().optional(),
505
508
  do_not_use_legacy_cc_flow: n.boolean().optional(),
506
- use_confirmed_pm_id: v(n.string())
509
+ use_confirmed_pm_id: v(n.string()),
510
+ payment_route_id: v(n.string())
507
511
  });
508
512
  const Wr = n.object({
509
513
  payment_method_id: n.string()
@@ -547,15 +551,17 @@ const Xr = n.object({
547
551
  checkout_attempt_id: v(n.string())
548
552
  });
549
553
  n.object({
550
- fields: xo,
551
- checkoutPaymentMethod: je
554
+ fields: Oo,
555
+ checkoutPaymentMethod: je,
556
+ payment_route_id: v(n.string())
552
557
  });
553
558
  n.object({
554
559
  session_id: n.string(),
555
560
  non_cde_form_fields: He,
556
561
  checkout_payment_method: je,
557
- extra_metadata: n.record(n.string(), n.any())
562
+ extra_metadata: n.record(n.string(), n.any()),
558
563
  // This is optional in CDE, but not in OJS moving forward
564
+ payment_route_id: v(n.string())
559
565
  });
560
566
  const gi = n.object({
561
567
  required_user_actions: n.array(n.record(n.string(), n.any())),
@@ -594,7 +600,8 @@ const vi = n.object({
594
600
  });
595
601
  n.object({
596
602
  checkout_payment_method: je,
597
- processor_specific_metadata: n.record(n.any()).optional()
603
+ processor_specific_metadata: n.record(n.any()).optional(),
604
+ payment_route_id: v(n.string())
598
605
  });
599
606
  const bi = n.object({
600
607
  next_action_metadata: v(n.record(n.any()))
@@ -894,7 +901,7 @@ function Ti(e) {
894
901
  }, s);
895
902
  }
896
903
  }
897
- function N(e) {
904
+ function U(e) {
898
905
  return typeof e == "function";
899
906
  }
900
907
  function ft(e) {
@@ -946,7 +953,7 @@ var Ke = function() {
946
953
  else
947
954
  s.remove(this);
948
955
  var d = this.initialTeardown;
949
- if (N(d))
956
+ if (U(d))
950
957
  try {
951
958
  d();
952
959
  } catch (_) {
@@ -1008,10 +1015,10 @@ var Ke = function() {
1008
1015
  }(), e;
1009
1016
  }(), tn = Ke.EMPTY;
1010
1017
  function rn(e) {
1011
- return e instanceof Ke || e && "closed" in e && N(e.remove) && N(e.add) && N(e.unsubscribe);
1018
+ return e instanceof Ke || e && "closed" in e && U(e.remove) && U(e.add) && U(e.unsubscribe);
1012
1019
  }
1013
1020
  function nr(e) {
1014
- N(e) ? e() : e.unsubscribe();
1021
+ U(e) ? e() : e.unsubscribe();
1015
1022
  }
1016
1023
  var nn = {
1017
1024
  onUnhandledError: null,
@@ -1044,7 +1051,7 @@ var Ht = function(e) {
1044
1051
  fe(t, e);
1045
1052
  function t(r) {
1046
1053
  var o = e.call(this) || this;
1047
- return o.isStopped = !1, r ? (o.destination = r, rn(r) && r.add(o)) : o.destination = Li, o;
1054
+ return o.isStopped = !1, r ? (o.destination = r, rn(r) && r.add(o)) : o.destination = Mi, o;
1048
1055
  }
1049
1056
  return t.create = function(r, o, i) {
1050
1057
  return new Ft(r, o, i);
@@ -1071,11 +1078,11 @@ var Ht = function(e) {
1071
1078
  this.unsubscribe();
1072
1079
  }
1073
1080
  }, t;
1074
- }(Ke), xi = Function.prototype.bind;
1075
- function xt(e, t) {
1076
- return xi.call(e, t);
1081
+ }(Ke), Oi = Function.prototype.bind;
1082
+ function Ot(e, t) {
1083
+ return Oi.call(e, t);
1077
1084
  }
1078
- var Oi = function() {
1085
+ var xi = function() {
1079
1086
  function e(t) {
1080
1087
  this.partialObserver = t;
1081
1088
  }
@@ -1110,7 +1117,7 @@ var Oi = function() {
1110
1117
  fe(t, e);
1111
1118
  function t(r, o, i) {
1112
1119
  var a = e.call(this) || this, s;
1113
- if (N(r) || !r)
1120
+ if (U(r) || !r)
1114
1121
  s = {
1115
1122
  next: r ?? void 0,
1116
1123
  error: o ?? void 0,
@@ -1121,12 +1128,12 @@ var Oi = function() {
1121
1128
  a && nn.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
1122
1129
  return a.unsubscribe();
1123
1130
  }, s = {
1124
- next: r.next && xt(r.next, c),
1125
- error: r.error && xt(r.error, c),
1126
- complete: r.complete && xt(r.complete, c)
1131
+ next: r.next && Ot(r.next, c),
1132
+ error: r.error && Ot(r.error, c),
1133
+ complete: r.complete && Ot(r.complete, c)
1127
1134
  }) : s = r;
1128
1135
  }
1129
- return a.destination = new Oi(s), a;
1136
+ return a.destination = new xi(s), a;
1130
1137
  }
1131
1138
  return t;
1132
1139
  }(Ht);
@@ -1136,7 +1143,7 @@ function Je(e) {
1136
1143
  function ji(e) {
1137
1144
  throw e;
1138
1145
  }
1139
- var Li = {
1146
+ var Mi = {
1140
1147
  closed: !0,
1141
1148
  next: or,
1142
1149
  error: ji,
@@ -1144,11 +1151,11 @@ var Li = {
1144
1151
  }, Kt = function() {
1145
1152
  return typeof Symbol == "function" && Symbol.observable || "@@observable";
1146
1153
  }();
1147
- function Mi(e) {
1154
+ function Li(e) {
1148
1155
  return e;
1149
1156
  }
1150
1157
  function Ni(e) {
1151
- return e.length === 0 ? Mi : e.length === 1 ? e[0] : function(t) {
1158
+ return e.length === 0 ? Li : e.length === 1 ? e[0] : function(t) {
1152
1159
  return e.reduce(function(r, o) {
1153
1160
  return o(r);
1154
1161
  }, t);
@@ -1219,13 +1226,13 @@ function ir(e) {
1219
1226
  return (t = e ?? nn.Promise) !== null && t !== void 0 ? t : Promise;
1220
1227
  }
1221
1228
  function Di(e) {
1222
- return e && N(e.next) && N(e.error) && N(e.complete);
1229
+ return e && U(e.next) && U(e.error) && U(e.complete);
1223
1230
  }
1224
1231
  function Ui(e) {
1225
1232
  return e && e instanceof Ht || Di(e) && rn(e);
1226
1233
  }
1227
1234
  function Fi(e) {
1228
- return N(e == null ? void 0 : e.lift);
1235
+ return U(e == null ? void 0 : e.lift);
1229
1236
  }
1230
1237
  function qi(e) {
1231
1238
  return function(t) {
@@ -1481,13 +1488,13 @@ var Vi = function(e) {
1481
1488
  return e && typeof e.length == "number" && typeof e != "function";
1482
1489
  };
1483
1490
  function Zi(e) {
1484
- return N(e == null ? void 0 : e.then);
1491
+ return U(e == null ? void 0 : e.then);
1485
1492
  }
1486
1493
  function Ji(e) {
1487
- return N(e[Kt]);
1494
+ return U(e[Kt]);
1488
1495
  }
1489
1496
  function Wi(e) {
1490
- return Symbol.asyncIterator && N(e == null ? void 0 : e[Symbol.asyncIterator]);
1497
+ return Symbol.asyncIterator && U(e == null ? void 0 : e[Symbol.asyncIterator]);
1491
1498
  }
1492
1499
  function Xi(e) {
1493
1500
  return new TypeError("You provided " + (e !== null && typeof e == "object" ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
@@ -1497,7 +1504,7 @@ function ea() {
1497
1504
  }
1498
1505
  var ta = ea();
1499
1506
  function ra(e) {
1500
- return N(e == null ? void 0 : e[ta]);
1507
+ return U(e == null ? void 0 : e[ta]);
1501
1508
  }
1502
1509
  function na(e) {
1503
1510
  return Ii(this, arguments, function() {
@@ -1531,7 +1538,7 @@ function na(e) {
1531
1538
  });
1532
1539
  }
1533
1540
  function oa(e) {
1534
- return N(e == null ? void 0 : e.getReader);
1541
+ return U(e == null ? void 0 : e.getReader);
1535
1542
  }
1536
1543
  function ia(e) {
1537
1544
  if (e instanceof le)
@@ -1555,7 +1562,7 @@ function ia(e) {
1555
1562
  function aa(e) {
1556
1563
  return new le(function(t) {
1557
1564
  var r = e[Kt]();
1558
- if (N(r.subscribe))
1565
+ if (U(r.subscribe))
1559
1566
  return r.subscribe(t);
1560
1567
  throw new TypeError("Provided object does not correctly implement Symbol.observable");
1561
1568
  });
@@ -1654,7 +1661,7 @@ function pa(e, t, r, o, i) {
1654
1661
  return a;
1655
1662
  }
1656
1663
  function ma(e, t) {
1657
- var r = N(e) ? e : function() {
1664
+ var r = U(e) ? e : function() {
1658
1665
  return e;
1659
1666
  }, o = function(i) {
1660
1667
  return i.error(r());
@@ -1763,12 +1770,12 @@ const lr = n.enum(["dev", "stg", "prod"]), ba = {
1763
1770
  prod: "https://connto.getopenpay.com",
1764
1771
  stg: "https://connto.openpaystaging.com",
1765
1772
  dev: "http://localhost:8000"
1766
- }, wa = (e) => ba[e], Ot = {}, cn = async (e) => {
1767
- if (Ot[e])
1768
- return Ot[e];
1773
+ }, wa = (e) => ba[e], xt = {}, cn = async (e) => {
1774
+ if (xt[e])
1775
+ return xt[e];
1769
1776
  try {
1770
1777
  const t = await fetch(new URL("/health/environment", e)).then((o) => o.json()), r = lr.parse(t.environment);
1771
- return Ot[e] = r, r;
1778
+ return xt[e] = r, r;
1772
1779
  } catch {
1773
1780
  return lr.Values.prod;
1774
1781
  }
@@ -1919,7 +1926,7 @@ class mn extends ki {
1919
1926
  return this.response.message;
1920
1927
  }
1921
1928
  }
1922
- const F = async (e, t, r, o) => {
1929
+ const z = async (e, t, r, o) => {
1923
1930
  o && g(o, {
1924
1931
  ...t
1925
1932
  });
@@ -1933,40 +1940,40 @@ const F = async (e, t, r, o) => {
1933
1940
  return o && g(o, {
1934
1941
  ...i
1935
1942
  }), i;
1936
- }, Ia = (e, t) => t.safeParse(e).success, Ta = (e) => ni.safeParse(e).success, Ra = async (e, t) => await F(e, { type: "get_checkout_preview", payload: t }, Zr), U = async (e) => await F(e, { type: "get_prefill", payload: {} }, Jr), Le = async (e, t) => await F(
1943
+ }, Ia = (e, t) => t.safeParse(e).success, Ta = (e) => ni.safeParse(e).success, Ra = async (e, t) => await z(e, { type: "get_checkout_preview", payload: t }, Zr), q = async (e) => await z(e, { type: "get_prefill", payload: {} }, Jr), Me = async (e, t) => await z(
1937
1944
  e,
1938
1945
  { type: "v2_start_payment_flow", payload: t },
1939
1946
  Xr,
1940
1947
  "start_payment_flow"
1941
- ), xa = async (e, t) => await F(
1948
+ ), Oa = async (e, t) => await z(
1942
1949
  e,
1943
1950
  { type: "start_payment_flow_for_cc", payload: t },
1944
1951
  gi,
1945
1952
  "start_payment_flow_for_cc"
1946
- ), Oa = async (e, t) => {
1953
+ ), xa = async (e, t) => {
1947
1954
  g("start_payment_flow_for_pr", {
1948
1955
  ...t
1949
1956
  });
1950
- const r = await F(e, { type: "start_payment_flow_for_pr", payload: t }, Xr);
1957
+ const r = await z(e, { type: "start_payment_flow_for_pr", payload: t }, Xr);
1951
1958
  return g("start_payment_flow_for_pr_result", {
1952
1959
  ...r
1953
1960
  }), r;
1954
- }, Z = async (e, t) => await F(
1961
+ }, Z = async (e, t) => await z(
1955
1962
  e,
1956
1963
  { type: "confirm_payment_flow", payload: t },
1957
1964
  $o,
1958
1965
  "confirm_payment_flow"
1959
- ), ja = async (e, t) => await F(
1966
+ ), ja = async (e, t) => await z(
1960
1967
  e,
1961
1968
  { type: "finalize_setup_payment_method", payload: t },
1962
1969
  Wr,
1963
1970
  "finalize_setup_payment_method"
1964
- ), La = async (e, t) => await F(
1971
+ ), Ma = async (e, t) => await z(
1965
1972
  e,
1966
1973
  { type: "check_if_popup_window_verified", payload: t },
1967
1974
  Go,
1968
1975
  "check_if_popup_window_verified"
1969
- ), Ma = async (e, t, r) => {
1976
+ ), La = async (e, t, r) => {
1970
1977
  const o = await Ra(e, {
1971
1978
  secure_token: t,
1972
1979
  promotion_code: r
@@ -1978,12 +1985,12 @@ const F = async (e, t, r, o) => {
1978
1985
  currency: a,
1979
1986
  amountAtom: s
1980
1987
  };
1981
- }, Me = async (e, t, r, o) => {
1988
+ }, Le = async (e, t, r, o) => {
1982
1989
  if (r)
1983
1990
  return { amountAtom: 0, currency: "usd" };
1984
1991
  {
1985
1992
  o = o || void 0;
1986
- const i = await Ma(e, t, o);
1993
+ const i = await La(e, t, o);
1987
1994
  return { amountAtom: i.amountAtom, currency: i.currency };
1988
1995
  }
1989
1996
  }, Na = async (e, t) => {
@@ -1991,15 +1998,15 @@ const F = async (e, t, r, o) => {
1991
1998
  throw new Error("No CDE connections found");
1992
1999
  return await Promise.all(
1993
2000
  Array.from(e.values()).map(
1994
- (r) => F(r, { type: "tokenize_card", payload: t }, qo)
2001
+ (r) => z(r, { type: "tokenize_card", payload: t }, qo)
1995
2002
  )
1996
2003
  );
1997
- }, pr = async (e, t) => await F(
2004
+ }, pr = async (e, t) => await z(
1998
2005
  e,
1999
2006
  { type: "checkout_card_elements", payload: t },
2000
2007
  Bt,
2001
2008
  "checkout_card_elements"
2002
- ), Da = async (e, t) => await F(e, { type: "setup_payment_method", payload: t }, Wr, "setup_checkout"), Qt = async (e, t) => await F(e, { type: "checkout", payload: t }, Bt, "perform_checkout"), hn = 1e3, Ua = async (e, t) => {
2009
+ ), Da = async (e, t) => await z(e, { type: "setup_payment_method", payload: t }, Wr, "setup_checkout"), Qt = async (e, t) => await z(e, { type: "checkout", payload: t }, Bt, "perform_checkout"), hn = 1e3, Ua = async (e, t) => {
2003
2010
  console.log(t);
2004
2011
  const r = await Ur({
2005
2012
  iframe: e,
@@ -2007,16 +2014,16 @@ const F = async (e, t, r, o) => {
2007
2014
  timeout: hn,
2008
2015
  childOrigin: "*"
2009
2016
  // TODO: use with proper childOrigin
2010
- }).promise, o = await F(r, { type: "ping-3ds-status" }, zo);
2017
+ }).promise, o = await z(r, { type: "ping-3ds-status" }, zo);
2011
2018
  return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
2012
- }, Zt = async (e, t) => await F(
2019
+ }, Zt = async (e, t) => await z(
2013
2020
  e,
2014
2021
  { type: "prepare_payment_flow", payload: t },
2015
2022
  bi,
2016
2023
  "prepare_payment_flow"
2017
2024
  ), fn = async (e, t) => {
2018
2025
  try {
2019
- return (await F(
2026
+ return (await z(
2020
2027
  e,
2021
2028
  { type: "get_standardized_error_code", payload: { message: t } },
2022
2029
  vi
@@ -2024,7 +2031,7 @@ const F = async (e, t, r, o) => {
2024
2031
  } catch (r) {
2025
2032
  return console.error("[cde-client] Error during getStandardizedErrorCode:", B(r)), "PAYMENT_FAILED_GENERIC";
2026
2033
  }
2027
- }, Fa = async (e, t) => await F(
2034
+ }, Fa = async (e, t) => await z(
2028
2035
  e,
2029
2036
  { type: "set_user_device_token", payload: { device_token: t } },
2030
2037
  wi
@@ -2178,7 +2185,7 @@ const qa = ({
2178
2185
  new_customer_first_name: e.firstName,
2179
2186
  new_customer_last_name: e.lastName
2180
2187
  }), _t = async (e) => {
2181
- const { log__: t } = I(e.logPrefix), r = await U(e.anyCdeConnection), o = Qe(e.confirmResult);
2188
+ const { log__: t } = I(e.logPrefix), r = await q(e.anyCdeConnection), o = Qe(e.confirmResult);
2182
2189
  if (r.mode === "setup")
2183
2190
  return t("Setting up payment method..."), { mode: "setup", result: await ja(e.anyCdeConnection, {
2184
2191
  secure_token: r.token,
@@ -2239,7 +2246,7 @@ function Ya({
2239
2246
  resolve: r
2240
2247
  }) {
2241
2248
  const o = () => {
2242
- clearInterval(t), e.host.remove(), r({ status: L.CANCELLED });
2249
+ clearInterval(t), e.host.remove(), r({ status: M.CANCELLED });
2243
2250
  };
2244
2251
  return e.cancelButton.addEventListener("click", o), () => {
2245
2252
  e.cancelButton.removeEventListener("click", o);
@@ -2261,11 +2268,11 @@ async function gt(e) {
2261
2268
  }
2262
2269
  const wn = async (e) => {
2263
2270
  const t = await gt(e);
2264
- if (t.status === L.CANCELLED)
2271
+ if (t.status === M.CANCELLED)
2265
2272
  throw new Error("3DS verification cancelled");
2266
- if (t.status === L.FAILURE)
2273
+ if (t.status === M.FAILURE)
2267
2274
  throw new Error("3DS verification failed");
2268
- return t.status !== L.SUCCESS && yt(t.status), {
2275
+ return t.status !== M.SUCCESS && yt(t.status), {
2269
2276
  href: t.href
2270
2277
  };
2271
2278
  }, Ha = (e, t) => {
@@ -2278,7 +2285,7 @@ const wn = async (e) => {
2278
2285
  return new Promise((a, s) => {
2279
2286
  const c = Ha(e, o), l = setInterval(async () => {
2280
2287
  try {
2281
- const u = await La(t, r);
2288
+ const u = await Ma(t, r);
2282
2289
  if (u.present)
2283
2290
  clearInterval(l), c.close(), a({ href: u.href });
2284
2291
  else if (c.closed)
@@ -2393,9 +2400,9 @@ async function ns(e, t) {
2393
2400
  url: e.redirect_url,
2394
2401
  baseUrl: t.baseUrl
2395
2402
  });
2396
- if (rt(`╰ 3DS verification completed [Status: ${r}]`), r === L.CANCELLED)
2403
+ if (rt(`╰ 3DS verification completed [Status: ${r}]`), r === M.CANCELLED)
2397
2404
  throw new Error("3DS verification cancelled");
2398
- if (r === L.FAILURE)
2405
+ if (r === M.FAILURE)
2399
2406
  throw new Error("3DS verification failed");
2400
2407
  const o = await Z(t.connection, {
2401
2408
  secure_token: t.prefill.token,
@@ -2418,7 +2425,7 @@ async function os(e, t) {
2418
2425
  g("billing_details_received", {
2419
2426
  ...u
2420
2427
  });
2421
- const d = (await Le(t.connection, {
2428
+ const d = (await Me(t.connection, {
2422
2429
  payment_provider: t.checkoutPaymentMethod.provider,
2423
2430
  checkout_payment_method: t.checkoutPaymentMethod,
2424
2431
  new_customer_email: u[h.EMAIL],
@@ -2487,7 +2494,7 @@ const { log__: Fe, err__: kn } = I("awx-apple-pay"), is = Ce(
2487
2494
  return Fe("No active cards available for Apple Pay"), r;
2488
2495
  if (!o.metadata.processor_account_id)
2489
2496
  throw new Error("No gateway merchant ID found in processor account");
2490
- const i = e.anyCdeConnection, a = await U(i), s = a.mode === "setup", c = await Me(i, a.token, s, void 0), l = async (u) => {
2497
+ const i = e.anyCdeConnection, a = await q(i), s = a.mode === "setup", c = await Le(i, a.token, s, void 0), l = async (u) => {
2491
2498
  try {
2492
2499
  await j.airwallexApplePay.run({
2493
2500
  context: e,
@@ -2520,7 +2527,7 @@ const { log__: Fe, err__: kn } = I("awx-apple-pay"), is = Ce(
2520
2527
  formCallbacks: i
2521
2528
  }) => {
2522
2529
  var a;
2523
- const s = X(e.checkoutPaymentMethods, En), { overridePaymentRequest: c, initialPreview: l } = o, u = e.anyCdeConnection, d = await U(u), y = d.mode === "setup", f = vn({
2530
+ const s = X(e.checkoutPaymentMethods, En), { overridePaymentRequest: c, initialPreview: l } = o, u = e.anyCdeConnection, d = await q(u), y = d.mode === "setup", f = vn({
2524
2531
  overridePaymentRequest: c,
2525
2532
  initialPreview: l,
2526
2533
  prefill: d,
@@ -2687,7 +2694,7 @@ const In = async (e) => await cn(e) === "prod" ? "PRODUCTION" : "TEST", bt = asy
2687
2694
  } catch (f) {
2688
2695
  return Se("Error checking Google Pay availability", f), i;
2689
2696
  }
2690
- const c = e.anyCdeConnection, l = await U(c), u = l.mode === "setup", d = await Me(c, l.token, u, void 0), y = async (f) => {
2697
+ const c = e.anyCdeConnection, l = await q(c), u = l.mode === "setup", d = await Le(c, l.token, u, void 0), y = async (f) => {
2691
2698
  try {
2692
2699
  j.airwallexGooglePay.run({
2693
2700
  context: e,
@@ -2731,7 +2738,7 @@ const In = async (e) => await cn(e) === "prod" ? "PRODUCTION" : "TEST", bt = asy
2731
2738
  merchantId: _.google_pay_merchant_id ?? "",
2732
2739
  initialPreview: p,
2733
2740
  overridePaymentRequest: m
2734
- }), w = e.anyCdeConnection, C = await U(w);
2741
+ }), w = e.anyCdeConnection, C = await q(w);
2735
2742
  g("google_pay_flow_started", {
2736
2743
  processor_name: f.processor_name,
2737
2744
  prefill: ln(C, ["brand"]),
@@ -2752,7 +2759,7 @@ const In = async (e) => await cn(e) === "prod" ? "PRODUCTION" : "TEST", bt = asy
2752
2759
  const pe = (s = (a = R.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
2753
2760
  if (!pe)
2754
2761
  throw new Error("No payment token received from Google Pay");
2755
- const to = await Le(w, {
2762
+ const to = await Me(w, {
2756
2763
  payment_provider: t.provider,
2757
2764
  checkout_payment_method: t,
2758
2765
  new_customer_email: te[h.EMAIL],
@@ -2790,9 +2797,9 @@ const In = async (e) => await cn(e) === "prod" ? "PRODUCTION" : "TEST", bt = asy
2790
2797
  url: be.redirect_url,
2791
2798
  baseUrl: e.baseUrl
2792
2799
  });
2793
- if (K(`╰ 3DS verification completed [Status: ${Ue}]`), Ue === L.CANCELLED)
2800
+ if (K(`╰ 3DS verification completed [Status: ${Ue}]`), Ue === M.CANCELLED)
2794
2801
  throw new Error("3DS verification cancelled");
2795
- if (Ue === L.FAILURE)
2802
+ if (Ue === M.FAILURE)
2796
2803
  throw new Error("3DS verification failed");
2797
2804
  }
2798
2805
  if (be && !At && (ve = await Z(w, {
@@ -2825,7 +2832,7 @@ const In = async (e) => await cn(e) === "prod" ? "PRODUCTION" : "TEST", bt = asy
2825
2832
  processor_account_id: n.string(),
2826
2833
  processor_account_name: n.string()
2827
2834
  })
2828
- }), xn = n.object({
2835
+ }), On = n.object({
2829
2836
  provider: n.literal("google_pay"),
2830
2837
  processor_name: n.literal("authorize_net"),
2831
2838
  metadata: n.object({
@@ -2861,7 +2868,7 @@ async function ds(e, t) {
2861
2868
  const i = e.payment, a = gn(t.nonCdeFormInputs, i), s = ye(a, t.formCallbacks.get.onValidationError);
2862
2869
  g("billing_details_received", {
2863
2870
  ...s
2864
- }), await Le(t.connection, {
2871
+ }), await Me(t.connection, {
2865
2872
  payment_provider: t.checkoutPaymentMethod.provider,
2866
2873
  checkout_payment_method: t.checkoutPaymentMethod,
2867
2874
  new_customer_email: s[h.EMAIL],
@@ -2902,7 +2909,7 @@ async function ds(e, t) {
2902
2909
  throw t.session.completePayment(a), i;
2903
2910
  }
2904
2911
  }
2905
- const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
2912
+ const { log__: nt, err__: xn } = I("authnet-applepay"), ps = Ce(
2906
2913
  async ({ context: e, formCallbacks: t }) => {
2907
2914
  const r = {
2908
2915
  processor: J.Enum.authorize_net,
@@ -2919,7 +2926,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
2919
2926
  return nt("No active cards available for Apple Pay"), r;
2920
2927
  if (!o.metadata.processor_account_id)
2921
2928
  throw new Error("No gateway merchant ID found in processor account");
2922
- const i = e.anyCdeConnection, a = await U(i), s = a.mode === "setup", c = await Me(i, a.token, s, void 0), l = async (u) => {
2929
+ const i = e.anyCdeConnection, a = await q(i), s = a.mode === "setup", c = await Le(i, a.token, s, void 0), l = async (u) => {
2923
2930
  try {
2924
2931
  await j.authorizeNetApplePay.run({
2925
2932
  context: e,
@@ -2933,7 +2940,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
2933
2940
  initResult: void 0
2934
2941
  });
2935
2942
  } catch (d) {
2936
- On("Apple Pay payment error", d), g("apple_pay_payment_error", {
2943
+ xn("Apple Pay payment error", d), g("apple_pay_payment_error", {
2937
2944
  error: d
2938
2945
  }), t.get.onCheckoutError((d == null ? void 0 : d.message) ?? "Unknown error");
2939
2946
  }
@@ -2954,7 +2961,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
2954
2961
  formCallbacks: i
2955
2962
  }) => {
2956
2963
  var a;
2957
- const { initialPreview: s, overridePaymentRequest: c } = o, l = X(e.checkoutPaymentMethods, Rn), u = e.anyCdeConnection, d = await U(u), y = d.mode === "setup", f = vn({
2964
+ const { initialPreview: s, overridePaymentRequest: c } = o, l = X(e.checkoutPaymentMethods, Rn), u = e.anyCdeConnection, d = await q(u), y = d.mode === "setup", f = vn({
2958
2965
  overridePaymentRequest: c,
2959
2966
  initialPreview: s,
2960
2967
  prefill: d,
@@ -3000,7 +3007,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
3000
3007
  }
3001
3008
  }, p.begin();
3002
3009
  }).catch((_) => {
3003
- throw On("Apple Pay payment error", _), g("apple_pay_payment_error", {
3010
+ throw xn("Apple Pay payment error", _), g("apple_pay_payment_error", {
3004
3011
  error: _
3005
3012
  }), _;
3006
3013
  });
@@ -3015,7 +3022,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
3015
3022
  isLoading: !1,
3016
3023
  startFlow: async () => {
3017
3024
  }
3018
- }, a = X(e.checkoutPaymentMethods, xn);
3025
+ }, a = X(e.checkoutPaymentMethods, On);
3019
3026
  if (!a)
3020
3027
  return i;
3021
3028
  Ee("Google Pay CPM", a);
@@ -3042,7 +3049,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
3042
3049
  } catch (f) {
3043
3050
  return qe("Error checking Google Pay availability", f), i;
3044
3051
  }
3045
- const c = e.anyCdeConnection, l = await U(c), u = l.mode === "setup", d = await Me(c, l.token, u, void 0), y = async (f) => {
3052
+ const c = e.anyCdeConnection, l = await q(c), u = l.mode === "setup", d = await Le(c, l.token, u, void 0), y = async (f) => {
3046
3053
  try {
3047
3054
  j.authorizeNetGooglePay.run({
3048
3055
  context: e,
@@ -3077,14 +3084,14 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
3077
3084
  customParams: i
3078
3085
  }) => {
3079
3086
  var a, s, c, l;
3080
- const { initialPreview: u, overridePaymentRequest: d } = i, y = X(e.checkoutPaymentMethods, xn).metadata, f = vt({
3087
+ const { initialPreview: u, overridePaymentRequest: d } = i, y = X(e.checkoutPaymentMethods, On).metadata, f = vt({
3081
3088
  gateway: "authorizenet",
3082
3089
  gatewayMerchantId: y.processor_account_id,
3083
3090
  merchantName: y.processor_account_name,
3084
3091
  merchantId: y.google_pay_merchant_id ?? "",
3085
3092
  initialPreview: u,
3086
3093
  overridePaymentRequest: d
3087
- }), p = e.anyCdeConnection, m = await U(p);
3094
+ }), p = e.anyCdeConnection, m = await q(p);
3088
3095
  g("google_pay_flow_started", {
3089
3096
  processor_name: r.processor_name,
3090
3097
  prefill: m,
@@ -3101,7 +3108,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
3101
3108
  const P = (s = (a = E.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
3102
3109
  if (!P)
3103
3110
  throw new Error("No payment token received from Google Pay");
3104
- const R = await Le(p, {
3111
+ const R = await Me(p, {
3105
3112
  payment_provider: r.provider,
3106
3113
  checkout_payment_method: r,
3107
3114
  new_customer_email: C[h.EMAIL],
@@ -3150,7 +3157,7 @@ const { log__: nt, err__: On } = I("authnet-applepay"), ps = Ce(
3150
3157
  throw jn(o), new Error(r);
3151
3158
  }
3152
3159
  return t.data;
3153
- }, Ln = (e) => {
3160
+ }, Mn = (e) => {
3154
3161
  try {
3155
3162
  const t = new URL(e ?? "").searchParams.get("vaultId");
3156
3163
  if (!t)
@@ -3165,7 +3172,7 @@ Error: ${B(t)}`), new Error(r);
3165
3172
  const r = gs(t), o = await wn({ url: r["op-pockyt-3ds-url"], baseUrl: e });
3166
3173
  return {
3167
3174
  existing_cc: {
3168
- vault_id: Ln(o.href ?? ""),
3175
+ vault_id: Mn(o.href ?? ""),
3169
3176
  transaction_no: r["op-pockyt-txn-no"],
3170
3177
  reference_no: r["op-pockyt-ref-no"]
3171
3178
  }
@@ -3203,38 +3210,38 @@ Error: ${B(t)}`), new Error(r);
3203
3210
  "sv-SE",
3204
3211
  "zh-CN",
3205
3212
  "zh-TW"
3206
- ]), { log__: xe, err__: Be } = I("adyen-cc"), Cs = n.object({
3213
+ ]), { log__: Oe, err__: Be } = I("adyen-cc"), Cs = n.object({
3207
3214
  "op-account-id": n.string(),
3208
3215
  "op-adyen-client-key": n.string(),
3209
3216
  "op-adyen-environment": Es,
3210
3217
  "op-adyen-action": n.string()
3211
- }), Mn = "Unable to process your credit card. Please contact support for assistance.", Ss = (e) => {
3218
+ }), Ln = "Unable to process your credit card. Please contact support for assistance.", Ss = (e) => {
3212
3219
  const t = Cs.safeParse(e);
3213
3220
  if (!t.success)
3214
- throw Be(`Adyen 3DS is required but headers are malformed. Got: ${JSON.stringify(e)}`), new Error(Mn);
3221
+ throw Be(`Adyen 3DS is required but headers are malformed. Got: ${JSON.stringify(e)}`), new Error(Ln);
3215
3222
  return t.data;
3216
3223
  }, ks = (e) => JSON.parse(e), mr = () => "AdyenWeb" in window && "AdyenCheckout" in window.AdyenWeb, As = async () => {
3217
- xe("Waiting for Adyen SDK to load...");
3224
+ Oe("Waiting for Adyen SDK to load...");
3218
3225
  for (let e = 0; e < 10; e++)
3219
3226
  mr() || await Yt(500);
3220
3227
  if (!mr())
3221
- throw Be("Adyen SDK not loaded properly"), new Error(Mn);
3222
- return xe("Adyen SDK loaded successfully"), window.AdyenWeb.AdyenCheckout;
3228
+ throw Be("Adyen SDK not loaded properly"), new Error(Ln);
3229
+ return Oe("Adyen SDK loaded successfully"), window.AdyenWeb.AdyenCheckout;
3223
3230
  }, Is = (e) => {
3224
3231
  const { headers: t, locale: r, countryCode: o, component: i, host: a, cancelButton: s } = e, c = ks(t["op-adyen-action"]);
3225
- return xe(`Running Adyen 3DS flow for action type: ${c.type}`), new Promise((l) => {
3232
+ return Oe(`Running Adyen 3DS flow for action type: ${c.type}`), new Promise((l) => {
3226
3233
  const u = () => {
3227
- xe("Cleaning up Adyen 3DS flow"), s.removeEventListener("click", f), a.remove();
3234
+ Oe("Cleaning up Adyen 3DS flow"), s.removeEventListener("click", f), a.remove();
3228
3235
  }, d = (m) => {
3229
- Be("Authentication failed. Result:", m), l({ status: L.FAILURE, cleanup: u });
3236
+ Be("Authentication failed. Result:", m), l({ status: M.FAILURE, cleanup: u });
3230
3237
  }, y = (m) => {
3231
- Be("Adyen error:", m), l({ status: L.FAILURE, cleanup: u });
3238
+ Be("Adyen error:", m), l({ status: M.FAILURE, cleanup: u });
3232
3239
  }, f = () => {
3233
- l({ status: L.CANCELLED, cleanup: u });
3240
+ l({ status: M.CANCELLED, cleanup: u });
3234
3241
  };
3235
3242
  s.addEventListener("click", f);
3236
3243
  const p = (m, _, E) => {
3237
- a.remove(), l({ status: L.SUCCESS, additionalDetails: m, cleanup: u });
3244
+ a.remove(), l({ status: M.SUCCESS, additionalDetails: m, cleanup: u });
3238
3245
  };
3239
3246
  As().then(
3240
3247
  (m) => m({
@@ -3252,8 +3259,8 @@ Error: ${B(t)}`), new Error(r);
3252
3259
  });
3253
3260
  }, Ts = (e) => {
3254
3261
  const t = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language, r = e ?? t, o = Ps.safeParse(r);
3255
- return o.success ? (xe(`Resolved locale: ${o.data}`), o.data) : (Be(`Resolved invalid locale: ${r}. Defaulting to en-US.`), "en-US");
3256
- }, Rs = (e) => (e == null ? void 0 : e["op-adyen-action"]) !== void 0, xs = async (e, t, r) => {
3262
+ return o.success ? (Oe(`Resolved locale: ${o.data}`), o.data) : (Be(`Resolved invalid locale: ${r}. Defaulting to en-US.`), "en-US");
3263
+ }, Rs = (e) => (e == null ? void 0 : e["op-adyen-action"]) !== void 0, Os = async (e, t, r) => {
3257
3264
  const o = Ss(t), i = document.createElement("div");
3258
3265
  i.id = "adyen-container";
3259
3266
  const { host: a, iframe: s, cancelButton: c } = bn("http://example.com");
@@ -3266,14 +3273,14 @@ Error: ${B(t)}`), new Error(r);
3266
3273
  host: a,
3267
3274
  cancelButton: c
3268
3275
  });
3269
- if (l.cleanup(), l.status === L.FAILURE)
3276
+ if (l.cleanup(), l.status === M.FAILURE)
3270
3277
  throw new Error("3DS verification failed");
3271
- if (l.status === L.CANCELLED)
3278
+ if (l.status === M.CANCELLED)
3272
3279
  throw new Error("3DS verification cancelled");
3273
- if (l.status === L.SUCCESS) {
3280
+ if (l.status === M.SUCCESS) {
3274
3281
  if (!l.additionalDetails)
3275
3282
  throw new Error("3DS verification succeeded but no additional details were returned");
3276
- return xe("3DS verification succeeded"), {
3283
+ return Oe("3DS verification succeeded"), {
3277
3284
  existing_cc: {
3278
3285
  additional_details: l.additionalDetails.data
3279
3286
  }
@@ -3286,7 +3293,7 @@ n.array(
3286
3293
  our_existing_pm_id: n.string()
3287
3294
  })
3288
3295
  ).length(1);
3289
- const Os = de(
3296
+ const xs = de(
3290
3297
  async ({
3291
3298
  context: e,
3292
3299
  checkoutPaymentMethod: t,
@@ -3296,7 +3303,7 @@ const Os = de(
3296
3303
  }) => {
3297
3304
  var a;
3298
3305
  A("├ Running common CC flow...", { checkoutPaymentMethod: t });
3299
- const s = e.anyCdeConnection, c = await U(s);
3306
+ const s = e.anyCdeConnection, c = await q(s);
3300
3307
  g("common_cc_flow_started", {
3301
3308
  ...t,
3302
3309
  prefill: c
@@ -3311,7 +3318,8 @@ const Os = de(
3311
3318
  non_cde_form_fields: l,
3312
3319
  extra_metadata: {
3313
3320
  origin: window.location.origin
3314
- }
3321
+ },
3322
+ payment_route_id: i.paymentRouteId
3315
3323
  };
3316
3324
  try {
3317
3325
  A(`├ Tokenizing card info in CDE [Session: ${e.elementsSessionId}]`);
@@ -3346,14 +3354,14 @@ const Os = de(
3346
3354
  }
3347
3355
  if (Rs(d.response.headers)) {
3348
3356
  A("├ Adyen 3DS case detected. Going through Adyen 3DS flow.");
3349
- const _ = await xs(
3357
+ const _ = await Os(
3350
3358
  r[h.COUNTRY],
3351
3359
  d.response.headers,
3352
3360
  c.locale
3353
3361
  );
3354
3362
  u.extra_metadata.adyen = _;
3355
3363
  }
3356
- const f = await xa(s, u);
3364
+ const f = await Oa(s, u);
3357
3365
  A("├ Payment flow result:", f);
3358
3366
  const p = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
3359
3367
  y ? A("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : p ? (A("├ Using stripe 3DS flow"), await Ds(f)) : (A("├ Using common 3DS flow"), await Ns(f, e.baseUrl));
@@ -3385,13 +3393,13 @@ const Os = de(
3385
3393
  if (!t)
3386
3394
  throw new Error("No stripe 3DS action found");
3387
3395
  return Bo.parse(t);
3388
- }, Ls = ["airwallex_payment_consent", "adyen"], Ms = (e) => {
3389
- const t = e.required_user_actions.find((r) => Ls.includes(r.type));
3396
+ }, Ms = ["airwallex_payment_consent", "adyen"], Ls = (e) => {
3397
+ const t = e.required_user_actions.find((r) => Ms.includes(r.type));
3390
3398
  if (!t)
3391
3399
  throw new Error("No common 3DS action found");
3392
3400
  return Vo.parse(t);
3393
3401
  }, Ns = async (e, t) => {
3394
- const r = Ms(e);
3402
+ const r = Ls(e);
3395
3403
  if (r.redirect_url === "3DS_COMPLETE") {
3396
3404
  A("├ 3DS flow completed successfully"), g("3ds_complete");
3397
3405
  return;
@@ -3400,9 +3408,9 @@ const Os = de(
3400
3408
  ...r
3401
3409
  });
3402
3410
  const { status: o } = await gt({ url: r.redirect_url, baseUrl: t });
3403
- if (A(`╰ 3DS verification completed [Status: ${o}]`), o === L.CANCELLED)
3411
+ if (A(`╰ 3DS verification completed [Status: ${o}]`), o === M.CANCELLED)
3404
3412
  throw g("3ds_cancelled"), new Error("3DS verification cancelled");
3405
- if (o === L.FAILURE)
3413
+ if (o === M.FAILURE)
3406
3414
  throw g("3ds_failure"), new Error("3DS verification failed");
3407
3415
  }, Ds = async (e) => {
3408
3416
  const t = js(e);
@@ -3420,9 +3428,9 @@ const Os = de(
3420
3428
  environment: n.string()
3421
3429
  })
3422
3430
  }), { log__: G, err__: Nn } = I("loop-crypto"), qs = n.object({
3423
- loopFirstName: x,
3424
- loopLastName: x,
3425
- loopEmail: x,
3431
+ loopFirstName: O,
3432
+ loopLastName: O,
3433
+ loopEmail: O,
3426
3434
  [h.PROMOTION_CODE]: S
3427
3435
  }), zs = n.object({
3428
3436
  loopFirstName: S,
@@ -3443,7 +3451,7 @@ const Os = de(
3443
3451
  G("Checking if there are any CPMs for Loop Crypto...");
3444
3452
  const t = X(e.checkoutPaymentMethods, Fs);
3445
3453
  G(`checkoutPaymentMethod: ${JSON.stringify(t)}`), G("Starting Loop Crypto flow...");
3446
- const r = await U(e.anyCdeConnection), o = await Zt(e.anyCdeConnection, {
3454
+ const r = await q(e.anyCdeConnection), o = await Zt(e.anyCdeConnection, {
3447
3455
  checkout_payment_method: t
3448
3456
  });
3449
3457
  if (r.mode !== "setup" && !t.metadata.supported_currencies.includes(r.currency))
@@ -3490,7 +3498,7 @@ const Os = de(
3490
3498
  o.get.onValidationError,
3491
3499
  zs
3492
3500
  );
3493
- const s = e.anyCdeConnection, c = await U(e.anyCdeConnection), l = c.mode !== "setup", u = await Le(e.anyCdeConnection, {
3501
+ const s = e.anyCdeConnection, c = await q(e.anyCdeConnection), l = c.mode !== "setup", u = await Me(e.anyCdeConnection, {
3494
3502
  checkout_payment_method: t,
3495
3503
  payment_provider: t.provider,
3496
3504
  new_customer_email: a.loopEmail,
@@ -3550,7 +3558,7 @@ const Bs = de(
3550
3558
  }) => {
3551
3559
  var a, s;
3552
3560
  re("Running Pockyt Paypal flow...");
3553
- const c = e.anyCdeConnection, l = await U(c);
3561
+ const c = e.anyCdeConnection, l = await q(c);
3554
3562
  re("Verifying CPM...");
3555
3563
  const u = $s.parse(t);
3556
3564
  re("├ Validating non-CDE form fields");
@@ -3588,7 +3596,7 @@ const Bs = de(
3588
3596
  P
3589
3597
  );
3590
3598
  re("Paypal flow result", R);
3591
- const ge = Ln(R.href), te = vs(R.href, "catt");
3599
+ const ge = Mn(R.href), te = vs(R.href, "catt");
3592
3600
  if (!te)
3593
3601
  throw _r("Checkout attempt ID not found in redirect URL:", R.href), new Error("Checkout attempt ID not found in redirect URL");
3594
3602
  re(`Confirming payment flow using vault ID ${ge}`);
@@ -3611,7 +3619,7 @@ const Bs = de(
3611
3619
  result: pe.pay_first_success_response
3612
3620
  };
3613
3621
  }
3614
- ), gr = "ojs-stripe-link-btn", { log__: M, err__: Ys } = I("stripe-link"), Hs = n.object({
3622
+ ), gr = "ojs-stripe-link-btn", { log__: L, err__: Ys } = I("stripe-link"), Hs = n.object({
3615
3623
  provider: n.literal("stripe_link"),
3616
3624
  processor_name: n.literal("stripe"),
3617
3625
  metadata: n.object({
@@ -3624,18 +3632,18 @@ const Bs = de(
3624
3632
  ).length(1), Qs = Ce(
3625
3633
  async ({ context: e, formCallbacks: t }) => {
3626
3634
  const r = e.customInitParams.stripeLink;
3627
- M("Checking if there are any CPMs for Stripe Link...");
3635
+ L("Checking if there are any CPMs for Stripe Link...");
3628
3636
  const o = X(e.checkoutPaymentMethods, Hs);
3629
- M("Starting stripe link flow...");
3630
- const i = e.anyCdeConnection, a = await U(i), s = a.mode === "setup";
3631
- M("Creating stripe elements...");
3632
- const c = await Me(i, a.token, s, void 0), { elements: l, stripe: u } = await Ko(o.metadata.stripe_pk, {
3637
+ L("Starting stripe link flow...");
3638
+ const i = e.anyCdeConnection, a = await q(i), s = a.mode === "setup";
3639
+ L("Creating stripe elements...");
3640
+ const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = await Ko(o.metadata.stripe_pk, {
3633
3641
  mode: "setup",
3634
3642
  currency: c.currency,
3635
3643
  setup_future_usage: "off_session",
3636
3644
  paymentMethodCreation: "manual"
3637
3645
  });
3638
- M("Creating express checkout...");
3646
+ L("Creating express checkout...");
3639
3647
  const d = l.create("expressCheckout", {
3640
3648
  buttonHeight: r == null ? void 0 : r.buttonHeight,
3641
3649
  paymentMethods: {
@@ -3649,21 +3657,21 @@ const Bs = de(
3649
3657
  }, f = () => {
3650
3658
  d.unmount();
3651
3659
  };
3652
- return r != null && r.doNotMountOnInit ? M("NOT mounting stripe link button (doNotMountOnInit is true)") : (M("Mounting stripe link button..."), y()), d.on("click", async (p) => {
3653
- if (M("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
3654
- M("Stripe Link submit aborted by overrideLinkSubmit");
3660
+ return r != null && r.doNotMountOnInit ? L("NOT mounting stripe link button (doNotMountOnInit is true)") : (L("Mounting stripe link button..."), y()), d.on("click", async (p) => {
3661
+ if (L("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
3662
+ L("Stripe Link submit aborted by overrideLinkSubmit");
3655
3663
  return;
3656
3664
  }
3657
3665
  p.resolve();
3658
3666
  }), d.on("confirm", async (p) => {
3659
- M("Stripe Link window confirmed", p);
3667
+ L("Stripe Link window confirmed", p);
3660
3668
  const m = await u.createPaymentMethod({
3661
3669
  elements: l,
3662
3670
  params: {
3663
3671
  billing_details: p.billingDetails
3664
3672
  }
3665
3673
  });
3666
- m.error ? (Ys("error", m.error), t.get.onCheckoutError(m.error.message ?? "Stripe Link unknown error")) : (M("paymentMethod", m.paymentMethod), j.stripeLink.run({
3674
+ m.error ? (Ys("error", m.error), t.get.onCheckoutError(m.error.message ?? "Stripe Link unknown error")) : (L("paymentMethod", m.paymentMethod), j.stripeLink.run({
3667
3675
  context: e,
3668
3676
  checkoutPaymentMethod: o,
3669
3677
  nonCdeFormInputs: ae(e.formDiv),
@@ -3688,14 +3696,14 @@ const Bs = de(
3688
3696
  formCallbacks: o,
3689
3697
  customParams: i
3690
3698
  }) => {
3691
- M("Running Stripe Link flow...");
3699
+ L("Running Stripe Link flow...");
3692
3700
  const a = e.anyCdeConnection;
3693
- M("Merging PM fields with form fields...");
3701
+ L("Merging PM fields with form fields...");
3694
3702
  const s = Js(r, i.stripePM), c = ye(s, o.get.onValidationError);
3695
3703
  g("billing_details_received", {
3696
3704
  ...c
3697
- }), M("Starting payment flow...");
3698
- const l = await Le(a, {
3705
+ }), L("Starting payment flow...");
3706
+ const l = await Me(a, {
3699
3707
  payment_provider: t.provider,
3700
3708
  checkout_payment_method: t,
3701
3709
  their_existing_pm_id: i.stripePM.id,
@@ -3707,17 +3715,17 @@ const Bs = de(
3707
3715
  country: c[h.COUNTRY]
3708
3716
  }
3709
3717
  });
3710
- M("Start payment flow response", l);
3711
- const u = Ks.parse(l.required_user_actions)[0].our_existing_pm_id, d = await U(a);
3718
+ L("Start payment flow response", l);
3719
+ const u = Ks.parse(l.required_user_actions)[0].our_existing_pm_id, d = await q(a);
3712
3720
  if (d.mode === "setup") {
3713
- M("Doing payment setup...");
3721
+ L("Doing payment setup...");
3714
3722
  const y = await Z(a, {
3715
3723
  secure_token: d.token,
3716
3724
  existing_cc_pm_id: u
3717
3725
  });
3718
3726
  return { mode: "setup", result: Qe(y) };
3719
3727
  } else {
3720
- M("Doing checkout...");
3728
+ L("Doing checkout...");
3721
3729
  const y = {
3722
3730
  secure_token: d.token,
3723
3731
  payment_input: {
@@ -3741,14 +3749,14 @@ const Bs = de(
3741
3749
  c[h.EMAIL] = c[h.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
3742
3750
  ((i = t.link) == null ? void 0 : i.email) || t.billing_details.email || "op_unfilled@getopenpay.com", c[h.ZIP_CODE] = c[h.ZIP_CODE] || ((a = t.billing_details.address) == null ? void 0 : a.postal_code) || "00000", c[h.COUNTRY] = c[h.COUNTRY] || ((s = t.billing_details.address) == null ? void 0 : s.country) || "US";
3743
3751
  const y = c[h.FIRST_NAME] || l || "", f = c[h.LAST_NAME] || d || "";
3744
- return y || f ? (c[h.FIRST_NAME] = y, c[h.LAST_NAME] = f) : (c[h.FIRST_NAME] = "_OP_UNKNOWN", c[h.LAST_NAME] = ""), M("Final form inputs:", c), c;
3752
+ return y || f ? (c[h.FIRST_NAME] = y, c[h.LAST_NAME] = f) : (c[h.FIRST_NAME] = "_OP_UNKNOWN", c[h.LAST_NAME] = ""), L("Final form inputs:", c), c;
3745
3753
  }, Ws = (e) => new Promise((t) => {
3746
3754
  const r = () => {
3747
3755
  const o = document.getElementById(e);
3748
3756
  o ? t(o) : requestAnimationFrame(r);
3749
3757
  };
3750
3758
  r();
3751
- }), { log__: q, err__: Xs } = I("stripe-pr"), ec = n.object({
3759
+ }), { log__: V, err__: Xs } = I("stripe-pr"), ec = n.object({
3752
3760
  provider: n.union([n.literal("apple_pay"), n.literal("google_pay")]),
3753
3761
  processor_name: n.literal("stripe"),
3754
3762
  metadata: n.object({
@@ -3756,22 +3764,22 @@ const Bs = de(
3756
3764
  })
3757
3765
  }), tc = Ce(
3758
3766
  async ({ context: e, formCallbacks: t }) => {
3759
- q("Checking if there are any CPMs for Stripe PR...");
3767
+ V("Checking if there are any CPMs for Stripe PR...");
3760
3768
  const r = X(e.checkoutPaymentMethods, ec);
3761
- q("Initializing Stripe PR flow...");
3762
- const o = e.anyCdeConnection, i = await U(o), a = i.mode === "setup";
3763
- q("Getting initial preview amount");
3764
- const s = await Me(o, i.token, a, void 0), c = await Qo(
3769
+ V("Initializing Stripe PR flow...");
3770
+ const o = e.anyCdeConnection, i = await q(o), a = i.mode === "setup";
3771
+ V("Getting initial preview amount");
3772
+ const s = await Le(o, i.token, a, void 0), c = await Qo(
3765
3773
  r.metadata.stripe_pk,
3766
3774
  s.amountAtom,
3767
3775
  s.currency,
3768
3776
  a
3769
3777
  );
3770
- q("Checking if can make payment");
3778
+ V("Checking if can make payment");
3771
3779
  const l = await c.canMakePayment();
3772
3780
  if (l === null)
3773
3781
  return Xs("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" };
3774
- q("Stripe PR flow initialized successfully. Can make payment", l);
3782
+ V("Stripe PR flow initialized successfully. Can make payment", l);
3775
3783
  const u = (d, y) => j.stripePR.run({
3776
3784
  context: e,
3777
3785
  checkoutPaymentMethod: Ge(e.checkoutPaymentMethods, d),
@@ -3806,36 +3814,36 @@ const Bs = de(
3806
3814
  customParams: i,
3807
3815
  initResult: a
3808
3816
  }) => {
3809
- if (q("Running Stripe PR flow..."), i.provider !== t.provider)
3817
+ if (V("Running Stripe PR flow..."), i.provider !== t.provider)
3810
3818
  throw new Error(`Provider mismatch. Expected ${i.provider}, got ${t.provider}`);
3811
3819
  const s = e.anyCdeConnection, c = a.pr;
3812
3820
  if (i != null && i.overridePaymentRequest) {
3813
3821
  const m = i.overridePaymentRequest;
3814
- q("Overriding PR amount with", m);
3822
+ V("Overriding PR amount with", m);
3815
3823
  const _ = typeof m.applePayPaymentRequest == "function" ? m.applePayPaymentRequest({}) : m.applePayPaymentRequest;
3816
3824
  oc(c, m.amount, m.pending, _, m.label);
3817
3825
  }
3818
- q("Showing PR dialog..."), c.show();
3826
+ V("Showing PR dialog..."), c.show();
3819
3827
  const l = await Zo(c);
3820
- q("Stripe PM added event:", l), q("Merging PM fields with form fields...");
3828
+ V("Stripe PM added event:", l), V("Merging PM fields with form fields...");
3821
3829
  const u = nc(r, l), d = ye(u, o.get.onValidationError);
3822
3830
  g("billing_details_received", {
3823
3831
  ...d
3824
- }), q("PR dialog finished. Starting payment flow...", d);
3825
- const y = await Oa(s, {
3832
+ }), V("PR dialog finished. Starting payment flow...", d);
3833
+ const y = await xa(s, {
3826
3834
  fields: d,
3827
3835
  checkoutPaymentMethod: t
3828
3836
  }), f = ic(y);
3829
- q("Confirming PR with Stripe..."), await Jo(f, l);
3830
- const p = await U(s);
3837
+ V("Confirming PR with Stripe..."), await Jo(f, l);
3838
+ const p = await q(s);
3831
3839
  if (p.mode === "setup") {
3832
- q("Confirming payment flow for setup...");
3840
+ V("Confirming payment flow for setup...");
3833
3841
  const m = await Z(s, {
3834
3842
  secure_token: p.token
3835
3843
  });
3836
3844
  return { mode: "setup", result: Qe(m) };
3837
3845
  } else {
3838
- q("Performing checkout...");
3846
+ V("Performing checkout...");
3839
3847
  const m = {
3840
3848
  secure_token: p.token,
3841
3849
  payment_input: {
@@ -3860,7 +3868,7 @@ const Bs = de(
3860
3868
  const s = { ...e }, [c, ...l] = ((o = (r = t.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = t.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, y = t.shippingAddress;
3861
3869
  s[h.EMAIL] = s[h.EMAIL] || t.payerEmail || "op_unfilled@getopenpay.com", s[h.ZIP_CODE] = s[h.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (y == null ? void 0 : y.postalCode) || "00000", s[h.COUNTRY] = s[h.COUNTRY] || (d == null ? void 0 : d.country) || (y == null ? void 0 : y.country) || "US";
3862
3870
  const f = s[h.FIRST_NAME] || c || "", p = s[h.LAST_NAME] || u || "";
3863
- return f || p ? (s[h.FIRST_NAME] = f, s[h.LAST_NAME] = p) : (s[h.FIRST_NAME] = "_OP_UNKNOWN", s[h.LAST_NAME] = ""), q("Final form inputs:", s), s;
3871
+ return f || p ? (s[h.FIRST_NAME] = f, s[h.LAST_NAME] = p) : (s[h.FIRST_NAME] = "_OP_UNKNOWN", s[h.LAST_NAME] = ""), V("Final form inputs:", s), s;
3864
3872
  }, oc = (e, t, r, o, i) => {
3865
3873
  e.update({
3866
3874
  total: {
@@ -3897,7 +3905,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
3897
3905
  commonCC: {
3898
3906
  init: async () => {
3899
3907
  },
3900
- run: Os
3908
+ run: xs
3901
3909
  },
3902
3910
  // Stripe
3903
3911
  stripePR: {
@@ -4304,20 +4312,21 @@ const Ic = (e, t, r) => {
4304
4312
  kc(a.node).then((s) => {
4305
4313
  this.connectionManager.addConnection(a.type, s), !this.anyCdeConn.current.isSuccess && a.type === oe.CDE_BRIDGE && this.anyCdeConn.set(s);
4306
4314
  }).catch((s) => se("[FORM] Error connecting to CDE iframe", s));
4307
- }, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
4308
- g("submit_card");
4309
- const a = this.context.getValueIfLoadedElse(null);
4310
- if (!a) {
4315
+ }, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = (a) => {
4316
+ g("submit_card", { ...a });
4317
+ const s = this.context.getValueIfLoadedElse(null);
4318
+ if (!s) {
4311
4319
  se("Please wait for the form to finish loading before submitting.");
4312
4320
  return;
4313
4321
  }
4314
4322
  j.commonCC.run({
4315
- context: a,
4316
- checkoutPaymentMethod: Ge(a.checkoutPaymentMethods, "credit_card"),
4317
- nonCdeFormInputs: ae(a.formDiv),
4323
+ context: s,
4324
+ checkoutPaymentMethod: Ge(s.checkoutPaymentMethods, "credit_card"),
4325
+ nonCdeFormInputs: ae(s.formDiv),
4318
4326
  formCallbacks: this.formCallbacks,
4319
4327
  customParams: {
4320
- currentCdeConnections: this.connectionManager.getAllConnections()
4328
+ currentCdeConnections: this.connectionManager.getAllConnections(),
4329
+ paymentRouteId: a == null ? void 0 : a.paymentRouteId
4321
4330
  },
4322
4331
  initResult: void 0
4323
4332
  // This flow requires no initialization
@@ -4419,7 +4428,7 @@ const Ic = (e, t, r) => {
4419
4428
  (a = T()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Aa(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
4420
4429
  }, this.updateCallbacks = (a) => {
4421
4430
  this.formCallbacks.setCallbacks(a);
4422
- }, zt.assignAsSingleton(this), this.ojsVersion = "0.2.33", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = dc.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ye()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Ac(), this.deviceToken = bc(), ka();
4431
+ }, zt.assignAsSingleton(this), this.ojsVersion = "0.2.34", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = dc.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ye()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Ac(), this.deviceToken = bc(), ka();
4423
4432
  const { framework: o, version: i } = Cc();
4424
4433
  cn(this.baseUrl).then((a) => {
4425
4434
  if (!qt.current.isSuccess) {
@@ -4473,7 +4482,7 @@ const Rc = n.object({
4473
4482
  path: n.array(n.string())
4474
4483
  });
4475
4484
  n.array(Rc);
4476
- const xc = (e, t, r) => (...o) => {
4485
+ const Oc = (e, t, r) => (...o) => {
4477
4486
  try {
4478
4487
  return t(...o);
4479
4488
  } catch (i) {
@@ -4483,18 +4492,18 @@ const xc = (e, t, r) => (...o) => {
4483
4492
  };
4484
4493
  var qn = /* @__PURE__ */ ((e) => (e.pockytPaypal = "pockyt-paypal", e.airwallexGooglePay = "airwallex-google-pay", e.airwallexApplePay = "airwallex-apple-pay", e.authorizenetGooglePay = "authorizenet-google-pay", e.authorizenetApplePay = "authorizenet-apple-pay", e.loopCrypto = "loop-crypto", e))(qn || {});
4485
4494
  n.nativeEnum(qn);
4486
- const O = n.string().trim().min(1, { message: "Cannot be blank" }), k = n.string().trim().optional(), V = (e) => n.nullable(e.optional());
4495
+ const x = n.string().trim().min(1, { message: "Cannot be blank" }), k = n.string().trim().optional(), D = (e) => n.nullable(e.optional());
4487
4496
  var wt = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(wt || {});
4488
- const Oc = n.nativeEnum(wt);
4497
+ const xc = n.nativeEnum(wt);
4489
4498
  var zn = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(zn || {});
4490
- const Vn = n.nativeEnum(zn), jc = n.union([Oc, Vn]);
4499
+ const Vn = n.nativeEnum(zn), jc = n.union([xc, Vn]);
4491
4500
  var Ne = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e.CDE_BRIDGE = "cde-bridge", e))(Ne || {});
4492
4501
  n.nativeEnum(Ne);
4493
4502
  const Et = n.object({
4494
4503
  provider: n.string(),
4495
- processor_name: V(n.string()),
4496
- metadata: V(n.record(n.string(), n.any()))
4497
- }), Lc = n.object({
4504
+ processor_name: D(n.string()),
4505
+ metadata: D(n.record(n.string(), n.any()))
4506
+ }), Mc = n.object({
4498
4507
  id: n.string()
4499
4508
  });
4500
4509
  n.object({
@@ -4535,13 +4544,13 @@ const ee = n.enum([
4535
4544
  "TOKENIZE",
4536
4545
  "CHECKOUT",
4537
4546
  "START_PAYMENT_FLOW"
4538
- ]), Mc = ee.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Nc = n.object({ type: Mc }), Dc = ee.extract(["BLUR", "FOCUS", "CHANGE"]), Uc = n.object({
4547
+ ]), Lc = ee.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Nc = n.object({ type: Lc }), Dc = ee.extract(["BLUR", "FOCUS", "CHANGE"]), Uc = n.object({
4539
4548
  type: Dc,
4540
4549
  elementType: Vn,
4541
4550
  errors: n.array(n.string()).optional()
4542
4551
  }), Fc = ee.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), qc = n.object({
4543
4552
  type: Fc,
4544
- message: O,
4553
+ message: x,
4545
4554
  headers: n.record(n.string(), n.string()).optional()
4546
4555
  }), zc = ee.extract(["VALIDATION_ERROR"]), Vc = n.object({
4547
4556
  type: zc,
@@ -4549,10 +4558,10 @@ const ee = n.enum([
4549
4558
  errors: n.array(n.string())
4550
4559
  }), Gc = n.object({
4551
4560
  type: n.literal(ee.enum.LAYOUT),
4552
- height: O
4561
+ height: x
4553
4562
  }), $c = n.object({
4554
4563
  type: n.literal(ee.enum.LOADED),
4555
- sessionId: O,
4564
+ sessionId: x,
4556
4565
  totalAmountAtoms: n.number(),
4557
4566
  currency: k,
4558
4567
  checkoutPaymentMethods: n.array(Et)
@@ -4565,29 +4574,30 @@ const ee = n.enum([
4565
4574
  type: n.literal(ee.enum.SETUP_PAYMENT_METHOD_SUCCESS),
4566
4575
  paymentMethodId: n.string()
4567
4576
  }), Pt = n.object({
4568
- firstName: O,
4569
- lastName: O,
4570
- email: O,
4571
- zipCode: O,
4572
- country: O,
4577
+ firstName: x,
4578
+ lastName: x,
4579
+ email: x,
4580
+ zipCode: x,
4581
+ country: x,
4573
4582
  promotionCode: k
4574
4583
  }), Hc = n.object({
4575
4584
  firstName: k,
4576
4585
  lastName: k,
4577
- email: O,
4578
- zipCode: O,
4579
- country: O,
4586
+ email: x,
4587
+ zipCode: x,
4588
+ country: x,
4580
4589
  promotionCode: k,
4581
4590
  address: k,
4582
4591
  city: k,
4583
4592
  state: k
4584
4593
  }), Kc = ee.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Qc = n.object({
4585
4594
  type: Kc,
4586
- sessionId: O,
4595
+ sessionId: x,
4587
4596
  checkoutPaymentMethod: Et,
4588
4597
  paymentFlowMetadata: n.any().optional(),
4589
4598
  doNotUseLegacyCCFlow: n.boolean().optional(),
4590
- existingCCPMId: k
4599
+ existingCCPMId: k,
4600
+ paymentRouteId: k
4591
4601
  }).extend(Pt.shape), Zc = n.object({
4592
4602
  type: n.literal(ee.enum.TOKENIZE_SUCCESS),
4593
4603
  isReadyForCheckout: n.boolean()
@@ -4611,16 +4621,16 @@ const ee = n.enum([
4611
4621
  ]);
4612
4622
  n.object({
4613
4623
  payload: Wc,
4614
- nonce: O,
4615
- formId: O,
4616
- elementId: O
4624
+ nonce: x,
4625
+ formId: x,
4626
+ elementId: x
4617
4627
  });
4618
4628
  n.object({
4619
4629
  amountAtom: n.number(),
4620
4630
  /**
4621
4631
  * The three-letter ISO 4217 currency code for the payment.
4622
4632
  */
4623
- currency: O
4633
+ currency: x
4624
4634
  });
4625
4635
  n.enum(["apple_pay", "google_pay"]);
4626
4636
  n.object({
@@ -4629,16 +4639,16 @@ n.object({
4629
4639
  });
4630
4640
  n.object({
4631
4641
  secure_token: n.string(),
4632
- existing_cc_pm_id: V(n.string()),
4633
- their_pm_id: V(n.string()),
4634
- checkout_attempt_id: V(n.string()),
4635
- processor_specific_metadata: V(n.record(n.string(), n.any()))
4642
+ existing_cc_pm_id: D(n.string()),
4643
+ their_pm_id: D(n.string()),
4644
+ checkout_attempt_id: D(n.string()),
4645
+ processor_specific_metadata: D(n.record(n.string(), n.any()))
4636
4646
  });
4637
4647
  const Xc = n.object({
4638
4648
  invoice_urls: n.array(n.string()),
4639
4649
  subscription_ids: n.array(n.string()),
4640
4650
  customer_id: n.string(),
4641
- processors_used: V(n.array(n.string()))
4651
+ processors_used: D(n.array(n.string()))
4642
4652
  }), el = n.object({
4643
4653
  elementType: n.string(),
4644
4654
  errors: n.array(n.string())
@@ -4660,14 +4670,16 @@ n.object({
4660
4670
  checkout_payment_method: Et,
4661
4671
  non_cde_form_fields: Pt,
4662
4672
  do_not_use_legacy_cc_flow: n.boolean().optional(),
4663
- existing_cc_pm_id: V(n.string()),
4664
- extra_metadata: n.record(n.string(), n.any())
4673
+ existing_cc_pm_id: D(n.string()),
4674
+ extra_metadata: n.record(n.string(), n.any()),
4675
+ payment_route_id: D(n.string())
4665
4676
  });
4666
4677
  n.object({
4667
4678
  session_id: n.string(),
4668
4679
  checkout_payment_method: Et,
4669
4680
  non_cde_form_fields: Pt,
4670
- extra_metadata: n.record(n.string(), n.any()).optional()
4681
+ extra_metadata: n.record(n.string(), n.any()).optional(),
4682
+ payment_route_id: D(n.string())
4671
4683
  });
4672
4684
  n.object({
4673
4685
  status: n.enum([
@@ -4690,20 +4702,20 @@ n.object({
4690
4702
  });
4691
4703
  const rl = n.object({
4692
4704
  type: n.string(),
4693
- redirect_url: V(n.string()),
4694
- initial_intent_id: V(n.string()),
4695
- consent_id: V(n.string()),
4696
- their_pm_id: V(n.string()),
4697
- payment_session: V(n.record(n.string(), n.any()))
4705
+ redirect_url: D(n.string()),
4706
+ initial_intent_id: D(n.string()),
4707
+ consent_id: D(n.string()),
4708
+ their_pm_id: D(n.string()),
4709
+ payment_session: D(n.record(n.string(), n.any()))
4698
4710
  });
4699
4711
  n.discriminatedUnion("present", [
4700
4712
  n.object({ present: n.literal(!0), href: n.string() }),
4701
4713
  n.object({ present: n.literal(!1) })
4702
4714
  ]);
4703
4715
  n.object({
4704
- payment_methods: n.array(Lc),
4705
- pay_first_success_response: V(Xc),
4706
- required_user_actions: V(n.array(rl))
4716
+ payment_methods: n.array(Mc),
4717
+ pay_first_success_response: D(Xc),
4718
+ required_user_actions: D(n.array(rl))
4707
4719
  });
4708
4720
  n.object({
4709
4721
  stripe_pk: n.string(),
@@ -4834,7 +4846,8 @@ n.object({
4834
4846
  checkout_payment_method: De,
4835
4847
  promotion_code: n.string().optional(),
4836
4848
  do_not_use_legacy_cc_flow: n.boolean().optional(),
4837
- use_confirmed_pm_id: b(n.string())
4849
+ use_confirmed_pm_id: b(n.string()),
4850
+ payment_route_id: b(n.string())
4838
4851
  });
4839
4852
  n.object({
4840
4853
  payment_method_id: n.string()
@@ -4879,14 +4892,16 @@ n.object({
4879
4892
  });
4880
4893
  n.object({
4881
4894
  fields: Hc,
4882
- checkoutPaymentMethod: De
4895
+ checkoutPaymentMethod: De,
4896
+ payment_route_id: b(n.string())
4883
4897
  });
4884
4898
  n.object({
4885
4899
  session_id: n.string(),
4886
4900
  non_cde_form_fields: Pt,
4887
4901
  checkout_payment_method: De,
4888
- extra_metadata: n.record(n.string(), n.any())
4902
+ extra_metadata: n.record(n.string(), n.any()),
4889
4903
  // This is optional in CDE, but not in OJS moving forward
4904
+ payment_route_id: b(n.string())
4890
4905
  });
4891
4906
  n.object({
4892
4907
  required_user_actions: n.array(n.record(n.string(), n.any())),
@@ -4925,7 +4940,8 @@ n.object({
4925
4940
  });
4926
4941
  n.object({
4927
4942
  checkout_payment_method: De,
4928
- processor_specific_metadata: n.record(n.any()).optional()
4943
+ processor_specific_metadata: n.record(n.any()).optional(),
4944
+ payment_route_id: b(n.string())
4929
4945
  });
4930
4946
  n.object({
4931
4947
  next_action_metadata: b(n.record(n.any()))
@@ -5102,7 +5118,7 @@ function Hn(e, t) {
5102
5118
  return { value: u[0] ? u[1] : void 0, done: !0 };
5103
5119
  }
5104
5120
  }
5105
- function Oe(e) {
5121
+ function xe(e) {
5106
5122
  var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], o = 0;
5107
5123
  if (r) return r.call(e);
5108
5124
  if (e && typeof e.length == "number") return {
@@ -5178,7 +5194,7 @@ function Cl(e, t, r) {
5178
5194
  function Sl(e) {
5179
5195
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
5180
5196
  var t = e[Symbol.asyncIterator], r;
5181
- return t ? t.call(e) : (e = typeof Oe == "function" ? Oe(e) : e[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
5197
+ return t ? t.call(e) : (e = typeof xe == "function" ? xe(e) : e[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
5182
5198
  return this;
5183
5199
  }, r);
5184
5200
  function o(a) {
@@ -5194,7 +5210,7 @@ function Sl(e) {
5194
5210
  }, s);
5195
5211
  }
5196
5212
  }
5197
- function D(e) {
5213
+ function F(e) {
5198
5214
  return typeof e == "function";
5199
5215
  }
5200
5216
  function Ct(e) {
@@ -5203,7 +5219,7 @@ function Ct(e) {
5203
5219
  }, r = e(t);
5204
5220
  return r.prototype = Object.create(Error.prototype), r.prototype.constructor = r, r;
5205
5221
  }
5206
- var Lt = Ct(function(e) {
5222
+ var Mt = Ct(function(e) {
5207
5223
  return function(r) {
5208
5224
  e(this), this.message = r ? r.length + ` errors occurred during unsubscription:
5209
5225
  ` + r.map(function(o, i) {
@@ -5230,7 +5246,7 @@ var Ze = function() {
5230
5246
  if (s)
5231
5247
  if (this._parentage = null, Array.isArray(s))
5232
5248
  try {
5233
- for (var c = Oe(s), l = c.next(); !l.done; l = c.next()) {
5249
+ for (var c = xe(s), l = c.next(); !l.done; l = c.next()) {
5234
5250
  var u = l.value;
5235
5251
  u.remove(this);
5236
5252
  }
@@ -5246,22 +5262,22 @@ var Ze = function() {
5246
5262
  else
5247
5263
  s.remove(this);
5248
5264
  var d = this.initialTeardown;
5249
- if (D(d))
5265
+ if (F(d))
5250
5266
  try {
5251
5267
  d();
5252
5268
  } catch (_) {
5253
- a = _ instanceof Lt ? _.errors : [_];
5269
+ a = _ instanceof Mt ? _.errors : [_];
5254
5270
  }
5255
5271
  var y = this._finalizers;
5256
5272
  if (y) {
5257
5273
  this._finalizers = null;
5258
5274
  try {
5259
- for (var f = Oe(y), p = f.next(); !p.done; p = f.next()) {
5275
+ for (var f = xe(y), p = f.next(); !p.done; p = f.next()) {
5260
5276
  var m = p.value;
5261
5277
  try {
5262
5278
  kr(m);
5263
5279
  } catch (_) {
5264
- a = a ?? [], _ instanceof Lt ? a = dt(dt([], ut(a)), ut(_.errors)) : a.push(_);
5280
+ a = a ?? [], _ instanceof Mt ? a = dt(dt([], ut(a)), ut(_.errors)) : a.push(_);
5265
5281
  }
5266
5282
  }
5267
5283
  } catch (_) {
@@ -5275,7 +5291,7 @@ var Ze = function() {
5275
5291
  }
5276
5292
  }
5277
5293
  if (a)
5278
- throw new Lt(a);
5294
+ throw new Mt(a);
5279
5295
  }
5280
5296
  }, e.prototype.add = function(t) {
5281
5297
  var r;
@@ -5308,10 +5324,10 @@ var Ze = function() {
5308
5324
  }(), e;
5309
5325
  }(), Kn = Ze.EMPTY;
5310
5326
  function Qn(e) {
5311
- return e instanceof Ze || e && "closed" in e && D(e.remove) && D(e.add) && D(e.unsubscribe);
5327
+ return e instanceof Ze || e && "closed" in e && F(e.remove) && F(e.add) && F(e.unsubscribe);
5312
5328
  }
5313
5329
  function kr(e) {
5314
- D(e) ? e() : e.unsubscribe();
5330
+ F(e) ? e() : e.unsubscribe();
5315
5331
  }
5316
5332
  var Zn = {
5317
5333
  onUnhandledError: null,
@@ -5373,7 +5389,7 @@ var Wt = function(e) {
5373
5389
  }
5374
5390
  }, t;
5375
5391
  }(Ze), kl = Function.prototype.bind;
5376
- function Mt(e, t) {
5392
+ function Lt(e, t) {
5377
5393
  return kl.call(e, t);
5378
5394
  }
5379
5395
  var Al = function() {
@@ -5411,7 +5427,7 @@ var Al = function() {
5411
5427
  _e(t, e);
5412
5428
  function t(r, o, i) {
5413
5429
  var a = e.call(this) || this, s;
5414
- if (D(r) || !r)
5430
+ if (F(r) || !r)
5415
5431
  s = {
5416
5432
  next: r ?? void 0,
5417
5433
  error: o ?? void 0,
@@ -5422,9 +5438,9 @@ var Al = function() {
5422
5438
  a && Zn.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
5423
5439
  return a.unsubscribe();
5424
5440
  }, s = {
5425
- next: r.next && Mt(r.next, c),
5426
- error: r.error && Mt(r.error, c),
5427
- complete: r.complete && Mt(r.complete, c)
5441
+ next: r.next && Lt(r.next, c),
5442
+ error: r.error && Lt(r.error, c),
5443
+ complete: r.complete && Lt(r.complete, c)
5428
5444
  }) : s = r;
5429
5445
  }
5430
5446
  return a.destination = new Al(s), a;
@@ -5448,7 +5464,7 @@ var Tl = {
5448
5464
  function Rl(e) {
5449
5465
  return e;
5450
5466
  }
5451
- function xl(e) {
5467
+ function Ol(e) {
5452
5468
  return e.length === 0 ? Rl : e.length === 1 ? e[0] : function(r) {
5453
5469
  return e.reduce(function(o, i) {
5454
5470
  return i(o);
@@ -5498,7 +5514,7 @@ var ue = function() {
5498
5514
  }, e.prototype.pipe = function() {
5499
5515
  for (var t = [], r = 0; r < arguments.length; r++)
5500
5516
  t[r] = arguments[r];
5501
- return xl(t)(this);
5517
+ return Ol(t)(this);
5502
5518
  }, e.prototype.toPromise = function(t) {
5503
5519
  var r = this;
5504
5520
  return t = Ir(t), new t(function(o, i) {
@@ -5519,18 +5535,18 @@ function Ir(e) {
5519
5535
  var t;
5520
5536
  return (t = e ?? Zn.Promise) !== null && t !== void 0 ? t : Promise;
5521
5537
  }
5522
- function Ol(e) {
5523
- return e && D(e.next) && D(e.error) && D(e.complete);
5538
+ function xl(e) {
5539
+ return e && F(e.next) && F(e.error) && F(e.complete);
5524
5540
  }
5525
5541
  function jl(e) {
5526
- return e && e instanceof Wt || Ol(e) && Qn(e);
5527
- }
5528
- function Ll(e) {
5529
- return D(e == null ? void 0 : e.lift);
5542
+ return e && e instanceof Wt || xl(e) && Qn(e);
5530
5543
  }
5531
5544
  function Ml(e) {
5545
+ return F(e == null ? void 0 : e.lift);
5546
+ }
5547
+ function Ll(e) {
5532
5548
  return function(t) {
5533
- if (Ll(t))
5549
+ if (Ml(t))
5534
5550
  return t.lift(function(r) {
5535
5551
  try {
5536
5552
  return e(r, this);
@@ -5602,7 +5618,7 @@ var Dl = function(e) {
5602
5618
  if (o._throwIfClosed(), !o.isStopped) {
5603
5619
  o.currentObservers || (o.currentObservers = Array.from(o.observers));
5604
5620
  try {
5605
- for (var s = Oe(o.currentObservers), c = s.next(); !c.done; c = s.next()) {
5621
+ for (var s = xe(o.currentObservers), c = s.next(); !c.done; c = s.next()) {
5606
5622
  var l = c.value;
5607
5623
  l.next(r);
5608
5624
  }
@@ -5746,7 +5762,7 @@ var Dl = function(e) {
5746
5762
  this.work = this.state = this.scheduler = null, this.pending = !1, pt(a, this), o != null && (this.id = this.recycleAsyncId(i, o, null)), this.delay = null, e.prototype.unsubscribe.call(this);
5747
5763
  }
5748
5764
  }, t;
5749
- }(ql), xr = function() {
5765
+ }(ql), Or = function() {
5750
5766
  function e(t, r) {
5751
5767
  r === void 0 && (r = e.now), this.schedulerActionCtor = t, this.now = r;
5752
5768
  }
@@ -5756,7 +5772,7 @@ var Dl = function(e) {
5756
5772
  }(), Vl = function(e) {
5757
5773
  _e(t, e);
5758
5774
  function t(r, o) {
5759
- o === void 0 && (o = xr.now);
5775
+ o === void 0 && (o = Or.now);
5760
5776
  var i = e.call(this, r, o) || this;
5761
5777
  return i.actions = [], i._active = !1, i;
5762
5778
  }
@@ -5778,17 +5794,17 @@ var Dl = function(e) {
5778
5794
  throw i;
5779
5795
  }
5780
5796
  }, t;
5781
- }(xr), Gl = new Vl(zl), $l = function(e) {
5797
+ }(Or), Gl = new Vl(zl), $l = function(e) {
5782
5798
  return e && typeof e.length == "number" && typeof e != "function";
5783
5799
  };
5784
5800
  function Bl(e) {
5785
- return D(e == null ? void 0 : e.then);
5801
+ return F(e == null ? void 0 : e.then);
5786
5802
  }
5787
5803
  function Yl(e) {
5788
- return D(e[Xt]);
5804
+ return F(e[Xt]);
5789
5805
  }
5790
5806
  function Hl(e) {
5791
- return Symbol.asyncIterator && D(e == null ? void 0 : e[Symbol.asyncIterator]);
5807
+ return Symbol.asyncIterator && F(e == null ? void 0 : e[Symbol.asyncIterator]);
5792
5808
  }
5793
5809
  function Kl(e) {
5794
5810
  return new TypeError("You provided " + (e !== null && typeof e == "object" ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
@@ -5798,7 +5814,7 @@ function Ql() {
5798
5814
  }
5799
5815
  var Zl = Ql();
5800
5816
  function Jl(e) {
5801
- return D(e == null ? void 0 : e[Zl]);
5817
+ return F(e == null ? void 0 : e[Zl]);
5802
5818
  }
5803
5819
  function Wl(e) {
5804
5820
  return Cl(this, arguments, function() {
@@ -5832,7 +5848,7 @@ function Wl(e) {
5832
5848
  });
5833
5849
  }
5834
5850
  function Xl(e) {
5835
- return D(e == null ? void 0 : e.getReader);
5851
+ return F(e == null ? void 0 : e.getReader);
5836
5852
  }
5837
5853
  function eu(e) {
5838
5854
  if (e instanceof ue)
@@ -5856,7 +5872,7 @@ function eu(e) {
5856
5872
  function tu(e) {
5857
5873
  return new ue(function(t) {
5858
5874
  var r = e[Xt]();
5859
- if (D(r.subscribe))
5875
+ if (F(r.subscribe))
5860
5876
  return r.subscribe(t);
5861
5877
  throw new TypeError("Provided object does not correctly implement Symbol.observable");
5862
5878
  });
@@ -5881,7 +5897,7 @@ function ou(e) {
5881
5897
  return new ue(function(t) {
5882
5898
  var r, o;
5883
5899
  try {
5884
- for (var i = Oe(e), a = i.next(); !a.done; a = i.next()) {
5900
+ for (var i = xe(e), a = i.next(); !a.done; a = i.next()) {
5885
5901
  var s = a.value;
5886
5902
  if (t.next(s), t.closed)
5887
5903
  return;
@@ -5955,7 +5971,7 @@ function su(e, t, r, o, i) {
5955
5971
  return a;
5956
5972
  }
5957
5973
  function cu(e, t) {
5958
- var r = D(e) ? e : function() {
5974
+ var r = F(e) ? e : function() {
5959
5975
  return e;
5960
5976
  }, o = function(i) {
5961
5977
  return i.error(r());
@@ -5993,7 +6009,7 @@ function mu(e, t) {
5993
6009
  var r = du(e) ? { first: e } : typeof e == "number" ? { each: e } : e, o = r.first, i = r.each, a = r.with, s = a === void 0 ? hu : a, c = r.scheduler, l = c === void 0 ? Gl : c, u = r.meta, d = u === void 0 ? null : u;
5994
6010
  if (o == null && i == null)
5995
6011
  throw new TypeError("No timeout provided.");
5996
- return Ml(function(y, f) {
6012
+ return Ll(function(y, f) {
5997
6013
  var p, m, _ = null, E = 0, w = function(C) {
5998
6014
  m = su(f, l, function() {
5999
6015
  try {
@@ -6072,7 +6088,7 @@ function gu(e) {
6072
6088
  const ce = () => {
6073
6089
  if (!(typeof window > "u"))
6074
6090
  return window;
6075
- }, vu = new fu(), Or = "op_metrics_queue", bu = 3, wu = 3, Eu = 1e3, { log__: et } = Yn("op-metrics");
6091
+ }, vu = new fu(), xr = "op_metrics_queue", bu = 3, wu = 3, Eu = 1e3, { log__: et } = Yn("op-metrics");
6076
6092
  class Pu {
6077
6093
  constructor() {
6078
6094
  var t, r;
@@ -6098,7 +6114,7 @@ class Pu {
6098
6114
  loadQueueFromStorage() {
6099
6115
  var t, r;
6100
6116
  try {
6101
- const o = (r = (t = ce()) == null ? void 0 : t.localStorage) == null ? void 0 : r.getItem(Or);
6117
+ const o = (r = (t = ce()) == null ? void 0 : t.localStorage) == null ? void 0 : r.getItem(xr);
6102
6118
  o && (this.queue = JSON.parse(o));
6103
6119
  } catch {
6104
6120
  this.queue = [], this.saveQueueToStorage();
@@ -6106,7 +6122,7 @@ class Pu {
6106
6122
  }
6107
6123
  saveQueueToStorage() {
6108
6124
  var t;
6109
- (t = ce()) == null || t.localStorage.setItem(Or, JSON.stringify(this.queue));
6125
+ (t = ce()) == null || t.localStorage.setItem(xr, JSON.stringify(this.queue));
6110
6126
  }
6111
6127
  scheduleBatchProcessing() {
6112
6128
  const t = ce();
@@ -6304,9 +6320,9 @@ const Iu = {
6304
6320
  widget: null
6305
6321
  };
6306
6322
  n.object({
6307
- loopFirstName: O,
6308
- loopLastName: O,
6309
- loopEmail: O,
6323
+ loopFirstName: x,
6324
+ loopLastName: x,
6325
+ loopEmail: x,
6310
6326
  [wt.PROMOTION_CODE]: k
6311
6327
  });
6312
6328
  n.object({
@@ -6344,7 +6360,7 @@ n.object({
6344
6360
  stripe_pk: n.string()
6345
6361
  })
6346
6362
  });
6347
- const Lr = {
6363
+ const Mr = {
6348
6364
  isLoading: !0,
6349
6365
  isAvailable: !1,
6350
6366
  startFlow: async () => {
@@ -6354,7 +6370,7 @@ const Lr = {
6354
6370
  and ".isAvailable" to know if a payment request is available.`
6355
6371
  );
6356
6372
  }
6357
- }, { err__: Tu } = Yn("form-callbacks"), H = n.function().optional(), Mr = n.object({
6373
+ }, { err__: Tu } = Yn("form-callbacks"), H = n.function().optional(), Lr = n.object({
6358
6374
  onFocus: H,
6359
6375
  onBlur: H,
6360
6376
  onChange: H,
@@ -6370,7 +6386,7 @@ const Lr = {
6370
6386
  constructor() {
6371
6387
  this.setCallbacks = (t) => {
6372
6388
  this._callbacks = ie.createEmptyCallbacks(), Object.entries(t).forEach(([r, o]) => {
6373
- const i = xc(r, o ?? ie.NOOP, Tu);
6389
+ const i = Oc(r, o ?? ie.NOOP, Tu);
6374
6390
  this._callbacks[r] = i;
6375
6391
  });
6376
6392
  }, this._callbacks = ie.createEmptyCallbacks();
@@ -6385,12 +6401,12 @@ const Lr = {
6385
6401
  ie.NOOP = () => {
6386
6402
  }, ie.createEmptyCallbacks = () => {
6387
6403
  const t = {};
6388
- return Object.keys(Mr.keyof().enum).forEach((r) => {
6404
+ return Object.keys(Lr.keyof().enum).forEach((r) => {
6389
6405
  t[r] = ie.NOOP;
6390
6406
  }), t;
6391
6407
  }, ie.fromObject = (t) => {
6392
6408
  const r = new ie();
6393
- return r.setCallbacks(Mr.parse(t)), r;
6409
+ return r.setCallbacks(Lr.parse(t)), r;
6394
6410
  };
6395
6411
  let $t = ie;
6396
6412
  const Ru = (e) => {
@@ -6409,10 +6425,10 @@ const Ru = (e) => {
6409
6425
  onPaymentRequestLoad: e.onPaymentRequestLoad
6410
6426
  });
6411
6427
  return lt.getInstance() && ((r = lt.getInstance()) == null || r.updateCallbacks(t.get)), t.get;
6412
- }, xu = (e) => {
6428
+ }, Ou = (e) => {
6413
6429
  const [t, r] = me({
6414
- apple_pay: Lr,
6415
- google_pay: Lr
6430
+ apple_pay: Mr,
6431
+ google_pay: Mr
6416
6432
  }), o = oo(
6417
6433
  (i) => {
6418
6434
  r(i), e == null || e(i);
@@ -6421,7 +6437,7 @@ const Ru = (e) => {
6421
6437
  );
6422
6438
  return { paymentRequests: t, overridenOnPaymentRequestLoad: o };
6423
6439
  }, Nr = "op_ojs_form", qu = (e) => {
6424
- const [t, r] = me(), [o, i] = me(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = xu(e.onPaymentRequestLoad), [c, l] = me(!1), [u, d] = me(null), [y, f] = me(Iu), [p, m] = me({
6440
+ const [t, r] = me(), [o, i] = me(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = Ou(e.onPaymentRequestLoad), [c, l] = me(!1), [u, d] = me(null), [y, f] = me(Iu), [p, m] = me({
6425
6441
  googlePay: jr,
6426
6442
  applePay: jr
6427
6443
  }), _ = Ru({
@@ -6442,7 +6458,7 @@ const Ru = (e) => {
6442
6458
  ..._
6443
6459
  });
6444
6460
  r(w);
6445
- const C = Ou(w);
6461
+ const C = xu(w);
6446
6462
  return i(C), w.initFlows.stripeLink.publisher.subscribe((P) => {
6447
6463
  P.isSuccess && P.loadedValue.isAvailable && d(P.loadedValue.controller);
6448
6464
  }), w.initFlows.loop.publisher.subscribe((P) => {
@@ -6489,7 +6505,7 @@ const Ru = (e) => {
6489
6505
  loop: y
6490
6506
  };
6491
6507
  return /* @__PURE__ */ Q(Tt, { children: o ? /* @__PURE__ */ Q(Fr.Provider, { value: o, children: /* @__PURE__ */ Q("div", { id: Nr, className: e.className, children: e.children(E) }) }) : /* @__PURE__ */ Q(Tt, {}) });
6492
- }, Ou = (e) => ({
6508
+ }, xu = (e) => ({
6493
6509
  formId: e.formId,
6494
6510
  formHeight: e.formProperties.height,
6495
6511
  referrer: e.referrer,
@@ -6533,4 +6549,4 @@ export {
6533
6549
  Au as PayInState,
6534
6550
  ao as useOpenPayElements
6535
6551
  };
6536
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBNZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCB4dCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgR24gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBWbiA9IHokMS5hcnJheShHbiksIHpuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHFuID0geiQxLmFycmF5KHpuKSwgWW4gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIHR0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBZbltuXSA/PyBlO1xufSwgQm4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEhuID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gdHQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKCh0KSA9PiBg4oCiICR7dHQodC5tc2cpfWApLmpvaW4oYFxuYCl9YCwgSm4gPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgodCkgPT4gYC0gJHt0LnBhdGguam9pbihcIi9cIil9OiAke3QubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEcgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChCbihlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFZuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gSG4obikgOiBxbi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IEpuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIHR0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIEtuID0gKGUsIG4sIHQpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICB0KGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgcyk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyICQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlKSkoJCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSgkKTsgY29uc3QgSSA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgQyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgVSA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5BRERSRVNTID0gXCJhZGRyZXNzXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgJHQgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBHdCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoR3QgfHwge30pO1xuY29uc3QgVnQgPSB6JDEubmF0aXZlRW51bShHdCksIHp0ID0geiQxLnVuaW9uKFskdCwgVnRdKTtcbnZhciBaID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRCA9IFwiY2FyZFwiLCBlLkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCBlLkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgZSkpKFogfHwge30pO1xuY29uc3QgWm4gPSB6JDEubmF0aXZlRW51bShaKSwgVmUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFUoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgV24gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogQyxcbiAgZXhwaXJ5OiBDLFxuICBjdmM6IENcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogQyxcbiAgY29sb3I6IEMsXG4gIGZvbnRGYW1pbHk6IEMsXG4gIGZvbnRTaXplOiBDLFxuICBmb250V2VpZ2h0OiBDLFxuICBtYXJnaW46IEMsXG4gIHBhZGRpbmc6IEMsXG4gIGxldHRlclNwYWNpbmc6IEMsXG4gIGxpbmVIZWlnaHQ6IEMsXG4gIGhpZGVJY29uOiBDXG59KTtcbmNvbnN0IEIgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgUW4gPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBYbiA9IHokMS5vYmplY3QoeyB0eXBlOiBRbiB9KSwgZXIgPSBCLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgdHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogZXIsXG4gIGVsZW1lbnRUeXBlOiBWdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgbnIgPSBCLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCByciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBucixcbiAgbWVzc2FnZTogSSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIG9yID0gQi5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBzciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBvcixcbiAgZWxlbWVudFR5cGU6IHp0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgaXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogSVxufSksIGFyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEIuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEksXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShWZSlcbn0pLCBjciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIEllID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogSSxcbiAgbGFzdE5hbWU6IEksXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiBDXG59KSwgdXIgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBDLFxuICBsYXN0TmFtZTogQyxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IEMsXG4gIGFkZHJlc3M6IEMsXG4gIGNpdHk6IEMsXG4gIHN0YXRlOiBDXG59KSwgZHIgPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIHByID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGRyLFxuICBzZXNzaW9uSWQ6IEksXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVmUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogQ1xufSkuZXh0ZW5kKEllLnNoYXBlKSwgbXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCB5ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgZnIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFhuLFxuICB0cixcbiAgcnIsXG4gIHNyLFxuICBpcixcbiAgYXIsXG4gIHByLFxuICBtcixcbiAgeXIsXG4gIGNyLFxuICBsclxuXSksIF9yID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IGZyLFxuICBub25jZTogSSxcbiAgZm9ybUlkOiBJLFxuICBlbGVtZW50SWQ6IElcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogSVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IGl0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IFUoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgaHIgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGdyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShocilcbn0pLCB3ciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgZ3Jcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBJZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBJZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShUIHx8IHt9KTtcbmNvbnN0IGJyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgdnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBxdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogVSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBFciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgQ3IgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoV24pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogVShpdCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogVSh6JDEuYXJyYXkocXQpKVxufSksIFl0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSAkdC5wYXJzZSh0KTtcbiAgICAgIEFycmF5LmlzQXJyYXkocikgPyBuW3NdID0gciA6IEFycmF5LmlzQXJyYXkoci5fZXJyb3JzKSAmJiAobltzXSA9IHIuX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgbjtcbn0sIFNyID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgUHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwga3IgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCB6ZSA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHQgPSAwOyB0IDwgMTA7IHQrKylcbiAgICBtdCgpIHx8IGF3YWl0IGF0KDUwMCk7XG4gIGlmICghbXQoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBBciA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCB6ZShlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogdC5lbGVtZW50cyhuKSxcbiAgICBzdHJpcGU6IHRcbiAgfTtcbn0sIElyID0gYXN5bmMgKGUsIG4sIHQsIHIsIHMpID0+IHtcbiAgY29uc3QgaSA9IGF3YWl0IHplKGUpLCBhID0ga3JbdC50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBpLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogYSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogbixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgYXQgPSAoZSkgPT4gbmV3IFByb21pc2UoKG4pID0+IHtcbiAgc2V0VGltZW91dChuLCBlKTtcbn0pLCBtdCA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBSciA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgobiwgdCkgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIHIpLCBuKHIpO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIHIpO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHQobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHQocik7XG4gIH1cbn0pLCBUciA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IHplKGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbi5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoci5lcnJvcilcbiAgICB0aHJvdyBuLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtyLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiBuLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgcjtcbn0sIEZyID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIHMsIGksIGEsIGM7XG4gIGNvbnN0IHQgPSBhd2FpdCAoYXdhaXQgemUoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgciA9IChzID0gdC5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuc3RhdHVzO1xuICBpZiAociA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgdC5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgciA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygoaSA9IHQuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gdC5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgTXIgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIFEgPSAoZSwgbikgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChzLCBpKSA9PiB7XG4gIGNvbnN0IGEgPSBpLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLnMsIFthXTogaS52YWx1ZSB9IDogcztcbn0sIHt9KSwgRHIgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBfci5wYXJzZShlKTtcbiAgfSBjYXRjaCAobikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIG4pLCBuO1xuICB9XG59LCBOciA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IHsgdHlwZTogXCJwaW5nXCIgfSwgdCA9IGF3YWl0IGUuc2VuZChuKTtcbiAgICBpZiAodCAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIG4pLCAhMTtcbiAgfVxufSwgTHIgPSAoZSwgbikgPT4gISFlICYmIG4sIHcgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBPciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBCdCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogdyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogdyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoeiQxLm51bWJlcigpKVxufSksIEh0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB3KHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogdyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgVXIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwganIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogdyhVcilcbn0pLCBoZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB4ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgJHIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHhyKSxcbiAgdHJpYWxfc3RhcnQ6IHcoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiB3KHokMS5zdHJpbmcoKSlcbn0pLCBKdCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShKdCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBWciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IEJ0XG59KSwgenIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoVnIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShHciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSnQpXG59KSwgeXQgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KCRyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheSh6ciksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBLdCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiB5dCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KHl0KSxcbiAgY291cG9uczogeiQxLmFycmF5KEJ0KVxufSksIGZ0ID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEh0KSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IGpyLFxuICBzdWJzX3ByZXZpZXc6IHcoS3QpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShoZSlcbn0pLCBadCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKGZ0LnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoZnQuc2hhcGUpXG5dKSwgcXIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtadCwgcXIsIFlyXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoSHQpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogaGUsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgV3QgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEJyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShCcik7XG5jb25zdCBIciA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIEpyID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBLciA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoSnIpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgWnIgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogaGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBLci5vcHRpb25hbCgpXG59KS5leHRlbmQoSHIuc2hhcGUpLmV4dGVuZChaci5zaGFwZSk7XG5jb25zdCBRdCA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHcoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiB1cixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBoZVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBJZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGhlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IFdyID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IHcoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IHcoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IHcoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogdyh6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogdyh6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiB3KHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiB3KHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IHcoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IHcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogaGUsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgWHIgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgZW8gPSB6JDEub2JqZWN0KHt9KSwgdG8gPSAoZSkgPT4gZS5yZWR1Y2UoKG4sIHQpID0+IG4gKyB0LCAwKTtcbmZ1bmN0aW9uIG5vKGUsIG4pIHtcbiAgdmFyIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHQgPyB0KGUsIG4pIDogZS5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gcm8oZSwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHQgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgdCAmJiB0KGUsIG4pO1xufVxudmFyIG9vID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHMsIGkpIHtcbiAgICAgIHMuX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKHMsIGkpIHtcbiAgICAgIGZvciAodmFyIGEgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIGEpICYmIChzW2FdID0gaVthXSk7XG4gICAgfSwgZSh0LCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKG4sIHQpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgc28gPSBmdW5jdGlvbihlKSB7XG4gIG9vKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgcyA9IHRoaXMuY29uc3RydWN0b3IsIGkgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogcy5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIG5vKGksIHMucHJvdG90eXBlKSwgcm8oaSksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNvbnN0IHJlID0gKGUpID0+IGFzeW5jIChuKSA9PiB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIChyID0gKHQgPSBuLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCByLmNhbGwodCksIGcoXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgIGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBzID0gYXdhaXQgZShuKTtcbiAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgY3BtOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLnNcbiAgICB9KSwgcy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhzLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAocy5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBzLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIHMucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIHMucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICBzLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtzfWApO1xuICB9IGNhdGNoIChzKSB7XG4gICAgY29uc3QgaSA9IEcocyksIGEgPSBhd2FpdCBmbihuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgaSk7XG4gICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoaSwgYSksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogaSwgZXJyb3JDb2RlOiBhIH0pO1xuICB9XG59LCBkZSA9IChlKSA9PiBhc3luYyAobikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKG4pO1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgeyBlcnJfXzogciB9ID0gUChcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgcyA9IEcodCksIGkgPSBhd2FpdCBmbihuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgcyk7XG4gICAgcmV0dXJuIHIoaSwgcywgdCksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogaSB9KSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogcywgZXJyb3JDb2RlOiBpLCBpc0xvYWRpbmc6ICExIH07XG4gIH1cbn0sIFAgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gKC4uLnIpID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7TWUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtNZS5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLnIpO1xuICB9LCB0ID0gKC4uLnIpID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS53YXJuKGAke01lLnJlZC5ib2xkKFwib2pzL1wiKX0ke01lLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ucik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiBuLFxuICAgIGVycjogdCxcbiAgICBsb2dfXzogbixcbiAgICBlcnJfXzogdFxuICB9O1xufTtcbnZhciBudCA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgcmV0dXJuIG50ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24odCwgcikge1xuICAgIHQuX19wcm90b19fID0gcjtcbiAgfSB8fCBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgcyBpbiByKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgcykgJiYgKHRbc10gPSByW3NdKTtcbiAgfSwgbnQoZSwgbik7XG59O1xuZnVuY3Rpb24gb2UoZSwgbikge1xuICBpZiAodHlwZW9mIG4gIT0gXCJmdW5jdGlvblwiICYmIG4gIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcobikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBudChlLCBuKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZTtcbiAgfVxuICBlLnByb3RvdHlwZSA9IG4gPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKG4pIDogKHQucHJvdG90eXBlID0gbi5wcm90b3R5cGUsIG5ldyB0KCkpO1xufVxuZnVuY3Rpb24gaW8oZSwgbiwgdCwgcikge1xuICBmdW5jdGlvbiBzKGkpIHtcbiAgICByZXR1cm4gaSBpbnN0YW5jZW9mIHQgPyBpIDogbmV3IHQoZnVuY3Rpb24oYSkge1xuICAgICAgYShpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3ICh0IHx8ICh0ID0gUHJvbWlzZSkpKGZ1bmN0aW9uKGksIGEpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUoci5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYShfKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIudGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBhKF8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IGkoZC52YWx1ZSkgOiBzKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKHIgPSByLmFwcGx5KGUsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBYdChlLCBuKSB7XG4gIHZhciB0ID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGlbMF0gJiAxKSB0aHJvdyBpWzFdO1xuICAgIHJldHVybiBpWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCByLCBzLCBpLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAocikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCB1WzBdICYmICh0ID0gMCkpLCB0OyApIHRyeSB7XG4gICAgICBpZiAociA9IDEsIHMgJiYgKGkgPSB1WzBdICYgMiA/IHMucmV0dXJuIDogdVswXSA/IHMudGhyb3cgfHwgKChpID0gcy5yZXR1cm4pICYmIGkuY2FsbChzKSwgMCkgOiBzLm5leHQpICYmICEoaSA9IGkuY2FsbChzLCB1WzFdKSkuZG9uZSkgcmV0dXJuIGk7XG4gICAgICBzd2l0Y2ggKHMgPSAwLCBpICYmICh1ID0gW3VbMF0gJiAyLCBpLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaSA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gdC5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdC5sYWJlbCsrLCBzID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSB0Lm9wcy5wb3AoKSwgdC50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpID0gdC50cnlzLCAhKGkgPSBpLmxlbmd0aCA+IDAgJiYgaVtpLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgdCA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFpIHx8IHVbMV0gPiBpWzBdICYmIHVbMV0gPCBpWzNdKSkge1xuICAgICAgICAgICAgdC5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgdC5sYWJlbCA8IGlbMV0pIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSBpWzFdLCBpID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSAmJiB0LmxhYmVsIDwgaVsyXSkge1xuICAgICAgICAgICAgdC5sYWJlbCA9IGlbMl0sIHQub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaVsyXSAmJiB0Lm9wcy5wb3AoKSwgdC50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IG4uY2FsbChlLCB0KTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBzID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgciA9IGkgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBmZShlKSB7XG4gIHZhciBuID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCB0ID0gbiAmJiBlW25dLCByID0gMDtcbiAgaWYgKHQpIHJldHVybiB0LmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgciA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtyKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihuID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gamUoZSwgbikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCF0KSByZXR1cm4gZTtcbiAgdmFyIHIgPSB0LmNhbGwoZSksIHMsIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHMgPSByLm5leHQoKSkuZG9uZTsgKSBpLnB1c2gocy52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBzICYmICFzLmRvbmUgJiYgKHQgPSByLnJldHVybikgJiYgdC5jYWxsKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiB4ZShlLCBuLCB0KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciByID0gMCwgcyA9IG4ubGVuZ3RoLCBpOyByIDwgczsgcisrKVxuICAgIChpIHx8ICEociBpbiBuKSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLCAwLCByKSksIGlbcl0gPSBuW3JdKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobikpO1xufVxuZnVuY3Rpb24geWUoZSkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHllID8gKHRoaXMudiA9IGUsIHRoaXMpIDogbmV3IHllKGUpO1xufVxuZnVuY3Rpb24gYW8oZSwgbiwgdCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHQuYXBwbHkoZSwgbiB8fCBbXSksIHMsIGkgPSBbXTtcbiAgcmV0dXJuIHMgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGEpLCBzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBzO1xuICBmdW5jdGlvbiBhKHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmKS50aGVuKHksIF8pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyh5LCBmKSB7XG4gICAgclt5XSAmJiAoc1t5XSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBiKSB7XG4gICAgICAgIGkucHVzaChbeSwgaCwgdiwgYl0pID4gMSB8fCBsKHksIGgpO1xuICAgICAgfSk7XG4gICAgfSwgZiAmJiAoc1t5XSA9IGYoc1t5XSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKHksIGYpIHtcbiAgICB0cnkge1xuICAgICAgdShyW3ldKGYpKTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBtKGlbMF1bM10sIGgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KHkpIHtcbiAgICB5LnZhbHVlIGluc3RhbmNlb2YgeWUgPyBQcm9taXNlLnJlc29sdmUoeS52YWx1ZS52KS50aGVuKGQsIF8pIDogbShpWzBdWzJdLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBkKHkpIHtcbiAgICBsKFwibmV4dFwiLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBfKHkpIHtcbiAgICBsKFwidGhyb3dcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gbSh5LCBmKSB7XG4gICAgeShmKSwgaS5zaGlmdCgpLCBpLmxlbmd0aCAmJiBsKGlbMF1bMF0sIGlbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBjbyhlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIHQ7XG4gIHJldHVybiBuID8gbi5jYWxsKGUpIDogKGUgPSB0eXBlb2YgZmUgPT0gXCJmdW5jdGlvblwiID8gZmUoZSkgOiBlW1N5bWJvbC5pdGVyYXRvcl0oKSwgdCA9IHt9LCByKFwibmV4dFwiKSwgcihcInRocm93XCIpLCByKFwicmV0dXJuXCIpLCB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0KTtcbiAgZnVuY3Rpb24gcihpKSB7XG4gICAgdFtpXSA9IGVbaV0gJiYgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgYSA9IGVbaV0oYSksIHMoYywgbCwgYS5kb25lLCBhLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gcyhpLCBhLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgaSh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIGEpO1xuICB9XG59XG5mdW5jdGlvbiBNKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIHFlKGUpIHtcbiAgdmFyIG4gPSBmdW5jdGlvbihyKSB7XG4gICAgRXJyb3IuY2FsbChyKSwgci5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCB0ID0gZShuKTtcbiAgcmV0dXJuIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHQ7XG59XG52YXIgV2UgPSBxZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gdCA/IHQubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIHQubWFwKGZ1bmN0aW9uKHIsIHMpIHtcbiAgICAgIHJldHVybiBzICsgMSArIFwiKSBcIiArIHIudG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSB0O1xuICB9O1xufSk7XG5mdW5jdGlvbiAkZShlLCBuKSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIHQgPSBlLmluZGV4T2Yobik7XG4gICAgMCA8PSB0ICYmIGUuc3BsaWNlKHQsIDEpO1xuICB9XG59XG52YXIgUmUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBuLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiwgdCwgciwgcywgaTtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBmZShhKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKHQgPSBjLnJldHVybikgJiYgdC5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKE0oZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgaSA9IGggaW5zdGFuY2VvZiBXZSA/IGguZXJyb3JzIDogW2hdO1xuICAgICAgICB9XG4gICAgICB2YXIgXyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoXykge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBtID0gZmUoXyksIHkgPSBtLm5leHQoKTsgIXkuZG9uZTsgeSA9IG0ubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgZiA9IHkudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBfdChmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgaSA9IGkgPz8gW10sIGggaW5zdGFuY2VvZiBXZSA/IGkgPSB4ZSh4ZShbXSwgamUoaSkpLCBqZShoLmVycm9ycykpIDogaS5wdXNoKGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIHIgPSB7IGVycm9yOiBoIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHkgJiYgIXkuZG9uZSAmJiAocyA9IG0ucmV0dXJuKSAmJiBzLmNhbGwobSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkpXG4gICAgICAgIHRocm93IG5ldyBXZShpKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdDtcbiAgICBpZiAobiAmJiBuICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBfdChuKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobiBpbnN0YW5jZW9mIGUpIHtcbiAgICAgICAgICBpZiAobi5jbG9zZWQgfHwgbi5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIG4uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9ICh0ID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IFtdKS5wdXNoKG4pO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiB0ID09PSBuIHx8IEFycmF5LmlzQXJyYXkodCkgJiYgdC5pbmNsdWRlcyhuKTtcbiAgfSwgZS5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KHQpID8gKHQucHVzaChuKSwgdCkgOiB0ID8gW3QsIG5dIDogbjtcbiAgfSwgZS5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0ID09PSBuID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkodCkgJiYgJGUodCwgbik7XG4gIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgdCAmJiAkZSh0LCBuKSwgbiBpbnN0YW5jZW9mIGUgJiYgbi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCBlLkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSBuZXcgZSgpO1xuICAgIHJldHVybiBuLmNsb3NlZCA9ICEwLCBuO1xuICB9KCksIGU7XG59KCksIGVuID0gUmUuRU1QVFk7XG5mdW5jdGlvbiB0bihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgUmUgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgTShlLnJlbW92ZSkgJiYgTShlLmFkZCkgJiYgTShlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIF90KGUpIHtcbiAgTShlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBubiA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBybiA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDI7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3IgLSAyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIHhlKFtlLCBuXSwgamUodCkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gb24oZSkge1xuICBybi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gaHQoKSB7XG59XG5mdW5jdGlvbiBMZShlKSB7XG4gIGUoKTtcbn1cbnZhciBjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgb2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuaXNTdG9wcGVkID0gITEsIHQgPyAoci5kZXN0aW5hdGlvbiA9IHQsIHRuKHQpICYmIHQuYWRkKHIpKSA6IHIuZGVzdGluYXRpb24gPSBtbywgcjtcbiAgfVxuICByZXR1cm4gbi5jcmVhdGUgPSBmdW5jdGlvbih0LCByLCBzKSB7XG4gICAgcmV0dXJuIG5ldyBydCh0LCByLCBzKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KHQpO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IodCkpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCBuLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodCk7XG4gIH0sIG4ucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgbi5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgbjtcbn0oUmUpLCBsbyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gUWUoZSwgbikge1xuICByZXR1cm4gbG8uY2FsbChlLCBuKTtcbn1cbnZhciB1byA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4pIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IG47XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAodC5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5uZXh0KG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBEZShyKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAodC5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIHQuZXJyb3Iobik7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIERlKHIpO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIERlKG4pO1xuICB9LCBlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKG4uY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICBuLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgIERlKHQpO1xuICAgICAgfVxuICB9LCBlO1xufSgpLCBydCA9IGZ1bmN0aW9uKGUpIHtcbiAgb2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgciwgcykge1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIGE7XG4gICAgaWYgKE0odCkgfHwgIXQpXG4gICAgICBhID0ge1xuICAgICAgICBuZXh0OiB0ID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IHIgPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogcyA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIGkgJiYgbm4udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKHQpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBuZXh0OiB0Lm5leHQgJiYgUWUodC5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IHQuZXJyb3IgJiYgUWUodC5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiB0LmNvbXBsZXRlICYmIFFlKHQuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGEgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IG5ldyB1byhhKSwgaTtcbiAgfVxuICByZXR1cm4gbjtcbn0oY3QpO1xuZnVuY3Rpb24gRGUoZSkge1xuICBvbihlKTtcbn1cbmZ1bmN0aW9uIHBvKGUpIHtcbiAgdGhyb3cgZTtcbn1cbnZhciBtbyA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogaHQsXG4gIGVycm9yOiBwbyxcbiAgY29tcGxldGU6IGh0XG59LCBsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIHlvKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBmbyhlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IHlvIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihyLCBzKSB7XG4gICAgICByZXR1cm4gcyhyKTtcbiAgICB9LCB0KTtcbiAgfTtcbn1cbnZhciBuZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4pIHtcbiAgICBuICYmICh0aGlzLl9zdWJzY3JpYmUgPSBuKTtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHQuc291cmNlID0gdGhpcywgdC5vcGVyYXRvciA9IG4sIHQ7XG4gIH0sIGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKG4sIHQsIHIpIHtcbiAgICB2YXIgcyA9IHRoaXMsIGkgPSBobyhuKSA/IG4gOiBuZXcgcnQobiwgdCwgcik7XG4gICAgcmV0dXJuIExlKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEgPSBzLCBjID0gYS5vcGVyYXRvciwgbCA9IGEuc291cmNlO1xuICAgICAgaS5hZGQoYyA/IGMuY2FsbChpLCBsKSA6IGwgPyBzLl9zdWJzY3JpYmUoaSkgOiBzLl90cnlTdWJzY3JpYmUoaSkpO1xuICAgIH0pLCBpO1xuICB9LCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKG4pO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIG4uZXJyb3IodCk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obiwgdCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gdCA9IGd0KHQpLCBuZXcgdChmdW5jdGlvbihzLCBpKSB7XG4gICAgICB2YXIgYSA9IG5ldyBydCh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbihjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBpKGwpLCBhLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogaSxcbiAgICAgICAgY29tcGxldGU6IHNcbiAgICAgIH0pO1xuICAgICAgci5zdWJzY3JpYmUoYSk7XG4gICAgfSk7XG4gIH0sIGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQ7XG4gICAgcmV0dXJuICh0ID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3Vic2NyaWJlKG4pO1xuICB9LCBlLnByb3RvdHlwZVtsdF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgdCA9IDA7IHQgPCBhcmd1bWVudHMubGVuZ3RoOyB0KyspXG4gICAgICBuW3RdID0gYXJndW1lbnRzW3RdO1xuICAgIHJldHVybiBmbyhuKSh0aGlzKTtcbiAgfSwgZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcztcbiAgICByZXR1cm4gbiA9IGd0KG4pLCBuZXcgbihmdW5jdGlvbihyLCBzKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHQuc3Vic2NyaWJlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkgPSBhO1xuICAgICAgfSwgZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcyhhKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcihpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBlLmNyZWF0ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gbmV3IGUobik7XG4gIH0sIGU7XG59KCk7XG5mdW5jdGlvbiBndChlKSB7XG4gIHZhciBuO1xuICByZXR1cm4gKG4gPSBlID8/IG5uLlByb21pc2UpICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gX28oZSkge1xuICByZXR1cm4gZSAmJiBNKGUubmV4dCkgJiYgTShlLmVycm9yKSAmJiBNKGUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaG8oZSkge1xuICByZXR1cm4gZSAmJiBlIGluc3RhbmNlb2YgY3QgfHwgX28oZSkgJiYgdG4oZSk7XG59XG5mdW5jdGlvbiBnbyhlKSB7XG4gIHJldHVybiBNKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGlmdCk7XG59XG5mdW5jdGlvbiB3byhlKSB7XG4gIHJldHVybiBmdW5jdGlvbihuKSB7XG4gICAgaWYgKGdvKG4pKVxuICAgICAgcmV0dXJuIG4ubGlmdChmdW5jdGlvbih0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUodCwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKHIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBibyhlLCBuLCB0LCByLCBzKSB7XG4gIHJldHVybiBuZXcgdm8oZSwgbiwgdCwgciwgcyk7XG59XG52YXIgdm8gPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIsIHMsIGksIGEsIGMpIHtcbiAgICB2YXIgbCA9IGUuY2FsbCh0aGlzLCB0KSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBhLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IHIgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICByKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICB0LmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBpID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgdC5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IHMgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgdC5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0O1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciByID0gdGhpcy5jbG9zZWQ7XG4gICAgICBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhciAmJiAoKHQgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCB8fCB0LmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgbjtcbn0oY3QpLCBFbyA9IHFlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgc24gPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKCkge1xuICAgIHZhciB0ID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHQuY2xvc2VkID0gITEsIHQuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHQub2JzZXJ2ZXJzID0gW10sIHQuaXNTdG9wcGVkID0gITEsIHQuaGFzRXJyb3IgPSAhMSwgdC50aHJvd25FcnJvciA9IG51bGwsIHQ7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgd3QodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBuLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBFbygpO1xuICB9LCBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBMZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzLCBpO1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuY3VycmVudE9ic2VydmVycyB8fCAoci5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShyLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBmZShyLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIHMgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAoaSA9IGEucmV0dXJuKSAmJiBpLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgTGUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5oYXNFcnJvciA9IHIuaXNTdG9wcGVkID0gITAsIHIudGhyb3duRXJyb3IgPSB0O1xuICAgICAgICBmb3IgKHZhciBzID0gci5vYnNlcnZlcnM7IHMubGVuZ3RoOyApXG4gICAgICAgICAgcy5zaGlmdCgpLmVycm9yKHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gdGhpcztcbiAgICBMZShmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0Ll90aHJvd0lmQ2xvc2VkKCksICF0LmlzU3RvcHBlZCkge1xuICAgICAgICB0LmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciByID0gdC5vYnNlcnZlcnM7IHIubGVuZ3RoOyApXG4gICAgICAgICAgci5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICgodCA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0Lmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgdCk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyh0KSwgdGhpcy5faW5uZXJTdWJzY3JpYmUodCk7XG4gIH0sIG4ucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMsIHMgPSB0aGlzLCBpID0gcy5oYXNFcnJvciwgYSA9IHMuaXNTdG9wcGVkLCBjID0gcy5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIGkgfHwgYSA/IGVuIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaCh0KSwgbmV3IFJlKGZ1bmN0aW9uKCkge1xuICAgICAgci5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgJGUoYywgdCk7XG4gICAgfSkpO1xuICB9LCBuLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMsIHMgPSByLmhhc0Vycm9yLCBpID0gci50aHJvd25FcnJvciwgYSA9IHIuaXNTdG9wcGVkO1xuICAgIHMgPyB0LmVycm9yKGkpIDogYSAmJiB0LmNvbXBsZXRlKCk7XG4gIH0sIG4ucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IG5lKCk7XG4gICAgcmV0dXJuIHQuc291cmNlID0gdGhpcywgdDtcbiAgfSwgbi5jcmVhdGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgcmV0dXJuIG5ldyB3dCh0LCByKTtcbiAgfSwgbjtcbn0obmUpLCB3dCA9IGZ1bmN0aW9uKGUpIHtcbiAgb2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHZhciBzID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSB0LCBzLnNvdXJjZSA9IHIsIHM7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIHM7XG4gICAgKHMgPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIubmV4dCkgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwIHx8IHMuY2FsbChyLCB0KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIHM7XG4gICAgKHMgPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuZXJyb3IpID09PSBudWxsIHx8IHMgPT09IHZvaWQgMCB8fCBzLmNhbGwociwgdCk7XG4gIH0sIG4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgKHIgPSAodCA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuY29tcGxldGUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwodCk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIHM7XG4gICAgcmV0dXJuIChzID0gKHIgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5zdWJzY3JpYmUodCkpICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiBlbjtcbiAgfSwgbjtcbn0oc24pLCBDbyA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgU28gPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBuO1xufShSZSksIGJ0ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDI7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3IgLSAyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCB4ZShbZSwgbl0sIGplKHQpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgUG8gPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgcyA9IGUuY2FsbCh0aGlzLCB0LCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBzLnNjaGVkdWxlciA9IHQsIHMud29yayA9IHIsIHMucGVuZGluZyA9ICExLCBzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgcztcbiAgICBpZiAociA9PT0gdm9pZCAwICYmIChyID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IHQ7XG4gICAgdmFyIGkgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIGkgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgaSwgcikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IHIsIHRoaXMuaWQgPSAocyA9IHRoaXMuaWQpICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIHIpLCB0aGlzO1xuICB9LCBuLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHQsIHIsIHMpIHtcbiAgICByZXR1cm4gcyA9PT0gdm9pZCAwICYmIChzID0gMCksIGJ0LnNldEludGVydmFsKHQuZmx1c2guYmluZCh0LCB0aGlzKSwgcyk7XG4gIH0sIG4ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24odCwgciwgcykge1xuICAgIGlmIChzID09PSB2b2lkIDAgJiYgKHMgPSAwKSwgcyAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IHMgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiByO1xuICAgIHIgIT0gbnVsbCAmJiBidC5jbGVhckludGVydmFsKHIpO1xuICB9LCBuLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBzID0gdGhpcy5fZXhlY3V0ZSh0LCByKTtcbiAgICBpZiAocylcbiAgICAgIHJldHVybiBzO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCBuLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgcyA9ICExLCBpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsodCk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgcyA9ICEwLCBpID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAocylcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIGk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHQgPSB0aGlzLCByID0gdC5pZCwgcyA9IHQuc2NoZWR1bGVyLCBpID0gcy5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsICRlKGksIHRoaXMpLCByICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIHIsIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCBuO1xufShTbyksIHZ0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobiwgdCkge1xuICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGUubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gbiwgdGhpcy5ub3cgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKG4sIHQsIHIpIHtcbiAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgbikuc2NoZWR1bGUociwgdCk7XG4gIH0sIGUubm93ID0gQ28ubm93LCBlO1xufSgpLCBrbyA9IGZ1bmN0aW9uKGUpIHtcbiAgb2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IHZ0Lm5vdyk7XG4gICAgdmFyIHMgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gcy5hY3Rpb25zID0gW10sIHMuX2FjdGl2ZSA9ICExLCBzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICByLnB1c2godCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAocyA9IHQuZXhlY3V0ZSh0LnN0YXRlLCB0LmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHQgPSByLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgcykge1xuICAgICAgZm9yICg7IHQgPSByLnNoaWZ0KCk7IClcbiAgICAgICAgdC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgcztcbiAgICB9XG4gIH0sIG47XG59KHZ0KSwgQW8gPSBuZXcga28oUG8pLCBJbyA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIFJvKGUpIHtcbiAgcmV0dXJuIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZS50aGVuKTtcbn1cbmZ1bmN0aW9uIFRvKGUpIHtcbiAgcmV0dXJuIE0oZVtsdF0pO1xufVxuZnVuY3Rpb24gRm8oZSkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgTShlID09IG51bGwgPyB2b2lkIDAgOiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBNbyhlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gRG8oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgTm8gPSBEbygpO1xuZnVuY3Rpb24gTG8oZSkge1xuICByZXR1cm4gTShlID09IG51bGwgPyB2b2lkIDAgOiBlW05vXSk7XG59XG5mdW5jdGlvbiBPbyhlKSB7XG4gIHJldHVybiBhbyh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByLCBzLCBpO1xuICAgIHJldHVybiBYdCh0aGlzLCBmdW5jdGlvbihhKSB7XG4gICAgICBzd2l0Y2ggKGEubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHQgPSBlLmdldFJlYWRlcigpLCBhLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGEubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCB5ZSh0LnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIHIgPSBhLnNlbnQoKSwgcyA9IHIudmFsdWUsIGkgPSByLmRvbmUsIGkgPyBbNCwgeWUodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgeWUocyldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gYS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIHQucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gVW8oZSkge1xuICByZXR1cm4gTShlID09IG51bGwgPyB2b2lkIDAgOiBlLmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBqbyhlKSB7XG4gIGlmIChlIGluc3RhbmNlb2YgbmUpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAoVG8oZSkpXG4gICAgICByZXR1cm4geG8oZSk7XG4gICAgaWYgKElvKGUpKVxuICAgICAgcmV0dXJuICRvKGUpO1xuICAgIGlmIChSbyhlKSlcbiAgICAgIHJldHVybiBHbyhlKTtcbiAgICBpZiAoRm8oZSkpXG4gICAgICByZXR1cm4gYW4oZSk7XG4gICAgaWYgKExvKGUpKVxuICAgICAgcmV0dXJuIFZvKGUpO1xuICAgIGlmIChVbyhlKSlcbiAgICAgIHJldHVybiB6byhlKTtcbiAgfVxuICB0aHJvdyBNbyhlKTtcbn1cbmZ1bmN0aW9uIHhvKGUpIHtcbiAgcmV0dXJuIG5ldyBuZShmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSBlW2x0XSgpO1xuICAgIGlmIChNKHQuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiB0LnN1YnNjcmliZShuKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gJG8oZSkge1xuICByZXR1cm4gbmV3IG5lKGZ1bmN0aW9uKG4pIHtcbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUubGVuZ3RoICYmICFuLmNsb3NlZDsgdCsrKVxuICAgICAgbi5uZXh0KGVbdF0pO1xuICAgIG4uY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBHbyhlKSB7XG4gIHJldHVybiBuZXcgbmUoZnVuY3Rpb24obikge1xuICAgIGUudGhlbihmdW5jdGlvbih0KSB7XG4gICAgICBuLmNsb3NlZCB8fCAobi5uZXh0KHQpLCBuLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBuLmVycm9yKHQpO1xuICAgIH0pLnRoZW4obnVsbCwgb24pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFZvKGUpIHtcbiAgcmV0dXJuIG5ldyBuZShmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIHMgPSBmZShlKSwgaSA9IHMubmV4dCgpOyAhaS5kb25lOyBpID0gcy5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGEgPSBpLnZhbHVlO1xuICAgICAgICBpZiAobi5uZXh0KGEpLCBuLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgdCA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSAmJiAhaS5kb25lICYmIChyID0gcy5yZXR1cm4pICYmIHIuY2FsbChzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gbmV3IG5lKGZ1bmN0aW9uKG4pIHtcbiAgICBxbyhlLCBuKS5jYXRjaChmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gbi5lcnJvcih0KTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6byhlKSB7XG4gIHJldHVybiBhbihPbyhlKSk7XG59XG5mdW5jdGlvbiBxbyhlLCBuKSB7XG4gIHZhciB0LCByLCBzLCBpO1xuICByZXR1cm4gaW8odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBYdCh0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCB0ID0gY28oZSksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCB0Lm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAociA9IGwuc2VudCgpLCAhIXIuZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IHIudmFsdWUsIG4ubmV4dChhKSwgbi5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgcyA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCByICYmICFyLmRvbmUgJiYgKGkgPSB0LnJldHVybikgPyBbNCwgaS5jYWxsKHQpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiBuLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBZbyhlLCBuLCB0LCByLCBzKSB7XG4gIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBzID09PSB2b2lkIDAgJiYgKHMgPSAhMSk7XG4gIHZhciBpID0gbi5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICB0KCksIHMgPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIHIpKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgcik7XG4gIGlmIChlLmFkZChpKSwgIXMpXG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBCbyhlLCBuKSB7XG4gIHZhciB0ID0gTShlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgciA9IGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gcy5lcnJvcih0KCkpO1xuICB9O1xuICByZXR1cm4gbmV3IG5lKHIpO1xufVxudmFyIEhvID0gcWUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gSm8oZSwgbikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBzID0gITEsIGk7XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBpID0gYSwgcyA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiByLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzID8gdChpKSA6IHIobmV3IEhvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEtvKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihlKTtcbn1cbnZhciBabyA9IHFlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBudWxsKSwgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSB0O1xuICB9O1xufSk7XG5mdW5jdGlvbiBXbyhlLCBuKSB7XG4gIHZhciB0ID0gS28oZSkgPyB7IGZpcnN0OiBlIH0gOiB0eXBlb2YgZSA9PSBcIm51bWJlclwiID8geyBlYWNoOiBlIH0gOiBlLCByID0gdC5maXJzdCwgcyA9IHQuZWFjaCwgaSA9IHQud2l0aCwgYSA9IGkgPT09IHZvaWQgMCA/IFFvIDogaSwgYyA9IHQuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gQW8gOiBjLCB1ID0gdC5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChyID09IG51bGwgJiYgcyA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHdvKGZ1bmN0aW9uKF8sIG0pIHtcbiAgICB2YXIgeSwgZiwgaCA9IG51bGwsIHYgPSAwLCBiID0gZnVuY3Rpb24oRSkge1xuICAgICAgZiA9IFlvKG0sIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHkudW5zdWJzY3JpYmUoKSwgam8oYSh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBoLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUobSk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICBtLmVycm9yKGspO1xuICAgICAgICB9XG4gICAgICB9LCBFKTtcbiAgICB9O1xuICAgIHkgPSBfLnN1YnNjcmliZShibyhtLCBmdW5jdGlvbihFKSB7XG4gICAgICBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCB2KyssIG0ubmV4dChoID0gRSksIHMgPiAwICYmIGIocyk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgZiAhPSBudWxsICYmIGYuY2xvc2VkIHx8IGYgPT0gbnVsbCB8fCBmLnVuc3Vic2NyaWJlKCksIGggPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgYihyICE9IG51bGwgPyB0eXBlb2YgciA9PSBcIm51bWJlclwiID8gciA6ICtyIC0gbC5ub3coKSA6IHMpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFFvKGUpIHtcbiAgdGhyb3cgbmV3IFpvKGUpO1xufVxuY2xhc3MgU2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiBuIH0sIHRoaXMuX3N1YmplY3QubmV4dChuKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAobiwgdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IG4sIGVyck1zZzogdCB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKG4pO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAobikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IG4sIHRoaXMuc3Vic2NyaWJlID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdCA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCksIHQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgWWUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0ID0ge1xuICAgICAgICBmaXJzdDogbi50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBCbygoKSA9PiBuZXcgRXJyb3Iobi50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gSm8odGhpcy5fc3ViamVjdC5waXBlKFdvKHQpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IHNuKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IEV0ID0geiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIFhvID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBlcyA9IChlKSA9PiBYb1tlXSwgWGUgPSB7fSwgY24gPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoWGVbZV0pXG4gICAgcmV0dXJuIFhlW2VdO1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigocikgPT4gci5qc29uKCkpLCB0ID0gRXQucGFyc2Uobi5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIFhlW2VdID0gdCwgdDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIEV0LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gWWUoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCBsbiA9IChlLCBuKSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdF0pID0+ICFuLmluY2x1ZGVzKHQpKSksIEEgPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIG90ID0gbmV3IFNlKCksIEN0ID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIHRzID0gMywgbnMgPSAzLCBycyA9IDFlMywgeyBsb2dfXzogTmUgfSA9IFAoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3Mgb3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgbiwgdDtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIE5lKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBOZShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAobiA9IEEoKSkgPT0gbnVsbCB8fCBuLmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHQgPSBBKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KG4sIHQsIHIpIHtcbiAgICBjb25zdCBzID0ge1xuICAgICAgZXZlbnROYW1lOiBuLFxuICAgICAgcHJvcGVydGllczogdCB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiByIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gcGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gcy50aW1lc3RhbXAsIHRoaXMucXVldWUucHVzaChzKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSwgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHZhciBuLCB0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gKHQgPSAobiA9IEEoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4ubG9jYWxTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRJdGVtKEN0KTtcbiAgICAgIHIgJiYgKHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHZhciBuO1xuICAgIChuID0gQSgpKSA9PSBudWxsIHx8IG4ubG9jYWxTdG9yYWdlLnNldEl0ZW0oQ3QsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBuID0gQSgpO1xuICAgIG4gJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSBuLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHJzKSk7XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIHZhciBuO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ICYmICgobiA9IEEoKSkgPT0gbnVsbCB8fCBuLmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCksIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCksIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITE7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgICFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwIHx8ICh0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICEwLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IG4gPSBvdC5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghbikge1xuICAgICAgTmUoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdCA9IHRoaXMucXVldWUuc2xpY2UoMCwgbnMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBldmVudHM6IHQubWFwKChjKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGMuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogbi5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLm4sXG4gICAgICAgICAgICAuLi5jLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogYy5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBjLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBjLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBjLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IG4uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmMucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBzID0gZXMobi5lbnZpcm9ubWVudCksIGkgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgcyk7XG4gICAgICAoYXdhaXQgZmV0Y2goaS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyKVxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHQpO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIE5lKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCByKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaCh0KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2gobikge1xuICAgIG4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgci5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCB0ID0gbi5maWx0ZXIoKHIpID0+IHIuYXR0ZW1wdENvdW50IDwgdHMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKG4ubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi50LCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciBuLCB0O1xuICAgIChuID0gQSgpKSA9PSBudWxsIHx8IG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAodCA9IEEoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHVuID0gbmV3IG9zKCksIGcgPSAoZSwgbiwgdCkgPT4ge1xuICB1bi5hZGRFdmVudChlLCBuLCB0KTtcbn0sIGRuID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IEcoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogbixcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHBuID0gKGUpID0+IHtcbiAgdmFyIHQsIHI7XG4gIGNvbnN0IG4gPSBHKGUuZXJyb3IpO1xuICBnKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IG4sXG4gICAgZXJyb3JfbmFtZTogKHQgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogdC5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAociA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiByLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIHNzID0gKCkgPT4ge1xuICB2YXIgZSwgbjtcbiAgKGUgPSBBKCkpID09IG51bGwgfHwgZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcG4pLCAobiA9IEEoKSkgPT0gbnVsbCB8fCBuLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgZG4pO1xufSwgaXMgPSAoKSA9PiB7XG4gIHZhciBlLCBuO1xuICAoZSA9IEEoKSkgPT0gbnVsbCB8fCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBwbiksIChuID0gQSgpKSA9PSBudWxsIHx8IG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBkbik7XG59O1xudmFyIFV0O1xuKFV0ID0gQSgpKSA9PSBudWxsIHx8IFV0LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICB1bi5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY2xhc3MgbW4gZXh0ZW5kcyBzbyB7XG4gIGNvbnN0cnVjdG9yKG4pIHtcbiAgICBjb25zdCB0ID0gYCR7bi5tZXNzYWdlfWA7XG4gICAgc3VwZXIodCksIHRoaXMucmVzcG9uc2UgPSBuO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBOID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgciAmJiBnKHIsIHtcbiAgICAuLi5uXG4gIH0pO1xuICBjb25zdCBzID0gYXdhaXQgZS5zZW5kKG4pO1xuICBpZiAoY3MocykpXG4gICAgdGhyb3cgbmV3IG1uKHMpO1xuICBpZiAoIWFzKHMsIHQpKSB7XG4gICAgY29uc3QgaSA9IHQuc2FmZVBhcnNlKHMpO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgdCwgXCJBY3R1YWw6XCIsIHMpLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gciAmJiBnKHIsIHtcbiAgICAuLi5zXG4gIH0pLCBzO1xufSwgYXMgPSAoZSwgbikgPT4gbi5zYWZlUGFyc2UoZSkuc3VjY2VzcywgY3MgPSAoZSkgPT4gT3Iuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIGxzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwgS3QpLCBEID0gYXN5bmMgKGUpID0+IGF3YWl0IE4oZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFp0KSwgZ2UgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIFF0LFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCB1cyA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiBuIH0sXG4gIFdyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgZHMgPSBhc3luYyAoZSwgbikgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ublxuICB9KTtcbiAgY29uc3QgdCA9IGF3YWl0IE4oZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogbiB9LCBRdCk7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnRcbiAgfSksIHQ7XG59LCBxID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIENyLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIHBzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sXG4gIFd0LFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIG1zID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogbiB9LFxuICBFcixcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgeXMgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgbHMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogbixcbiAgICBwcm9tb3Rpb25fY29kZTogdFxuICB9KSwgcyA9IG5ldyBTZXQoci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAocy5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke3Muc2l6ZX1gKTtcbiAgY29uc3QgaSA9IHMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGEgPSB0byhyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBpLFxuICAgIGFtb3VudEF0b206IGFcbiAgfTtcbn0sIHdlID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgaWYgKHQpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIHIgPSByIHx8IHZvaWQgMDtcbiAgICBjb25zdCBzID0gYXdhaXQgeXMoZSwgbiwgcik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogcy5hbW91bnRBdG9tLCBjdXJyZW5jeTogcy5jdXJyZW5jeSB9O1xuICB9XG59LCBmcyA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAocikgPT4gTihyLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiBuIH0sIHdyKVxuICAgIClcbiAgKTtcbn0sIFN0ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSxcbiAgaXQsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCBfcyA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sIFd0LCBcInNldHVwX2NoZWNrb3V0XCIpLCB1dCA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiBuIH0sIGl0LCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIHluID0gMWUzLCBocyA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnNvbGUubG9nKG4pO1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogeW4sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIHMgPSBhd2FpdCBOKHIsIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBicik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgZHQgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSxcbiAgWHIsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgZm4gPSBhc3luYyAoZSwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgTihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogbiB9IH0sXG4gICAgICBRclxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBHKHQpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIGdzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IG4gfSB9LFxuICBlb1xuKSwgWSA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuWS5FbnVtLnN0cmlwZTtcbmNvbnN0IF9uID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogbixcbiAgY2hlY2tMb2FkZWRGbjogdFxufSkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGkpID0+IHtcbiAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgYS5zcmMgPSBuLCBhLmlkID0gZSwgYS5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICB0KCkgPyBzKCkgOiBjID8gYSA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLCBhLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgci5hYm9ydCgpLCBzKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApLCBhLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHIuYWJvcnQoKSwgaShcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIGhuID0gKCkgPT4gX24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIGduID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IG4udG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgciA9IG4uYmlsbGluZ0NvbnRhY3QsIHMgPSBuLnNoaXBwaW5nQ29udGFjdCwgaSA9IHsgLi4uZSB9O1xuICBpZiAodCB8fCByIHx8IHMpIHtcbiAgICBpW3AuRU1BSUxdID0gaVtwLkVNQUlMXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5lbWFpbEFkZHJlc3MpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmVtYWlsQWRkcmVzcykgfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBpW3AuQ09VTlRSWV0gPSBpW3AuQ09VTlRSWV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY291bnRyeUNvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBpW3AuWklQX0NPREVdID0gaVtwLlpJUF9DT0RFXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5wb3N0YWxDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgYSA9IGlbcC5GSVJTVF9OQU1FXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5naXZlbk5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmdpdmVuTmFtZSkgfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gaVtwLkxBU1RfTkFNRV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZmFtaWx5TmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBhIHx8IGMgPyAoaVtwLkZJUlNUX05BTUVdID0gYSwgaVtwLkxBU1RfTkFNRV0gPSBjKSA6IChpW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIGlbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGk7XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IHdzID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IG5cbn0pID0+IHtcbiAgdmFyIHI7XG4gIGlmIChuLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7bi50b2tlbn1gLCB4dCkudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHQgPSAociA9IG4ubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF07XG4gIGlmICh0KVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtuLnRva2VufWBcbiAgICB9O1xufSwgYnMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogbixcbiAgcHJlZmlsbDogdCxcbiAgZGVmYXVsdExhYmVsOiByID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBzID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY3VycmVuY3kpID8/IG4uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGEgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAobiA9PSBudWxsID8gdm9pZCAwIDogbi5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gciA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IGFcbiAgICB9XG4gIH07XG59LCB3biA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiBuLFxuICBwcmVmaWxsOiB0LFxuICBkZWZhdWx0TGFiZWw6IHJcbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IHMsIHRvdGFsOiBpIH0gPSBicyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogbixcbiAgICBwcmVmaWxsOiB0LFxuICAgIGRlZmF1bHRMYWJlbDogclxuICB9KTtcbiAgbGV0IGEgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IHMsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IGksXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IHdzKHtcbiAgICAgIHRvdGFsOiBpLFxuICAgICAgcHJlZmlsbDogdFxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGEgPSB7XG4gICAgLi4uYSxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QoYSlcbiAgfSA6IGEgPSB7IC4uLmEsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgYTtcbn0sIHsgbG9nX186IHBhLCBlcnJfXzogdnMgfSA9IFAoXCJjb21tb25cIiksIFRlID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgSCA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBlLmZpbmQoKHIpID0+IG4uc2FmZVBhcnNlKHIpLnN1Y2Nlc3MpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgdnMoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gbi5wYXJzZSh0KTtcbn0sIEVzID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBCZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IG4gfSA9IFAoZS5sb2dQcmVmaXgpLCB0ID0gYXdhaXQgRChlLmFueUNkZUNvbm5lY3Rpb24pLCByID0gVGUoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHQubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBuKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgcHMoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQudG9rZW4sXG4gICAgICBwbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBuKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogdC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHQuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCB1dChlLmFueUNkZUNvbm5lY3Rpb24sIHMpIH07XG4gIH1cbn0sIENzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgYm4gPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0NzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSB0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgcyA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksIHsgaG9zdDogdCwgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBTcyhlLCBuLCB0KSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBocyhlLCB0KTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwocyksIG4oaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBzID0gc2V0SW50ZXJ2YWwociwgeW4pO1xuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIFBzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogdFxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIGUuaG9zdC5yZW1vdmUoKSwgdCh7IHN0YXR1czogVC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBIZShlKSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiB0IH0gPSBlLCByID0gYm4obik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocykgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIHMobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgYSA9IFNzKHIuaWZyYW1lLCBpLCBuZXcgVVJMKHQpLm9yaWdpbiksIGMgPSBQcyh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogYSxcbiAgICAgIHJlc29sdmU6IHNcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB2biA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBIZShlKTtcbiAgaWYgKG4uc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gVC5TVUNDRVNTICYmIFllKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwga3MgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHQ7XG59LCBBcyA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IHMgfSA9IFAoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgYSkgPT4ge1xuICAgIGNvbnN0IGMgPSBrcyhlLCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBtcyhuLCB0KTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBzKEcodSkpLCBjbGVhckludGVydmFsKGwpLCBhKEcodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogSXMsIGVycl9fOiBwdCB9ID0gUChcImFpcndhbGxleC1jY1wiKSwgUnMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBUcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBScy5zYWZlUGFyc2UoZSk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHB0KHIpLCBuZXcgRXJyb3IodCk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIEZzID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIE1zID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBJcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtufV1gKSwgbjtcbiAgfSBjYXRjaCAobikge1xuICAgIGNvbnN0IHQgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgcHQodCwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtHKG4pfWApLCBuZXcgRXJyb3IodCk7XG4gIH1cbn0sIERzID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IFRzKG4pLCByID0gYXdhaXQgdm4oeyB1cmw6IHRbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgcyA9IE1zKHIuaHJlZiA/PyBcIlwiKSwgaSA9IHRbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChpICE9PSBzKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbCA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtzfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke2l9KS5gO1xuICAgIHRocm93IHB0KGwpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IHMsXG4gICAgICBjb25zZW50X2lkOiB0W1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBFbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgQ24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IFNuLCBlcnJfXzogUG4gfSA9IFAoXCJjb21tb24tY2NcIiksIHNlID0gKGUsIG4sIHQpID0+IHtcbiAgaWYgKHQpIHtcbiAgICBTbihgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gICAgZm9yIChjb25zdCBbcywgaV0gb2YgT2JqZWN0LmVudHJpZXModCkpXG4gICAgICBlW3NdIHx8IChlW3NdID0gaSk7XG4gIH1cbiAgY29uc3QgciA9IEllLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBzID0gci5lcnJvci5mb3JtYXQoKSwgaSA9IFl0KHMpO1xuICAgIGZvciAoY29uc3QgW2EsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgbihhLCBjLCBhKTtcbiAgICB0aHJvdyBQbihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgTnMgPSAoZSwgbikgPT4ge1xuICBmb3IgKGNvbnN0IHQgb2YgZSlcbiAgICBpZiAodC5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IHQuZXJyb3JzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IHp0LnNhZmVQYXJzZShyLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFzLnN1Y2Nlc3MpXG4gICAgICAgICAgUG4oYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtyLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIHIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gcy5kYXRhO1xuICAgICAgICAgIG4oaSwgci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgU24oYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgbG9nX186IE9lIH0gPSBQKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIExzKGUsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IGR0KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBzID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIXMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHMpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uc1xuICAgIH0pO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIHQ7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIE9zKGUsIG4pIHtcbiAgaWYgKCFlLnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIE9lKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZSk7XG4gIGNvbnN0IHsgc3RhdHVzOiB0IH0gPSBhd2FpdCBIZSh7XG4gICAgdXJsOiBlLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBuLmJhc2VVcmxcbiAgfSk7XG4gIGlmIChPZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dH1dYCksIHQgPT09IFQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodCA9PT0gVC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCByID0gYXdhaXQgcShuLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBlLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIE9lKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgciksIHI7XG59XG5hc3luYyBmdW5jdGlvbiBVcyhlLCBuKSB7XG4gIHZhciB0LCByLCBzLCBpLCBhO1xuICB0cnkge1xuICAgIGNvbnN0IGMgPSBlLnBheW1lbnQsIGwgPSBnbihuLm5vbkNkZUZvcm1JbnB1dHMsIGMpLCB1ID0gc2UoXG4gICAgICBsLFxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBtID0gKGF3YWl0IGdlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IHkgPSBhd2FpdCBxKG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBtLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIE9lKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeSk7XG4gICAgbGV0IGYgPSAociA9ICh0ID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB0WzBdKSA9PSBudWxsID8gdm9pZCAwIDogci5pZDtcbiAgICBjb25zdCBoID0gKHMgPSB5LnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmluZChcbiAgICAgIChiKSA9PiBiLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoaCAhPSBudWxsICYmIGgucmVkaXJlY3RfdXJsICYmIGguY29uc2VudF9pZCAmJiBoLnRoZWlyX3BtX2lkICYmICh5ID0gYXdhaXQgT3MoaCwgbiksIGYgPSAoYSA9IChpID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYS5pZCksICFmKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh2KSwgQmUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbi5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IHksXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHZlLCBlcnJfXzoga24gfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpLCBqcyA9IGRlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRW4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGlmICh2ZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgaG4oKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB2ZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHQ7XG4gICAgaWYgKHZlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB2ZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgdDtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKGEpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB3ZShhLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFIuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBrbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCB4cyA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IHNcbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IGkgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSByLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBfID0gd24oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKGYgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIG0gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIF8pLCB5ID0ge1xuICAgICAgc2Vzc2lvbjogbSxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBpLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogcyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogciA9PSBudWxsID8gdm9pZCAwIDogci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogbi5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGxuKHUsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGFcbiAgICB9KSwgbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIGNvbnN0IGIgPSAoKSA9PiB7XG4gICAgICAgIHZlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBtLm9uY2FuY2VsID0gYiwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IExzKEUsIHkpO1xuICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgdihrKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgRSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5fLnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgbS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oRSk7XG4gICAgICB9LCBtLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBrID0gYXdhaXQgVXMoRSwgeSk7XG4gICAgICAgICAgaChrKTtcbiAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgIHYoayk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cga24oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCBKZSA9ICh7XG4gIGdhdGV3YXk6IGUsXG4gIGdhdGV3YXlNZXJjaGFudElkOiBuLFxuICBtZXJjaGFudE5hbWU6IHQsXG4gIG1lcmNoYW50SWQ6IHIsXG4gIGluaXRpYWxQcmV2aWV3OiBzLFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpLFxuICBwcmVmaWxsOiBhXG59KSA9PiB7XG4gIHZhciBfLCBtO1xuICBjb25zdCBjID0gKChfID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmFtb3VudEF0b20pID8/IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudEF0b20pID8/IDAsIGwgPSBNYXRoLm1heChjIC8gMTAwLCAwKSwgdSA9ICgoKG0gPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uY3VycmVuY3kpID8/IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmN1cnJlbmN5KSA/PyBzLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBkID0ge1xuICAgIGFwaVZlcnNpb246IDIsXG4gICAgYXBpVmVyc2lvbk1pbm9yOiAwLFxuICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNBUkRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRBdXRoTWV0aG9kczogW1wiUEFOX09OTFlcIiwgXCJDUllQVE9HUkFNXzNEU1wiXSxcbiAgICAgICAgICBhbGxvd2VkQ2FyZE5ldHdvcmtzOiBbXCJBTUVYXCIsIFwiRElTQ09WRVJcIiwgXCJJTlRFUkFDXCIsIFwiSkNCXCIsIFwiTUFTVEVSQ0FSRFwiLCBcIlZJU0FcIl0sXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NSZXF1aXJlZDogITAsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiAhMCxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogITBcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW5pemF0aW9uU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHR5cGU6IFwiUEFZTUVOVF9HQVRFV0FZXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZ2F0ZXdheTogZSxcbiAgICAgICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBlbWFpbFJlcXVpcmVkOiAhMCxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogciA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lOiB0XG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBpICE9IG51bGwgJiYgaS5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IGwudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGkgIT0gbnVsbCAmJiBpLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID8gdHlwZW9mIGkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8geyAuLi5kLCAuLi5pLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGQpIH0gOiB7IC4uLmQsIC4uLmkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgfSA6IGQ7XG59LCBBbiA9ICgpID0+IF9uKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9nb29nbGVfcGF5X3Nka1wiLFxuICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiB7XG4gICAgdmFyIGUsIG47XG4gICAgcmV0dXJuICEhKChuID0gKGUgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZS5wYXltZW50cykgIT0gbnVsbCAmJiBuLmFwaSk7XG4gIH1cbn0pO1xubGV0IGV0ID0gbnVsbDtcbmNvbnN0IEluID0gYXN5bmMgKGUpID0+IGF3YWl0IGNuKGUpID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIEtlID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IGF3YWl0IEluKGUpO1xuICByZXR1cm4gZXQgPT09IG51bGwgJiYgKGV0ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogdCxcbiAgICBtZXJjaGFudEluZm86IG4ubWVyY2hhbnRJbmZvXG4gIH0pKSwgZXQ7XG59LCAkcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKCh0KSA9PiB0LnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIG4gPyBxdC5wYXJzZShuKSA6IG51bGw7XG59LCBSbiA9IChlLCBuKSA9PiB7XG4gIHZhciBzLCBpLCBhLCBjO1xuICBjb25zdCB0ID0geyAuLi5lIH0sIHIgPSAoaSA9IChzID0gbi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChyKSB7XG4gICAgY29uc3QgW2wsIC4uLnVdID0gKChjID0gKGEgPSByLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGQgPSB1LmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICB0W3AuRU1BSUxdID0gdFtwLkVNQUlMXSB8fCBuLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8IHIuY291bnRyeUNvZGUgfHwgXCJVU1wiLCB0W3AuQUREUkVTU10gPSB0W3AuQUREUkVTU10gfHwgci5hZGRyZXNzMSB8fCBcIlwiLCB0W3AuQ0lUWV0gPSB0W3AuQ0lUWV0gfHwgci5sb2NhbGl0eSB8fCBcIlwiLCB0W3AuWklQX0NPREVdID0gdFtwLlpJUF9DT0RFXSB8fCByLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCB0W3AuU1RBVEVdID0gdFtwLlNUQVRFXSB8fCByLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGNvbnN0IF8gPSB0W3AuRklSU1RfTkFNRV0gfHwgbCB8fCBcIlwiLCBtID0gdFtwLkxBU1RfTkFNRV0gfHwgZCB8fCBcIlwiO1xuICAgIF8gfHwgbSA/ICh0W3AuRklSU1RfTkFNRV0gPSBfLCB0W3AuTEFTVF9OQU1FXSA9IG0pIDogKHRbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgdFtwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gdDtcbn0sIHsgbG9nX186IHosIGVycl9fOiBtZSB9ID0gUChcImF3eC1nb29nbGUtcGF5XCIpLCBHcyA9IGRlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICB2YXIgXywgbTtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQ24pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIHooXCJHb29nbGUgUGF5IENQTVwiLCByKTtcbiAgICBjb25zdCBzID0gci5tZXRhZGF0YTtcbiAgICBpZiAoIXMucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gbWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCB0O1xuICAgIGlmICh6KFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgQW4oKSwgISgobSA9IChfID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF8ucGF5bWVudHMpICE9IG51bGwgJiYgbS5hcGkpKVxuICAgICAgcmV0dXJuIG1lKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgdDtcbiAgICBpZiAoYXdhaXQgSW4oZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXMuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBtZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHQ7XG4gICAgeihcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeSA9IEplKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHMucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBzLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBmID0gYXdhaXQgS2UoZS5iYXNlVXJsLCB5KSwgeyByZXN1bHQ6IGggfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KHkpO1xuICAgICAgaWYgKCFoKVxuICAgICAgICByZXR1cm4geihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB0O1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIHJldHVybiBtZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHkpLCB0O1xuICAgIH1cbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChhKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgd2UoYSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIG1lKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBWcyA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIHZhciB5LCBmLCBoLCB2LCBiLCBFLCBrO1xuICAgIHooXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBDbiksIHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IHMsIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IEplKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogYSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgXyA9IGF3YWl0IEQoZCk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBpLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogbG4oXywgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBLZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBMID0gYXdhaXQgbS5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICB6KFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgTCk7XG4gICAgICBjb25zdCBYID0gUm4odCwgTCksIHggPSBzZShcbiAgICAgICAgWCxcbiAgICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLnhcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGUgPSAoZiA9ICh5ID0gTC5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW47XG4gICAgICBpZiAoIXBlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0ICRuID0gYXdhaXQgZ2UoZCwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB4W3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB4W3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogeFtwLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiB4W3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSksIEZlID0gJHMoJG4pO1xuICAgICAgeihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIEZlKTtcbiAgICAgIGxldCBpZSA9IGF3YWl0IHEoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IEZlID09IG51bGwgPyB2b2lkIDAgOiBGZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB6KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgaWUpO1xuICAgICAgbGV0IFplID0gKHYgPSAoaCA9IGllLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkO1xuICAgICAgY29uc3QgYWUgPSAoYiA9IGllLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGIuZmluZChcbiAgICAgICAgKGJlKSA9PiBiZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChhZSAmJiBhZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgeihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGFlKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGJlIH0gPSBhd2FpdCBIZSh7XG4gICAgICAgICAgdXJsOiBhZS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoeihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7YmV9XWApLCBiZSA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChiZSA9PT0gVC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGFlICYmICFaZSAmJiAoaWUgPSBhd2FpdCBxKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogYWUudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGFlLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHooXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSksIFplID0gKGsgPSAoRSA9IGllLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IEVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBrLmlkKSwgIVplKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBCZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB4LFxuICAgICAgICBjb25maXJtUmVzdWx0OiBpZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoTCkge1xuICAgICAgdGhyb3cgbWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgTCksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogTFxuICAgICAgfSksIG5ldyBFcnJvcigoTCA9PSBudWxsID8gdm9pZCAwIDogTC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBUbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEZuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmFzeW5jIGZ1bmN0aW9uIHpzKGUsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IGR0KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogbi5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIHMgPSByID09IG51bGwgPyB2b2lkIDAgOiByLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBuLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocyksIGcoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5zXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBuLnNlc3Npb24uYWJvcnQoKSwgdDtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcXMoZSwgbikge1xuICB2YXIgdCwgcjtcbiAgdHJ5IHtcbiAgICBjb25zdCBzID0gZS5wYXltZW50LCBpID0gZ24obi5ub25DZGVGb3JtSW5wdXRzLCBzKSwgYSA9IHNlKGksIG4uZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uYVxuICAgIH0pLCBhd2FpdCBnZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBhW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGFbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGFbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGFbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGFbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShzLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgcShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChyID0gKHQgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHRbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZCksIEJlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBhLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAocykge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChpKSwgcztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogVWUsIGVycl9fOiBNbiB9ID0gUChcImF1dGhuZXQtYXBwbGVwYXlcIiksIFlzID0gZGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGlmIChVZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgaG4oKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBVZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHQ7XG4gICAgaWYgKCFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gVWUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHQ7XG4gICAgaWYgKCFyLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChhKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgd2UoYSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChfKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgTW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogbVxuICAgICAgICB9KSwgbi5nZXQub25DaGVja291dEVycm9yKChtID09IG51bGwgPyB2b2lkIDAgOiBtLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIEJzID0gcmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjdXN0b21QYXJhbXM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogc1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSB9ID0gciwgYyA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBUbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBEKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIF8gPSB3bih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogbi5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSk7XG4gICAgY29uc3QgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgXyksIHkgPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG4ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIG0ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIFVlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIG0ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB6cyhiLCB5KTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGIgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IF8udG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgbS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oYik7XG4gICAgICB9LCBtLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoYikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBFID0gYXdhaXQgcXMoYiwgeSk7XG4gICAgICAgICAgaChFKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgTW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBsZSwgZXJyX186IEVlIH0gPSBQKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEhzID0gZGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIHZhciBkLCBfO1xuICAgIGxlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBGbik7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgbGUoXCJHb29nbGUgUGF5IENQTVwiLCByKTtcbiAgICBjb25zdCBzID0gci5tZXRhZGF0YTtcbiAgICBpZiAoIXMucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gRWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCB0O1xuICAgIGlmIChsZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IEFuKCksICEoKF8gPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBFZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHQ7XG4gICAgbGUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBKZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBzLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHMucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IEtlKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBmIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghZilcbiAgICAgICAgcmV0dXJuIGxlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHQ7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIEVlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHQ7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBEKGkpLCBjID0gYS5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCB3ZShpLCBhLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgRWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgeSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiB5XG4gICAgICAgIH0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgSnMgPSByZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBzXG4gIH0pID0+IHtcbiAgICB2YXIgeSwgZiwgaCwgdjtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhIH0gPSBzLCBsID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZuKS5tZXRhZGF0YSwgdSA9IEplKHtcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGFcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgXyA9IGF3YWl0IEQoZCk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogXyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGFcbiAgICB9KTtcbiAgICBjb25zdCBtID0gYXdhaXQgS2UoZS5iYXNlVXJsLCB1KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYiA9IGF3YWl0IG0ubG9hZFBheW1lbnREYXRhKHUpO1xuICAgICAgbGUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBiKTtcbiAgICAgIGNvbnN0IEUgPSBSbihuLCBiKSwgayA9IHNlKEUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5rXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IEwgPSAoZiA9ICh5ID0gYi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW47XG4gICAgICBpZiAoIUwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgWCA9IGF3YWl0IGdlKGQsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDoga1twLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGtbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZToga1twLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IGtbcC5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeToga1twLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgWCk7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgcShkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghKCh2ID0gKGggPSB4LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gQmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGssXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHgsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgIHRocm93IEVlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGIpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGJcbiAgICAgIH0pLCBuZXcgRXJyb3IoKGIgPT0gbnVsbCA/IHZvaWQgMCA6IGIubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogS3MsIGVycl9fOiBEbiB9ID0gUChcInBvY2t5dC1jY1wiKSwgWnMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pLCBXcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBacy5zYWZlUGFyc2UoZSk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IERuKHIpLCBuZXcgRXJyb3IodCk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIE5uID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBLcyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCB0ID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgRG4odCwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtHKG4pfWApLCBuZXcgRXJyb3IodCk7XG4gIH1cbn0sIFFzID0gKGUsIG4pID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldChuKSwgWHMgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgZWkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gV3MobiksIHIgPSBhd2FpdCB2bih7IHVybDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogTm4oci5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHRbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiB0W1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHRpID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pLCBuaSA9IHokMS5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pLCB7IGxvZ19fOiBfZSwgZXJyX186IEFlIH0gPSBQKFwiYWR5ZW4tY2NcIiksIHJpID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogdGksXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSksIExuID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBvaSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSByaS5zYWZlUGFyc2UoZSk7XG4gIGlmICghbi5zdWNjZXNzKVxuICAgIHRocm93IEFlKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoTG4pO1xuICByZXR1cm4gbi5kYXRhO1xufSwgc2kgPSAoZSkgPT4gSlNPTi5wYXJzZShlKSwgUHQgPSAoKSA9PiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvdy5BZHllbldlYiwgaWkgPSBhc3luYyAoKSA9PiB7XG4gIF9lKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBQdCgpIHx8IGF3YWl0IGF0KDUwMCk7XG4gIGlmICghUHQoKSlcbiAgICB0aHJvdyBBZShcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBuZXcgRXJyb3IoTG4pO1xuICByZXR1cm4gX2UoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKSwgd2luZG93LkFkeWVuV2ViLkFkeWVuQ2hlY2tvdXQ7XG59LCBhaSA9IChlKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVyczogbiwgbG9jYWxlOiB0LCBjb3VudHJ5Q29kZTogciwgY29tcG9uZW50OiBzLCBob3N0OiBpLCBjYW5jZWxCdXR0b246IGEgfSA9IGUsIGMgPSBzaShuW1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgcmV0dXJuIF9lKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHtjLnR5cGV9YCksIG5ldyBQcm9taXNlKChsKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIF9lKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIiksIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG0pLCBpLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoZikgPT4ge1xuICAgICAgQWUoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgZiksIGwoeyBzdGF0dXM6IFQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBfID0gKGYpID0+IHtcbiAgICAgIEFlKFwiQWR5ZW4gZXJyb3I6XCIsIGYpLCBsKHsgc3RhdHVzOiBULkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgbSA9ICgpID0+IHtcbiAgICAgIGwoeyBzdGF0dXM6IFQuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbSk7XG4gICAgY29uc3QgeSA9IChmLCBoLCB2KSA9PiB7XG4gICAgICBpLnJlbW92ZSgpLCBsKHsgc3RhdHVzOiBULlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBmLCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgaWkoKS50aGVuKFxuICAgICAgKGYpID0+IGYoe1xuICAgICAgICBjbGllbnRLZXk6IG5bXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogbltcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGU6IHQsXG4gICAgICAgIGNvdW50cnlDb2RlOiByLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzOiB5LFxuICAgICAgICBvblBheW1lbnRGYWlsZWQ6IGQsXG4gICAgICAgIG9uRXJyb3I6IF9cbiAgICAgIH0pXG4gICAgKS50aGVuKChmKSA9PiB7XG4gICAgICBmLmNyZWF0ZUZyb21BY3Rpb24oYywgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQocyk7XG4gICAgfSk7XG4gIH0pO1xufSwgY2kgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2UsIHQgPSBlID8/IG4sIHIgPSBuaS5zYWZlUGFyc2UodCk7XG4gIHJldHVybiByLnN1Y2Nlc3MgPyAoX2UoYFJlc29sdmVkIGxvY2FsZTogJHtyLmRhdGF9YCksIHIuZGF0YSkgOiAoQWUoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke3R9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApLCBcImVuLVVTXCIpO1xufSwgbGkgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1hZHllbi1hY3Rpb25cIl0pICE9PSB2b2lkIDAsIHVpID0gYXN5bmMgKGUsIG4sIHQpID0+IHtcbiAgY29uc3QgciA9IG9pKG4pLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcy5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdDogaSwgaWZyYW1lOiBhLCBjYW5jZWxCdXR0b246IGMgfSA9IGJuKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBhLnJlcGxhY2VXaXRoKHMpO1xuICBjb25zdCBsID0gYXdhaXQgYWkoe1xuICAgIGhlYWRlcnM6IHIsXG4gICAgbG9jYWxlOiBjaSh0KSxcbiAgICBjb3VudHJ5Q29kZTogZSxcbiAgICBjb21wb25lbnQ6IHMsXG4gICAgaG9zdDogaSxcbiAgICBjYW5jZWxCdXR0b246IGNcbiAgfSk7XG4gIGlmIChsLmNsZWFudXAoKSwgbC5zdGF0dXMgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBULlNVQ0NFU1MpIHtcbiAgICBpZiAoIWwuYWRkaXRpb25hbERldGFpbHMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgcmV0dXJuIF9lKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIiksIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogbC5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlXG4gICAgWWUobC5zdGF0dXMpO1xufSwgeyBsb2dfXzogUywgZXJyX186IGt0IH0gPSBQKFwiY29tbW9uLWNjXCIpLCB7IGxvZ19fOiBBdCB9ID0gUChcInN0cmlwZS1jY1wiKTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgZGkgPSByZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBzXG4gIH0pID0+IHtcbiAgICB2YXIgdTtcbiAgICBTKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IG4gfSk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IEQoaSk7XG4gICAgZyhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4ubixcbiAgICAgIHByZWZpbGw6IGFcbiAgICB9KSwgUyhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHthLm1vZGV9XWApO1xuICAgIGNvbnN0IGMgPSBzZSh0LCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSk7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBTKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgZCA9IGF3YWl0IGZzKHMuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKE5zKGQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgUyhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IF9zKGksIGwpO1xuICAgICAgICByZXR1cm4gUyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke18ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBfIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBTKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IFN0KGksIGwpO1xuICAgICAgICByZXR1cm4gUyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogXyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIGlmIChkIGluc3RhbmNlb2YgbW4gJiYgZC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBTKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgUyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBkLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi5uLFxuICAgICAgICAgIC4uLmQucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgXyA9IFhzKGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChfKSB7XG4gICAgICAgICAgUyhcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgZWkoZS5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRnMoZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIFMoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgYiA9IGF3YWl0IERzKGUuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBTKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgdWkoXG4gICAgICAgICAgICB0W3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBkLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBhLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5hZHllbiA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IHVzKGksIGwpO1xuICAgICAgICBTKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIGYpO1xuICAgICAgICBjb25zdCBoID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgXyA/IFMoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IGggPyAoUyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IF9pKGYpKSA6IChTKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgZmkoZiwgZS5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IHYgPSBmLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBTKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3Z9XWApO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBxKGksIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB2XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgUyhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBiKTtcbiAgICAgICAgICBjb25zdCBFID0gVGUoYik7XG4gICAgICAgICAgcmV0dXJuIFMoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtFLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogRSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFMoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7aCA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgU3QoaSwge1xuICAgICAgICAgICAgLi4ubCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB2LFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogaFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBTKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBiIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGt0KFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBrdChkKSwgZDtcbiAgICB9XG4gIH1cbiksIHBpID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBTci5wYXJzZShuKTtcbn0sIG1pID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdLCB5aSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKCh0KSA9PiBtaS5pbmNsdWRlcyh0LnR5cGUpKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gdnIucGFyc2Uobik7XG59LCBmaSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSB5aShlKTtcbiAgaWYgKHQucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgUyhcIuKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpLCBnKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBTKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7dC5yZWRpcmVjdF91cmx9XWApLCBnKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgSGUoeyB1cmw6IHQucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiBuIH0pO1xuICBpZiAoUyhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cn1dYCksIHIgPT09IFQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IGcoXCIzZHNfY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBnKFwiM2RzX2ZhaWx1cmVcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xufSwgX2kgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCBuID0gcGkoZSk7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uXG4gIH0pLCBBdChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgRnIobiksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBBdChcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIGhpID0gMSwgZ2kgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IGosIGVycl9fOiBPbiB9ID0gUChcImxvb3AtY3J5cHRvXCIpLCB3aSA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBJLFxuICBsb29wTGFzdE5hbWU6IEksXG4gIGxvb3BFbWFpbDogSSxcbiAgW3AuUFJPTU9USU9OX0NPREVdOiBDXG59KSwgYmkgPSB6JDEub2JqZWN0KHtcbiAgbG9vcEZpcnN0TmFtZTogQyxcbiAgbG9vcExhc3ROYW1lOiBDLFxuICBsb29wRW1haWw6IEMsXG4gIFtwLlBST01PVElPTl9DT0RFXTogQ1xufSksIEl0ID0gKGUsIG4sIHQsIHIpID0+IHtcbiAgY29uc3QgcyA9IHQuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXMuc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBzLmVycm9yLmZvcm1hdCgpLCBhID0gWXQoaSk7XG4gICAgZm9yIChjb25zdCBbYywgbF0gb2YgT2JqZWN0LmVudHJpZXMoYSkpXG4gICAgICBuKGMsIGwsIGMpO1xuICAgIHRocm93IE9uKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgYSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBzLmRhdGE7XG59LCB2aSA9IGRlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBqKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGdpKTtcbiAgICBqKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksIGooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHQgPSBhd2FpdCBEKGUuYW55Q2RlQ29ubmVjdGlvbiksIHIgPSBhd2FpdCBkdChlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgfSk7XG4gICAgaWYgKHQubW9kZSAhPT0gXCJzZXR1cFwiICYmICFuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHQuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3QuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7bi5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghciB8fCAhci5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IHMgPSByLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBpO1xuICAgIHQubW9kZSA9PT0gXCJzZXR1cFwiID8gaSA9IGhpIDogaSA9IHQuYW1vdW50X3RvdGFsX2F0b20gKiBzLnRva2VuX3ByaWNlO1xuICAgIGNvbnN0IGEgPSBpLCBjID0gcy5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHY0KCksIHUgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50OiBhLFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudDogYyxcbiAgICAgIGN1c3RvbWVyUmVmSWQ6IGxcbiAgICB9LCBkID0ge1xuICAgICAgYXBpS2V5OiBuLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBuLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IG4ubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogbi5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB1LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGRcbiAgICB9O1xuICB9XG4pLCBFaSA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIGooXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgaihcImNvbnRleHRcIiwgZSksIGooXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgbiksIGooXCJub25DZGVGb3JtSW5wdXRzXCIsIHQpLCBqKFwiZmxvd0NhbGxiYWNrc1wiLCByKSwgaihcImN1c3RvbVBhcmFtc1wiLCBzKTtcbiAgICBsZXQgaTtcbiAgICBzICE9IG51bGwgJiYgcy5zdWNjZXNzID8gaSA9IEl0KFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgd2lcbiAgICApIDogaSA9IEl0KFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgYmlcbiAgICApO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKGUuYW55Q2RlQ29ubmVjdGlvbiksIGwgPSBjLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBpLmxvb3BFbWFpbCxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBpLmxvb3BGaXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBpLmxvb3BMYXN0TmFtZSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoIXMpXG4gICAgICB0aHJvdyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCBxKGEsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBzLnN1Y2Nlc3MgPyBzLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5tb2RlICE9PSBcInNldHVwXCIgPyB1LmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogcy5zdWNjZXNzID8gcy5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogcy5zdWNjZXNzID8gcy5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IHMuc3VjY2VzcyA/IHZvaWQgMCA6IHMuZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogcy5zdWNjZXNzID8gdm9pZCAwIDogcy5kZWJ1Z0luZm8sXG4gICAgICAgIGxvb3Bfc3VjY2Vzczogcy5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGooYENvbmZpcm0gcmVzdWx0OiAke2R9YCksIGMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBqKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgaihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBkKTtcbiAgICAgIGNvbnN0IF8gPSBUZShkKTtcbiAgICAgIHJldHVybiBqKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IE9uKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBKLCBlcnJfXzogUnQgfSA9IFAoXCJwb2NreXQtcGF5cGFsXCIpLCBDaSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgU2kgPSByZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBzXG4gIH0pID0+IHtcbiAgICB2YXIgeCwgcGU7XG4gICAgSihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBEKGkpO1xuICAgIEooXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBDaS5wYXJzZShuKTtcbiAgICBKKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5zZXR0aW5ncywgdSA9IHNlKFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gRXModSk7XG4gICAgSihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IF8gPSB2NCgpLCBtID0gYS5tb2RlICE9PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IG0sXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGEubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBhLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKHggPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLnNldHRpbmdzKSAhPSBudWxsICYmIHgudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgZiA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoeSkpLCB2ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogYS50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgYiA9IGAke2Z9PyR7di50b1N0cmluZygpfWA7XG4gICAgaWYgKChwZSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuc2V0dGluZ3MpICE9IG51bGwgJiYgcGUudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgSihcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiLCBhd2FpdCBhdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIEooXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIEooXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgRSA9IGF3YWl0IEFzKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGksXG4gICAgICBfLFxuICAgICAgYlxuICAgICk7XG4gICAgSihcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBFKTtcbiAgICBjb25zdCBrID0gTm4oRS5ocmVmKSwgTCA9IFFzKEUuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghTClcbiAgICAgIHRocm93IFJ0KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBFLmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgSihgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtrfWApO1xuICAgIGNvbnN0IFggPSBhd2FpdCBxKGksIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBrLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbSA/IEwgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoSihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBYKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBYLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghWC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IFJ0KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgWCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IFgucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBUdCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBGLCBlcnJfXzogUGkgfSA9IFAoXCJzdHJpcGUtbGlua1wiKSwga2kgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgQWkgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgSWkgPSBkZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEYoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywga2kpO1xuICAgIEYoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBEKHMpLCBhID0gaS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgd2UocywgaS50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBBcihyLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEYoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBfID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7VHR9YCk7XG4gICAgfSwgbSA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIHQgIT0gbnVsbCAmJiB0LmRvTm90TW91bnRPbkluaXQgPyBGKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChGKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBfKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKHkpID0+IHtcbiAgICAgIGlmIChGKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHQgIT0gbnVsbCAmJiB0Lm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgdC5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBGKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB5LnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKHkpID0+IHtcbiAgICAgIEYoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIHkpO1xuICAgICAgY29uc3QgZiA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHkuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmLmVycm9yID8gKFBpKFwiZXJyb3JcIiwgZi5lcnJvciksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChGKFwicGF5bWVudE1ldGhvZFwiLCBmLnBheW1lbnRNZXRob2QpLCBSLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogZi5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogXyxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IG0sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBGaShUdClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBSaSA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIEYoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBGKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gVGkodCwgcy5zdHJpcGVQTSksIGMgPSBzZShhLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIEYoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGdlKGksIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBzLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIEYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IEFpLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIF8gPSBhd2FpdCBEKGkpO1xuICAgIGlmIChfLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBtID0gYXdhaXQgcShpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFRlKG0pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEYoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBfLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBfLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgdXQoaSwgbSkgfTtcbiAgICB9XG4gIH1cbiksIFRpID0gKGUsIG4pID0+IHtcbiAgdmFyIGwsIHUsIGQsIF8sIG07XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLnNdID0gKCh1ID0gKGwgPSBuLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBpID0gcy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IG4ubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IG4uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgKChfID0gbi5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8ucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8ICgobSA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBtLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgYSA9IHRbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiXCIsIGMgPSB0W3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiXCI7XG4gIHJldHVybiBhIHx8IGMgPyAodFtwLkZJUlNUX05BTUVdID0gYSwgdFtwLkxBU1RfTkFNRV0gPSBjKSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIiksIEYoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgdCksIHQ7XG59LCBGaSA9IChlKSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCB0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTtcbiAgfTtcbiAgdCgpO1xufSksIHsgbG9nX186IE8sIGVycl9fOiBNaSB9ID0gUChcInN0cmlwZS1wclwiKSwgRGkgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIE5pID0gZGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIE8oXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCB0ID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIERpKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBEKHIpLCBpID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBhID0gYXdhaXQgd2Uociwgcy50b2tlbiwgaSwgdm9pZCAwKSwgYyA9IGF3YWl0IElyKFxuICAgICAgdC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBhLmFtb3VudEF0b20sXG4gICAgICBhLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBNaShcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgTyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIF8pID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFBlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBfID09IG51bGwgPyB2b2lkIDAgOiBfLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBZLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgTGkgPSByZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgIGluaXRSZXN1bHQ6IGlcbiAgfSkgPT4ge1xuICAgIGlmIChPKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgcy5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7cy5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGkucHI7XG4gICAgaWYgKHMgIT0gbnVsbCAmJiBzLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBzLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBPKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICBVaShjLCBmLmFtb3VudCwgZi5wZW5kaW5nLCBoLCBmLmxhYmVsKTtcbiAgICB9XG4gICAgTyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgUnIoYyk7XG4gICAgTyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIE8oXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBPaSh0LCBsKSwgZCA9IHNlKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgTyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBkcyhhLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG5cbiAgICB9KSwgbSA9IGppKF8pO1xuICAgIE8oXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBUcihtLCBsKTtcbiAgICBjb25zdCB5ID0gYXdhaXQgRChhKTtcbiAgICBpZiAoeS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE8oXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBmID0gYXdhaXQgcShhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVGUoZikgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgTyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBmID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiB5LmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB5LmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgdXQoYSwgZikgfTtcbiAgICB9XG4gIH1cbiksIE9pID0gKGUsIG4pID0+IHtcbiAgdmFyIGQsIF8sIG0sIHk7XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLnNdID0gKChfID0gKGQgPSBuLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogXy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IHMuam9pbihcIiBcIikgfHwgdm9pZCAwLCBhID0gKHkgPSAobSA9IG4ucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogeS5hZGRyZXNzLCBjID0gbi5zaGlwcGluZ0FkZHJlc3M7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IG4ucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSB0W3AuRklSU1RfTkFNRV0gfHwgciB8fCBcIlwiLCB1ID0gdFtwLkxBU1RfTkFNRV0gfHwgaSB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHRbcC5GSVJTVF9OQU1FXSA9IGwsIHRbcC5MQVNUX05BTUVdID0gdSkgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBPKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHQpLCB0O1xufSwgVWkgPSAoZSwgbiwgdCwgciwgcykgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogbi5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IHMgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogdFxuICAgIH0sXG4gICAgY3VycmVuY3k6IG4uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogclxuICB9KTtcbn0sIGppID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIFByLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIFBlID0gKGUsIG4sIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmlsdGVyKChzKSA9PiB7XG4gICAgY29uc3QgaSA9IHQgPT09IHZvaWQgMCA/ICEwIDogcy5wcm9jZXNzb3JfbmFtZSA9PT0gdCwgYSA9IHMucHJvdmlkZXIgPT09IG47XG4gICAgcmV0dXJuIGkgJiYgYTtcbiAgfSk7XG4gIGlmIChyLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke259JyBhbmQgcHJvY2Vzc29yICcke3R9J2ApO1xuICByZXR1cm4gci5sZW5ndGggIT09IDEgJiYgKGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke259JyBhbmQgcHJvY2Vzc29yICcke3R9J2ApLCBnKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgIHByb3ZpZGVyOiBuLFxuICAgIHByb2Nlc3NvcjogdCxcbiAgICBjcG1zOiBlXG4gIH0pKSwgclswXTtcbn0sIFIgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogZGlcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogTmksXG4gICAgcnVuOiBMaVxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogSWksXG4gICAgcnVuOiBSaVxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBTaVxuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogR3MsXG4gICAgcnVuOiBWc1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGpzLFxuICAgIHJ1bjogeHNcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogdmksXG4gICAgcnVuOiBFaVxuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IFlzLFxuICAgIHJ1bjogQnNcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogSHMsXG4gICAgcnVuOiBKc1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogeGksIGVycl9fOiAkaSB9ID0gUChcImluaXQtZmxvd3NcIiksIGNlID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IG5ldyBTZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogdCxcbiAgICBpbml0aWFsaXplOiBhc3luYyAocikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHQuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgbihyKTtcbiAgICAgICAgeGkoYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgcyksIHQuc2V0KHMpO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAkaShg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBHKHMpLCBcIkRldGFpbHM6XCIsIHMpLCB0LnRocm93KHMsIEcocykpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIEdpID0gYXN5bmMgKGUsIG4sIHQpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhlKS5tYXAoKHIpID0+IHIuaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IG4sIGZvcm1DYWxsYmFja3M6IHQgfSkpKTtcbn0sIFZpID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IGNlKFwiU3RyaXBlIFBSXCIsIFIuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IGNlKFwiU3RyaXBlIExpbmtcIiwgUi5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogY2UoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIFIuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IGNlKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIFIuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogY2UoXCJMb29wXCIsIFIubG9vcENyeXB0by5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBjZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgUi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IHppIH0gPSBQKFwiZm9ybS1jYWxsYmFja3NcIiksIFYgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBGdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBWLFxuICBvbkJsdXI6IFYsXG4gIG9uQ2hhbmdlOiBWLFxuICBvbkxvYWQ6IFYsXG4gIG9uTG9hZEVycm9yOiBWLFxuICBvblZhbGlkYXRpb25FcnJvcjogVixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IFYsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBWLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IFYsXG4gIG9uQ2hlY2tvdXRFcnJvcjogVixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IFZcbn0pLCBXID0gY2xhc3MgVyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKG4pID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFcuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBLbih0LCByID8/IFcuTk9PUCwgemkpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbdF0gPSBzO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gVy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuVy5OT09QID0gKCkgPT4ge1xufSwgVy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgbiA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoRnQua2V5b2YoKS5lbnVtKS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgblt0XSA9IFcuTk9PUDtcbiAgfSksIG47XG59LCBXLmZyb21PYmplY3QgPSAobikgPT4ge1xuICBjb25zdCB0ID0gbmV3IFcoKTtcbiAgcmV0dXJuIHQuc2V0Q2FsbGJhY2tzKEZ0LnBhcnNlKG4pKSwgdDtcbn07XG5sZXQgc3QgPSBXO1xuY29uc3QgVW4gPSBcIjAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaXCIsIGtlID0gMzIsIHFpID0gMTYsIGpuID0gMTAsIE10ID0gMjgxNDc0OTc2NzEwNjU1O1xudmFyIHVlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZS5CYXNlMzJJbmNvcnJlY3RFbmNvZGluZyA9IFwiQjMyX0VOQ19JTlZBTElEXCIsIGUuRGVjb2RlVGltZUludmFsaWRDaGFyYWN0ZXIgPSBcIkRFQ19USU1FX0NIQVJcIiwgZS5EZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWQgPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiLCBlLkVuY29kZVRpbWVOZWdhdGl2ZSA9IFwiRU5DX1RJTUVfTkVHXCIsIGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCA9IFwiRU5DX1RJTUVfU0laRV9FWENFRURcIiwgZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQgPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiLCBlLlBSTkdEZXRlY3RGYWlsdXJlID0gXCJQUk5HX0RFVEVDVFwiLCBlLlVMSURJbnZhbGlkID0gXCJVTElEX0lOVkFMSURcIiwgZS5VbmV4cGVjdGVkID0gXCJVTkVYUEVDVEVEXCIsIGUuVVVJREludmFsaWQgPSBcIlVVSURfSU5WQUxJRFwiO1xufSkodWUgfHwgKHVlID0ge30pKTtcbmNsYXNzIENlIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuLCB0KSB7XG4gICAgc3VwZXIoYCR7dH0gKCR7bn0pYCksIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCIsIHRoaXMuY29kZSA9IG47XG4gIH1cbn1cbmZ1bmN0aW9uIFlpKGUpIHtcbiAgbGV0IG4gPSBNYXRoLmZsb29yKGUoKSAqIGtlKTtcbiAgcmV0dXJuIG4gPT09IGtlICYmIChuID0ga2UgLSAxKSwgVW4uY2hhckF0KG4pO1xufVxuZnVuY3Rpb24gQmkoZSkge1xuICBjb25zdCBuID0gSGkoKSwgdCA9IG4gJiYgKG4uY3J5cHRvIHx8IG4ubXNDcnlwdG8pIHx8IG51bGw7XG4gIGlmICh0eXBlb2YgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmFuZG9tVmFsdWVzKSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgIHJldHVybiB0LmdldFJhbmRvbVZhbHVlcyhyKSwgclswXSAvIDI1NTtcbiAgICB9O1xuICBpZiAodHlwZW9mICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LnJhbmRvbUJ5dGVzKSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuICgpID0+IHQucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAyNTU7XG4gIHRocm93IG5ldyBDZSh1ZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBIaSgpIHtcbiAgcmV0dXJuIFppKCkgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA8IFwidVwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA8IFwidVwiID8gZ2xvYmFsIDogdHlwZW9mIGdsb2JhbFRoaXMgPCBcInVcIiA/IGdsb2JhbFRoaXMgOiBudWxsO1xufVxuZnVuY3Rpb24gSmkoZSwgbikge1xuICBsZXQgdCA9IFwiXCI7XG4gIGZvciAoOyBlID4gMDsgZS0tKVxuICAgIHQgPSBZaShuKSArIHQ7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gS2koZSwgbiA9IGpuKSB7XG4gIGlmIChpc05hTihlKSlcbiAgICB0aHJvdyBuZXcgQ2UodWUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke2V9YCk7XG4gIGlmIChlID4gTXQpXG4gICAgdGhyb3cgbmV3IENlKHVlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke010fTogJHtlfWApO1xuICBpZiAoZSA8IDApXG4gICAgdGhyb3cgbmV3IENlKHVlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtlfWApO1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihlKSA9PT0gITEpXG4gICAgdGhyb3cgbmV3IENlKHVlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke2V9YCk7XG4gIGxldCB0LCByID0gXCJcIjtcbiAgZm9yIChsZXQgcyA9IG47IHMgPiAwOyBzLS0pXG4gICAgdCA9IGUgJSBrZSwgciA9IFVuLmNoYXJBdCh0KSArIHIsIGUgPSAoZSAtIHQpIC8ga2U7XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gWmkoKSB7XG4gIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgPCBcInVcIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7XG59XG5mdW5jdGlvbiBXaShlLCBuKSB7XG4gIGNvbnN0IHQgPSBCaSgpLCByID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuIEtpKHIsIGpuKSArIEppKHFpLCB0KTtcbn1cbmNvbnN0IHhuID0gXCJvcF9hbmFseXRpY3NfZGV2aWNlX3Rva2VuXCIsIFFpID0gKCkgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKCh0KSA9PiB0LmluY2x1ZGVzKHhuKSk7XG4gIGlmIChlKVxuICAgIHJldHVybiBlLnNwbGl0KFwiPVwiKVsxXTtcbiAgY29uc3QgbiA9IFdpKCk7XG4gIHJldHVybiBYaShuKSwgbjtcbn0sIFhpID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBuLnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKSArIDEpLCBkb2N1bWVudC5jb29raWUgPSBgJHt4bn09JHtlfTsgcGF0aD0vOyBleHBpcmVzPSR7bi50b1VUQ1N0cmluZygpfWA7XG59O1xuZnVuY3Rpb24gZWEoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZSA9IEEoKTtcbiAgICBpZiAoZSAhPSBudWxsICYmIGUubmV4dCB8fCBlICE9IG51bGwgJiYgZS5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgbiA9IEEoKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChyKSA9PiByLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoKHIpID0+IHIuX3JlYWN0Um9vdENvbnRhaW5lcikpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IHQgPSBBKCk7XG4gICAgcmV0dXJuIHQgIT0gbnVsbCAmJiB0LlZ1ZSB8fCB0ICE9IG51bGwgJiYgdC5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIHRhKGUpIHtcbiAgdmFyIG4sIHQsIHI7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgcyA9IEEoKTtcbiAgICAgICAgcmV0dXJuICgobiA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IG4udmVyc2lvbikgfHwgKCh0ID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogdC5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBzID0gKHIgPSBBKCkpID09IG51bGwgPyB2b2lkIDAgOiByLmRvY3VtZW50LCBpID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gaSA/IGkuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBuYSgpIHtcbiAgY29uc3QgZSA9IGVhKCksIG4gPSB0YShlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiBuIH07XG59XG5jbGFzcyByYSB7XG4gIGNvbnN0cnVjdG9yKG4sIHQsIHIsIHMpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoaSkgPT4ge1xuICAgICAgaWYgKCFpLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChEdChpLm9yaWdpbikgIT09IER0KHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5wZW5wYWwgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5zb3VyY2UgJiYgaS5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IERyKEpTT04ucGFyc2UoaS5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBhLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBpLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoaSkgPT4gaS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFpLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgaS5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgaSksICExKSA6IHRoaXMubm9uY2VzLmhhcyhpLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBpKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChpLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gbiwgdGhpcy5iYXNlVXJsID0gdCwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gciwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IHM7XG4gIH1cbn1cbmNvbnN0IER0ID0gKGUpID0+IG5ldyBVUkwoZSkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gb2EoZSwgbikge1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IG5cbiAgfSkucHJvbWlzZSwgcyA9IGF3YWl0IE5yKHIpO1xuICBpZiAoIUxyKHIsIHMpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIHI7XG59XG5jbGFzcyBzYSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24obiwgdCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KG4sIHQpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiBuO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBpYSA9IChlLCBuLCB0KSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IHIgfSA9IGU7XG4gIHIucHVibGlzaGVyLnN1YnNjcmliZSgocykgPT4ge1xuICAgIGlmIChzLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaSA9IHMubG9hZGVkVmFsdWUsIGEgPSBpLmlzQXZhaWxhYmxlICYmIGkuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYSAmJiBOdChcImFwcGxlX3BheVwiLCBpLCBuLCB0LCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgTnQoXCJnb29nbGVfcGF5XCIsIGksIG4sIHQsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHQuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBOdCA9IChlLCBuLCB0LCByLCBzKSA9PiBSLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IHQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogUGUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBlKSxcbiAgbm9uQ2RlRm9ybUlucHV0czogUSh0LmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiByLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiBuXG59KSwgTHQgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBLLCBlcnJfXzogZWUgfSA9IFAoXCJvcC1mb3JtXCIpLCB0ZSA9IGNsYXNzIHRlIHtcbiAgY29uc3RydWN0b3Iobikge1xuICAgIHZhciBzO1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IFNlKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBTZSgpLCB0aGlzLmNvbnRleHQgPSBuZXcgU2UoKSwgdGhpcy5pbml0Rmxvd3MgPSBWaSgpLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5jcmVhdGVFbGVtZW50KFouQ0RFX0JSSURHRSk7XG4gICAgICAgIGkubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGkubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oaS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgIH0pLCBpLm1vdW50KFwiYm9keVwiKSwgSyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBLKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIEsoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEx0XG4gICAgICAgIH0pO1xuICAgICAgICBLKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBLKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogTHRcbiAgICAgICAgfSk7XG4gICAgICAgIEsoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGF3YWl0IGdzKGMsIHRoaXMuZGV2aWNlVG9rZW4pLCBLKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBsID0gdGUuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBhLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChsKSwgaWEodGhpcy5pbml0Rmxvd3MsIGwsIHRoaXMuZm9ybUNhbGxiYWNrcyksIEsoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IEdpKHRoaXMuaW5pdEZsb3dzLCBsLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChhLnRvdGFsQW1vdW50QXRvbXMsIGEuY3VycmVuY3kpLCBLKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIGcoXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgY29uc3QgYSA9IEcoaSk7XG4gICAgICAgIGVlKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBhKSwgZyhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGFcbiAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoYSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGkpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgICAhYSB8fCBhLnR5cGUgPT09IFouQ0RFX0JSSURHRSB8fCAoYS5ub2RlLnN0eWxlLmhlaWdodCA9IGkpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChpKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQuc2V0KGkpLCBnKFwiY2RlX2xvYWRlZFwiKSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChpKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGkpLCBpKSwgZyhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGlcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoaSwgYSA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgYyA9IFpuLnBhcnNlKGkpLCBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgdSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhhKTtcbiAgICAgIGwubmFtZSA9IGAke2N9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgZCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtsLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGQuc2VhcmNoID0gdS50b1N0cmluZygpLCBsLnNyYyA9IGQuaHJlZiwgbC5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgbC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGMsIGwpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoaSwgYSkgPT4ge1xuICAgICAgY29uc3QgYyA9IHtcbiAgICAgICAgdHlwZTogaSxcbiAgICAgICAgbm9kZTogYSxcbiAgICAgICAgbW91bnQ6IChsKSA9PiB7XG4gICAgICAgICAgdmFyIHU7XG4gICAgICAgICAgKHUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwpKSA9PSBudWxsIHx8IHUuYXBwZW5kQ2hpbGQoYSksIGcoXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiBpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogYy50eXBlLCBub2RlOiBjLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW1ouQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW1ouQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtaLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbWi5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW1ouQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2ldID0gYywgYztcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoaSkgPT4ge1xuICAgICAgY29uc3QgYSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBhLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIGEuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgaS5zdHlsZXMgJiYgYS5hcHBlbmQoXCJzdHlsZXNcIiwgTXIoaS5zdHlsZXMpKSwgYS5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgYTtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoaSkgPT4ge1xuICAgICAgb2EoaS5ub2RlKS50aGVuKChhKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihpLnR5cGUsIGEpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGkudHlwZSA9PT0gWi5DREVfQlJJREdFICYmIHRoaXMuYW55Q2RlQ29ubi5zZXQoYSk7XG4gICAgICB9KS5jYXRjaCgoYSkgPT4gZWUoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGEpKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgZyhcInN1Ym1pdF9jYXJkXCIpO1xuICAgICAgY29uc3QgaSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghaSkge1xuICAgICAgICBlZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFIuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogaSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBQZShpLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoaS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCkpIHtcbiAgICAgICAgZWUoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGEgPSB7XG4gICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogJC5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiAkLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6ICQuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogJC5hdXRob3JpemVuZXRBcHBsZVBheVxuICAgICAgfSwgYyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtsLCB1XSkgPT4gKHtcbiAgICAgICAgbmFtZTogYVtsXSA/PyBsLFxuICAgICAgICAuLi51LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGcoXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLCB7XG4gICAgICAgIGF2YWlsYWJsZV9wYXltZW50X21ldGhvZHM6IGNcbiAgICAgIH0pLCBjO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChpLCBhKSA9PiB7XG4gICAgICBnKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7XG4gICAgICAgIG1ldGhvZDogaSxcbiAgICAgICAgc2V0dGluZ3M6IGFcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghYykge1xuICAgICAgICBlZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlICQucG9ja3l0UGF5cGFsOlxuICAgICAgICAgIHJldHVybiBSLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogUGUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoYy5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogYSB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWwpIHtcbiAgICAgICAgICAgIGVlKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbC5zdGFydEZsb3coYSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWwpIHtcbiAgICAgICAgICAgIGVlKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFsKSB7XG4gICAgICAgICAgICBlZShcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgZWUoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQubG9vcENyeXB0bzpcbiAgICAgICAgICByZXR1cm4gUi5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBQZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3J5cHRvXCIsIFwibG9vcFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoYy5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIFllKGkpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgaTtcbiAgICAgIEsoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgYSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgYSAmJiBhLm5vZGUucmVtb3ZlKCk7XG4gICAgICAoaSA9IEEoKSkgPT0gbnVsbCB8fCBpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBpcygpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhpKTtcbiAgICB9LCB0ZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMzNcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gbi5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLm4sIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBzdC5mcm9tT2JqZWN0KG4pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IG4uZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgc2EoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IFFpKCksIHNzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHQsIHZlcnNpb246IHIgfSA9IG5hKCk7XG4gICAgY24odGhpcy5iYXNlVXJsKS50aGVuKChpKSA9PiB7XG4gICAgICBpZiAoIW90LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGEgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogaSxcbiAgICAgICAgICBmcmFtZXdvcms6IHQsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogcixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIG90LnNldChhKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgcmEodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIChzID0gQSgpKSA9PSBudWxsIHx8IHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xudGUub2pzRmxvd3MgPSBSLCB0ZS5hc3NpZ25Bc1NpbmdsZXRvbiA9IChuKSA9PiB7XG4gIGlmICh0ZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gbjtcbn0sIHRlLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCB0ZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKG4sIHQsIHIsIHMpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IG4uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChuLmJhc2VVcmwgPz8geHQpLm9yaWdpbixcbiAgZm9ybURpdjogcyxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHQuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IHIsXG4gIGN1c3RvbUluaXRQYXJhbXM6IG4uY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgT3QgPSB0ZTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7TWUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtNZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke01lLnJlZC5ib2xkKFwib2pzL1wiKX0ke01lLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbnokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18oXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyhcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgUGF5SW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheUluU3RhdGUyKSA9PiB7XG4gIFBheUluU3RhdGUyW1wiSURMRVwiXSA9IFwiaWRsZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQkFMQU5DRVwiXSA9IFwiY29uZmlybWluZ0JhbGFuY2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcImNvbmZpcm1pbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiVVBEQVRJTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwidXBkYXRpbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiU0lHTklOR19NRVNTQUdFXCJdID0gXCJzaWduaW5nTWVzc2FnZVwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX0NVU1RPTUVSXCJdID0gXCJjcmVhdGluZ0N1c3RvbWVyXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChPdC5nZXRJbnN0YW5jZSgpKSB7XG4gICAgT3QuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IE90LmdldEluc3RhbmNlKCkgPz8gbmV3IE90KHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiByZXN1bHQubG9hZGVkVmFsdWUud2lkZ2V0UHJvcHMsXG4gICAgICAgICAgY29uZmlnOiByZXN1bHQubG9hZGVkVmFsdWUuaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgIXJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IG51bGwsXG4gICAgICAgICAgY29uZmlnOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWdcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50LCBDYXJkRWxlbWVudCwgQ2FyZEV4cGlyeUVsZW1lbnQsIENhcmROdW1iZXJFbGVtZW50LCBFbGVtZW50c0Zvcm0sIEZpZWxkTmFtZSwgUGF5SW5TdGF0ZSwgdXNlT3BlblBheUVsZW1lbnRzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxpQkFBQUEsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsZUFBQUMsSUFBYSxhQUFBQyxJQUFXLFVBQUFDLElBQVEsV0FBQUMsVUFBZTtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFRO0FBRWYsTUFBTUMsS0FBa0JiLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FBQ1gsQ0FBQyxHQUVLYyxLQUFxQixNQUFNO0FBQy9CLFFBQU1DLElBQVVkLEdBQVdZLEVBQWU7QUFDMUMsTUFBSSxDQUFDRTtBQUNILFVBQU0sSUFBSSxNQUFNLG1FQUFtRTtBQUVyRixTQUFPQTtBQUNULEdBRU1DLEtBQUssOEJBQThCQyxLQUFLUixFQUFJLE9BQU87QUFBQSxFQUN2RCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUMsR0FBR1MsS0FBS1QsRUFBSSxNQUFNUSxFQUFFLEdBQUdFLEtBQUtWLEVBQUksT0FBTztBQUFBLEVBQ3RDLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFNBQVNBLEVBQUks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ZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgIk1lIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJ4dCIsICJHbiIsICJWbiIsICJ6biIsICJxbiIsICJZbiIsICJ0dCIsICJuIiwgIkJuIiwgIkhuIiwgIkpuIiwgIkciLCAiS24iLCAidCIsICJyIiwgInMiLCAiSSIsICJDIiwgIlUiLCAicCIsICIkdCIsICJHdCIsICJWdCIsICJ6dCIsICJaIiwgIlpuIiwgIlZlIiwgIlduIiwgIkIiLCAiUW4iLCAiWG4iLCAiZXIiLCAidHIiLCAibnIiLCAicnIiLCAib3IiLCAic3IiLCAiaXIiLCAiYXIiLCAiY3IiLCAibHIiLCAiSWUiLCAidXIiLCAiZHIiLCAicHIiLCAibXIiLCAieXIiLCAiZnIiLCAiX3IiLCAiaXQiLCAiaHIiLCAiZ3IiLCAid3IiLCAiVCIsICJiciIsICJ2ciIsICJxdCIsICJFciIsICJDciIsICJZdCIsICJTciIsICJQciIsICJrciIsICJ6ZSIsICJtdCIsICJhdCIsICJBciIsICJJciIsICJpIiwgImEiLCAiUnIiLCAiVHIiLCAiRnIiLCAiYyIsICJNciIsICJRIiwgIkRyIiwgIk5yIiwgIkxyIiwgInciLCAiT3IiLCAiQnQiLCAiSHQiLCAiVXIiLCAianIiLCAiaGUiLCAieHIiLCAiJHIiLCAiSnQiLCAiR3IiLCAiVnIiLCAienIiLCAieXQiLCAiS3QiLCAiZnQiLCAiWnQiLCAicXIiLCAiWXIiLCAiV3QiLCAiQnIiLCAiSHIiLCAiSnIiLCAiS3IiLCAiWnIiLCAiUXQiLCAiV3IiLCAiUXIiLCAiWHIiLCAiZW8iLCAidG8iLCAibm8iLCAicm8iLCAib28iLCAic28iLCAicmUiLCAiZGUiLCAiUCIsICJudCIsICJvZSIsICJpbyIsICJfIiwgIlh0IiwgImZlIiwgImplIiwgInhlIiwgInllIiwgImFvIiwgInkiLCAiZiIsICJoIiwgInYiLCAiYiIsICJtIiwgImNvIiwgIk0iLCAicWUiLCAiV2UiLCAiJGUiLCAiUmUiLCAiX3QiLCAiZW4iLCAidG4iLCAicm4iLCAiaHQiLCAiTGUiLCAiY3QiLCAibW8iLCAicnQiLCAibG8iLCAiUWUiLCAidW8iLCAiRGUiLCAicG8iLCAibHQiLCAieW8iLCAiZm8iLCAibmUiLCAiaG8iLCAiZ3QiLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAidm8iLCAiRW8iLCAic24iLCAid3QiLCAiQ28iLCAiU28iLCAiYnQiLCAiUG8iLCAidnQiLCAia28iLCAiQW8iLCAiSW8iLCAiUm8iLCAiVG8iLCAiRm8iLCAiTW8iLCAiRG8iLCAiTm8iLCAiTG8iLCAiT28iLCAiVW8iLCAiam8iLCAieG8iLCAiJG8iLCAiR28iLCAiYW4iLCAiVm8iLCAiem8iLCAicW8iLCAiWW8iLCAiQm8iLCAiSG8iLCAiSm8iLCAiS28iLCAiWm8iLCAiV28iLCAiUW8iLCAiRSIsICJrIiwgIlNlIiwgIlllIiwgIkV0IiwgIlhvIiwgImVzIiwgIlhlIiwgIkEiLCAib3QiLCAiQ3QiLCAidHMiLCAibnMiLCAicnMiLCAiTmUiLCAib3MiLCAic3MiLCAiaXMiLCAiVXQiLCAiTiIsICJjcyIsICJhcyIsICJscyIsICJEIiwgImdlIiwgInVzIiwgImRzIiwgInEiLCAicHMiLCAibXMiLCAieXMiLCAid2UiLCAiZnMiLCAiU3QiLCAiX3MiLCAidXQiLCAieW4iLCAiaHMiLCAiZHQiLCAiZ3MiLCAiWSIsICJfbiIsICJobiIsICJ3cyIsICJicyIsICJsIiwgInduIiwgInBhIiwgInZzIiwgIlRlIiwgIkgiLCAiRXMiLCAiQmUiLCAiQ3MiLCAiU3MiLCAiUHMiLCAiSGUiLCAidm4iLCAia3MiLCAiQXMiLCAiSXMiLCAicHQiLCAiUnMiLCAiVHMiLCAiRnMiLCAiTXMiLCAiRHMiLCAiQ24iLCAiU24iLCAiUG4iLCAic2UiLCAiTnMiLCAiT2UiLCAiTHMiLCAiT3MiLCAiVXMiLCAidmUiLCAianMiLCAidSIsICJkIiwgIlIiLCAieHMiLCAiSmUiLCAiZXQiLCAiS2UiLCAiJHMiLCAiUm4iLCAieiIsICJtZSIsICJHcyIsICJWcyIsICJMIiwgIlgiLCAieCIsICIkbiIsICJGZSIsICJpZSIsICJaZSIsICJhZSIsICJiZSIsICJUbiIsICJGbiIsICJ6cyIsICJxcyIsICJVZSIsICJNbiIsICJZcyIsICJCcyIsICJsZSIsICJFZSIsICJIcyIsICJKcyIsICJLcyIsICJEbiIsICJacyIsICJXcyIsICJObiIsICJRcyIsICJYcyIsICJlaSIsICJ0aSIsICJuaSIsICJfZSIsICJBZSIsICJyaSIsICJMbiIsICJvaSIsICJzaSIsICJQdCIsICJpaSIsICJhaSIsICJjaSIsICJsaSIsICJ1aSIsICJTIiwgImt0IiwgIkF0IiwgImRpIiwgIl9pIiwgImZpIiwgInBpIiwgIm1pIiwgInlpIiwgImhpIiwgImdpIiwgImoiLCAiT24iLCAid2kiLCAiYmkiLCAiSXQiLCAidmkiLCAiRWkiLCAiSiIsICJSdCIsICJDaSIsICJTaSIsICJwZSIsICJUdCIsICJGIiwgIlBpIiwgImtpIiwgIkFpIiwgIklpIiwgIkZpIiwgIlJpIiwgIlRpIiwgIk8iLCAiTWkiLCAiRGkiLCAiTmkiLCAiUGUiLCAiTGkiLCAiVWkiLCAiT2kiLCAiamkiLCAieGkiLCAiJGkiLCAiY2UiLCAiR2kiLCAiVmkiLCAiemkiLCAiViIsICJGdCIsICJXIiwgInN0IiwgIlVuIiwgImtlIiwgInFpIiwgImpuIiwgIk10IiwgInVlIiwgIkNlIiwgIllpIiwgIkJpIiwgIkhpIiwgIlppIiwgIkppIiwgIktpIiwgIldpIiwgInhuIiwgIlFpIiwgIlhpIiwgImVhIiwgInRhIiwgIm5hIiwgInJhIiwgIkR0IiwgIm9hIiwgInNhIiwgImlhIiwgIk50IiwgIkx0IiwgIksiLCAiZWUiLCAidGUiLCAiT3QiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgImciLCAidmVyYiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgImZyb20iLCAicGFjayIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInokMSIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQVdYX0xPQURJTkciLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJSZXF1aXJlZFN0cmluZyIsICJGaWVsZE5hbWUiLCAiT3B0aW9uYWxTdHJpbmciLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJwcm9wcyIsICJmb3JtQ2FsbGJhY2tzIiwgIk90IiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAidXNlU3RhdGUiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAidXNlQ2FsbGJhY2siLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImxvb3BDb25maWciLCAic2V0TG9vcENvbmZpZyIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAidXNlRWZmZWN0IiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgImpzeCIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAic3R5bGVzIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXJsIiwgIkNhcmRDdmNFbGVtZW50IiwgIkVsZW1lbnRUeXBlRW51bSIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K
6552
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBNZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCB4dCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgR24gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBWbiA9IHokMS5hcnJheShHbiksIHpuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHFuID0geiQxLmFycmF5KHpuKSwgWW4gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIHR0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBZbltuXSA/PyBlO1xufSwgQm4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEhuID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gdHQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKCh0KSA9PiBg4oCiICR7dHQodC5tc2cpfWApLmpvaW4oYFxuYCl9YCwgSm4gPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgodCkgPT4gYC0gJHt0LnBhdGguam9pbihcIi9cIil9OiAke3QubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEcgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChCbihlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFZuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gSG4obikgOiBxbi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IEpuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIHR0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIEtuID0gKGUsIG4sIHQpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICB0KGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyICQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlKSkoJCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSgkKTsgY29uc3QgSSA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgQyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgTSA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5BRERSRVNTID0gXCJhZGRyZXNzXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgJHQgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBHdCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoR3QgfHwge30pO1xuY29uc3QgVnQgPSB6JDEubmF0aXZlRW51bShHdCksIHp0ID0geiQxLnVuaW9uKFskdCwgVnRdKTtcbnZhciBaID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRCA9IFwiY2FyZFwiLCBlLkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCBlLkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgZSkpKFogfHwge30pO1xuY29uc3QgWm4gPSB6JDEubmF0aXZlRW51bShaKSwgVmUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IE0oeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IE0oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgV24gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogQyxcbiAgZXhwaXJ5OiBDLFxuICBjdmM6IENcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogQyxcbiAgY29sb3I6IEMsXG4gIGZvbnRGYW1pbHk6IEMsXG4gIGZvbnRTaXplOiBDLFxuICBmb250V2VpZ2h0OiBDLFxuICBtYXJnaW46IEMsXG4gIHBhZGRpbmc6IEMsXG4gIGxldHRlclNwYWNpbmc6IEMsXG4gIGxpbmVIZWlnaHQ6IEMsXG4gIGhpZGVJY29uOiBDXG59KTtcbmNvbnN0IEIgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgUW4gPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBYbiA9IHokMS5vYmplY3QoeyB0eXBlOiBRbiB9KSwgZXIgPSBCLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgdHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogZXIsXG4gIGVsZW1lbnRUeXBlOiBWdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgbnIgPSBCLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCByciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBucixcbiAgbWVzc2FnZTogSSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIG9yID0gQi5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBpciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBvcixcbiAgZWxlbWVudFR5cGU6IHp0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgc3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogSVxufSksIGFyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEIuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEksXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShWZSlcbn0pLCBjciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIEllID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogSSxcbiAgbGFzdE5hbWU6IEksXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiBDXG59KSwgdXIgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBDLFxuICBsYXN0TmFtZTogQyxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IEMsXG4gIGFkZHJlc3M6IEMsXG4gIGNpdHk6IEMsXG4gIHN0YXRlOiBDXG59KSwgZHIgPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIHByID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGRyLFxuICBzZXNzaW9uSWQ6IEksXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVmUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogQyxcbiAgcGF5bWVudFJvdXRlSWQ6IENcbn0pLmV4dGVuZChJZS5zaGFwZSksIG1yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEIuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgeXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIGZyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBYbixcbiAgdHIsXG4gIHJyLFxuICBpcixcbiAgc3IsXG4gIGFyLFxuICBwcixcbiAgbXIsXG4gIHlyLFxuICBjcixcbiAgbHJcbl0pLCBfciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBmcixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBNKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBNKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IE0oeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBNKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBzdCA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBNKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIGhyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBnciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoaHIpXG59KSwgd3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIGdyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogSWUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE0oeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBNKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBJZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IE0oeiQxLnN0cmluZygpKVxufSk7XG52YXIgVCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgZS5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIGUuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgZSkpKFQgfHwge30pO1xuY29uc3QgYnIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCB2ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIHF0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBNKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBNKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IE0oeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IE0oeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBNKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEVyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBDciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShXbiksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBNKHN0KSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBNKHokMS5hcnJheShxdCkpXG59KSwgWXQgPSAoZSkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbdCwgcl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9ICR0LnBhcnNlKHQpO1xuICAgICAgQXJyYXkuaXNBcnJheShyKSA/IG5baV0gPSByIDogQXJyYXkuaXNBcnJheShyLl9lcnJvcnMpICYmIChuW2ldID0gci5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCBuO1xufSwgU3IgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBQciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBrciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIHplID0gYXN5bmMgKGUpID0+IHtcbiAgZm9yIChsZXQgdCA9IDA7IHQgPCAxMDsgdCsrKVxuICAgIG10KCkgfHwgYXdhaXQgYXQoNTAwKTtcbiAgaWYgKCFtdCgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZShlKTtcbn0sIEFyID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IGF3YWl0IHplKGUpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiB0LmVsZW1lbnRzKG4pLFxuICAgIHN0cmlwZTogdFxuICB9O1xufSwgSXIgPSBhc3luYyAoZSwgbiwgdCwgciwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgemUoZSksIGEgPSBrclt0LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiBuLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBhdCA9IChlKSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBzZXRUaW1lb3V0KG4sIGUpO1xufSksIG10ID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIFJyID0gYXN5bmMgKGUpID0+IG5ldyBQcm9taXNlKChuLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgZS5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgciksIG4ocik7XG4gICAgfSksIGUub24oXCJ0b2tlblwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgcik7XG4gICAgfSksIGUub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdChyKTtcbiAgfVxufSksIFRyID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgaWYgKCFlLnN0cmlwZV9wayB8fCAhZS5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgemUoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChyLmVycm9yKVxuICAgIHRocm93IG4uY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke3IuZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIG4uY29tcGxldGUoXCJzdWNjZXNzXCIpLCByO1xufSwgRnIgPSBhc3luYyAoZSkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgdCA9IGF3YWl0IChhd2FpdCB6ZShlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IGUuc3RyaXBlX3BtX2lkXG4gIH0pLCByID0gKGkgPSB0LnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChyID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgZS5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCB0LnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyByID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gdC5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSB0LnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBNciA9IChlKSA9PiBKU09OLnN0cmluZ2lmeShlKSwgUSA9IChlLCBuKSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGksIHMpID0+IHtcbiAgY29uc3QgYSA9IHMuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gYSA/IHsgLi4uaSwgW2FdOiBzLnZhbHVlIH0gOiBpO1xufSwge30pLCBEciA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIF9yLnBhcnNlKGUpO1xuICB9IGNhdGNoIChuKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZSwgbiksIG47XG4gIH1cbn0sIE5yID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0geyB0eXBlOiBcInBpbmdcIiB9LCB0ID0gYXdhaXQgZS5zZW5kKG4pO1xuICAgIGlmICh0ICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgbiksICExO1xuICB9XG59LCBMciA9IChlLCBuKSA9PiAhIWUgJiYgbiwgdyA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IE9yID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IEJ0ID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiB3KHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiB3KHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogdyh6JDEubnVtYmVyKCkpXG59KSwgSHQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBVciA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBqciA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiB3KFVyKVxufSksIGhlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHhyID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCAkciA9IHokMS5vYmplY3Qoe1xuICBpZDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoeHIpLFxuICB0cmlhbF9zdGFydDogdyh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoeiQxLnN0cmluZygpKVxufSksIEp0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBHciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEp0KSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIFZyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQnRcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShWciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEdyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShKdClcbn0pLCB5dCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoJHIpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KHpyKSxcbiAgcHJvY2Vzc29yc191c2VkOiB3KHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIEt0ID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IHl0LFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IHcoeXQpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQnQpXG59KSwgZnQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogdyh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoSHQpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDoganIsXG4gIHN1YnNfcHJldmlldzogdyhLdCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KGhlKVxufSksIFp0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoZnQuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChmdC5zaGFwZSlcbl0pLCBxciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBZciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1p0LCBxciwgWXJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShIdCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBoZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IHcoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFd0ID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoQnIpO1xuY29uc3QgSHIgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEpyKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSksIFpyID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogdyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGhlLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogS3Iub3B0aW9uYWwoKVxufSkuZXh0ZW5kKEhyLnNoYXBlKS5leHRlbmQoWnIuc2hhcGUpO1xuY29uc3QgUXQgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogdXIsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogaGUsXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBJZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGhlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgV3IgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogdyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiB3KHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiB3KHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IHcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IHcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogdyh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogdyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBRciA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBoZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGVvID0geiQxLm9iamVjdCh7fSksIHRvID0gKGUpID0+IGUucmVkdWNlKChuLCB0KSA9PiBuICsgdCwgMCk7XG5mdW5jdGlvbiBubyhlLCBuKSB7XG4gIHZhciB0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICB0ID8gdChlLCBuKSA6IGUuX19wcm90b19fID0gbjtcbn1cbmZ1bmN0aW9uIHJvKGUsIG4pIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciB0ID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHQgJiYgdChlLCBuKTtcbn1cbnZhciBvbyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIGUodCwgcik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihuLCB0KSB7XG4gICAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyh0KSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZShuLCB0KTtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IG47XG4gICAgfVxuICAgIG4ucHJvdG90eXBlID0gdCA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUodCkgOiAoci5wcm90b3R5cGUgPSB0LnByb3RvdHlwZSwgbmV3IHIoKSk7XG4gIH07XG59KCksIGlvID0gZnVuY3Rpb24oZSkge1xuICBvbyhuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gZS5jYWxsKHRoaXMsIHQsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBubyhzLCBpLnByb3RvdHlwZSksIHJvKHMpLCBzO1xuICB9XG4gIHJldHVybiBuO1xufShFcnJvcik7XG5jb25zdCByZSA9IChlKSA9PiBhc3luYyAobikgPT4ge1xuICB2YXIgdCwgcjtcbiAgdHJ5IHtcbiAgICAociA9ICh0ID0gbi5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgci5jYWxsKHQpLCBnKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICBjcG06IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgaSA9IGF3YWl0IGUobik7XG4gICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgIGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5pXG4gICAgfSksIGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoaS5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgIGVsc2UgaWYgKGkubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgaS5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICBpLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICBpLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgaS5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGNvbnN0IHMgPSBHKGkpLCBhID0gYXdhaXQgZm4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGEpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYSB9KTtcbiAgfVxufSwgZGUgPSAoZSkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZShuKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHsgZXJyX186IHIgfSA9IFAoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIGkgPSBHKHQpLCBzID0gYXdhaXQgZm4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGkpO1xuICAgIHJldHVybiByKHMsIGksIHQpLCBnKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBpLCBlcnJvckNvZGU6IHMgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGksIGVycm9yQ29kZTogcywgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBQID0gKGUpID0+IHtcbiAgY29uc3QgbiA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke01lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7TWUuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5yKTtcbiAgfSwgdCA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtNZS5yZWQuYm9sZChcIm9qcy9cIil9JHtNZS5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLnIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogbixcbiAgICBlcnI6IHQsXG4gICAgbG9nX186IG4sXG4gICAgZXJyX186IHRcbiAgfTtcbn07XG52YXIgbnQgPSBmdW5jdGlvbihlLCBuKSB7XG4gIHJldHVybiBudCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB0Ll9fcHJvdG9fXyA9IHI7XG4gIH0gfHwgZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGkgaW4gcikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGkpICYmICh0W2ldID0gcltpXSk7XG4gIH0sIG50KGUsIG4pO1xufTtcbmZ1bmN0aW9uIG9lKGUsIG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9IFwiZnVuY3Rpb25cIiAmJiBuICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKG4pICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgbnQoZSwgbik7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSBuID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShuKSA6ICh0LnByb3RvdHlwZSA9IG4ucHJvdG90eXBlLCBuZXcgdCgpKTtcbn1cbmZ1bmN0aW9uIHNvKGUsIG4sIHQsIHIpIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiB0ID8gcyA6IG5ldyB0KGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAodCB8fCAodCA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIGEoXyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYShfKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBzKGQudmFsdWUpIDogaShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWHQoZSwgbikge1xuICB2YXIgdCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgdVswXSAmJiAodCA9IDApKSwgdDsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBpICYmIChzID0gdVswXSAmIDIgPyBpLnJldHVybiA6IHVbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgdVsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAodSA9IFt1WzBdICYgMiwgcy52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHQubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHQubGFiZWwrKywgaSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gdC5vcHMucG9wKCksIHQudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IHQudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghcyB8fCB1WzFdID4gc1swXSAmJiB1WzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHQubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICB0LmxhYmVsID0gc1sxXSwgcyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgdC5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSBzWzJdLCB0Lm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgdC5vcHMucG9wKCksIHQudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBuLmNhbGwoZSwgdCk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZmUoZSkge1xuICB2YXIgbiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgdCA9IG4gJiYgZVtuXSwgciA9IDA7XG4gIGlmICh0KSByZXR1cm4gdC5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIHIgPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbcisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IobiA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIGplKGUsIG4pIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghdCkgcmV0dXJuIGU7XG4gIHZhciByID0gdC5jYWxsKGUpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShpID0gci5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmICh0ID0gci5yZXR1cm4pICYmIHQuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24geGUoZSwgbiwgdCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIGkgPSBuLmxlbmd0aCwgczsgciA8IGk7IHIrKylcbiAgICAocyB8fCAhKHIgaW4gbikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobiwgMCwgcikpLCBzW3JdID0gbltyXSk7XG4gIHJldHVybiBlLmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKTtcbn1cbmZ1bmN0aW9uIHllKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB5ZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyB5ZShlKTtcbn1cbmZ1bmN0aW9uIGFvKGUsIG4sIHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0LmFwcGx5KGUsIG4gfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYSh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZikudGhlbih5LCBfKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoeSwgZikge1xuICAgIHJbeV0gJiYgKGlbeV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odiwgYikge1xuICAgICAgICBzLnB1c2goW3ksIGgsIHYsIGJdKSA+IDEgfHwgbCh5LCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIGYgJiYgKGlbeV0gPSBmKGlbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbCh5LCBmKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoclt5XShmKSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgbShzWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIHllID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBfKSA6IG0oc1swXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgbChcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gXyh5KSB7XG4gICAgbChcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIG0oeSwgZikge1xuICAgIHkoZiksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gY28oZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCB0O1xuICByZXR1cm4gbiA/IG4uY2FsbChlKSA6IChlID0gdHlwZW9mIGZlID09IFwiZnVuY3Rpb25cIiA/IGZlKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHQgPSB7fSwgcihcIm5leHRcIiksIHIoXCJ0aHJvd1wiKSwgcihcInJldHVyblwiKSwgdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdCk7XG4gIGZ1bmN0aW9uIHIocykge1xuICAgIHRbc10gPSBlW3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIGEgPSBlW3NdKGEpLCBpKGMsIGwsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIHMoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gRChlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBxZShlKSB7XG4gIHZhciBuID0gZnVuY3Rpb24ocikge1xuICAgIEVycm9yLmNhbGwociksIHIuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgdCA9IGUobik7XG4gIHJldHVybiB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCB0O1xufVxudmFyIFdlID0gcWUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHQgPyB0Lmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyB0Lm1hcChmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyByLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gdDtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gJGUoZSwgbikge1xuICBpZiAoZSkge1xuICAgIHZhciB0ID0gZS5pbmRleE9mKG4pO1xuICAgIDAgPD0gdCAmJiBlLnNwbGljZSh0LCAxKTtcbiAgfVxufVxudmFyIFJlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gbiwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIHQsIHIsIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gZmUoYSksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgbiA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmICh0ID0gYy5yZXR1cm4pICYmIHQuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChEKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIHMgPSBoIGluc3RhbmNlb2YgV2UgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIF8gPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKF8pIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgbSA9IGZlKF8pLCB5ID0gbS5uZXh0KCk7ICF5LmRvbmU7IHkgPSBtLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGYgPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgX3QoZik7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCBoIGluc3RhbmNlb2YgV2UgPyBzID0geGUoeGUoW10sIGplKHMpKSwgamUoaC5lcnJvcnMpKSA6IHMucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICByID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGkgPSBtLnJldHVybikgJiYgaS5jYWxsKG0pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgV2Uocyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQ7XG4gICAgaWYgKG4gJiYgbiAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgX3Qobik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKG4uY2xvc2VkIHx8IG4uX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBuLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAodCA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBbXSkucHVzaChuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gdCA9PT0gbiB8fCBBcnJheS5pc0FycmF5KHQpICYmIHQuaW5jbHVkZXMobik7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheSh0KSA/ICh0LnB1c2gobiksIHQpIDogdCA/IFt0LCBuXSA6IG47XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdCA9PT0gbiA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHQpICYmICRlKHQsIG4pO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHQgJiYgJGUodCwgbiksIG4gaW5zdGFuY2VvZiBlICYmIG4uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gbmV3IGUoKTtcbiAgICByZXR1cm4gbi5jbG9zZWQgPSAhMCwgbjtcbiAgfSgpLCBlO1xufSgpLCBlbiA9IFJlLkVNUFRZO1xuZnVuY3Rpb24gdG4oZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIFJlIHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIEQoZS5yZW1vdmUpICYmIEQoZS5hZGQpICYmIEQoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBfdChlKSB7XG4gIEQoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgbm4gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgcm4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCB4ZShbZSwgbl0sIGplKHQpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIG9uKGUpIHtcbiAgcm4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGh0KCkge1xufVxuZnVuY3Rpb24gTGUoZSkge1xuICBlKCk7XG59XG52YXIgY3QgPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmlzU3RvcHBlZCA9ICExLCB0ID8gKHIuZGVzdGluYXRpb24gPSB0LCB0bih0KSAmJiB0LmFkZChyKSkgOiByLmRlc3RpbmF0aW9uID0gbW8sIHI7XG4gIH1cbiAgcmV0dXJuIG4uY3JlYXRlID0gZnVuY3Rpb24odCwgciwgaSkge1xuICAgIHJldHVybiBuZXcgcnQodCwgciwgaSk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dCh0KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHQpKTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgbi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpO1xuICB9LCBuLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG4ucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG47XG59KFJlKSwgbG8gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIFFlKGUsIG4pIHtcbiAgcmV0dXJuIGxvLmNhbGwoZSwgbik7XG59XG52YXIgdW8gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBuO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHQubmV4dChuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgRGUocik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICB0LmVycm9yKG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBEZShyKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBEZShuKTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChuLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgbi5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICBEZSh0KTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgcnQgPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIsIGkpIHtcbiAgICB2YXIgcyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChEKHQpIHx8ICF0KVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogdCA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiByID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIG5uLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZSh0KSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogdC5uZXh0ICYmIFFlKHQubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiB0LmVycm9yICYmIFFlKHQuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogdC5jb21wbGV0ZSAmJiBRZSh0LmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgdW8oYSksIHM7XG4gIH1cbiAgcmV0dXJuIG47XG59KGN0KTtcbmZ1bmN0aW9uIERlKGUpIHtcbiAgb24oZSk7XG59XG5mdW5jdGlvbiBwbyhlKSB7XG4gIHRocm93IGU7XG59XG52YXIgbW8gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGh0LFxuICBlcnJvcjogcG8sXG4gIGNvbXBsZXRlOiBodFxufSwgbHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiB5byhlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gZm8oZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyB5byA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkocik7XG4gICAgfSwgdCk7XG4gIH07XG59XG52YXIgbmUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgbiAmJiAodGhpcy5fc3Vic2NyaWJlID0gbik7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LnNvdXJjZSA9IHRoaXMsIHQub3BlcmF0b3IgPSBuLCB0O1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihuLCB0LCByKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gaG8obikgPyBuIDogbmV3IHJ0KG4sIHQsIHIpO1xuICAgIHJldHVybiBMZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShuKTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICBuLmVycm9yKHQpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBndCh0KSwgbmV3IHQoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgcnQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG4oYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIHIuc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0O1xuICAgIHJldHVybiAodCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnN1YnNjcmliZShuKTtcbiAgfSwgZS5wcm90b3R5cGVbbHRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIHQgPSAwOyB0IDwgYXJndW1lbnRzLmxlbmd0aDsgdCsrKVxuICAgICAgblt0XSA9IGFyZ3VtZW50c1t0XTtcbiAgICByZXR1cm4gZm8obikodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXM7XG4gICAgcmV0dXJuIG4gPSBndChuKSwgbmV3IG4oZnVuY3Rpb24ociwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICB0LnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIG5ldyBlKG4pO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gZ3QoZSkge1xuICB2YXIgbjtcbiAgcmV0dXJuIChuID0gZSA/PyBubi5Qcm9taXNlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIF9vKGUpIHtcbiAgcmV0dXJuIGUgJiYgRChlLm5leHQpICYmIEQoZS5lcnJvcikgJiYgRChlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGhvKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIGN0IHx8IF9vKGUpICYmIHRuKGUpO1xufVxuZnVuY3Rpb24gZ28oZSkge1xuICByZXR1cm4gRChlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gd28oZSkge1xuICByZXR1cm4gZnVuY3Rpb24obikge1xuICAgIGlmIChnbyhuKSlcbiAgICAgIHJldHVybiBuLmxpZnQoZnVuY3Rpb24odCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHQsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gYm8oZSwgbiwgdCwgciwgaSkge1xuICByZXR1cm4gbmV3IHZvKGUsIG4sIHQsIHIsIGkpO1xufVxudmFyIHZvID0gZnVuY3Rpb24oZSkge1xuICBvZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgdCkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gYSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSByID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgdC5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHQuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHQuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdDtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgciA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIXIgJiYgKCh0ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgfHwgdC5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIG47XG59KGN0KSwgRW8gPSBxZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHNuID0gZnVuY3Rpb24oZSkge1xuICBvZShuLCBlKTtcbiAgZnVuY3Rpb24gbigpIHtcbiAgICB2YXIgdCA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICExLCB0LmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCB0Lm9ic2VydmVycyA9IFtdLCB0LmlzU3RvcHBlZCA9ICExLCB0Lmhhc0Vycm9yID0gITEsIHQudGhyb3duRXJyb3IgPSBudWxsLCB0O1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gbmV3IHd0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiByLm9wZXJhdG9yID0gdCwgcjtcbiAgfSwgbi5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgRW8oKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgTGUoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmN1cnJlbnRPYnNlcnZlcnMgfHwgKHIuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oci5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gZmUoci5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIExlKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaGFzRXJyb3IgPSByLmlzU3RvcHBlZCA9ICEwLCByLnRocm93bkVycm9yID0gdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IHIub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcih0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXM7XG4gICAgTGUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodC5fdGhyb3dJZkNsb3NlZCgpLCAhdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgdC5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgciA9IHQub2JzZXJ2ZXJzOyByLmxlbmd0aDsgKVxuICAgICAgICAgIHIuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAoKHQgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG4ucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHQpO1xuICB9LCBuLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBlbiA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2godCksIG5ldyBSZShmdW5jdGlvbigpIHtcbiAgICAgIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsICRlKGMsIHQpO1xuICAgIH0pKTtcbiAgfSwgbi5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLCBpID0gci5oYXNFcnJvciwgcyA9IHIudGhyb3duRXJyb3IsIGEgPSByLmlzU3RvcHBlZDtcbiAgICBpID8gdC5lcnJvcihzKSA6IGEgJiYgdC5jb21wbGV0ZSgpO1xuICB9LCBuLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyBuZSgpO1xuICAgIHJldHVybiB0LnNvdXJjZSA9IHRoaXMsIHQ7XG4gIH0sIG4uY3JlYXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiBuZXcgd3QodCwgcik7XG4gIH0sIG47XG59KG5lKSwgd3QgPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gdCwgaS5zb3VyY2UgPSByLCBpO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIChpID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwociwgdCk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIChpID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKHIsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByO1xuICAgIChyID0gKHQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHQpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIHJldHVybiAoaSA9IChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogZW47XG4gIH0sIG47XG59KHNuKSwgQ28gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFNvID0gZnVuY3Rpb24oZSkge1xuICBvZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbjtcbn0oUmUpLCBidCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgeGUoW2UsIG5dLCBqZSh0KSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFBvID0gZnVuY3Rpb24oZSkge1xuICBvZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSB0LCBpLndvcmsgPSByLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSB0O1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIHIpKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSByLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCByKSwgdGhpcztcbiAgfSwgbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbih0LCByLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBidC5zZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCwgdGhpcyksIGkpO1xuICB9LCBuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHQsIHIsIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gcjtcbiAgICByICE9IG51bGwgJiYgYnQuY2xlYXJJbnRlcnZhbChyKTtcbiAgfSwgbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUodCwgcik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHQpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgciA9IHQuaWQsIGkgPSB0LnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCAkZShzLCB0aGlzKSwgciAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCByLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgbjtcbn0oU28pLCB2dCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4sIHQpIHtcbiAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IG4sIHRoaXMubm93ID0gdDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihuLCB0LCByKSB7XG4gICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIG4pLnNjaGVkdWxlKHIsIHQpO1xuICB9LCBlLm5vdyA9IENvLm5vdywgZTtcbn0oKSwga28gPSBmdW5jdGlvbihlKSB7XG4gIG9lKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSB2dC5ub3cpO1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMsIHQsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgci5wdXNoKHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSB0LmV4ZWN1dGUodC5zdGF0ZSwgdC5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlICh0ID0gci5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyB0ID0gci5zaGlmdCgpOyApXG4gICAgICAgIHQudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCBuO1xufSh2dCksIEFvID0gbmV3IGtvKFBvKSwgSW8gPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBSbyhlKSB7XG4gIHJldHVybiBEKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBUbyhlKSB7XG4gIHJldHVybiBEKGVbbHRdKTtcbn1cbmZ1bmN0aW9uIEZvKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEQoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gTW8oZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIERvKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIE5vID0gRG8oKTtcbmZ1bmN0aW9uIExvKGUpIHtcbiAgcmV0dXJuIEQoZSA9PSBudWxsID8gdm9pZCAwIDogZVtOb10pO1xufVxuZnVuY3Rpb24gT28oZSkge1xuICByZXR1cm4gYW8odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgaSwgcztcbiAgICByZXR1cm4gWHQodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB0ID0gZS5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgeWUodC5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiByID0gYS5zZW50KCksIGkgPSByLnZhbHVlLCBzID0gci5kb25lLCBzID8gWzQsIHllKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIHllKGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiB0LnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFVvKGUpIHtcbiAgcmV0dXJuIEQoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gam8oZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIG5lKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKFRvKGUpKVxuICAgICAgcmV0dXJuIHhvKGUpO1xuICAgIGlmIChJbyhlKSlcbiAgICAgIHJldHVybiAkbyhlKTtcbiAgICBpZiAoUm8oZSkpXG4gICAgICByZXR1cm4gR28oZSk7XG4gICAgaWYgKEZvKGUpKVxuICAgICAgcmV0dXJuIGFuKGUpO1xuICAgIGlmIChMbyhlKSlcbiAgICAgIHJldHVybiBWbyhlKTtcbiAgICBpZiAoVW8oZSkpXG4gICAgICByZXR1cm4gem8oZSk7XG4gIH1cbiAgdGhyb3cgTW8oZSk7XG59XG5mdW5jdGlvbiB4byhlKSB7XG4gIHJldHVybiBuZXcgbmUoZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gZVtsdF0oKTtcbiAgICBpZiAoRCh0LnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gdC5zdWJzY3JpYmUobik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uICRvKGUpIHtcbiAgcmV0dXJuIG5ldyBuZShmdW5jdGlvbihuKSB7XG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmxlbmd0aCAmJiAhbi5jbG9zZWQ7IHQrKylcbiAgICAgIG4ubmV4dChlW3RdKTtcbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR28oZSkge1xuICByZXR1cm4gbmV3IG5lKGZ1bmN0aW9uKG4pIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24odCkge1xuICAgICAgbi5jbG9zZWQgfHwgKG4ubmV4dCh0KSwgbi5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gbi5lcnJvcih0KTtcbiAgICB9KS50aGVuKG51bGwsIG9uKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBWbyhlKSB7XG4gIHJldHVybiBuZXcgbmUoZnVuY3Rpb24obikge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0gZmUoZSksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKG4ubmV4dChhKSwgbi5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHQgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAociA9IGkucmV0dXJuKSAmJiByLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgbi5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGFuKGUpIHtcbiAgcmV0dXJuIG5ldyBuZShmdW5jdGlvbihuKSB7XG4gICAgcW8oZSwgbikuY2F0Y2goZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IodCk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gem8oZSkge1xuICByZXR1cm4gYW4oT28oZSkpO1xufVxuZnVuY3Rpb24gcW8oZSwgbikge1xuICB2YXIgdCwgciwgaSwgcztcbiAgcmV0dXJuIHNvKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gWHQodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgdCA9IGNvKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgdC5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHIgPSBsLnNlbnQoKSwgISFyLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSByLnZhbHVlLCBuLm5leHQoYSksIG4uY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgciAmJiAhci5kb25lICYmIChzID0gdC5yZXR1cm4pID8gWzQsIHMuY2FsbCh0KV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gbi5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWW8oZSwgbiwgdCwgciwgaSkge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IG4uc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgdCgpLCBpID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCByKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIHIpO1xuICBpZiAoZS5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gQm8oZSwgbikge1xuICB2YXIgdCA9IEQoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIHIgPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IodCgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBuZShyKTtcbn1cbnZhciBIbyA9IHFlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIEpvKGUsIG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogcixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IHQocykgOiByKG5ldyBIbygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBLbyhlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgWm8gPSBxZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdCA9PT0gdm9pZCAwICYmICh0ID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gdDtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gV28oZSwgbikge1xuICB2YXIgdCA9IEtvKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgciA9IHQuZmlyc3QsIGkgPSB0LmVhY2gsIHMgPSB0LndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBRbyA6IHMsIGMgPSB0LnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IEFvIDogYywgdSA9IHQubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAociA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiB3byhmdW5jdGlvbihfLCBtKSB7XG4gICAgdmFyIHksIGYsIGggPSBudWxsLCB2ID0gMCwgYiA9IGZ1bmN0aW9uKEUpIHtcbiAgICAgIGYgPSBZbyhtLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB5LnVuc3Vic2NyaWJlKCksIGpvKGEoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IHZcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKG0pO1xuICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgbS5lcnJvcihrKTtcbiAgICAgICAgfVxuICAgICAgfSwgRSk7XG4gICAgfTtcbiAgICB5ID0gXy5zdWJzY3JpYmUoYm8obSwgZnVuY3Rpb24oRSkge1xuICAgICAgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgdisrLCBtLm5leHQoaCA9IEUpLCBpID4gMCAmJiBiKGkpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIGYgIT0gbnVsbCAmJiBmLmNsb3NlZCB8fCBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICF2ICYmIGIociAhPSBudWxsID8gdHlwZW9mIHIgPT0gXCJudW1iZXJcIiA/IHIgOiArciAtIGwubm93KCkgOiBpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBRbyhlKSB7XG4gIHRocm93IG5ldyBabyhlKTtcbn1cbmNsYXNzIFNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogbiB9LCB0aGlzLl9zdWJqZWN0Lm5leHQobiksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKG4sIHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiBuLCBlcnJNc2c6IHQgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihuKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKG4pID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiBuLCB0aGlzLnN1YnNjcmliZSA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpLCB0LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIFllKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdCA9IHtcbiAgICAgICAgZmlyc3Q6IG4udGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gQm8oKCkgPT4gbmV3IEVycm9yKG4udGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEpvKHRoaXMuX3N1YmplY3QucGlwZShXbyh0KSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBzbigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBFdCA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCBYbyA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgZWkgPSAoZSkgPT4gWG9bZV0sIFhlID0ge30sIGNuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKFhlW2VdKVxuICAgIHJldHVybiBYZVtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKHIpID0+IHIuanNvbigpKSwgdCA9IEV0LnBhcnNlKG4uZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBYZVtlXSA9IHQsIHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBFdC5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIFllKGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgbG4gPSAoZSwgbikgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3RdKSA9PiAhbi5pbmNsdWRlcyh0KSkpLCBBID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBvdCA9IG5ldyBTZSgpLCBDdCA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCB0aSA9IDMsIG5pID0gMywgcmkgPSAxZTMsIHsgbG9nX186IE5lIH0gPSBQKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIG9pIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIG4sIHQ7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBOZShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgTmUoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgKG4gPSBBKCkpID09IG51bGwgfHwgbi5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksICh0ID0gQSgpKSA9PSBudWxsIHx8IHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChuLCB0LCByKSB7XG4gICAgY29uc3QgaSA9IHtcbiAgICAgIGV2ZW50TmFtZTogbixcbiAgICAgIHByb3BlcnRpZXM6IHQgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGkudGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2goaSksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgbiwgdDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9ICh0ID0gKG4gPSBBKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0SXRlbShDdCk7XG4gICAgICByICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgbjtcbiAgICAobiA9IEEoKSkgPT0gbnVsbCB8fCBuLmxvY2FsU3RvcmFnZS5zZXRJdGVtKEN0LCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgbiA9IEEoKTtcbiAgICBuICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gbi5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCByaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgbjtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKG4gPSBBKCkpID09IG51bGwgfHwgbi5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBuID0gb3QuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIW4pIHtcbiAgICAgIE5lKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIG5pKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZXZlbnRzOiB0Lm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBjLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IG4uZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi5uLFxuICAgICAgICAgICAgLi4uYy5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGMubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYy5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYy50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYy50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBuLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5jLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgaSA9IGVpKG4uZW52aXJvbm1lbnQpLCBzID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGkpO1xuICAgICAgKGF3YWl0IGZldGNoKHMudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocilcbiAgICAgIH0pKS5vayA/ICh0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZSh0Lmxlbmd0aCksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCkpIDogdGhpcy5oYW5kbGVGYWlsZWRCYXRjaCh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBOZShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgciksIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2godCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKG4pIHtcbiAgICBuLmZvckVhY2goKHIpID0+IHtcbiAgICAgIHIuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgdCA9IG4uZmlsdGVyKChyKSA9PiByLmF0dGVtcHRDb3VudCA8IHRpKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShuLmxlbmd0aCksIHRoaXMucXVldWUgPSBbLi4udCwgLi4udGhpcy5xdWV1ZV0sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICB2YXIgbiwgdDtcbiAgICAobiA9IEEoKSkgPT0gbnVsbCB8fCBuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHQgPSBBKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCB1biA9IG5ldyBvaSgpLCBnID0gKGUsIG4sIHQpID0+IHtcbiAgdW4uYWRkRXZlbnQoZSwgbiwgdCk7XG59LCBkbiA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBHKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IG4sXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCBwbiA9IChlKSA9PiB7XG4gIHZhciB0LCByO1xuICBjb25zdCBuID0gRyhlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBuLFxuICAgIGVycm9yX25hbWU6ICh0ID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHQubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKHIgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogci5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCBpaSA9ICgpID0+IHtcbiAgdmFyIGUsIG47XG4gIChlID0gQSgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHBuKSwgKG4gPSBBKCkpID09IG51bGwgfHwgbi5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIGRuKTtcbn0sIHNpID0gKCkgPT4ge1xuICB2YXIgZSwgbjtcbiAgKGUgPSBBKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcG4pLCAobiA9IEEoKSkgPT0gbnVsbCB8fCBuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgZG4pO1xufTtcbnZhciBVdDtcbihVdCA9IEEoKSkgPT0gbnVsbCB8fCBVdC5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgdW4ucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNsYXNzIG1uIGV4dGVuZHMgaW8ge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgY29uc3QgdCA9IGAke24ubWVzc2FnZX1gO1xuICAgIHN1cGVyKHQpLCB0aGlzLnJlc3BvbnNlID0gbjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgTCA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIHIgJiYgZyhyLCB7XG4gICAgLi4ublxuICB9KTtcbiAgY29uc3QgaSA9IGF3YWl0IGUuc2VuZChuKTtcbiAgaWYgKGNpKGkpKVxuICAgIHRocm93IG5ldyBtbihpKTtcbiAgaWYgKCFhaShpLCB0KSkge1xuICAgIGNvbnN0IHMgPSB0LnNhZmVQYXJzZShpKTtcbiAgICB0aHJvdyBzLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHQsIFwiQWN0dWFsOlwiLCBpKSwgcy5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIHIgJiYgZyhyLCB7XG4gICAgLi4uaVxuICB9KSwgaTtcbn0sIGFpID0gKGUsIG4pID0+IG4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIGNpID0gKGUpID0+IE9yLnNhZmVQYXJzZShlKS5zdWNjZXNzLCBsaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBMKGUsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiBuIH0sIEt0KSwgTiA9IGFzeW5jIChlKSA9PiBhd2FpdCBMKGUsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBadCksIGdlID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IEwoXG4gIGUsXG4gIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LFxuICBRdCxcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuKSwgdWkgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTChcbiAgZSxcbiAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogbiB9LFxuICBXcixcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiksIGRpID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgZyhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLm5cbiAgfSk7XG4gIGNvbnN0IHQgPSBhd2FpdCBMKGUsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IG4gfSwgUXQpO1xuICByZXR1cm4gZyhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi50XG4gIH0pLCB0O1xufSwgcSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBMKFxuICBlLFxuICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LFxuICBDcixcbiAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4pLCBwaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBMKFxuICBlLFxuICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LFxuICBXdCxcbiAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4pLCBtaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBMKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IG4gfSxcbiAgRXIsXG4gIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiksIHlpID0gYXN5bmMgKGUsIG4sIHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IGxpKGUsIHtcbiAgICBzZWN1cmVfdG9rZW46IG4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHRcbiAgfSksIGkgPSBuZXcgU2V0KHIucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0gdG8oci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCB3ZSA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIGlmICh0KVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICByID0gciB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IHlpKGUsIG4sIHIpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgZmkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKHIpID0+IEwociwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogbiB9LCB3cilcbiAgICApXG4gICk7XG59LCBTdCA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBMKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiBuIH0sXG4gIHN0LFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgX2kgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTChlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LCBXdCwgXCJzZXR1cF9jaGVja291dFwiKSwgdXQgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTChlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogbiB9LCBzdCwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCB5biA9IDFlMywgaGkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zb2xlLmxvZyhuKTtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IHluLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgTChyLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgYnIpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIGR0ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IEwoXG4gIGUsXG4gIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIFhyLFxuICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiksIGZuID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IEwoXG4gICAgICBlLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IG4gfSB9LFxuICAgICAgUXJcbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoICh0KSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgRyh0KSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCBnaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBMKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBuIH0gfSxcbiAgZW9cbiksIFkgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcblkuRW51bS5zdHJpcGU7XG5jb25zdCBfbiA9ICh7XG4gIHNjcmlwdElkOiBlLFxuICBzcmM6IG4sXG4gIGNoZWNrTG9hZGVkRm46IHRcbn0pID0+IHtcbiAgY29uc3QgciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpLCBzKSA9PiB7XG4gICAgbGV0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIGEuc3JjID0gbiwgYS5pZCA9IGUsIGEuYXN5bmMgPSAhMDtcbiAgICBjb25zdCBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgdCgpID8gaSgpIDogYyA/IGEgPSBjIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSwgYS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHIuYWJvcnQoKSwgaSgpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiByLnNpZ25hbCB9XG4gICAgKSwgYS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByLmFib3J0KCksIHMoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiByLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59LCBobiA9ICgpID0+IF9uKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgISF3aW5kb3cuQXBwbGVQYXlTREtcbn0pLCBnbiA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBuLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIHIgPSBuLmJpbGxpbmdDb250YWN0LCBpID0gbi5zaGlwcGluZ0NvbnRhY3QsIHMgPSB7IC4uLmUgfTtcbiAgaWYgKHQgfHwgciB8fCBpKSB7XG4gICAgc1twLkVNQUlMXSA9IHNbcC5FTUFJTF0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZW1haWxBZGRyZXNzKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1twLkNPVU5UUlldID0gc1twLkNPVU5UUlldIHx8ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmNvdW50cnlDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5jb3VudHJ5Q29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1twLlpJUF9DT0RFXSA9IHNbcC5aSVBfQ09ERV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQucG9zdGFsQ29kZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGEgPSBzW3AuRklSU1RfTkFNRV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2l2ZW5OYW1lKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IHNbcC5MQVNUX05BTUVdIHx8ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmZhbWlseU5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgYSB8fCBjID8gKHNbcC5GSVJTVF9OQU1FXSA9IGEsIHNbcC5MQVNUX05BTUVdID0gYykgOiAoc1twLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBzW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBzO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCB3aSA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiBuXG59KSA9PiB7XG4gIHZhciByO1xuICBpZiAobi5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke24udG9rZW59YCwgeHQpLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCB0ID0gKHIgPSBuLmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdO1xuICBpZiAodClcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogdCA9PSBudWxsID8gdm9pZCAwIDogdC5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7bi50b2tlbn1gXG4gICAgfTtcbn0sIGJpID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IG4sXG4gIHByZWZpbGw6IHQsXG4gIGRlZmF1bHRMYWJlbDogciA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgaSA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmN1cnJlbmN5KSA/PyBuLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBhID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBpLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IHIgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBhXG4gICAgfVxuICB9O1xufSwgd24gPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogbixcbiAgcHJlZmlsbDogdCxcbiAgZGVmYXVsdExhYmVsOiByXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBpLCB0b3RhbDogcyB9ID0gYmkoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IG4sXG4gICAgcHJlZmlsbDogdCxcbiAgICBkZWZhdWx0TGFiZWw6IHJcbiAgfSk7XG4gIGxldCBhID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBpLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBzLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiB3aSh7XG4gICAgICB0b3RhbDogcyxcbiAgICAgIHByZWZpbGw6IHRcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBhID0ge1xuICAgIC4uLmEsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KGEpXG4gIH0gOiBhID0geyAuLi5hLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIGE7XG59LCB7IGxvZ19fOiBwYSwgZXJyX186IHZpIH0gPSBQKFwiY29tbW9uXCIpLCBUZSA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIEggPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBuLnNhZmVQYXJzZShyKS5zdWNjZXNzKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IHZpKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIG4ucGFyc2UodCk7XG59LCBFaSA9IChlKSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IGUuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IGUuemlwQ29kZSxcbiAgICBjb3VudHJ5OiBlLmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGUuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lXG59KSwgQmUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBuIH0gPSBQKGUubG9nUHJlZml4KSwgdCA9IGF3YWl0IE4oZS5hbnlDZGVDb25uZWN0aW9uKSwgciA9IFRlKGUuY29uZmlybVJlc3VsdCk7XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gbihcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IHBpKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnRva2VuLFxuICAgICAgcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgbihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHQubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB0LmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZS5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiByLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgdXQoZS5hbnlDZGVDb25uZWN0aW9uLCBpKSB9O1xuICB9XG59LCBDaSA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWUsI2FkeWVuLWNvbnRhaW5lciwjYWR5ZW4tY29udGFpbmVyPip7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIGJuID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgbi5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtDaX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCByID0gdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgci5hcHBlbmRDaGlsZChuLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSByLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gci5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLCB7IGhvc3Q6IHQsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gU2koZSwgbiwgdCkge1xuICBjb25zdCByID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgaGkoZSwgdCk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCBuKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIHIoKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKHIsIHluKTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBQaSh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IG4sXG4gIHJlc29sdmU6IHRcbn0pIHtcbiAgY29uc3QgciA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKG4pLCBlLmhvc3QucmVtb3ZlKCksIHQoeyBzdGF0dXM6IFQuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSGUoZSkge1xuICBjb25zdCB7IHVybDogbiwgYmFzZVVybDogdCB9ID0gZSwgciA9IGJuKG4pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKGwpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKGwpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBTaShyLmlmcmFtZSwgcywgbmV3IFVSTCh0KS5vcmlnaW4pLCBjID0gUGkoe1xuICAgICAgZWxlbWVudHM6IHIsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgdm4gPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgSGUoZSk7XG4gIGlmIChuLnN0YXR1cyA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuLnN0YXR1cyA9PT0gVC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gbi5zdGF0dXMgIT09IFQuU1VDQ0VTUyAmJiBZZShuLnN0YXR1cyksIHtcbiAgICBocmVmOiBuLmhyZWZcbiAgfTtcbn0sIGtpID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IHdpbmRvdy5vcGVuKG4sIFwiX2JsYW5rXCIpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiB0O1xufSwgQWkgPSBhc3luYyAoZSwgbiwgdCwgcikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBQKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0ga2koZSwgciksIGwgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1ID0gYXdhaXQgbWkobiwgdCk7XG4gICAgICAgIGlmICh1LnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChsKSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogdS5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgaShHKHUpKSwgY2xlYXJJbnRlcnZhbChsKSwgYShHKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IElpLCBlcnJfXzogcHQgfSA9IFAoXCJhaXJ3YWxsZXgtY2NcIiksIFJpID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgVGkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gUmkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IHQgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBwdChyKSwgbmV3IEVycm9yKHQpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBGaSA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBNaSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gSWkoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCB0ID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IHB0KHQsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7RyhuKX1gKSwgbmV3IEVycm9yKHQpO1xuICB9XG59LCBEaSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBUaShuKSwgciA9IGF3YWl0IHZuKHsgdXJsOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIGkgPSBNaShyLmhyZWYgPz8gXCJcIiksIHMgPSB0W1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAocyAhPT0gaSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtzfSkuYDtcbiAgICB0aHJvdyBwdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpLFxuICAgICAgY29uc2VudF9pZDogdFtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgRW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIENuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCB7IGxvZ19fOiBTbiwgZXJyX186IFBuIH0gPSBQKFwiY29tbW9uLWNjXCIpLCBpZSA9IChlLCBuLCB0KSA9PiB7XG4gIGlmICh0KSB7XG4gICAgU24oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzKHQpKVxuICAgICAgZVtpXSB8fCAoZVtpXSA9IHMpO1xuICB9XG4gIGNvbnN0IHIgPSBJZS5zYWZlUGFyc2UoZSk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgaSA9IHIuZXJyb3IuZm9ybWF0KCksIHMgPSBZdChpKTtcbiAgICBmb3IgKGNvbnN0IFthLCBjXSBvZiBPYmplY3QuZW50cmllcyhzKSlcbiAgICAgIG4oYSwgYywgYSk7XG4gICAgdGhyb3cgUG4oXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIE5pID0gKGUsIG4pID0+IHtcbiAgZm9yIChjb25zdCB0IG9mIGUpXG4gICAgaWYgKHQuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyB0LmVycm9ycy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSB6dC5zYWZlUGFyc2Uoci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghaS5zdWNjZXNzKVxuICAgICAgICAgIFBuKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCByKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgcyA9IGkuZGF0YTtcbiAgICAgICAgICBuKHMsIHIuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIFNuKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCB7IGxvZ19fOiBPZSB9ID0gUChcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBMaShlLCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCBkdChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBuLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgaSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIG4uc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihpKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmlcbiAgICB9KTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IG4uc2Vzc2lvbi5hYm9ydCgpLCB0O1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBPaShlLCBuKSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBPZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogdCB9ID0gYXdhaXQgSGUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogbi5iYXNlVXJsXG4gIH0pO1xuICBpZiAoT2UoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3R9XWApLCB0ID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgciA9IGF3YWl0IHEobi5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBPZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHIpLCByO1xufVxuYXN5bmMgZnVuY3Rpb24gVWkoZSwgbikge1xuICB2YXIgdCwgciwgaSwgcywgYTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gZ24obi5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IGllKFxuICAgICAgbCxcbiAgICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi51XG4gICAgfSk7XG4gICAgY29uc3QgbSA9IChhd2FpdCBnZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB1W3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHVbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHVbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IHVbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IHVbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCB5ID0gYXdhaXQgcShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbSxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBPZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHkpO1xuICAgIGxldCBmID0gKHIgPSAodCA9IHkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQ7XG4gICAgY29uc3QgaCA9IChpID0geS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBpLmZpbmQoXG4gICAgICAoYikgPT4gYi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAoeSA9IGF3YWl0IE9pKGgsIG4pLCBmID0gKGEgPSAocyA9IHkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogc1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaWQpLCAhZilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodiksIEJlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB2ZSwgZXJyX186IGtuIH0gPSBQKFwiYXd4LWFwcGxlLXBheVwiKSwgamkgPSBkZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEVuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICBpZiAodmUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhuKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gdmUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB0O1xuICAgIGlmICh2ZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gdmUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHQ7XG4gICAgaWYgKCFyLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTihhKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgd2UoYSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChfKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAga24oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgbi5nZXQub25DaGVja291dEVycm9yKChtID09IG51bGwgPyB2b2lkIDAgOiBtLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgeGkgPSByZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGN1c3RvbVBhcmFtczogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgZjtcbiAgICBjb25zdCBzID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEVuKSwgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhLCBpbml0aWFsUHJldmlldzogYyB9ID0gciwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE4obCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgXyA9IHduKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEsXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBkZWZhdWx0TGFiZWw6IChmID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBfKSwgeSA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogcy5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGksXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG4ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBsbih1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBjb25zdCBiID0gKCkgPT4ge1xuICAgICAgICB2ZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgbS5vbmNhbmNlbCA9IGIsIG0ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBMaShFLCB5KTtcbiAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgIHYoayk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IEUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uXy50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEUpO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgayA9IGF3YWl0IFVpKEUsIHkpO1xuICAgICAgICAgIGgoayk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICB2KGspO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGtuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgSmUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogbixcbiAgbWVyY2hhbnROYW1lOiB0LFxuICBtZXJjaGFudElkOiByLFxuICBpbml0aWFsUHJldmlldzogaSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgcHJlZmlsbDogYVxufSkgPT4ge1xuICB2YXIgXywgbTtcbiAgY29uc3QgYyA9ICgoXyA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5hbW91bnRBdG9tKSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChtID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBtLmN1cnJlbmN5KSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jdXJyZW5jeSkgPz8gaS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IHIgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogdFxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogcyAhPSBudWxsICYmIHMucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBzICE9IG51bGwgJiYgcy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBzLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4ucy5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5zLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgQW4gPSAoKSA9PiBfbih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCBuO1xuICAgIHJldHVybiAhISgobiA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgbi5hcGkpO1xuICB9XG59KTtcbmxldCBldCA9IG51bGw7XG5jb25zdCBJbiA9IGFzeW5jIChlKSA9PiBhd2FpdCBjbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBLZSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBJbihlKTtcbiAgcmV0dXJuIGV0ID09PSBudWxsICYmIChldCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHQsXG4gICAgbWVyY2hhbnRJbmZvOiBuLm1lcmNoYW50SW5mb1xuICB9KSksIGV0O1xufSwgJGkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgodCkgPT4gdC50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiBuID8gcXQucGFyc2UobikgOiBudWxsO1xufSwgUm4gPSAoZSwgbikgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgdCA9IHsgLi4uZSB9LCByID0gKHMgPSAoaSA9IG4ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAocikge1xuICAgIGNvbnN0IFtsLCAuLi51XSA9ICgoYyA9IChhID0gci5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBkID0gdS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgdFtwLkVNQUlMXSA9IHRbcC5FTUFJTF0gfHwgbi5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCByLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgdFtwLkFERFJFU1NdID0gdFtwLkFERFJFU1NdIHx8IHIuYWRkcmVzczEgfHwgXCJcIiwgdFtwLkNJVFldID0gdFtwLkNJVFldIHx8IHIubG9jYWxpdHkgfHwgXCJcIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgci5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgdFtwLlNUQVRFXSA9IHRbcC5TVEFURV0gfHwgci5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBjb25zdCBfID0gdFtwLkZJUlNUX05BTUVdIHx8IGwgfHwgXCJcIiwgbSA9IHRbcC5MQVNUX05BTUVdIHx8IGQgfHwgXCJcIjtcbiAgICBfIHx8IG0gPyAodFtwLkZJUlNUX05BTUVdID0gXywgdFtwLkxBU1RfTkFNRV0gPSBtKSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIHQ7XG59LCB7IGxvZ19fOiB6LCBlcnJfXzogbWUgfSA9IFAoXCJhd3gtZ29vZ2xlLXBheVwiKSwgR2kgPSBkZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIF8sIG07XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIENuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICB6KFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgaSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFpLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIG1lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgdDtcbiAgICBpZiAoeihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IEFuKCksICEoKG0gPSAoXyA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBfLnBheW1lbnRzKSAhPSBudWxsICYmIG0uYXBpKSlcbiAgICAgIHJldHVybiBtZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHQ7XG4gICAgaWYgKGF3YWl0IEluKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFpLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gbWUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCB0O1xuICAgIHooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHkgPSBKZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBpLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGkucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogaS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgZiA9IGF3YWl0IEtlKGUuYmFzZVVybCwgeSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCBmLmlzUmVhZHlUb1BheSh5KTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHooXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgdDtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICByZXR1cm4gbWUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB5KSwgdDtcbiAgICB9XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4oYSksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHdlKGEsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgUi5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBtZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgbi5nZXQub25DaGVja291dEVycm9yKChmID09IG51bGwgPyB2b2lkIDAgOiBmLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgVmkgPSByZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgeSwgZiwgaCwgdiwgYiwgRSwgaztcbiAgICB6KFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQ24pLCB7IGluaXRpYWxQcmV2aWV3OiBhLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBpLCBsID0gcy5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBKZSh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIF8gPSBhd2FpdCBOKGQpO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogcy5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGxuKF8sIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBtID0gYXdhaXQgS2UoZS5iYXNlVXJsLCB1KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgTyA9IGF3YWl0IG0ubG9hZFBheW1lbnREYXRhKHUpO1xuICAgICAgeihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIE8pO1xuICAgICAgY29uc3QgWCA9IFJuKHQsIE8pLCB4ID0gaWUoXG4gICAgICAgIFgsXG4gICAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBpID09IG51bGwgPyB2b2lkIDAgOiBpLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi54XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBlID0gKGYgPSAoeSA9IE8ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuO1xuICAgICAgaWYgKCFwZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCAkbiA9IGF3YWl0IGdlKGQsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogeFtwLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHhbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeFtwLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IHhbcC5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogeFtwLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pLCBGZSA9ICRpKCRuKTtcbiAgICAgIHooXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBGZSk7XG4gICAgICBsZXQgc2UgPSBhd2FpdCBxKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBGZSA9PSBudWxsID8gdm9pZCAwIDogRmUuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogcGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgeihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHNlKTtcbiAgICAgIGxldCBaZSA9ICh2ID0gKGggPSBzZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZDtcbiAgICAgIGNvbnN0IGFlID0gKGIgPSBzZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoXG4gICAgICAgIChiZSkgPT4gYmUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoYWUgJiYgYWUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIHooXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBhZSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBiZSB9ID0gYXdhaXQgSGUoe1xuICAgICAgICAgIHVybDogYWUucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHooYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2JlfV1gKSwgYmUgPT09IFQuQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoYmUgPT09IFQuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZSAmJiAhWmUgJiYgKHNlID0gYXdhaXQgcShkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IGFlLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBhZS5jb25zZW50X2lkXG4gICAgICAgIH1cbiAgICAgIH0pLCB6KFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc2UpLCBaZSA9IChrID0gKEUgPSBzZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBFWzBdKSA9PSBudWxsID8gdm9pZCAwIDogay5pZCksICFaZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gQmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogeCxcbiAgICAgICAgY29uZmlybVJlc3VsdDogc2UsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKE8pIHtcbiAgICAgIHRocm93IG1lKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIE8pLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IE9cbiAgICAgIH0pLCBuZXcgRXJyb3IoKE8gPT0gbnVsbCA/IHZvaWQgMCA6IE8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgVG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBGbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiB6aShlLCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCBkdChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBpID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGkpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uaVxuICAgIH0pO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIHQ7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHFpKGUsIG4pIHtcbiAgdmFyIHQsIHI7XG4gIHRyeSB7XG4gICAgY29uc3QgaSA9IGUucGF5bWVudCwgcyA9IGduKG4ubm9uQ2RlRm9ybUlucHV0cywgaSksIGEgPSBpZShzLCBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KSwgYXdhaXQgZ2Uobi5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogYVtwLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBhW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBhW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBhW3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBhW3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoaS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IHEobi5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgociA9ICh0ID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB0WzBdKSA9PSBudWxsID8gdm9pZCAwIDogci5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBCZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbi5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogYSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBjb25zdCBzID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocyksIGk7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IFVlLCBlcnJfXzogTW4gfSA9IFAoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBZaSA9IGRlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFRuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICBpZiAoVWUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhuKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gVWUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB0O1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFVlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCB0O1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4oYSksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHdlKGEsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIE1uKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBCaSA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEgfSA9IHIsIGMgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBfID0gd24oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKGYgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG4ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYVxuICAgIH0pO1xuICAgIGNvbnN0IG0gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIF8pLCB5ID0ge1xuICAgICAgc2Vzc2lvbjogbSxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBuLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogaVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBtLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBVZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChiKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgemkoYiwgeSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICB2KEUpO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBiID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBfLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKGIpO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGIpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IHFpKGIsIHkpO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICB2KEUpO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IE1uKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogbGUsIGVycl9fOiBFZSB9ID0gUChcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBIaSA9IGRlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICB2YXIgZCwgXztcbiAgICBsZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRm4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGxlKFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgaSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFpLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIEVlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgdDtcbiAgICBpZiAobGUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBBbigpLCAhKChfID0gKGQgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZC5wYXltZW50cykgIT0gbnVsbCAmJiBfLmFwaSkpXG4gICAgICByZXR1cm4gRWUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB0O1xuICAgIGxlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gSmUoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogaS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBpLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGkuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHkgPSBhd2FpdCBLZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogZiB9ID0gYXdhaXQgeS5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWYpXG4gICAgICAgIHJldHVybiBsZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB0O1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBFZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCB0O1xuICAgIH1cbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgTihzKSwgYyA9IGEubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgd2UocywgYS50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIEVlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogeVxuICAgICAgICB9KSwgbi5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIEppID0gcmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBuLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHksIGYsIGgsIHY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSB9ID0gaSwgbCA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBGbikubWV0YWRhdGEsIHUgPSBKZSh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIF8gPSBhd2FpdCBOKGQpO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IF8sXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSk7XG4gICAgY29uc3QgbSA9IGF3YWl0IEtlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBtLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIGxlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgYik7XG4gICAgICBjb25zdCBFID0gUm4obiwgYiksIGsgPSBpZShFLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ua1xuICAgICAgfSk7XG4gICAgICBjb25zdCBPID0gKGYgPSAoeSA9IGIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuO1xuICAgICAgaWYgKCFPKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IFggPSBhd2FpdCBnZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGtbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBrW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGtbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBrW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IGtbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIFgpO1xuICAgICAgY29uc3QgeCA9IGF3YWl0IHEoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShPKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgodiA9IChoID0geC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBrLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB4LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChiKSB7XG4gICAgICB0aHJvdyBFZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBiKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBiXG4gICAgICB9KSwgbmV3IEVycm9yKChiID09IG51bGwgPyB2b2lkIDAgOiBiLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEtpLCBlcnJfXzogRG4gfSA9IFAoXCJwb2NreXQtY2NcIiksIFppID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgV2kgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gWmkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IHQgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBEbihyKSwgbmV3IEVycm9yKHQpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBObiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gS2koYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke259XWApLCBuO1xuICB9IGNhdGNoIChuKSB7XG4gICAgY29uc3QgdCA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IERuKHQsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7RyhuKX1gKSwgbmV3IEVycm9yKHQpO1xuICB9XG59LCBRaSA9IChlLCBuKSA9PiBuZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQobiksIFhpID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIGVzID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IFdpKG4pLCByID0gYXdhaXQgdm4oeyB1cmw6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IE5uKHIuaHJlZiA/PyBcIlwiKSxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiB0W1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogdFtcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG59LCB0cyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgbnMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogX2UsIGVycl9fOiBBZSB9ID0gUChcImFkeWVuLWNjXCIpLCBycyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IHRzLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBMbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgb3MgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gcnMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2VzcylcbiAgICB0aHJvdyBBZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKExuKTtcbiAgcmV0dXJuIG4uZGF0YTtcbn0sIGlzID0gKGUpID0+IEpTT04ucGFyc2UoZSksIFB0ID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIHNzID0gYXN5bmMgKCkgPT4ge1xuICBfZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgUHQoKSB8fCBhd2FpdCBhdCg1MDApO1xuICBpZiAoIVB0KCkpXG4gICAgdGhyb3cgQWUoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKExuKTtcbiAgcmV0dXJuIF9lKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgYXMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IG4sIGxvY2FsZTogdCwgY291bnRyeUNvZGU6IHIsIGNvbXBvbmVudDogaSwgaG9zdDogcywgY2FuY2VsQnV0dG9uOiBhIH0gPSBlLCBjID0gaXMobltcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBfZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBfZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBtKSwgcy5yZW1vdmUoKTtcbiAgICB9LCBkID0gKGYpID0+IHtcbiAgICAgIEFlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIGYpLCBsKHsgc3RhdHVzOiBULkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9IChmKSA9PiB7XG4gICAgICBBZShcIkFkeWVuIGVycm9yOlwiLCBmKSwgbCh7IHN0YXR1czogVC5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIG0gPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBULkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG0pO1xuICAgIGNvbnN0IHkgPSAoZiwgaCwgdikgPT4ge1xuICAgICAgcy5yZW1vdmUoKSwgbCh7IHN0YXR1czogVC5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogZiwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHNzKCkudGhlbihcbiAgICAgIChmKSA9PiBmKHtcbiAgICAgICAgY2xpZW50S2V5OiBuW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG5bXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiB0LFxuICAgICAgICBjb3VudHJ5Q29kZTogcixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBfXG4gICAgICB9KVxuICAgICkudGhlbigoZikgPT4ge1xuICAgICAgZi5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGkpO1xuICAgIH0pO1xuICB9KTtcbn0sIGNzID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCB0ID0gZSA/PyBuLCByID0gbnMuc2FmZVBhcnNlKHQpO1xuICByZXR1cm4gci5zdWNjZXNzID8gKF9lKGBSZXNvbHZlZCBsb2NhbGU6ICR7ci5kYXRhfWApLCByLmRhdGEpIDogKEFlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHt0fS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIGxzID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCB1cyA9IGFzeW5jIChlLCBuLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBvcyhuKSwgaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGkuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IHMsIGlmcmFtZTogYSwgY2FuY2VsQnV0dG9uOiBjIH0gPSBibihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgYS5yZXBsYWNlV2l0aChpKTtcbiAgY29uc3QgbCA9IGF3YWl0IGFzKHtcbiAgICBoZWFkZXJzOiByLFxuICAgIGxvY2FsZTogY3ModCksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBpLFxuICAgIGhvc3Q6IHMsXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gVC5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBfZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIFllKGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IFMsIGVycl9fOiBrdCB9ID0gUChcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogQXQgfSA9IFAoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGRzID0gcmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgUyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuIH0pO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBOKHMpO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLm4sXG4gICAgICBwcmVmaWxsOiBhXG4gICAgfSksIFMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gaWUodCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uY1xuICAgIH0pO1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogaS5wYXltZW50Um91dGVJZFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIFMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgZmkoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoTmkoZCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBTKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBfID0gYXdhaXQgX2kocywgbCk7XG4gICAgICAgIHJldHVybiBTKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFMoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBfID0gYXdhaXQgU3QocywgbCk7XG4gICAgICAgIHJldHVybiBTKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBfIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBtbiAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIFMoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBTKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyksIGcoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLm4sXG4gICAgICAgICAgLi4uZC5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBfID0gWGkoZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKF8pIHtcbiAgICAgICAgICBTKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBlcyhlLmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChGaShkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgUyhcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgRGkoZS5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHMoZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIFMoXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCB1cyhcbiAgICAgICAgICAgIHRbcC5DT1VOVFJZXSxcbiAgICAgICAgICAgIGQucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIGEubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gYjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmID0gYXdhaXQgdWkocywgbCk7XG4gICAgICAgIFMoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgZik7XG4gICAgICAgIGNvbnN0IGggPSAoKHUgPSBkLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB1W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBfID8gUyhcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogaCA/IChTKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgX3MoZikpIDogKFMoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBmcyhmLCBlLmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgdiA9IGYuY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIFMoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7dn1dYCk7XG4gICAgICAgICAgY29uc3QgYiA9IGF3YWl0IHEocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHZcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBTKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGIpO1xuICAgICAgICAgIGNvbnN0IEUgPSBUZShiKTtcbiAgICAgICAgICByZXR1cm4gUyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0UucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBFIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgUyhg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtoID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBTdChzLCB7XG4gICAgICAgICAgICAuLi5sLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHYsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBoXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFMoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGIgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cga3QoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIGt0KGQpLCBkO1xuICAgIH1cbiAgfVxuKSwgcHMgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgodCkgPT4gdC50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFNyLnBhcnNlKG4pO1xufSwgbXMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl0sIHlzID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IG1zLmluY2x1ZGVzKHQudHlwZSkpO1xuICBpZiAoIW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiB2ci5wYXJzZShuKTtcbn0sIGZzID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IHlzKGUpO1xuICBpZiAodC5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBTKFwi4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIiksIGcoXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIFMoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHt0LnJlZGlyZWN0X3VybH1dYCksIGcoXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzOiByIH0gPSBhd2FpdCBIZSh7IHVybDogdC5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IG4gfSk7XG4gIGlmIChTKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtyfV1gKSwgciA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgZyhcIjNkc19jYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAociA9PT0gVC5GQUlMVVJFKVxuICAgIHRocm93IGcoXCIzZHNfZmFpbHVyZVwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCBfcyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IG4gPSBwcyhlKTtcbiAgZyhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5cbiAgfSksIEF0KGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke24uY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBGcihuKSwgZyhcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIEF0KFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgaHMgPSAxLCBncyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogaiwgZXJyX186IE9uIH0gPSBQKFwibG9vcC1jcnlwdG9cIiksIHdzID0geiQxLm9iamVjdCh7XG4gIGxvb3BGaXJzdE5hbWU6IEksXG4gIGxvb3BMYXN0TmFtZTogSSxcbiAgbG9vcEVtYWlsOiBJLFxuICBbcC5QUk9NT1RJT05fQ09ERV06IENcbn0pLCBicyA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBDLFxuICBsb29wTGFzdE5hbWU6IEMsXG4gIGxvb3BFbWFpbDogQyxcbiAgW3AuUFJPTU9USU9OX0NPREVdOiBDXG59KSwgSXQgPSAoZSwgbiwgdCwgcikgPT4ge1xuICBjb25zdCBpID0gdC5zYWZlUGFyc2UoZSk7XG4gIGlmICghaS5zdWNjZXNzKSB7XG4gICAgY29uc3QgcyA9IGkuZXJyb3IuZm9ybWF0KCksIGEgPSBZdChzKTtcbiAgICBmb3IgKGNvbnN0IFtjLCBsXSBvZiBPYmplY3QuZW50cmllcyhhKSlcbiAgICAgIG4oYywgbCwgYyk7XG4gICAgdGhyb3cgT24oXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBhKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIGkuZGF0YTtcbn0sIHZzID0gZGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIGooXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IG4gPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZ3MpO1xuICAgIGooYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeShuKX1gKSwgaihcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgdCA9IGF3YWl0IE4oZS5hbnlDZGVDb25uZWN0aW9uKSwgciA9IGF3YWl0IGR0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICB9KTtcbiAgICBpZiAodC5tb2RlICE9PSBcInNldHVwXCIgJiYgIW4ubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXModC5jdXJyZW5jeSkpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEN1cnJlbmN5ICR7dC5jdXJyZW5jeX0gbm90IGVuYWJsZWQgZm9yIExvb3AuIEVuYWJsZWQgY3VycmVuY2llczogJHtuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzfWBcbiAgICAgICk7XG4gICAgaWYgKCFyIHx8ICFyLm5leHRfYWN0aW9uX21ldGFkYXRhKVxuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbmVjZXNzYXJ5IHNldHVwIGRhdGEgZm9yIExvb3BcIik7XG4gICAgY29uc3QgaSA9IHIubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgbGV0IHM7XG4gICAgdC5tb2RlID09PSBcInNldHVwXCIgPyBzID0gaHMgOiBzID0gdC5hbW91bnRfdG90YWxfYXRvbSAqIGkudG9rZW5fcHJpY2U7XG4gICAgY29uc3QgYSA9IHMsIGMgPSBpLmF1dGhvcml6YXRpb25fYW1vdW50LCBsID0gdjQoKSwgdSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGEsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogbFxuICAgIH0sIGQgPSB7XG4gICAgICBhcGlLZXk6IG4ubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IG4ubWV0YWRhdGEuZW50aXR5X2lkLFxuICAgICAgbWVyY2hhbnRJZDogbi5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBuLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgd2lkZ2V0UHJvcHM6IHUsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wczogZFxuICAgIH07XG4gIH1cbiksIEVzID0gcmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgaihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBqKFwiY29udGV4dFwiLCBlKSwgaihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCBuKSwgaihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgdCksIGooXCJmbG93Q2FsbGJhY2tzXCIsIHIpLCBqKFwiY3VzdG9tUGFyYW1zXCIsIGkpO1xuICAgIGxldCBzO1xuICAgIGkgIT0gbnVsbCAmJiBpLnN1Y2Nlc3MgPyBzID0gSXQoXG4gICAgICB0LFxuICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB3c1xuICAgICkgOiBzID0gSXQoXG4gICAgICB0LFxuICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBic1xuICAgICk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4oZS5hbnlDZGVDb25uZWN0aW9uKSwgbCA9IGMubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZ2UoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHMubG9vcEVtYWlsLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHMubG9vcEZpcnN0TmFtZSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHMubG9vcExhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmICghaSlcbiAgICAgIHRocm93IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgY29uc3QgZCA9IGF3YWl0IHEoYSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IGkuc3VjY2VzcyA/IGkucGF5aW4ucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQgOiB2b2lkIDAsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLm1vZGUgIT09IFwic2V0dXBcIiA/IHUuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBpLnN1Y2Nlc3MgPyBpLmN1c3RvbWVyIDogdm9pZCAwLFxuICAgICAgICBsb29wX3BheWluOiBpLnN1Y2Nlc3MgPyBpLnBheWluIDogdm9pZCAwLFxuICAgICAgICBsb29wX2ZhaWx1cmVfZGV0YWlsczogaS5zdWNjZXNzID8gdm9pZCAwIDogaS5mYWlsdXJlRGV0YWlscyxcbiAgICAgICAgbG9vcF9kZWJ1Z19pbmZvOiBpLnN1Y2Nlc3MgPyB2b2lkIDAgOiBpLmRlYnVnSW5mbyxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBpLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoaihgQ29uZmlybSByZXN1bHQ6ICR7ZH1gKSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGooXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBqKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGQpO1xuICAgICAgY29uc3QgXyA9IFRlKGQpO1xuICAgICAgcmV0dXJuIGooYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtfLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogXyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgT24oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBkKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEosIGVycl9fOiBSdCB9ID0gUChcInBvY2t5dC1wYXlwYWxcIiksIENzID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBTcyA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciB4LCBwZTtcbiAgICBKKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IE4ocyk7XG4gICAgSihcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYyA9IENzLnBhcnNlKG4pO1xuICAgIEooXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnNldHRpbmdzLCB1ID0gaWUoXG4gICAgICB0LFxuICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBsID09IG51bGwgPyB2b2lkIDAgOiBsLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGQgPSBFaSh1KTtcbiAgICBKKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHthLm1vZGV9YCk7XG4gICAgY29uc3QgXyA9IHY0KCksIG0gPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgeSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbSA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoeCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MpICE9IG51bGwgJiYgeC51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogX1xuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCBmID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBoID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIHYgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBhLnRva2VuLFxuICAgICAgcjogaFxuICAgIH0pLCBiID0gYCR7Zn0/JHt2LnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKHBlID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBwZS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBKKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGIsIGF3YWl0IGF0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgSihcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgSihcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBFID0gYXdhaXQgQWkoXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgcyxcbiAgICAgIF8sXG4gICAgICBiXG4gICAgKTtcbiAgICBKKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIEUpO1xuICAgIGNvbnN0IGsgPSBObihFLmhyZWYpLCBPID0gUWkoRS5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFPKVxuICAgICAgdGhyb3cgUnQoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIEUuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBKKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke2t9YCk7XG4gICAgY29uc3QgWCA9IGF3YWl0IHEocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IGssXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBtID8gTyA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChKKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIFgpLCBhLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IFgucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFYLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgUnQoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBYKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogWC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIFR0ID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEYsIGVycl9fOiBQcyB9ID0gUChcInN0cmlwZS1saW5rXCIpLCBrcyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBBcyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBJcyA9IGRlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCB0ID0gZS5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgRihcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgciA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBrcyk7XG4gICAgRihcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBGKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCB3ZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IEFyKHIubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgRihcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogdCA9PSBudWxsID8gdm9pZCAwIDogdC5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIF8gPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtUdH1gKTtcbiAgICB9LCBtID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gdCAhPSBudWxsICYmIHQuZG9Ob3RNb3VudE9uSW5pdCA/IEYoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEYoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIF8oKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgaWYgKEYoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgdCAhPSBudWxsICYmIHQub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCB0Lm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEYoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHkucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgRihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgeSk7XG4gICAgICBjb25zdCBmID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogeS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGYuZXJyb3IgPyAoUHMoXCJlcnJvclwiLCBmLmVycm9yKSwgbi5nZXQub25DaGVja291dEVycm9yKGYuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEYoXCJwYXltZW50TWV0aG9kXCIsIGYucGF5bWVudE1ldGhvZCksIFIuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBmLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBfLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogbSxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IEZzKFR0KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFJzID0gcmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgRihcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uO1xuICAgIEYoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGEgPSBUcyh0LCBpLnN0cmlwZVBNKSwgYyA9IGllKGEsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmNcbiAgICB9KSwgRihcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgZ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1twLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgRihcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gQXMucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgXyA9IGF3YWl0IE4ocyk7XG4gICAgaWYgKF8ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBGKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCBxKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVGUobSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgRihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgbSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogbi5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IF8ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IF8uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCB1dChzLCBtKSB9O1xuICAgIH1cbiAgfVxuKSwgVHMgPSAoZSwgbikgPT4ge1xuICB2YXIgbCwgdSwgZCwgXywgbTtcbiAgY29uc3QgdCA9IHsgLi4uZSB9LCBbciwgLi4uaV0gPSAoKHUgPSAobCA9IG4uYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgdFtwLkVNQUlMXSA9IHRbcC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChkID0gbi5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogZC5lbWFpbCkgfHwgbi5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCB0W3AuWklQX0NPREVdID0gdFtwLlpJUF9DT0RFXSB8fCAoKF8gPSBuLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogXy5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCB0W3AuQ09VTlRSWV0gPSB0W3AuQ09VTlRSWV0gfHwgKChtID0gbi5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBhID0gdFtwLkZJUlNUX05BTUVdIHx8IHIgfHwgXCJcIiwgYyA9IHRbcC5MQVNUX05BTUVdIHx8IHMgfHwgXCJcIjtcbiAgcmV0dXJuIGEgfHwgYyA/ICh0W3AuRklSU1RfTkFNRV0gPSBhLCB0W3AuTEFTVF9OQU1FXSA9IGMpIDogKHRbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgdFtwLkxBU1RfTkFNRV0gPSBcIlwiKSwgRihcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCB0KSwgdDtcbn0sIEZzID0gKGUpID0+IG5ldyBQcm9taXNlKChuKSA9PiB7XG4gIGNvbnN0IHQgPSAoKSA9PiB7XG4gICAgY29uc3QgciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHIgPyBuKHIpIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpO1xuICB9O1xuICB0KCk7XG59KSwgeyBsb2dfXzogVSwgZXJyX186IE1zIH0gPSBQKFwic3RyaXBlLXByXCIpLCBEcyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgTnMgPSBkZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgVShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRHMpO1xuICAgIFUoXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE4ociksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBVKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCB3ZShyLCBpLnRva2VuLCBzLCB2b2lkIDApLCBjID0gYXdhaXQgSXIoXG4gICAgICB0Lm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGEuYW1vdW50QXRvbSxcbiAgICAgIGEuY3VycmVuY3ksXG4gICAgICBzXG4gICAgKTtcbiAgICBVKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgYy5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChsID09PSBudWxsKVxuICAgICAgcmV0dXJuIE1zKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICBVKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGwpO1xuICAgIGNvbnN0IHUgPSAoZCwgXykgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogUGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICBwcm9jZXNzb3I6IFkuRW51bS5zdHJpcGUsXG4gICAgICAgIHByOiBjLFxuICAgICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogbC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheSB9LFxuICAgICAgICBzdGFydEZsb3c6IHVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGMsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGwuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogbC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBMcyA9IHJlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgaW5pdFJlc3VsdDogc1xuICB9KSA9PiB7XG4gICAgaWYgKFUoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBpLnByb3ZpZGVyICE9PSBuLnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtpLnByb3ZpZGVyfSwgZ290ICR7bi5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gcy5wcjtcbiAgICBpZiAoaSAhPSBudWxsICYmIGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgZiA9IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIFUoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIGYpO1xuICAgICAgY29uc3QgaCA9IHR5cGVvZiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8gZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIFVzKGMsIGYuYW1vdW50LCBmLnBlbmRpbmcsIGgsIGYubGFiZWwpO1xuICAgIH1cbiAgICBVKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBScihjKTtcbiAgICBVKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgVShcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IE9zKHQsIGwpLCBkID0gaWUodSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZFxuICAgIH0pLCBVKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgXyA9IGF3YWl0IGRpKGEsIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogblxuICAgIH0pLCBtID0ganMoXyk7XG4gICAgVShcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IFRyKG0sIGwpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBOKGEpO1xuICAgIGlmICh5Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgVShcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCBxKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBUZShmKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBVKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCB1dChhLCBmKSB9O1xuICAgIH1cbiAgfVxuKSwgT3MgPSAoZSwgbikgPT4ge1xuICB2YXIgZCwgXywgbSwgeTtcbiAgY29uc3QgdCA9IHsgLi4uZSB9LCBbciwgLi4uaV0gPSAoKF8gPSAoZCA9IG4ucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogZC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBfLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIGEgPSAoeSA9IChtID0gbi5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogbS5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiB5LmFkZHJlc3MsIGMgPSBuLnNoaXBwaW5nQWRkcmVzcztcbiAgdFtwLkVNQUlMXSA9IHRbcC5FTUFJTF0gfHwgbi5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgbCA9IHRbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiXCIsIHUgPSB0W3AuTEFTVF9OQU1FXSB8fCBzIHx8IFwiXCI7XG4gIHJldHVybiBsIHx8IHUgPyAodFtwLkZJUlNUX05BTUVdID0gbCwgdFtwLkxBU1RfTkFNRV0gPSB1KSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIiksIFUoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgdCksIHQ7XG59LCBVcyA9IChlLCBuLCB0LCByLCBpKSA9PiB7XG4gIGUudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBuLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogaSA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiB0XG4gICAgfSxcbiAgICBjdXJyZW5jeTogbi5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiByXG4gIH0pO1xufSwganMgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gUHIucGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgUGUgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maWx0ZXIoKGkpID0+IHtcbiAgICBjb25zdCBzID0gdCA9PT0gdm9pZCAwID8gITAgOiBpLnByb2Nlc3Nvcl9uYW1lID09PSB0LCBhID0gaS5wcm92aWRlciA9PT0gbjtcbiAgICByZXR1cm4gcyAmJiBhO1xuICB9KTtcbiAgaWYgKHIubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7bn0nIGFuZCBwcm9jZXNzb3IgJyR7dH0nYCk7XG4gIHJldHVybiByLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7bn0nIGFuZCBwcm9jZXNzb3IgJyR7dH0nYCksIGcoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IG4sXG4gICAgcHJvY2Vzc29yOiB0LFxuICAgIGNwbXM6IGVcbiAgfSkpLCByWzBdO1xufSwgUiA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBkc1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBOcyxcbiAgICBydW46IExzXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBJcyxcbiAgICBydW46IFJzXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IFNzXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBHaSxcbiAgICBydW46IFZpXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogamksXG4gICAgcnVuOiB4aVxuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiB2cyxcbiAgICBydW46IEVzXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogWWksXG4gICAgcnVuOiBCaVxuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBIaSxcbiAgICBydW46IEppXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiB4cywgZXJyX186ICRzIH0gPSBQKFwiaW5pdC1mbG93c1wiKSwgY2UgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gbmV3IFNlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiB0LFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodC5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCBuKHIpO1xuICAgICAgICB4cyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgdC5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgICRzKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEcoaSksIFwiRGV0YWlsczpcIiwgaSksIHQudGhyb3coaSwgRyhpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgR3MgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgocikgPT4gci5pbml0aWFsaXplKHsgY29udGV4dDogbiwgZm9ybUNhbGxiYWNrczogdCB9KSkpO1xufSwgVnMgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogY2UoXCJTdHJpcGUgUFJcIiwgUi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogY2UoXCJTdHJpcGUgTGlua1wiLCBSLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgUi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogY2UoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgUi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBjZShcIkxvb3BcIiwgUi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNlKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgUi5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGNlKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBSLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogenMgfSA9IFAoXCJmb3JtLWNhbGxiYWNrc1wiKSwgViA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIEZ0ID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IFYsXG4gIG9uQmx1cjogVixcbiAgb25DaGFuZ2U6IFYsXG4gIG9uTG9hZDogVixcbiAgb25Mb2FkRXJyb3I6IFYsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBWLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogVixcbiAgb25DaGVja291dFN1Y2Nlc3M6IFYsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogVixcbiAgb25DaGVja291dEVycm9yOiBWLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogVlxufSksIFcgPSBjbGFzcyBXIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAobikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gVy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbdCwgcl0pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IEtuKHQsIHIgPz8gVy5OT09QLCB6cyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1t0XSA9IGk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSBXLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5XLk5PT1AgPSAoKSA9PiB7XG59LCBXLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhGdC5rZXlvZigpLmVudW0pLmZvckVhY2goKHQpID0+IHtcbiAgICBuW3RdID0gVy5OT09QO1xuICB9KSwgbjtcbn0sIFcuZnJvbU9iamVjdCA9IChuKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVygpO1xuICByZXR1cm4gdC5zZXRDYWxsYmFja3MoRnQucGFyc2UobikpLCB0O1xufTtcbmxldCBpdCA9IFc7XG5jb25zdCBVbiA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwga2UgPSAzMiwgcXMgPSAxNiwgam4gPSAxMCwgTXQgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgdWU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KSh1ZSB8fCAodWUgPSB7fSkpO1xuY2xhc3MgQ2UgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG4sIHQpIHtcbiAgICBzdXBlcihgJHt0fSAoJHtufSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gbjtcbiAgfVxufVxuZnVuY3Rpb24gWXMoZSkge1xuICBsZXQgbiA9IE1hdGguZmxvb3IoZSgpICoga2UpO1xuICByZXR1cm4gbiA9PT0ga2UgJiYgKG4gPSBrZSAtIDEpLCBVbi5jaGFyQXQobik7XG59XG5mdW5jdGlvbiBCcyhlKSB7XG4gIGNvbnN0IG4gPSBIcygpLCB0ID0gbiAmJiAobi5jcnlwdG8gfHwgbi5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHQuZ2V0UmFuZG9tVmFsdWVzKHIpLCByWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gdC5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IENlKHVlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIEhzKCkge1xuICByZXR1cm4gWnMoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBKcyhlLCBuKSB7XG4gIGxldCB0ID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgdCA9IFlzKG4pICsgdDtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBLcyhlLCBuID0gam4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBDZSh1ZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBNdClcbiAgICB0aHJvdyBuZXcgQ2UodWUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7TXR9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgQ2UodWUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgQ2UodWUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHQsIHIgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gbjsgaSA+IDA7IGktLSlcbiAgICB0ID0gZSAlIGtlLCByID0gVW4uY2hhckF0KHQpICsgciwgZSA9IChlIC0gdCkgLyBrZTtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBacygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIFdzKGUsIG4pIHtcbiAgY29uc3QgdCA9IEJzKCksIHIgPSBEYXRlLm5vdygpO1xuICByZXR1cm4gS3Mociwgam4pICsgSnMocXMsIHQpO1xufVxuY29uc3QgeG4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgUXMgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHQpID0+IHQuaW5jbHVkZXMoeG4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCBuID0gV3MoKTtcbiAgcmV0dXJuIFhzKG4pLCBuO1xufSwgWHMgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG4uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke3hufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHtuLnRvVVRDU3RyaW5nKCl9YDtcbn07XG5mdW5jdGlvbiBlYSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gQSgpO1xuICAgIGlmIChlICE9IG51bGwgJiYgZS5uZXh0IHx8IGUgIT0gbnVsbCAmJiBlLl9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCBuID0gQSgpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSlcbiAgICAgIHJldHVybiBcIm51eHRcIjtcbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZCgocikgPT4gci5fcmVhY3RSb290Q29udGFpbmVyKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgdCA9IEEoKTtcbiAgICByZXR1cm4gdCAhPSBudWxsICYmIHQuVnVlIHx8IHQgIT0gbnVsbCAmJiB0Ll9fVlVFX18gPyBcInZ1ZVwiIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSA/IFwiYW5ndWxhclwiIDogXCJ2YW5pbGxhXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuZnVuY3Rpb24gdGEoZSkge1xuICB2YXIgbiwgdCwgcjtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKGUpIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJuZXh0anNcIjoge1xuICAgICAgICBjb25zdCBpID0gQSgpO1xuICAgICAgICByZXR1cm4gKChuID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5uZXh0KSA9PSBudWxsID8gdm9pZCAwIDogbi52ZXJzaW9uKSB8fCAoKHQgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLl9fTkVYVF9EQVRBX18pID09IG51bGwgPyB2b2lkIDAgOiB0LmJ1aWxkSWQpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJ2dWVcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwiYW5ndWxhclwiOiB7XG4gICAgICAgIGNvbnN0IGkgPSAociA9IEEoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZG9jdW1lbnQsIHMgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBzID8gcy5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIG5hKCkge1xuICBjb25zdCBlID0gZWEoKSwgbiA9IHRhKGUpO1xuICByZXR1cm4geyBmcmFtZXdvcms6IGUsIHZlcnNpb246IG4gfTtcbn1cbmNsYXNzIHJhIHtcbiAgY29uc3RydWN0b3IobiwgdCwgciwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKER0KHMub3JpZ2luKSAhPT0gRHQodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnBlbnBhbCB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnNvdXJjZSAmJiBzLmRhdGEuc291cmNlID09PSBcInJlYWN0LWRldnRvb2xzLWJyaWRnZVwiKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgYSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gRHIoSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChhKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IGwsIHBheWxvYWQ6IHUgfSA9IGEsIGQgPSB1LnR5cGU7XG4gICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodCh1LmhlaWdodCA/IGAke3UuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IHMuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChzKSA9PiBzLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIXMuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBzLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBzKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKHMubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIHMpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKHMubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSBuLCB0aGlzLmJhc2VVcmwgPSB0LCB0aGlzLmZvcm1DYWxsYmFja3MgPSByLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaTtcbiAgfVxufVxuY29uc3QgRHQgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBvYShlLCBuKSB7XG4gIGNvbnN0IHIgPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgTnIocik7XG4gIGlmICghTHIociwgaSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gcjtcbn1cbmNsYXNzIGlhIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihuLCB0KSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQobiwgdCk7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBuID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IHNhID0gKGUsIG4sIHQpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogciB9ID0gZTtcbiAgci5wdWJsaXNoZXIuc3Vic2NyaWJlKChpKSA9PiB7XG4gICAgaWYgKGkuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBzID0gaS5sb2FkZWRWYWx1ZSwgYSA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBhICYmIE50KFwiYXBwbGVfcGF5XCIsIHMsIG4sIHQsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBOdChcImdvb2dsZV9wYXlcIiwgcywgbiwgdCwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdC5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIE50ID0gKGUsIG4sIHQsIHIsIGkpID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogdCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBQZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBRKHQuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IHIsXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IG5cbn0pLCBMdCA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IEssIGVycl9fOiBlZSB9ID0gUChcIm9wLWZvcm1cIiksIHRlID0gY2xhc3MgdGUge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgdmFyIGk7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgU2UoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IFNlKCksIHRoaXMuY29udGV4dCA9IG5ldyBTZSgpLCB0aGlzLmluaXRGbG93cyA9IFZzKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoWi5DREVfQlJJREdFKTtcbiAgICAgICAgcy5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgcy5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihzLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgfSksIHMubW91bnQoXCJib2R5XCIpLCBLKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIEsoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgSyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgYSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogTHRcbiAgICAgICAgfSk7XG4gICAgICAgIEsoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIEsoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBMdFxuICAgICAgICB9KTtcbiAgICAgICAgSyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgZ2koYywgdGhpcy5kZXZpY2VUb2tlbiksIEsoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGwgPSB0ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGEsXG4gICAgICAgICAgYyxcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGwpLCBzYSh0aGlzLmluaXRGbG93cywgbCwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgSyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgR3ModGhpcy5pbml0Rmxvd3MsIGwsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGEudG90YWxBbW91bnRBdG9tcywgYS5jdXJyZW5jeSksIEsoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICBjb25zdCBhID0gRyhzKTtcbiAgICAgICAgZWUoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGEpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogYVxuICAgICAgICB9KSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihhKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAocykgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBzLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICFhIHx8IGEudHlwZSA9PT0gWi5DREVfQlJJREdFIHx8IChhLm5vZGUuc3R5bGUuaGVpZ2h0ID0gcyk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKHMpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQocyksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKHMpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IocyksIHMpLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogc1xuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChzLCBhID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gWm4ucGFyc2UocyksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKGEpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gZC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChzLCBhKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBzLFxuICAgICAgICBub2RlOiBhLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChhKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbWi5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbWi5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW1ouQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtaLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICBbWi5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbc10gPSBjLCBjO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChzKSA9PiB7XG4gICAgICBjb25zdCBhID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIGEuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgYS5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBzLnN0eWxlcyAmJiBhLmFwcGVuZChcInN0eWxlc1wiLCBNcihzLnN0eWxlcykpLCBhLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBhO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChzKSA9PiB7XG4gICAgICBvYShzLm5vZGUpLnRoZW4oKGEpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKHMudHlwZSwgYSksICF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgcy50eXBlID09PSBaLkNERV9CUklER0UgJiYgdGhpcy5hbnlDZGVDb25uLnNldChhKTtcbiAgICAgIH0pLmNhdGNoKChhKSA9PiBlZShcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgYSkpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAocykgPT4ge1xuICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4ucyB9KTtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWEpIHtcbiAgICAgICAgZWUoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBSLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogUGUoYS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGEuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucGF5bWVudFJvdXRlSWRcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIGVlKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhID0ge1xuICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6ICQuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogJC5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiAkLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6ICQuYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgIH0sIGMgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbCwgdV0pID0+ICh7XG4gICAgICAgIG5hbWU6IGFbbF0gPz8gbCxcbiAgICAgICAgLi4udS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBnKFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIiwge1xuICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBjXG4gICAgICB9KSwgYztcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAocywgYSkgPT4ge1xuICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwge1xuICAgICAgICBtZXRob2Q6IHMsXG4gICAgICAgIHNldHRpbmdzOiBhXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWMpIHtcbiAgICAgICAgZWUoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgY2FzZSAkLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICByZXR1cm4gUi5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFBlKGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGMuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IGEgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICQuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFsKSB7XG4gICAgICAgICAgICBlZShcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGwuc3RhcnRGbG93KGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFsKSB7XG4gICAgICAgICAgICBlZShcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbC5zdGFydEZsb3coYSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgZWUoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbC5zdGFydEZsb3coYSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWwpIHtcbiAgICAgICAgICAgIGVlKFxuICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbC5zdGFydEZsb3coYSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmxvb3BDcnlwdG86XG4gICAgICAgICAgcmV0dXJuIFIubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogUGUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyeXB0b1wiLCBcImxvb3BcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGMuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBZZShzKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdmFyIHM7XG4gICAgICBLKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGEgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGEgJiYgYS5ub2RlLnJlbW92ZSgpO1xuICAgICAgKHMgPSBBKCkpID09IG51bGwgfHwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgc2koKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcywgZyhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKHMpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3Mocyk7XG4gICAgfSwgdGUuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjM0XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IG4uYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5uLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gaXQuZnJvbU9iamVjdChuKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSBuLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IGlhKCksIHRoaXMuZGV2aWNlVG9rZW4gPSBRcygpLCBpaSgpO1xuICAgIGNvbnN0IHsgZnJhbWV3b3JrOiB0LCB2ZXJzaW9uOiByIH0gPSBuYSgpO1xuICAgIGNuKHRoaXMuYmFzZVVybCkudGhlbigocykgPT4ge1xuICAgICAgaWYgKCFvdC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBhID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHMsXG4gICAgICAgICAgZnJhbWV3b3JrOiB0LFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IHIsXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBvdC5zZXQoYSk7XG4gICAgICB9XG4gICAgfSksIGcoXCJmb3JtX2luaXRcIiksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IHJhKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAoaSA9IEEoKSkgPT0gbnVsbCB8fCBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcbnRlLm9qc0Zsb3dzID0gUiwgdGUuYXNzaWduQXNTaW5nbGV0b24gPSAobikgPT4ge1xuICBpZiAodGUuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IG47XG59LCB0ZS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgdGUuYnVpbGRPanNGbG93Q29udGV4dCA9IChuLCB0LCByLCBpKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiBuLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwobi5iYXNlVXJsID8/IHh0KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiB0LnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogdC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiByLFxuICBjdXN0b21Jbml0UGFyYW1zOiBuLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IE90ID0gdGU7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56JDEubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7fSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMkMShDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke01lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7TWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtNZS5yZWQuYm9sZChcIm9qcy9cIil9JHtNZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gcGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18oXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIlBST0NFU1NJTkdfUEFZTUVOVFwiXSA9IFwicHJvY2Vzc2luZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UXCJdID0gXCJjcmVhdGluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX1BBWU1FTlRcIl0gPSBcImNvbmZpcm1pbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09NUExFVEVcIl0gPSBcImNvbXBsZXRlXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcbnokMS5vYmplY3Qoe1xuICBbXCJsb29wRmlyc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcExhc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcEVtYWlsXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV06IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJsb29wRmlyc3ROYW1lXCJdOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibG9vcExhc3ROYW1lXCJdOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibG9vcEVtYWlsXCJdOiBPcHRpb25hbFN0cmluZyxcbiAgW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV06IE9wdGlvbmFsU3RyaW5nXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoT3QuZ2V0SW5zdGFuY2UoKSkge1xuICAgIE90LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBPdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBPdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmICFyZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiBudWxsLFxuICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIFBheUluU3RhdGUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElB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LENBQUNxQixFQUFVLFdBQVcsQ0FBQ0YsS0FDM0JKLEVBQWVOLEdBQWFZLEVBQVUsT0FBTztBQUFBLEVBQy9DLEdBQUcsQ0FBQ0YsQ0FBUyxDQUFDLEdBQ1YsQ0FBQ0w7QUFDSCxtQkFBUSxNQUFNLGtEQUFrRCxHQUN6QyxnQkFBQVYsRUFBSSxPQUFPLENBQUMsQ0FBQztBQUV0QyxRQUFNeUIsSUFBTSxJQUFJLElBQUksV0FBV1gsQ0FBTyxhQUFhRixDQUFPO0FBQzFELFNBQUFhLEVBQUksU0FBU0YsR0FDVSxnQkFBQXZCO0FBQUEsSUFDckI7QUFBQSxJQUNBO0FBQUEsTUFDRSxJQUFJLE9BQU9jLENBQU87QUFBQSxNQUNsQixNQUFNLEdBQUdBLENBQU87QUFBQSxNQUNoQixXQUFXO0FBQUEsTUFDWCxLQUFLVyxFQUFJLFNBQVM7QUFBQSxNQUNsQixPQUFPSDtBQUFBLE1BQ1AsS0FBS0w7QUFBQSxJQUNQO0FBQUEsRUFDRjtBQUNGLEdBRU1TLEtBQWlCLENBQUMsRUFBRSxRQUFBcEIsRUFBTyxNQUNSLGdCQUFBTixFQUFJSSxJQUFjLEVBQUUsUUFBQUUsR0FBUSxhQUFhcUIsR0FBZ0IsU0FBUyxDQUFDLEdBR3RGQyxLQUFjLENBQUMsRUFBRSxRQUFBdEIsRUFBTyxNQUNMLGdCQUFBTixFQUFJSSxJQUFjLEVBQUUsUUFBQUUsR0FBUSxhQUFhcUIsR0FBZ0IsS0FBSyxDQUFDLEdBR2xGRSxLQUFvQixDQUFDLEVBQUUsUUFBQXZCLEVBQU8sTUFDWCxnQkFBQU4sRUFBSUksSUFBYyxFQUFFLFFBQUFFLEdBQVEsYUFBYXFCLEdBQWdCLFlBQVksQ0FBQyxHQUd6RkcsS0FBb0IsQ0FBQyxFQUFFLFFBQUF4QixFQUFPLE1BQ1gsZ0JBQUFOLEVBQUlJLElBQWMsRUFBRSxRQUFBRSxHQUFRLGFBQWFxQixHQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJNZSIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAieHQiLCAiR24iLCAiVm4iLCAiem4iLCAicW4iLCAiWW4iLCAidHQiLCAibiIsICJCbiIsICJIbiIsICJKbiIsICJHIiwgIktuIiwgInQiLCAiciIsICJJIiwgIkMiLCAiTSIsICJwIiwgIiR0IiwgIkd0IiwgIlZ0IiwgInp0IiwgIloiLCAiWm4iLCAiVmUiLCAiV24iLCAiQiIsICJRbiIsICJYbiIsICJlciIsICJ0ciIsICJuciIsICJyciIsICJvciIsICJpciIsICJzciIsICJhciIsICJjciIsICJsciIsICJJZSIsICJ1ciIsICJkciIsICJwciIsICJtciIsICJ5ciIsICJmciIsICJfciIsICJzdCIsICJociIsICJnciIsICJ3ciIsICJUIiwgImJyIiwgInZyIiwgInF0IiwgIkVyIiwgIkNyIiwgIll0IiwgIlNyIiwgIlByIiwgImtyIiwgInplIiwgIm10IiwgImF0IiwgIkFyIiwgIklyIiwgInMiLCAiYSIsICJSciIsICJUciIsICJGciIsICJpIiwgImMiLCAiTXIiLCAiUSIsICJEciIsICJOciIsICJMciIsICJ3IiwgIk9yIiwgIkJ0IiwgIkh0IiwgIlVyIiwgImpyIiwgImhlIiwgInhyIiwgIiRyIiwgIkp0IiwgIkdyIiwgIlZyIiwgInpyIiwgInl0IiwgIkt0IiwgImZ0IiwgIlp0IiwgInFyIiwgIllyIiwgIld0IiwgIkJyIiwgIkhyIiwgIkpyIiwgIktyIiwgIlpyIiwgIlF0IiwgIldyIiwgIlFyIiwgIlhyIiwgImVvIiwgInRvIiwgIm5vIiwgInJvIiwgIm9vIiwgImlvIiwgInJlIiwgImRlIiwgIlAiLCAibnQiLCAib2UiLCAic28iLCAiXyIsICJYdCIsICJmZSIsICJqZSIsICJ4ZSIsICJ5ZSIsICJhbyIsICJ5IiwgImYiLCAiaCIsICJ2IiwgImIiLCAibSIsICJjbyIsICJEIiwgInFlIiwgIldlIiwgIiRlIiwgIlJlIiwgIl90IiwgImVuIiwgInRuIiwgInJuIiwgImh0IiwgIkxlIiwgImN0IiwgIm1vIiwgInJ0IiwgImxvIiwgIlFlIiwgInVvIiwgIkRlIiwgInBvIiwgImx0IiwgInlvIiwgImZvIiwgIm5lIiwgImhvIiwgImd0IiwgIl9vIiwgImdvIiwgIndvIiwgImJvIiwgInZvIiwgIkVvIiwgInNuIiwgInd0IiwgIkNvIiwgIlNvIiwgImJ0IiwgIlBvIiwgInZ0IiwgImtvIiwgIkFvIiwgIklvIiwgIlJvIiwgIlRvIiwgIkZvIiwgIk1vIiwgIkRvIiwgIk5vIiwgIkxvIiwgIk9vIiwgIlVvIiwgImpvIiwgInhvIiwgIiRvIiwgIkdvIiwgImFuIiwgIlZvIiwgInpvIiwgInFvIiwgIllvIiwgIkJvIiwgIkhvIiwgIkpvIiwgIktvIiwgIlpvIiwgIldvIiwgIlFvIiwgIkUiLCAiayIsICJTZSIsICJZZSIsICJFdCIsICJYbyIsICJlaSIsICJYZSIsICJBIiwgIm90IiwgIkN0IiwgInRpIiwgIm5pIiwgInJpIiwgIk5lIiwgIm9pIiwgImlpIiwgInNpIiwgIlV0IiwgIkwiLCAiY2kiLCAiYWkiLCAibGkiLCAiTiIsICJnZSIsICJ1aSIsICJkaSIsICJxIiwgInBpIiwgIm1pIiwgInlpIiwgIndlIiwgImZpIiwgIlN0IiwgIl9pIiwgInV0IiwgInluIiwgImhpIiwgImR0IiwgImdpIiwgIlkiLCAiX24iLCAiaG4iLCAid2kiLCAiYmkiLCAibCIsICJ3biIsICJwYSIsICJ2aSIsICJUZSIsICJIIiwgIkVpIiwgIkJlIiwgIkNpIiwgIlNpIiwgIlBpIiwgIkhlIiwgInZuIiwgImtpIiwgIkFpIiwgIklpIiwgInB0IiwgIlJpIiwgIlRpIiwgIkZpIiwgIk1pIiwgIkRpIiwgIkNuIiwgIlNuIiwgIlBuIiwgImllIiwgIk5pIiwgIk9lIiwgIkxpIiwgIk9pIiwgIlVpIiwgInZlIiwgImppIiwgInUiLCAiZCIsICJSIiwgInhpIiwgIkplIiwgImV0IiwgIktlIiwgIiRpIiwgIlJuIiwgInoiLCAibWUiLCAiR2kiLCAiVmkiLCAiTyIsICJYIiwgIngiLCAiJG4iLCAiRmUiLCAic2UiLCAiWmUiLCAiYWUiLCAiYmUiLCAiVG4iLCAiRm4iLCAiemkiLCAicWkiLCAiVWUiLCAiTW4iLCAiWWkiLCAiQmkiLCAibGUiLCAiRWUiLCAiSGkiLCAiSmkiLCAiS2kiLCAiRG4iLCAiWmkiLCAiV2kiLCAiTm4iLCAiUWkiLCAiWGkiLCAiZXMiLCAidHMiLCAibnMiLCAiX2UiLCAiQWUiLCAicnMiLCAib3MiLCAiaXMiLCAiUHQiLCAic3MiLCAiYXMiLCAiY3MiLCAibHMiLCAidXMiLCAiUyIsICJrdCIsICJBdCIsICJkcyIsICJfcyIsICJmcyIsICJwcyIsICJtcyIsICJ5cyIsICJocyIsICJncyIsICJqIiwgIk9uIiwgIndzIiwgImJzIiwgIkl0IiwgInZzIiwgIkVzIiwgIkoiLCAiUnQiLCAiQ3MiLCAiU3MiLCAicGUiLCAiVHQiLCAiRiIsICJQcyIsICJrcyIsICJBcyIsICJJcyIsICJGcyIsICJScyIsICJUcyIsICJVIiwgIk1zIiwgIkRzIiwgIk5zIiwgIlBlIiwgIkxzIiwgIlVzIiwgIk9zIiwgImpzIiwgInhzIiwgIiRzIiwgImNlIiwgIkdzIiwgIlZzIiwgInpzIiwgIlYiLCAiRnQiLCAiVyIsICJpdCIsICJVbiIsICJrZSIsICJxcyIsICJqbiIsICJNdCIsICJ1ZSIsICJDZSIsICJZcyIsICJCcyIsICJIcyIsICJacyIsICJKcyIsICJLcyIsICJXcyIsICJ4biIsICJRcyIsICJYcyIsICJlYSIsICJ0YSIsICJuYSIsICJyYSIsICJEdCIsICJvYSIsICJpYSIsICJzYSIsICJOdCIsICJMdCIsICJLIiwgImVlIiwgInRlIiwgIk90IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJnIiwgInZlcmIiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJmcm9tIiwgInBhY2siLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImF3YWl0UmV0dXJuIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6JDEiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiUmVxdWlyZWRTdHJpbmciLCAiRmllbGROYW1lIiwgIk9wdGlvbmFsU3RyaW5nIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrcyIsICJPdCIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgInVzZVN0YXRlIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInVzZUNhbGxiYWNrIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgInVzZUVmZmVjdCIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50c0NvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgImVsZW1lbnRUeXBlIiwgInN0eWxlcyIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVybCIsICJDYXJkQ3ZjRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==