@getopenpay/openpay-js 0.2.17-alpha.f7c2cdd → 0.2.18

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.es.js CHANGED
@@ -26,7 +26,7 @@ const et = "https://cde.getopenpay.com", gn = o.object({
26
26
  ${t.map((e) => `• ${We(e.msg)}`).join(`
27
27
  `)}`, Pn = (t) => `Encountered the following errors:
28
28
  ${t.map((e) => `- ${e.path.join("/")}: ${e.message}`).join(`
29
- `)}`, J = (t) => {
29
+ `)}`, H = (t) => {
30
30
  if (t instanceof Error)
31
31
  if (Cn(t.message)) {
32
32
  const n = JSON.parse(t.message);
@@ -51,7 +51,7 @@ ${t.message}`), t.message);
51
51
  }
52
52
  };
53
53
  var x = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t.loopCrypto = "loop-crypto", t))(x || {});
54
- const bi = o.nativeEnum(x), O = o.string().trim().min(1, { message: "Cannot be blank" }), S = o.string().trim().optional(), j = (t) => o.nullable(t.optional());
54
+ const _i = o.nativeEnum(x), D = o.string().trim().min(1, { message: "Cannot be blank" }), S = o.string().trim().optional(), U = (t) => o.nullable(t.optional());
55
55
  var p = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(p || {});
56
56
  const It = o.nativeEnum(p);
57
57
  var Rt = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Rt || {});
@@ -59,8 +59,8 @@ const Ft = o.nativeEnum(Rt), Mt = o.union([It, Ft]);
59
59
  var de = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(de || {});
60
60
  const An = o.nativeEnum(de), Te = o.object({
61
61
  provider: o.string(),
62
- processor_name: j(o.string()),
63
- metadata: j(o.record(o.string(), o.any()))
62
+ processor_name: U(o.string()),
63
+ metadata: U(o.record(o.string(), o.any()))
64
64
  }), In = o.object({
65
65
  id: o.string()
66
66
  });
@@ -108,7 +108,7 @@ const q = o.enum([
108
108
  errors: o.array(o.string()).optional()
109
109
  }), On = q.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Nn = o.object({
110
110
  type: On,
111
- message: O,
111
+ message: D,
112
112
  headers: o.record(o.string(), o.string()).optional()
113
113
  }), Tn = q.extract(["VALIDATION_ERROR"]), Ln = o.object({
114
114
  type: Tn,
@@ -116,10 +116,10 @@ const q = o.enum([
116
116
  errors: o.array(o.string())
117
117
  }), Un = o.object({
118
118
  type: o.literal(q.enum.LAYOUT),
119
- height: O
119
+ height: D
120
120
  }), jn = o.object({
121
121
  type: o.literal(q.enum.LOADED),
122
- sessionId: O,
122
+ sessionId: D,
123
123
  totalAmountAtoms: o.number(),
124
124
  currency: S,
125
125
  checkoutPaymentMethods: o.array(Te)
@@ -132,25 +132,25 @@ const q = o.enum([
132
132
  type: o.literal(q.enum.SETUP_PAYMENT_METHOD_SUCCESS),
133
133
  paymentMethodId: o.string()
134
134
  }), Ce = o.object({
135
- firstName: O,
136
- lastName: O,
137
- email: O,
138
- zipCode: O,
139
- country: O,
135
+ firstName: D,
136
+ lastName: D,
137
+ email: D,
138
+ zipCode: D,
139
+ country: D,
140
140
  promotionCode: S
141
141
  }), zn = o.object({
142
142
  firstName: S,
143
143
  lastName: S,
144
- email: O,
145
- zipCode: O,
146
- country: O,
144
+ email: D,
145
+ zipCode: D,
146
+ country: D,
147
147
  promotionCode: S,
148
148
  address: S,
149
149
  city: S,
150
150
  state: S
151
151
  }), Gn = q.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Vn = o.object({
152
152
  type: Gn,
153
- sessionId: O,
153
+ sessionId: D,
154
154
  checkoutPaymentMethod: Te,
155
155
  paymentFlowMetadata: o.any().optional(),
156
156
  doNotUseLegacyCCFlow: o.boolean().optional(),
@@ -177,16 +177,16 @@ const q = o.enum([
177
177
  $n
178
178
  ]), Wn = o.object({
179
179
  payload: Kn,
180
- nonce: O,
181
- formId: O,
182
- elementId: O
180
+ nonce: D,
181
+ formId: D,
182
+ elementId: D
183
183
  });
184
184
  o.object({
185
185
  amountAtom: o.number(),
186
186
  /**
187
187
  * The three-letter ISO 4217 currency code for the payment.
188
188
  */
189
- currency: O
189
+ currency: D
190
190
  });
191
191
  o.enum(["apple_pay", "google_pay"]);
192
192
  o.object({
@@ -195,36 +195,36 @@ o.object({
195
195
  });
196
196
  o.object({
197
197
  secure_token: o.string(),
198
- existing_cc_pm_id: j(o.string()),
199
- their_pm_id: j(o.string()),
200
- checkout_attempt_id: j(o.string()),
201
- processor_specific_metadata: j(o.record(o.string(), o.any()))
198
+ existing_cc_pm_id: U(o.string()),
199
+ their_pm_id: U(o.string()),
200
+ checkout_attempt_id: U(o.string()),
201
+ processor_specific_metadata: U(o.record(o.string(), o.any()))
202
202
  });
203
203
  const tt = o.object({
204
204
  invoice_urls: o.array(o.string()),
205
205
  subscription_ids: o.array(o.string()),
206
206
  customer_id: o.string()
207
- }), Hn = o.object({
207
+ }), Jn = o.object({
208
208
  elementType: o.string(),
209
209
  errors: o.array(o.string())
210
210
  });
211
211
  o.object({
212
212
  session_id: o.string()
213
213
  });
214
- const Jn = o.object({
214
+ const Hn = o.object({
215
215
  success: o.literal(!1),
216
216
  error_type: o.literal("validation_error"),
217
- errors: o.array(Hn)
217
+ errors: o.array(Jn)
218
218
  }), Zn = o.discriminatedUnion("success", [
219
219
  o.object({ success: o.literal(!0) }),
220
- Jn
220
+ Hn
221
221
  ]);
222
222
  o.object({
223
223
  session_id: o.string(),
224
224
  checkout_payment_method: Te,
225
225
  non_cde_form_fields: Ce,
226
226
  do_not_use_legacy_cc_flow: o.boolean().optional(),
227
- existing_cc_pm_id: j(o.string()),
227
+ existing_cc_pm_id: U(o.string()),
228
228
  extra_metadata: o.record(o.string(), o.any())
229
229
  });
230
230
  o.object({
@@ -254,18 +254,18 @@ const Qn = o.object({
254
254
  their_pm_id: o.string().optional()
255
255
  }), Dt = o.object({
256
256
  type: o.string(),
257
- redirect_url: j(o.string()),
258
- initial_intent_id: j(o.string()),
259
- consent_id: j(o.string()),
260
- their_pm_id: j(o.string()),
261
- payment_session: j(o.record(o.string(), o.any()))
257
+ redirect_url: U(o.string()),
258
+ initial_intent_id: U(o.string()),
259
+ consent_id: U(o.string()),
260
+ their_pm_id: U(o.string()),
261
+ payment_session: U(o.record(o.string(), o.any()))
262
262
  }), Xn = o.discriminatedUnion("present", [
263
263
  o.object({ present: o.literal(!0), href: o.string() }),
264
264
  o.object({ present: o.literal(!1) })
265
265
  ]), er = o.object({
266
266
  payment_methods: o.array(In),
267
- pay_first_success_response: j(tt),
268
- required_user_actions: j(o.array(Dt))
267
+ pay_first_success_response: U(tt),
268
+ required_user_actions: U(o.array(Dt))
269
269
  }), tr = (t) => {
270
270
  const n = {};
271
271
  return Object.entries(t).forEach(([e, r]) => {
@@ -348,7 +348,7 @@ const Qn = o.object({
348
348
  else throw r === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
349
349
  `${((i = e.error) == null ? void 0 : i.message) ?? ((c = (s = e.setupIntent) == null ? void 0 : s.last_setup_error) == null ? void 0 : c.message) ?? "Payment failed, please click submit again to pay."}`
350
350
  );
351
- }, ur = (t) => JSON.stringify(t), H = (t, n) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((a, i) => {
351
+ }, ur = (t) => JSON.stringify(t), J = (t, n) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((a, i) => {
352
352
  const s = i.getAttribute("data-opid");
353
353
  return s ? { ...a, [s]: i.value } : a;
354
354
  }, {}), dr = (t) => {
@@ -630,7 +630,7 @@ class $t extends Lr {
630
630
  return this.response.message;
631
631
  }
632
632
  }
633
- const U = async (t, n, e) => {
633
+ const L = async (t, n, e) => {
634
634
  const r = await t.send(n);
635
635
  if (jr(r))
636
636
  throw new $t(r);
@@ -639,7 +639,7 @@ const U = async (t, n, e) => {
639
639
  throw a.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", e, "Actual:", r), a.error);
640
640
  }
641
641
  return r;
642
- }, Ur = (t, n) => n.safeParse(t).success, jr = (t) => yr.safeParse(t).success, xr = async (t, n) => await U(t, { type: "get_checkout_preview", payload: n }, Lt), M = async (t) => await U(t, { type: "get_prefill", payload: {} }, Ut), he = async (t, n) => await U(t, { type: "v2_start_payment_flow", payload: n }, xt), $r = async (t, n) => await U(t, { type: "start_payment_flow_for_cc", payload: n }, Rr), zr = async (t, n) => await U(t, { type: "start_payment_flow_for_pr", payload: n }, xt), G = async (t, n) => await U(t, { type: "confirm_payment_flow", payload: n }, er), Gr = async (t, n) => await U(t, { type: "finalize_setup_payment_method", payload: n }, jt), Vr = async (t, n) => await U(
642
+ }, Ur = (t, n) => n.safeParse(t).success, jr = (t) => yr.safeParse(t).success, xr = async (t, n) => await L(t, { type: "get_checkout_preview", payload: n }, Lt), M = async (t) => await L(t, { type: "get_prefill", payload: {} }, Ut), he = async (t, n) => await L(t, { type: "v2_start_payment_flow", payload: n }, xt), $r = async (t, n) => await L(t, { type: "start_payment_flow_for_cc", payload: n }, Rr), zr = async (t, n) => await L(t, { type: "start_payment_flow_for_pr", payload: n }, xt), G = async (t, n) => await L(t, { type: "confirm_payment_flow", payload: n }, er), Gr = async (t, n) => await L(t, { type: "finalize_setup_payment_method", payload: n }, jt), Vr = async (t, n) => await L(
643
643
  t,
644
644
  { type: "check_if_popup_window_verified", payload: n },
645
645
  Xn
@@ -668,16 +668,16 @@ const U = async (t, n, e) => {
668
668
  throw new Error("No CDE connections found");
669
669
  return await Promise.all(
670
670
  Array.from(t.values()).map(
671
- (r) => U(r, { type: "tokenize_card", payload: n }, Zn)
671
+ (r) => L(r, { type: "tokenize_card", payload: n }, Zn)
672
672
  )
673
673
  );
674
674
  }, ut = async (t, n) => {
675
675
  try {
676
- return await U(t, { type: "checkout_card_elements", payload: n }, tt);
676
+ return await L(t, { type: "checkout_card_elements", payload: n }, tt);
677
677
  } catch (e) {
678
678
  throw console.error("[cde-client] Error during checkoutCardElements:", e, JSON.stringify(e)), e;
679
679
  }
680
- }, Kr = async (t, n) => await U(t, { type: "setup_payment_method", payload: n }, jt), rt = async (t, n) => await U(t, { type: "checkout", payload: n }, tt), zt = 1e3, Wr = async (t, n) => {
680
+ }, Kr = async (t, n) => await L(t, { type: "setup_payment_method", payload: n }, jt), rt = async (t, n) => await L(t, { type: "checkout", payload: n }, tt), zt = 1e3, Wr = async (t, n) => {
681
681
  console.log(n);
682
682
  const r = await At({
683
683
  iframe: t,
@@ -685,17 +685,17 @@ const U = async (t, n, e) => {
685
685
  timeout: zt,
686
686
  childOrigin: "*"
687
687
  // TODO: use with proper childOrigin
688
- }).promise, a = await U(r, { type: "ping-3ds-status" }, Bn);
688
+ }).promise, a = await L(r, { type: "ping-3ds-status" }, Bn);
689
689
  return console.log("🟢 CDE connection successful! Stopping polling... Result:", a), a;
690
- }, Gt = async (t, n) => await U(t, { type: "prepare_payment_flow", payload: n }, Mr), Vt = async (t, n) => {
690
+ }, Gt = async (t, n) => await L(t, { type: "prepare_payment_flow", payload: n }, Mr), Vt = async (t, n) => {
691
691
  try {
692
- return (await U(
692
+ return (await L(
693
693
  t,
694
694
  { type: "get_standardized_error_code", payload: { message: n } },
695
695
  Fr
696
696
  )).error_code;
697
697
  } catch (e) {
698
- return console.error("[cde-client] Error during getStandardizedErrorCode:", J(e)), "PAYMENT_FAILED_GENERIC";
698
+ return console.error("[cde-client] Error during getStandardizedErrorCode:", H(e)), "PAYMENT_FAILED_GENERIC";
699
699
  }
700
700
  };
701
701
  function Ue(t) {
@@ -717,14 +717,14 @@ const ee = (t) => async (n) => {
717
717
  else
718
718
  throw new Error(`Unhandled mode: ${a}`);
719
719
  } catch (a) {
720
- const i = J(a), s = await Vt(n.context.anyCdeConnection, i);
720
+ const i = H(a), s = await Vt(n.context.anyCdeConnection, i);
721
721
  n.formCallbacks.get.onCheckoutError(i, s);
722
722
  }
723
723
  }, se = (t) => async (n) => {
724
724
  try {
725
725
  return await t(n);
726
726
  } catch (e) {
727
- const { err__: r } = P("init-error-catcher"), a = J(e), i = await Vt(n.context.anyCdeConnection, a);
727
+ const { err__: r } = P("init-error-catcher"), a = H(e), i = await Vt(n.context.anyCdeConnection, a);
728
728
  return r(i, a, e), { isAvailable: !1, reason: a, errorCode: i };
729
729
  }
730
730
  }, P = (t) => {
@@ -739,16 +739,16 @@ const ee = (t) => async (n) => {
739
739
  log__: n,
740
740
  err__: e
741
741
  };
742
- }, { log__: vi, err__: Hr } = P("common"), Se = (t) => {
742
+ }, { log__: gi, err__: Jr } = P("common"), Se = (t) => {
743
743
  if (t.payment_methods.length !== 1)
744
744
  throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
745
745
  return { payment_method_id: t.payment_methods[0].id };
746
746
  }, Y = (t, n) => {
747
747
  const e = t.find((r) => n.safeParse(r).success);
748
748
  if (!e)
749
- throw Hr("No CPMs found for model. All models:", t), new Error("No CPMs found for model");
749
+ throw Jr("No CPMs found for model. All models:", t), new Error("No CPMs found for model");
750
750
  return n.parse(e);
751
- }, Jr = (t) => ({
751
+ }, Hr = (t) => ({
752
752
  new_customer_email: t.email,
753
753
  new_customer_address: {
754
754
  zip_code: t.zipCode,
@@ -863,7 +863,7 @@ const ee = (t) => async (n) => {
863
863
  m.error ? (Br("error", m.error), n.get.onCheckoutError(m.error.message ?? "Stripe Link unknown error")) : (R("paymentMethod", m.paymentMethod), A.stripeLink.run({
864
864
  context: t,
865
865
  checkoutPaymentMethod: r,
866
- nonCdeFormInputs: H(t.formDiv),
866
+ nonCdeFormInputs: J(t.formDiv),
867
867
  formCallbacks: n,
868
868
  customParams: { stripePM: m.paymentMethod },
869
869
  initResult: { isAvailable: !0 }
@@ -1022,11 +1022,11 @@ const Wt = async (t) => {
1022
1022
  else if (c.closed)
1023
1023
  throw new Error(`${t} payment cancelled`);
1024
1024
  } catch (u) {
1025
- a(J(u)), clearInterval(l), s(J(u));
1025
+ a(H(u)), clearInterval(l), s(H(u));
1026
1026
  }
1027
1027
  }, 1e3);
1028
1028
  });
1029
- }, { log__: lo, err__: Ht } = P("pockyt-cc"), uo = o.object({
1029
+ }, { log__: lo, err__: Jt } = P("pockyt-cc"), uo = o.object({
1030
1030
  "op-pockyt-3ds-url": o.string(),
1031
1031
  "op-pockyt-txn-no": o.string(),
1032
1032
  "op-pockyt-ref-no": o.string()
@@ -1034,10 +1034,10 @@ const Wt = async (t) => {
1034
1034
  const n = uo.safeParse(t);
1035
1035
  if (!n.success) {
1036
1036
  const e = "Unable to process your credit card. Please contact support for assistance.", r = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
1037
- throw Ht(r), new Error(e);
1037
+ throw Jt(r), new Error(e);
1038
1038
  }
1039
1039
  return n.data;
1040
- }, Jt = (t) => {
1040
+ }, Ht = (t) => {
1041
1041
  try {
1042
1042
  const n = new URL(t ?? "").searchParams.get("vaultId");
1043
1043
  if (!n)
@@ -1045,14 +1045,14 @@ const Wt = async (t) => {
1045
1045
  return lo(`3DS verification success. [Vault ID: ${n}]`), n;
1046
1046
  } catch (n) {
1047
1047
  const e = "Error verifying 3DS verification result.";
1048
- throw Ht(e, `Resulting URL: ${t}.
1049
- Error: ${J(n)}`), new Error(e);
1048
+ throw Jt(e, `Resulting URL: ${t}.
1049
+ Error: ${H(n)}`), new Error(e);
1050
1050
  }
1051
1051
  }, mo = (t, n) => new URL(t).searchParams.get(n), yo = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, fo = async (t, n) => {
1052
1052
  const e = po(n), r = await Wt({ url: e["op-pockyt-3ds-url"], baseUrl: t });
1053
1053
  return {
1054
1054
  existing_cc: {
1055
- vault_id: Jt(r.href ?? ""),
1055
+ vault_id: Ht(r.href ?? ""),
1056
1056
  transaction_no: e["op-pockyt-txn-no"],
1057
1057
  reference_no: e["op-pockyt-ref-no"]
1058
1058
  }
@@ -1077,7 +1077,7 @@ Error: ${J(n)}`), new Error(e);
1077
1077
  } catch (n) {
1078
1078
  const e = "Error verifying Airwallex 3DS verification result.";
1079
1079
  throw ot(e, `Resulting URL: ${t}.
1080
- Error: ${J(n)}`), new Error(e);
1080
+ Error: ${H(n)}`), new Error(e);
1081
1081
  }
1082
1082
  }, vo = async (t, n) => {
1083
1083
  const e = go(n), r = await Wt({ url: e["op-airwallex-3ds-url"], baseUrl: t }), a = bo(r.href ?? ""), i = e["op-airwallex-initial-intent-id"];
@@ -1333,7 +1333,7 @@ const Do = ee(
1333
1333
  yt(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await lr(n), yt("╰ Stripe 3DS flow completed successfully");
1334
1334
  }, V = o.enum(["stripe", "airwallex", "authorize_net"]);
1335
1335
  V.Enum.stripe;
1336
- const { log__: L, err__: jo } = P("stripe-pr"), xo = o.object({
1336
+ const { log__: T, err__: jo } = P("stripe-pr"), xo = o.object({
1337
1337
  provider: o.union([o.literal("apple_pay"), o.literal("google_pay")]),
1338
1338
  processor_name: o.literal("stripe"),
1339
1339
  metadata: o.object({
@@ -1341,26 +1341,26 @@ const { log__: L, err__: jo } = P("stripe-pr"), xo = o.object({
1341
1341
  })
1342
1342
  }), $o = se(
1343
1343
  async ({ context: t, formCallbacks: n }) => {
1344
- L("Checking if there are any CPMs for Stripe PR...");
1344
+ T("Checking if there are any CPMs for Stripe PR...");
1345
1345
  const e = Y(t.checkoutPaymentMethods, xo);
1346
- L("Initializing Stripe PR flow...");
1346
+ T("Initializing Stripe PR flow...");
1347
1347
  const r = t.anyCdeConnection, a = await M(r), i = a.mode === "setup";
1348
- L("Getting initial preview amount");
1348
+ T("Getting initial preview amount");
1349
1349
  const s = await _e(r, a.token, i, void 0), c = await ir(
1350
1350
  e.metadata.stripe_pk,
1351
1351
  s.amountAtom,
1352
1352
  s.currency,
1353
1353
  i
1354
1354
  );
1355
- L("Checking if can make payment");
1355
+ T("Checking if can make payment");
1356
1356
  const l = await c.canMakePayment();
1357
1357
  if (l === null)
1358
1358
  return jo("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" };
1359
- L("Stripe PR flow initialized successfully. Can make payment", l);
1359
+ T("Stripe PR flow initialized successfully. Can make payment", l);
1360
1360
  const u = (d, f) => A.stripePR.run({
1361
1361
  context: t,
1362
1362
  checkoutPaymentMethod: ve(t.checkoutPaymentMethods, d),
1363
- nonCdeFormInputs: H(t.formDiv),
1363
+ nonCdeFormInputs: J(t.formDiv),
1364
1364
  formCallbacks: n,
1365
1365
  customParams: { provider: d, overridePaymentRequest: f == null ? void 0 : f.overridePaymentRequest },
1366
1366
  initResult: {
@@ -1391,32 +1391,32 @@ const { log__: L, err__: jo } = P("stripe-pr"), xo = o.object({
1391
1391
  customParams: a,
1392
1392
  initResult: i
1393
1393
  }) => {
1394
- if (L("Running Stripe PR flow..."), a.provider !== n.provider)
1394
+ if (T("Running Stripe PR flow..."), a.provider !== n.provider)
1395
1395
  throw new Error(`Provider mismatch. Expected ${a.provider}, got ${n.provider}`);
1396
1396
  const s = t.anyCdeConnection, c = i.pr;
1397
1397
  if (a != null && a.overridePaymentRequest) {
1398
1398
  const m = a.overridePaymentRequest;
1399
- L("Overriding PR amount with", m), Vo(c, m.amount, m.pending, m.applePayPaymentRequest);
1399
+ T("Overriding PR amount with", m), Vo(c, m.amount, m.pending, m.applePayPaymentRequest);
1400
1400
  }
1401
- L("Showing PR dialog..."), c.show();
1401
+ T("Showing PR dialog..."), c.show();
1402
1402
  const l = await sr(c);
1403
- L("Stripe PM added event:", l), L("Merging PM fields with form fields...");
1403
+ T("Stripe PM added event:", l), T("Merging PM fields with form fields...");
1404
1404
  const u = Go(e, l), d = te(u, r.get.onValidationError);
1405
- L("PR dialog finished. Starting payment flow...", d);
1405
+ T("PR dialog finished. Starting payment flow...", d);
1406
1406
  const f = await zr(s, {
1407
1407
  fields: d,
1408
1408
  checkoutPaymentMethod: n
1409
1409
  }), h = qo(f);
1410
- L("Confirming PR with Stripe..."), await cr(h, l);
1410
+ T("Confirming PR with Stripe..."), await cr(h, l);
1411
1411
  const y = await M(s);
1412
1412
  if (y.mode === "setup") {
1413
- L("Confirming payment flow for setup...");
1413
+ T("Confirming payment flow for setup...");
1414
1414
  const m = await G(s, {
1415
1415
  secure_token: y.token
1416
1416
  });
1417
1417
  return { mode: "setup", result: Se(m) };
1418
1418
  } else {
1419
- L("Performing checkout...");
1419
+ T("Performing checkout...");
1420
1420
  const m = {
1421
1421
  secure_token: y.token,
1422
1422
  payment_input: {
@@ -1439,7 +1439,7 @@ const { log__: L, err__: jo } = P("stripe-pr"), xo = o.object({
1439
1439
  ), Go = (t, n) => {
1440
1440
  var l, u, d, f;
1441
1441
  const e = { ...t }, [r, ...a] = ((u = (l = n.payerName) == null ? void 0 : l.trim()) == null ? void 0 : u.split(/\s+/)) ?? [], i = a.join(" ") || void 0, s = (f = (d = n.paymentMethod) == null ? void 0 : d.billing_details) == null ? void 0 : f.address, c = n.shippingAddress;
1442
- return e[p.FIRST_NAME] = e[p.FIRST_NAME] || r || "_OP_UNKNOWN", e[p.LAST_NAME] = e[p.LAST_NAME] || i || "_OP_UNKNOWN", e[p.EMAIL] = e[p.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", e[p.ZIP_CODE] = e[p.ZIP_CODE] || (s == null ? void 0 : s.postal_code) || (c == null ? void 0 : c.postalCode) || "00000", e[p.COUNTRY] = e[p.COUNTRY] || (s == null ? void 0 : s.country) || (c == null ? void 0 : c.country) || "US", L("Final form inputs:", e), e;
1442
+ return e[p.FIRST_NAME] = e[p.FIRST_NAME] || r || "_OP_UNKNOWN", e[p.LAST_NAME] = e[p.LAST_NAME] || i || "_OP_UNKNOWN", e[p.EMAIL] = e[p.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", e[p.ZIP_CODE] = e[p.ZIP_CODE] || (s == null ? void 0 : s.postal_code) || (c == null ? void 0 : c.postalCode) || "00000", e[p.COUNTRY] = e[p.COUNTRY] || (s == null ? void 0 : s.country) || (c == null ? void 0 : c.country) || "US", T("Final form inputs:", e), e;
1443
1443
  }, Vo = (t, n, e, r) => {
1444
1444
  t.update({
1445
1445
  total: {
@@ -1476,7 +1476,7 @@ const Ko = ee(
1476
1476
  formCallbacks: r,
1477
1477
  customParams: a
1478
1478
  }) => {
1479
- var k, ce;
1479
+ var j, ce;
1480
1480
  K("Running Pockyt Paypal flow...");
1481
1481
  const i = t.anyCdeConnection, s = await M(i);
1482
1482
  K("Verifying CPM...");
@@ -1486,7 +1486,7 @@ const Ko = ee(
1486
1486
  e,
1487
1487
  r.get.onValidationError,
1488
1488
  l == null ? void 0 : l.defaultFieldValues
1489
- ), d = Jr(u);
1489
+ ), d = Hr(u);
1490
1490
  K(`Starting payment flow... Mode: ${s.mode}`);
1491
1491
  const f = Xe(), h = s.mode !== "setup", y = {
1492
1492
  payment_provider: c.provider,
@@ -1498,7 +1498,7 @@ const Ko = ee(
1498
1498
  displayed_total_amount_atom: s.amount_total_atom
1499
1499
  } : void 0,
1500
1500
  processor_specific_metadata: {
1501
- use_paypal_redirect_flow: !!((k = a == null ? void 0 : a.settings) != null && k.useRedirectFlow),
1501
+ use_paypal_redirect_flow: !!((j = a == null ? void 0 : a.settings) != null && j.useRedirectFlow),
1502
1502
  frontend_token_for_redirect_flow: f
1503
1503
  },
1504
1504
  ...d
@@ -1516,27 +1516,27 @@ const Ko = ee(
1516
1516
  w
1517
1517
  );
1518
1518
  K("Paypal flow result", b);
1519
- const E = Jt(b.href), D = mo(b.href, "catt");
1520
- if (!D)
1519
+ const E = Ht(b.href), k = mo(b.href, "catt");
1520
+ if (!k)
1521
1521
  throw ft("Checkout attempt ID not found in redirect URL:", b.href), new Error("Checkout attempt ID not found in redirect URL");
1522
1522
  K(`Confirming payment flow using vault ID ${E}`);
1523
- const N = await G(i, {
1523
+ const O = await G(i, {
1524
1524
  secure_token: s.token,
1525
1525
  their_pm_id: E,
1526
- checkout_attempt_id: h ? D : void 0
1526
+ checkout_attempt_id: h ? k : void 0
1527
1527
  });
1528
- if (K("Confirm payment flow result", N), s.mode === "setup")
1528
+ if (K("Confirm payment flow result", O), s.mode === "setup")
1529
1529
  return {
1530
1530
  mode: "setup",
1531
1531
  result: {
1532
- payment_method_id: N.payment_methods[0].id
1532
+ payment_method_id: O.payment_methods[0].id
1533
1533
  }
1534
1534
  };
1535
- if (!N.pay_first_success_response)
1536
- throw ft("Checkout failed, no pay-first success response:", N), new Error("Checkout failed, please try again with another payment method.");
1535
+ if (!O.pay_first_success_response)
1536
+ throw ft("Checkout failed, no pay-first success response:", O), new Error("Checkout failed, please try again with another payment method.");
1537
1537
  return {
1538
1538
  mode: "checkout",
1539
- result: N.pay_first_success_response
1539
+ result: O.pay_first_success_response
1540
1540
  };
1541
1541
  }
1542
1542
  ), $e = ({
@@ -1611,7 +1611,7 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1611
1611
  e[p.EMAIL] = e[p.EMAIL] || n.email || "op_unfilled@getopenpay.com", e[p.COUNTRY] = e[p.COUNTRY] || r.countryCode || "US", e[p.ADDRESS] = e[p.ADDRESS] || r.address1 || "", e[p.CITY] = e[p.CITY] || r.locality || "", e[p.ZIP_CODE] = e[p.ZIP_CODE] || r.postalCode || "00000", e[p.STATE] = e[p.STATE] || r.administrativeArea || "", e[p.FIRST_NAME] = e[p.FIRST_NAME] || l || "_OP_UNKNOWN", e[p.LAST_NAME] = e[p.LAST_NAME] || d || "_OP_UNKNOWN";
1612
1612
  }
1613
1613
  return e;
1614
- }, { log__: z, err__: le } = P("awx-google-pay"), Ho = se(
1614
+ }, { log__: z, err__: le } = P("awx-google-pay"), Jo = se(
1615
1615
  async ({ context: t, formCallbacks: n }) => {
1616
1616
  var f, h;
1617
1617
  const e = {
@@ -1656,7 +1656,7 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1656
1656
  A.airwallexGooglePay.run({
1657
1657
  context: t,
1658
1658
  checkoutPaymentMethod: r,
1659
- nonCdeFormInputs: H(t.formDiv),
1659
+ nonCdeFormInputs: J(t.formDiv),
1660
1660
  formCallbacks: n,
1661
1661
  initResult: void 0,
1662
1662
  customParams: {
@@ -1675,7 +1675,7 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1675
1675
  startFlow: d
1676
1676
  };
1677
1677
  }
1678
- ), Jo = ee(
1678
+ ), Ho = ee(
1679
1679
  async ({
1680
1680
  context: t,
1681
1681
  checkoutPaymentMethod: n,
@@ -1699,8 +1699,8 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1699
1699
  try {
1700
1700
  const b = await d.loadPaymentData(u);
1701
1701
  z("Google Pay Payment data", b);
1702
- const E = t.anyCdeConnection, D = await M(E), N = tn(e, b), k = te(
1703
- N,
1702
+ const E = t.anyCdeConnection, k = await M(E), O = tn(e, b), j = te(
1703
+ O,
1704
1704
  r.get.onValidationError,
1705
1705
  a == null ? void 0 : a.defaultFieldValues
1706
1706
  ), ce = (h = (f = b.paymentMethodData) == null ? void 0 : f.tokenizationData) == null ? void 0 : h.token;
@@ -1709,17 +1709,17 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1709
1709
  const _n = await he(E, {
1710
1710
  payment_provider: n.provider,
1711
1711
  checkout_payment_method: n,
1712
- new_customer_email: k[p.EMAIL],
1713
- new_customer_first_name: k[p.FIRST_NAME],
1714
- new_customer_last_name: k[p.LAST_NAME],
1712
+ new_customer_email: j[p.EMAIL],
1713
+ new_customer_first_name: j[p.FIRST_NAME],
1714
+ new_customer_last_name: j[p.LAST_NAME],
1715
1715
  new_customer_address: {
1716
- zip_code: k[p.ZIP_CODE],
1717
- country: k[p.COUNTRY]
1716
+ zip_code: j[p.ZIP_CODE],
1717
+ country: j[p.COUNTRY]
1718
1718
  }
1719
1719
  }), ke = Wo(_n);
1720
1720
  z("Start flow next actions", ke);
1721
1721
  let re = await G(E, {
1722
- secure_token: D.token,
1722
+ secure_token: k.token,
1723
1723
  processor_specific_metadata: {
1724
1724
  payment_provider: n.provider,
1725
1725
  // GooglePay's encrypted_payment_token provided to verify the consent first
@@ -1750,7 +1750,7 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1750
1750
  throw new Error("3DS verification failed");
1751
1751
  }
1752
1752
  if (oe && !Ve && (re = await G(E, {
1753
- secure_token: D.token,
1753
+ secure_token: k.token,
1754
1754
  their_pm_id: oe.their_pm_id,
1755
1755
  processor_specific_metadata: {
1756
1756
  payment_provider: n.provider,
@@ -1762,7 +1762,7 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1762
1762
  logPrefix: "awx-googlepay",
1763
1763
  anyCdeConnection: E,
1764
1764
  checkoutPaymentMethod: n,
1765
- requiredFormFields: k,
1765
+ requiredFormFields: j,
1766
1766
  confirmResult: re,
1767
1767
  usePayFirstFlow: !1
1768
1768
  });
@@ -1776,7 +1776,8 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1776
1776
  }), rn = (t, n) => {
1777
1777
  const e = n.token.paymentMethod.billingContact, r = n.billingContact, a = n.shippingContact, i = { ...t };
1778
1778
  return (e || r || a) && (i[p.EMAIL] = i[p.EMAIL] || (e == null ? void 0 : e.emailAddress) || (r == null ? void 0 : r.emailAddress) || (a == null ? void 0 : a.emailAddress) || "op_unfilled@email.com", i[p.COUNTRY] = i[p.COUNTRY] || (e == null ? void 0 : e.countryCode) || (r == null ? void 0 : r.countryCode) || (a == null ? void 0 : a.countryCode) || "US", i[p.ZIP_CODE] = i[p.ZIP_CODE] || (e == null ? void 0 : e.postalCode) || (r == null ? void 0 : r.postalCode) || (a == null ? void 0 : a.postalCode) || "00000", i[p.FIRST_NAME] = i[p.FIRST_NAME] || (e == null ? void 0 : e.givenName) || (r == null ? void 0 : r.givenName) || (a == null ? void 0 : a.givenName) || "_OP_UNKNOWN", i[p.LAST_NAME] = i[p.LAST_NAME] || (e == null ? void 0 : e.familyName) || (r == null ? void 0 : r.familyName) || (a == null ? void 0 : a.familyName) || "_OP_UNKNOWN"), i;
1779
- }, Zo = o.object({
1779
+ };
1780
+ o.object({
1780
1781
  data: o.object({
1781
1782
  messageHeaders: o.record(o.string(), o.any()),
1782
1783
  errors: o.array(o.any()),
@@ -1784,22 +1785,8 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1784
1785
  messageBody: o.record(o.string(), o.any())
1785
1786
  }),
1786
1787
  origin: o.literal("https://applepay.cdn-apple.com")
1787
- }), Bo = (t) => Zo.safeParse(t).data, Qo = (t) => {
1788
- const n = new AbortController();
1789
- return window.addEventListener(
1790
- "message",
1791
- (e) => {
1792
- var a;
1793
- const r = Bo(e);
1794
- ((a = r == null ? void 0 : r.data) == null ? void 0 : a.messageType) === "windowclosing" && (t(), n.abort());
1795
- },
1796
- {
1797
- signal: n.signal
1798
- }
1799
- ), {
1800
- cleanupCancelListener: () => n.abort()
1801
- };
1802
- }, on = ({
1788
+ });
1789
+ const on = ({
1803
1790
  total: t,
1804
1791
  prefill: n
1805
1792
  }) => {
@@ -1850,7 +1837,7 @@ const en = (t) => t === et || t === window.location.origin ? "PRODUCTION" : "TES
1850
1837
  }
1851
1838
  };
1852
1839
  }, { log__: Re } = P("awx-apple-pay");
1853
- async function Xo(t, n) {
1840
+ async function Zo(t, n) {
1854
1841
  try {
1855
1842
  const r = (await Gt(n.connection, {
1856
1843
  checkout_payment_method: n.checkoutPaymentMethod,
@@ -1869,7 +1856,7 @@ async function Xo(t, n) {
1869
1856
  throw n.session.abort(), e;
1870
1857
  }
1871
1858
  }
1872
- async function ea(t, n) {
1859
+ async function Bo(t, n) {
1873
1860
  if (!t.redirect_url)
1874
1861
  throw new Error("No redirect URL found");
1875
1862
  Re("3DS Required, starting verification...", t);
@@ -1891,7 +1878,7 @@ async function ea(t, n) {
1891
1878
  });
1892
1879
  return Re("[2nd] Confirm payment flow response", r), r;
1893
1880
  }
1894
- async function ta(t, n) {
1881
+ async function Qo(t, n) {
1895
1882
  var e, r, a, i, s;
1896
1883
  try {
1897
1884
  const c = t.payment, l = rn(n.nonCdeFormInputs, c), u = te(
@@ -1930,7 +1917,7 @@ async function ta(t, n) {
1930
1917
  const _ = (a = y.required_user_actions) == null ? void 0 : a.find(
1931
1918
  (w) => w.type === "airwallex_payment_consent"
1932
1919
  );
1933
- if (_ != null && _.redirect_url && _.consent_id && _.their_pm_id && (y = await ea(_, n), m = (s = (i = y.payment_methods) == null ? void 0 : i[0]) == null ? void 0 : s.id), !m)
1920
+ if (_ != null && _.redirect_url && _.consent_id && _.their_pm_id && (y = await Bo(_, n), m = (s = (i = y.payment_methods) == null ? void 0 : i[0]) == null ? void 0 : s.id), !m)
1934
1921
  throw new Error("No PM ID found");
1935
1922
  const v = {
1936
1923
  status: ApplePaySession.STATUS_SUCCESS
@@ -1950,7 +1937,7 @@ async function ta(t, n) {
1950
1937
  throw n.session.completePayment(l), c;
1951
1938
  }
1952
1939
  }
1953
- const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
1940
+ const { log__: ue, err__: Je } = P("awx-apple-pay"), Xo = se(
1954
1941
  async ({ context: t, formCallbacks: n }) => {
1955
1942
  const e = {
1956
1943
  processor: V.Enum.airwallex,
@@ -1965,7 +1952,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
1965
1952
  try {
1966
1953
  await nn(), ue("Apple Pay SDK loaded successfully");
1967
1954
  } catch (f) {
1968
- return He("Failed to load Apple Pay SDK", f), e;
1955
+ return Je("Failed to load Apple Pay SDK", f), e;
1969
1956
  }
1970
1957
  if (!window.ApplePaySession || !ApplePaySession.canMakePayments())
1971
1958
  return ue("Apple Pay is not available on this device/browser"), e;
@@ -1978,7 +1965,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
1978
1965
  await A.airwallexApplePay.run({
1979
1966
  context: t,
1980
1967
  checkoutPaymentMethod: r,
1981
- nonCdeFormInputs: H(t.formDiv),
1968
+ nonCdeFormInputs: J(t.formDiv),
1982
1969
  formCallbacks: n,
1983
1970
  customParams: {
1984
1971
  ...f,
@@ -1987,7 +1974,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
1987
1974
  initResult: void 0
1988
1975
  });
1989
1976
  } catch (h) {
1990
- He("Apple Pay payment error", h), n.get.onCheckoutError((h == null ? void 0 : h.message) ?? "Unknown error");
1977
+ Je("Apple Pay payment error", h), n.get.onCheckoutError((h == null ? void 0 : h.message) ?? "Unknown error");
1991
1978
  }
1992
1979
  };
1993
1980
  return {
@@ -1997,7 +1984,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
1997
1984
  startFlow: d
1998
1985
  };
1999
1986
  }
2000
- ), ra = ee(
1987
+ ), ea = ee(
2001
1988
  async ({
2002
1989
  context: t,
2003
1990
  checkoutPaymentMethod: n,
@@ -2043,31 +2030,31 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
2043
2030
  return new Promise((w, b) => {
2044
2031
  const E = () => {
2045
2032
  ue("Payment cancelled by user"), b(new Error("Payment cancelled by user"));
2046
- }, { cleanupCancelListener: D } = Qo(E);
2047
- m.oncancel = E, m.onvalidatemerchant = async (N) => {
2033
+ };
2034
+ m.oncancel = E, m.onvalidatemerchant = async (k) => {
2048
2035
  try {
2049
- await Xo(N, _);
2050
- } catch (k) {
2051
- b(k);
2036
+ await Zo(k, _);
2037
+ } catch (O) {
2038
+ b(O);
2052
2039
  }
2053
2040
  }, m.onpaymentmethodselected = () => {
2054
- const N = {
2041
+ const k = {
2055
2042
  newTotal: { ...h }
2056
2043
  };
2057
- m.completePaymentMethodSelection(N);
2058
- }, m.onpaymentauthorized = async (N) => {
2044
+ m.completePaymentMethodSelection(k);
2045
+ }, m.onpaymentauthorized = async (k) => {
2059
2046
  try {
2060
- const k = await ta(N, _);
2061
- D(), w(k);
2062
- } catch (k) {
2063
- b(k);
2047
+ const O = await Qo(k, _);
2048
+ w(O);
2049
+ } catch (O) {
2050
+ b(O);
2064
2051
  }
2065
2052
  }, m.begin();
2066
2053
  }).catch((w) => {
2067
- throw He("Apple Pay payment error", w), w;
2054
+ throw Je("Apple Pay payment error", w), w;
2068
2055
  });
2069
2056
  }
2070
- ), oa = 1, aa = o.object({
2057
+ ), ta = 1, na = o.object({
2071
2058
  processor_name: o.literal("loop"),
2072
2059
  provider: o.literal("crypto"),
2073
2060
  metadata: o.object({
@@ -2075,14 +2062,14 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
2075
2062
  entity_id: o.string(),
2076
2063
  api_token: o.string()
2077
2064
  })
2078
- }), { log__: T, err__: ia } = P("loop-crypto"), sa = se(
2065
+ }), { log__: N, err__: ra } = P("loop-crypto"), oa = se(
2079
2066
  async ({ context: t }) => {
2080
- T("Checking if there are any CPMs for Loop Crypto...");
2081
- const n = Y(t.checkoutPaymentMethods, aa);
2082
- T(`checkoutPaymentMethod: ${JSON.stringify(n)}`), T("Starting Loop Crypto flow...");
2067
+ N("Checking if there are any CPMs for Loop Crypto...");
2068
+ const n = Y(t.checkoutPaymentMethods, na);
2069
+ N(`checkoutPaymentMethod: ${JSON.stringify(n)}`), N("Starting Loop Crypto flow...");
2083
2070
  const e = await M(t.anyCdeConnection);
2084
2071
  let r;
2085
- if (e.mode === "setup" ? r = oa : r = e.amount_total_atom, e.currency !== "usd" && e.mode !== "setup")
2072
+ if (e.mode === "setup" ? r = ta : r = e.amount_total_atom, e.currency !== "usd" && e.mode !== "setup")
2086
2073
  throw Error("Cannot support non USD currency for Loop");
2087
2074
  const a = r, i = Math.max(a * 12, 1e5), s = Xe(), c = {
2088
2075
  paymentUsdAmount: a,
@@ -2099,7 +2086,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
2099
2086
  initLoopConnectProps: l
2100
2087
  };
2101
2088
  }
2102
- ), ca = ee(
2089
+ ), aa = ee(
2103
2090
  async ({
2104
2091
  context: t,
2105
2092
  checkoutPaymentMethod: n,
@@ -2108,7 +2095,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
2108
2095
  customParams: a,
2109
2096
  initResult: i
2110
2097
  }) => {
2111
- T("Running Loop flow..."), T("context", t), T("checkoutPaymentMethod", n), T("nonCdeFormInputs", e), T("flowCallbacks", r), T("customParams", a), T("initResult", i);
2098
+ N("Running Loop flow..."), N("context", t), N("checkoutPaymentMethod", n), N("nonCdeFormInputs", e), N("flowCallbacks", r), N("customParams", a), N("initResult", i);
2112
2099
  const s = t.anyCdeConnection;
2113
2100
  if (!i.isAvailable)
2114
2101
  throw Error("Failed to initialize Loop flow. Cannot submit without initialization. Exiting running Loop flow.");
@@ -2138,13 +2125,13 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
2138
2125
  loop_payin: a.payin
2139
2126
  }
2140
2127
  });
2141
- if (T(`Confirm result: ${d}`), c.mode === "setup") {
2142
- T("Doing payment setup..."), T("├ Confirm payment flow result received Result:", d);
2128
+ if (N(`Confirm result: ${d}`), c.mode === "setup") {
2129
+ N("Doing payment setup..."), N("├ Confirm payment flow result received Result:", d);
2143
2130
  const f = Se(d);
2144
- return T(`╰ Setup completed successfully [PM ID: ${f.payment_method_id}]`), { mode: "setup", result: f };
2131
+ return N(`╰ Setup completed successfully [PM ID: ${f.payment_method_id}]`), { mode: "setup", result: f };
2145
2132
  } else {
2146
- if (T("Doing checkout..."), !d.pay_first_success_response)
2147
- throw ia("Checkout failed, no pay-first success response:", d), new Error("Checkout failed, please try again with another payment method.");
2133
+ if (N("Doing checkout..."), !d.pay_first_success_response)
2134
+ throw ra("Checkout failed, no pay-first success response:", d), new Error("Checkout failed, please try again with another payment method.");
2148
2135
  return {
2149
2136
  mode: "checkout",
2150
2137
  result: d.pay_first_success_response
@@ -2152,7 +2139,7 @@ const { log__: ue, err__: He } = P("awx-apple-pay"), na = se(
2152
2139
  }
2153
2140
  }
2154
2141
  );
2155
- async function la(t, n) {
2142
+ async function ia(t, n) {
2156
2143
  try {
2157
2144
  const r = (await Gt(n.connection, {
2158
2145
  checkout_payment_method: n.checkoutPaymentMethod,
@@ -2171,7 +2158,7 @@ async function la(t, n) {
2171
2158
  throw n.session.abort(), e;
2172
2159
  }
2173
2160
  }
2174
- async function ua(t, n) {
2161
+ async function sa(t, n) {
2175
2162
  var e, r;
2176
2163
  try {
2177
2164
  const a = t.payment, i = rn(n.nonCdeFormInputs, a), s = te(i, n.formCallbacks.get.onValidationError);
@@ -2231,7 +2218,7 @@ const sn = o.object({
2231
2218
  processor_account_name: o.string(),
2232
2219
  google_pay_merchant_id: o.string().nullish()
2233
2220
  })
2234
- }), { log__: we, err__: Je } = P("authnet-applepay"), da = se(
2221
+ }), { log__: we, err__: He } = P("authnet-applepay"), ca = se(
2235
2222
  async ({ context: t, formCallbacks: n }) => {
2236
2223
  const e = {
2237
2224
  processor: V.Enum.authorize_net,
@@ -2246,7 +2233,7 @@ const sn = o.object({
2246
2233
  try {
2247
2234
  await nn(), we("Apple Pay SDK loaded successfully");
2248
2235
  } catch (f) {
2249
- return Je("Failed to load Apple Pay SDK", f), e;
2236
+ return He("Failed to load Apple Pay SDK", f), e;
2250
2237
  }
2251
2238
  if (!window.ApplePaySession || !ApplePaySession.canMakePayments())
2252
2239
  return we("Apple Pay is not available on this device/browser"), e;
@@ -2259,7 +2246,7 @@ const sn = o.object({
2259
2246
  await A.authorizeNetApplePay.run({
2260
2247
  context: t,
2261
2248
  checkoutPaymentMethod: r,
2262
- nonCdeFormInputs: H(t.formDiv),
2249
+ nonCdeFormInputs: J(t.formDiv),
2263
2250
  formCallbacks: n,
2264
2251
  customParams: {
2265
2252
  ...f,
@@ -2268,7 +2255,7 @@ const sn = o.object({
2268
2255
  initResult: void 0
2269
2256
  });
2270
2257
  } catch (h) {
2271
- Je("Apple Pay payment error", h), n.get.onCheckoutError((h == null ? void 0 : h.message) ?? "Unknown error");
2258
+ He("Apple Pay payment error", h), n.get.onCheckoutError((h == null ? void 0 : h.message) ?? "Unknown error");
2272
2259
  }
2273
2260
  };
2274
2261
  return {
@@ -2278,7 +2265,7 @@ const sn = o.object({
2278
2265
  startFlow: d
2279
2266
  };
2280
2267
  }
2281
- ), pa = ee(
2268
+ ), la = ee(
2282
2269
  async ({
2283
2270
  context: t,
2284
2271
  checkoutPaymentMethod: n,
@@ -2320,9 +2307,9 @@ const sn = o.object({
2320
2307
  we("Payment cancelled by user"), b(new Error("Payment cancelled by user"));
2321
2308
  }, m.onvalidatemerchant = async (E) => {
2322
2309
  try {
2323
- await la(E, _);
2324
- } catch (D) {
2325
- b(D);
2310
+ await ia(E, _);
2311
+ } catch (k) {
2312
+ b(k);
2326
2313
  }
2327
2314
  }, m.onpaymentmethodselected = () => {
2328
2315
  const E = {
@@ -2331,17 +2318,17 @@ const sn = o.object({
2331
2318
  m.completePaymentMethodSelection(E);
2332
2319
  }, m.onpaymentauthorized = async (E) => {
2333
2320
  try {
2334
- const D = await ua(E, _);
2335
- w(D);
2336
- } catch (D) {
2337
- b(D);
2321
+ const k = await sa(E, _);
2322
+ w(k);
2323
+ } catch (k) {
2324
+ b(k);
2338
2325
  }
2339
2326
  }, m.begin();
2340
2327
  }).catch((w) => {
2341
- throw Je("Apple Pay payment error", w), w;
2328
+ throw He("Apple Pay payment error", w), w;
2342
2329
  });
2343
2330
  }
2344
- ), { log__: ie, err__: be } = P("authnet-googlepay"), ma = se(
2331
+ ), { log__: ie, err__: be } = P("authnet-googlepay"), ua = se(
2345
2332
  async ({ context: t, formCallbacks: n }) => {
2346
2333
  var d, f;
2347
2334
  ie("Initializing Authnet GooglePay flow");
@@ -2385,7 +2372,7 @@ const sn = o.object({
2385
2372
  A.authorizeNetGooglePay.run({
2386
2373
  context: t,
2387
2374
  checkoutPaymentMethod: r,
2388
- nonCdeFormInputs: H(t.formDiv),
2375
+ nonCdeFormInputs: J(t.formDiv),
2389
2376
  formCallbacks: n,
2390
2377
  initResult: void 0,
2391
2378
  customParams: {
@@ -2404,7 +2391,7 @@ const sn = o.object({
2404
2391
  startFlow: u
2405
2392
  };
2406
2393
  }
2407
- ), ya = ee(
2394
+ ), da = ee(
2408
2395
  async ({
2409
2396
  context: t,
2410
2397
  nonCdeFormInputs: n,
@@ -2424,10 +2411,10 @@ const sn = o.object({
2424
2411
  try {
2425
2412
  const _ = await d.loadPaymentData(u);
2426
2413
  ie("Google Pay Payment data", _);
2427
- const v = t.anyCdeConnection, w = await M(v), b = tn(n, _), E = te(b, r.get.onValidationError), D = (h = (f = _.paymentMethodData) == null ? void 0 : f.tokenizationData) == null ? void 0 : h.token;
2428
- if (!D)
2414
+ const v = t.anyCdeConnection, w = await M(v), b = tn(n, _), E = te(b, r.get.onValidationError), k = (h = (f = _.paymentMethodData) == null ? void 0 : f.tokenizationData) == null ? void 0 : h.token;
2415
+ if (!k)
2429
2416
  throw new Error("No payment token received from Google Pay");
2430
- const N = await he(v, {
2417
+ const O = await he(v, {
2431
2418
  payment_provider: e.provider,
2432
2419
  checkout_payment_method: e,
2433
2420
  new_customer_email: E[p.EMAIL],
@@ -2438,25 +2425,25 @@ const sn = o.object({
2438
2425
  country: E[p.COUNTRY]
2439
2426
  }
2440
2427
  });
2441
- ie("Start payment flow response", N);
2442
- const k = await G(v, {
2428
+ ie("Start payment flow response", O);
2429
+ const j = await G(v, {
2443
2430
  secure_token: w.token,
2444
2431
  processor_specific_metadata: {
2445
2432
  payment_provider: e.provider,
2446
2433
  mobile_wallet_payment_data: {
2447
2434
  dataDescriptor: "COMMON.GOOGLE.INAPP.PAYMENT",
2448
- dataValue: window.btoa(D)
2435
+ dataValue: window.btoa(k)
2449
2436
  }
2450
2437
  }
2451
2438
  });
2452
- if (!((m = (y = k.payment_methods) == null ? void 0 : y[0]) == null ? void 0 : m.id))
2439
+ if (!((m = (y = j.payment_methods) == null ? void 0 : y[0]) == null ? void 0 : m.id))
2453
2440
  throw new Error("No PM ID found");
2454
2441
  return je({
2455
2442
  logPrefix: "authnet-googlepay",
2456
2443
  anyCdeConnection: v,
2457
2444
  checkoutPaymentMethod: e,
2458
2445
  requiredFormFields: E,
2459
- confirmResult: k,
2446
+ confirmResult: j,
2460
2447
  usePayFirstFlow: !1
2461
2448
  });
2462
2449
  } catch (_) {
@@ -2496,25 +2483,25 @@ const sn = o.object({
2496
2483
  },
2497
2484
  // Airwallex
2498
2485
  airwallexGooglePay: {
2499
- init: Ho,
2500
- run: Jo
2486
+ init: Jo,
2487
+ run: Ho
2501
2488
  },
2502
2489
  airwallexApplePay: {
2503
- init: na,
2504
- run: ra
2490
+ init: Xo,
2491
+ run: ea
2505
2492
  },
2506
2493
  // Loop
2507
2494
  loopCrypto: {
2508
- init: sa,
2509
- run: ca
2495
+ init: oa,
2496
+ run: aa
2510
2497
  },
2511
2498
  authorizeNetApplePay: {
2512
- init: da,
2513
- run: pa
2499
+ init: ca,
2500
+ run: la
2514
2501
  },
2515
2502
  authorizeNetGooglePay: {
2516
- init: ma,
2517
- run: ya
2503
+ init: ua,
2504
+ run: da
2518
2505
  }
2519
2506
  // 👉 Add more flows here
2520
2507
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2535,7 +2522,7 @@ function ne(t, n) {
2535
2522
  }
2536
2523
  t.prototype = n === null ? Object.create(n) : (e.prototype = n.prototype, new e());
2537
2524
  }
2538
- function fa(t, n, e, r) {
2525
+ function pa(t, n, e, r) {
2539
2526
  function a(i) {
2540
2527
  return i instanceof e ? i : new e(function(s) {
2541
2528
  s(i);
@@ -2657,7 +2644,7 @@ function Oe(t, n, e) {
2657
2644
  function pe(t) {
2658
2645
  return this instanceof pe ? (this.v = t, this) : new pe(t);
2659
2646
  }
2660
- function ha(t, n, e) {
2647
+ function ma(t, n, e) {
2661
2648
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2662
2649
  var r = e.apply(t, n || []), a, i = [];
2663
2650
  return a = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", s), a[Symbol.asyncIterator] = function() {
@@ -2695,7 +2682,7 @@ function ha(t, n, e) {
2695
2682
  y(m), i.shift(), i.length && l(i[0][0], i[0][1]);
2696
2683
  }
2697
2684
  }
2698
- function _a(t) {
2685
+ function ya(t) {
2699
2686
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2700
2687
  var n = t[Symbol.asyncIterator], e;
2701
2688
  return n ? n.call(t) : (t = typeof ye == "function" ? ye(t) : t[Symbol.iterator](), e = {}, r("next"), r("throw"), r("return"), e[Symbol.asyncIterator] = function() {
@@ -2865,7 +2852,7 @@ var at = function(t) {
2865
2852
  ne(n, t);
2866
2853
  function n(e) {
2867
2854
  var r = t.call(this) || this;
2868
- return r.isStopped = !1, e ? (r.destination = e, dn(e) && e.add(r)) : r.destination = va, r;
2855
+ return r.isStopped = !1, e ? (r.destination = e, dn(e) && e.add(r)) : r.destination = ga, r;
2869
2856
  }
2870
2857
  return n.create = function(e, r, a) {
2871
2858
  return new Be(e, r, a);
@@ -2892,11 +2879,11 @@ var at = function(t) {
2892
2879
  this.unsubscribe();
2893
2880
  }
2894
2881
  }, n;
2895
- }(Pe), ga = Function.prototype.bind;
2882
+ }(Pe), fa = Function.prototype.bind;
2896
2883
  function Ke(t, n) {
2897
- return ga.call(t, n);
2884
+ return fa.call(t, n);
2898
2885
  }
2899
- var wa = function() {
2886
+ var ha = function() {
2900
2887
  function t(n) {
2901
2888
  this.partialObserver = n;
2902
2889
  }
@@ -2947,29 +2934,29 @@ var wa = function() {
2947
2934
  complete: e.complete && Ke(e.complete, c)
2948
2935
  }) : s = e;
2949
2936
  }
2950
- return i.destination = new wa(s), i;
2937
+ return i.destination = new ha(s), i;
2951
2938
  }
2952
2939
  return n;
2953
2940
  }(at);
2954
2941
  function Ie(t) {
2955
2942
  yn(t);
2956
2943
  }
2957
- function ba(t) {
2944
+ function _a(t) {
2958
2945
  throw t;
2959
2946
  }
2960
- var va = {
2947
+ var ga = {
2961
2948
  closed: !0,
2962
2949
  next: _t,
2963
- error: ba,
2950
+ error: _a,
2964
2951
  complete: _t
2965
2952
  }, it = function() {
2966
2953
  return typeof Symbol == "function" && Symbol.observable || "@@observable";
2967
2954
  }();
2968
- function Ea(t) {
2955
+ function wa(t) {
2969
2956
  return t;
2970
2957
  }
2971
- function Ca(t) {
2972
- return t.length === 0 ? Ea : t.length === 1 ? t[0] : function(e) {
2958
+ function ba(t) {
2959
+ return t.length === 0 ? wa : t.length === 1 ? t[0] : function(e) {
2973
2960
  return t.reduce(function(r, a) {
2974
2961
  return a(r);
2975
2962
  }, e);
@@ -2983,7 +2970,7 @@ var X = function() {
2983
2970
  var e = new t();
2984
2971
  return e.source = this, e.operator = n, e;
2985
2972
  }, t.prototype.subscribe = function(n, e, r) {
2986
- var a = this, i = Pa(n) ? n : new Be(n, e, r);
2973
+ var a = this, i = Ea(n) ? n : new Be(n, e, r);
2987
2974
  return Fe(function() {
2988
2975
  var s = a, c = s.operator, l = s.source;
2989
2976
  i.add(c ? c.call(i, l) : l ? a._subscribe(i) : a._trySubscribe(i));
@@ -3018,7 +3005,7 @@ var X = function() {
3018
3005
  }, t.prototype.pipe = function() {
3019
3006
  for (var n = [], e = 0; e < arguments.length; e++)
3020
3007
  n[e] = arguments[e];
3021
- return Ca(n)(this);
3008
+ return ba(n)(this);
3022
3009
  }, t.prototype.toPromise = function(n) {
3023
3010
  var e = this;
3024
3011
  return n = gt(n), new n(function(r, a) {
@@ -3039,18 +3026,18 @@ function gt(t) {
3039
3026
  var n;
3040
3027
  return (n = t ?? pn.Promise) !== null && n !== void 0 ? n : Promise;
3041
3028
  }
3042
- function Sa(t) {
3029
+ function va(t) {
3043
3030
  return t && F(t.next) && F(t.error) && F(t.complete);
3044
3031
  }
3045
- function Pa(t) {
3046
- return t && t instanceof at || Sa(t) && dn(t);
3032
+ function Ea(t) {
3033
+ return t && t instanceof at || va(t) && dn(t);
3047
3034
  }
3048
- function ka(t) {
3035
+ function Ca(t) {
3049
3036
  return F(t == null ? void 0 : t.lift);
3050
3037
  }
3051
- function Aa(t) {
3038
+ function Sa(t) {
3052
3039
  return function(n) {
3053
- if (ka(n))
3040
+ if (Ca(n))
3054
3041
  return n.lift(function(e) {
3055
3042
  try {
3056
3043
  return t(e, this);
@@ -3061,10 +3048,10 @@ function Aa(t) {
3061
3048
  throw new TypeError("Unable to lift unknown Observable type");
3062
3049
  };
3063
3050
  }
3064
- function Ia(t, n, e, r, a) {
3065
- return new Ra(t, n, e, r, a);
3051
+ function Pa(t, n, e, r, a) {
3052
+ return new ka(t, n, e, r, a);
3066
3053
  }
3067
- var Ra = function(t) {
3054
+ var ka = function(t) {
3068
3055
  ne(n, t);
3069
3056
  function n(e, r, a, i, s, c) {
3070
3057
  var l = t.call(this, e) || this;
@@ -3099,7 +3086,7 @@ var Ra = function(t) {
3099
3086
  t.prototype.unsubscribe.call(this), !r && ((e = this.onFinalize) === null || e === void 0 || e.call(this));
3100
3087
  }
3101
3088
  }, n;
3102
- }(at), Fa = Ge(function(t) {
3089
+ }(at), Aa = Ge(function(t) {
3103
3090
  return function() {
3104
3091
  t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
3105
3092
  };
@@ -3114,7 +3101,7 @@ var Ra = function(t) {
3114
3101
  return r.operator = e, r;
3115
3102
  }, n.prototype._throwIfClosed = function() {
3116
3103
  if (this.closed)
3117
- throw new Fa();
3104
+ throw new Aa();
3118
3105
  }, n.prototype.next = function(e) {
3119
3106
  var r = this;
3120
3107
  Fe(function() {
@@ -3201,12 +3188,12 @@ var Ra = function(t) {
3201
3188
  var r, a;
3202
3189
  return (a = (r = this.source) === null || r === void 0 ? void 0 : r.subscribe(e)) !== null && a !== void 0 ? a : un;
3203
3190
  }, n;
3204
- }(fn), Ma = {
3191
+ }(fn), Ia = {
3205
3192
  now: function() {
3206
3193
  return Date.now();
3207
3194
  },
3208
3195
  delegate: void 0
3209
- }, Da = function(t) {
3196
+ }, Ra = function(t) {
3210
3197
  ne(n, t);
3211
3198
  function n(e, r) {
3212
3199
  return t.call(this) || this;
@@ -3224,7 +3211,7 @@ var Ra = function(t) {
3224
3211
  return clearInterval(t);
3225
3212
  },
3226
3213
  delegate: void 0
3227
- }, Oa = function(t) {
3214
+ }, Fa = function(t) {
3228
3215
  ne(n, t);
3229
3216
  function n(e, r) {
3230
3217
  var a = t.call(this, e, r) || this;
@@ -3266,14 +3253,14 @@ var Ra = function(t) {
3266
3253
  this.work = this.state = this.scheduler = null, this.pending = !1, Ne(i, this), r != null && (this.id = this.recycleAsyncId(a, r, null)), this.delay = null, t.prototype.unsubscribe.call(this);
3267
3254
  }
3268
3255
  }, n;
3269
- }(Da), vt = function() {
3256
+ }(Ra), vt = function() {
3270
3257
  function t(n, e) {
3271
3258
  e === void 0 && (e = t.now), this.schedulerActionCtor = n, this.now = e;
3272
3259
  }
3273
3260
  return t.prototype.schedule = function(n, e, r) {
3274
3261
  return e === void 0 && (e = 0), new this.schedulerActionCtor(this, n).schedule(r, e);
3275
- }, t.now = Ma.now, t;
3276
- }(), Na = function(t) {
3262
+ }, t.now = Ia.now, t;
3263
+ }(), Ma = function(t) {
3277
3264
  ne(n, t);
3278
3265
  function n(e, r) {
3279
3266
  r === void 0 && (r = vt.now);
@@ -3298,30 +3285,30 @@ var Ra = function(t) {
3298
3285
  throw a;
3299
3286
  }
3300
3287
  }, n;
3301
- }(vt), Ta = new Na(Oa), La = function(t) {
3288
+ }(vt), Da = new Ma(Fa), Oa = function(t) {
3302
3289
  return t && typeof t.length == "number" && typeof t != "function";
3303
3290
  };
3304
- function Ua(t) {
3291
+ function Na(t) {
3305
3292
  return F(t == null ? void 0 : t.then);
3306
3293
  }
3307
- function ja(t) {
3294
+ function Ta(t) {
3308
3295
  return F(t[it]);
3309
3296
  }
3310
- function xa(t) {
3297
+ function La(t) {
3311
3298
  return Symbol.asyncIterator && F(t == null ? void 0 : t[Symbol.asyncIterator]);
3312
3299
  }
3313
- function $a(t) {
3300
+ function Ua(t) {
3314
3301
  return new TypeError("You provided " + (t !== null && typeof t == "object" ? "an invalid object" : "'" + t + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
3315
3302
  }
3316
- function za() {
3303
+ function ja() {
3317
3304
  return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
3318
3305
  }
3319
- var Ga = za();
3320
- function Va(t) {
3321
- return F(t == null ? void 0 : t[Ga]);
3306
+ var xa = ja();
3307
+ function $a(t) {
3308
+ return F(t == null ? void 0 : t[xa]);
3322
3309
  }
3323
- function qa(t) {
3324
- return ha(this, arguments, function() {
3310
+ function za(t) {
3311
+ return ma(this, arguments, function() {
3325
3312
  var e, r, a, i;
3326
3313
  return ln(this, function(s) {
3327
3314
  switch (s.label) {
@@ -3351,29 +3338,29 @@ function qa(t) {
3351
3338
  });
3352
3339
  });
3353
3340
  }
3354
- function Ya(t) {
3341
+ function Ga(t) {
3355
3342
  return F(t == null ? void 0 : t.getReader);
3356
3343
  }
3357
- function Ka(t) {
3344
+ function Va(t) {
3358
3345
  if (t instanceof X)
3359
3346
  return t;
3360
3347
  if (t != null) {
3361
- if (ja(t))
3362
- return Wa(t);
3348
+ if (Ta(t))
3349
+ return qa(t);
3350
+ if (Oa(t))
3351
+ return Ya(t);
3352
+ if (Na(t))
3353
+ return Ka(t);
3363
3354
  if (La(t))
3364
- return Ha(t);
3365
- if (Ua(t))
3366
- return Ja(t);
3367
- if (xa(t))
3368
3355
  return hn(t);
3369
- if (Va(t))
3370
- return Za(t);
3371
- if (Ya(t))
3372
- return Ba(t);
3356
+ if ($a(t))
3357
+ return Wa(t);
3358
+ if (Ga(t))
3359
+ return Ja(t);
3373
3360
  }
3374
- throw $a(t);
3361
+ throw Ua(t);
3375
3362
  }
3376
- function Wa(t) {
3363
+ function qa(t) {
3377
3364
  return new X(function(n) {
3378
3365
  var e = t[it]();
3379
3366
  if (F(e.subscribe))
@@ -3381,14 +3368,14 @@ function Wa(t) {
3381
3368
  throw new TypeError("Provided object does not correctly implement Symbol.observable");
3382
3369
  });
3383
3370
  }
3384
- function Ha(t) {
3371
+ function Ya(t) {
3385
3372
  return new X(function(n) {
3386
3373
  for (var e = 0; e < t.length && !n.closed; e++)
3387
3374
  n.next(t[e]);
3388
3375
  n.complete();
3389
3376
  });
3390
3377
  }
3391
- function Ja(t) {
3378
+ function Ka(t) {
3392
3379
  return new X(function(n) {
3393
3380
  t.then(function(e) {
3394
3381
  n.closed || (n.next(e), n.complete());
@@ -3397,7 +3384,7 @@ function Ja(t) {
3397
3384
  }).then(null, yn);
3398
3385
  });
3399
3386
  }
3400
- function Za(t) {
3387
+ function Wa(t) {
3401
3388
  return new X(function(n) {
3402
3389
  var e, r;
3403
3390
  try {
@@ -3420,22 +3407,22 @@ function Za(t) {
3420
3407
  }
3421
3408
  function hn(t) {
3422
3409
  return new X(function(n) {
3423
- Qa(t, n).catch(function(e) {
3410
+ Ha(t, n).catch(function(e) {
3424
3411
  return n.error(e);
3425
3412
  });
3426
3413
  });
3427
3414
  }
3428
- function Ba(t) {
3429
- return hn(qa(t));
3415
+ function Ja(t) {
3416
+ return hn(za(t));
3430
3417
  }
3431
- function Qa(t, n) {
3418
+ function Ha(t, n) {
3432
3419
  var e, r, a, i;
3433
- return fa(this, void 0, void 0, function() {
3420
+ return pa(this, void 0, void 0, function() {
3434
3421
  var s, c;
3435
3422
  return ln(this, function(l) {
3436
3423
  switch (l.label) {
3437
3424
  case 0:
3438
- l.trys.push([0, 5, 6, 11]), e = _a(t), l.label = 1;
3425
+ l.trys.push([0, 5, 6, 11]), e = ya(t), l.label = 1;
3439
3426
  case 1:
3440
3427
  return [4, e.next()];
3441
3428
  case 2:
@@ -3466,7 +3453,7 @@ function Qa(t, n) {
3466
3453
  });
3467
3454
  });
3468
3455
  }
3469
- function Xa(t, n, e, r, a) {
3456
+ function Za(t, n, e, r, a) {
3470
3457
  r === void 0 && (r = 0), a === void 0 && (a = !1);
3471
3458
  var i = n.schedule(function() {
3472
3459
  e(), a ? t.add(this.schedule(null, r)) : this.unsubscribe();
@@ -3474,7 +3461,7 @@ function Xa(t, n, e, r, a) {
3474
3461
  if (t.add(i), !a)
3475
3462
  return i;
3476
3463
  }
3477
- function ei(t, n) {
3464
+ function Ba(t, n) {
3478
3465
  var e = F(t) ? t : function() {
3479
3466
  return t;
3480
3467
  }, r = function(a) {
@@ -3482,12 +3469,12 @@ function ei(t, n) {
3482
3469
  };
3483
3470
  return new X(r);
3484
3471
  }
3485
- var ti = Ge(function(t) {
3472
+ var Qa = Ge(function(t) {
3486
3473
  return function() {
3487
3474
  t(this), this.name = "EmptyError", this.message = "no elements in sequence";
3488
3475
  };
3489
3476
  });
3490
- function ni(t, n) {
3477
+ function Xa(t, n) {
3491
3478
  return new Promise(function(e, r) {
3492
3479
  var a = !1, i;
3493
3480
  t.subscribe({
@@ -3496,28 +3483,28 @@ function ni(t, n) {
3496
3483
  },
3497
3484
  error: r,
3498
3485
  complete: function() {
3499
- a ? e(i) : r(new ti());
3486
+ a ? e(i) : r(new Qa());
3500
3487
  }
3501
3488
  });
3502
3489
  });
3503
3490
  }
3504
- function ri(t) {
3491
+ function ei(t) {
3505
3492
  return t instanceof Date && !isNaN(t);
3506
3493
  }
3507
- var oi = Ge(function(t) {
3494
+ var ti = Ge(function(t) {
3508
3495
  return function(e) {
3509
3496
  e === void 0 && (e = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = e;
3510
3497
  };
3511
3498
  });
3512
- function ai(t, n) {
3513
- var e = ri(t) ? { first: t } : typeof t == "number" ? { each: t } : t, r = e.first, a = e.each, i = e.with, s = i === void 0 ? ii : i, c = e.scheduler, l = c === void 0 ? Ta : c, u = e.meta, d = u === void 0 ? null : u;
3499
+ function ni(t, n) {
3500
+ var e = ei(t) ? { first: t } : typeof t == "number" ? { each: t } : t, r = e.first, a = e.each, i = e.with, s = i === void 0 ? ri : i, c = e.scheduler, l = c === void 0 ? Da : c, u = e.meta, d = u === void 0 ? null : u;
3514
3501
  if (r == null && a == null)
3515
3502
  throw new TypeError("No timeout provided.");
3516
- return Aa(function(f, h) {
3503
+ return Sa(function(f, h) {
3517
3504
  var y, m, _ = null, v = 0, w = function(b) {
3518
- m = Xa(h, l, function() {
3505
+ m = Za(h, l, function() {
3519
3506
  try {
3520
- y.unsubscribe(), Ka(s({
3507
+ y.unsubscribe(), Va(s({
3521
3508
  meta: d,
3522
3509
  lastValue: _,
3523
3510
  seen: v
@@ -3527,15 +3514,15 @@ function ai(t, n) {
3527
3514
  }
3528
3515
  }, b);
3529
3516
  };
3530
- y = f.subscribe(Ia(h, function(b) {
3517
+ y = f.subscribe(Pa(h, function(b) {
3531
3518
  m == null || m.unsubscribe(), v++, h.next(_ = b), a > 0 && w(a);
3532
3519
  }, void 0, void 0, function() {
3533
3520
  m != null && m.closed || m == null || m.unsubscribe(), _ = null;
3534
3521
  })), !v && w(r != null ? typeof r == "number" ? r : +r - l.now() : a);
3535
3522
  });
3536
3523
  }
3537
- function ii(t) {
3538
- throw new oi(t);
3524
+ function ri(t) {
3525
+ throw new ti(t);
3539
3526
  }
3540
3527
  class Me {
3541
3528
  constructor() {
@@ -3571,16 +3558,16 @@ class Me {
3571
3558
  this._current.status !== "initial" && Ue(this._current);
3572
3559
  const e = {
3573
3560
  first: n.timeoutSec * 1e3,
3574
- with: () => ei(() => new Error(n.timeoutErrMsg))
3561
+ with: () => Ba(() => new Error(n.timeoutErrMsg))
3575
3562
  };
3576
- return ni(this._subject.pipe(ai(e)));
3563
+ return Xa(this._subject.pipe(ni(e)));
3577
3564
  }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new fn();
3578
3565
  }
3579
3566
  get current() {
3580
3567
  return this._current;
3581
3568
  }
3582
3569
  }
3583
- const { log__: si, err__: ci } = P("init-flows"), ae = (t, n) => {
3570
+ const { log__: oi, err__: ai } = P("init-flows"), ae = (t, n) => {
3584
3571
  const e = new Me();
3585
3572
  return {
3586
3573
  publisher: e,
@@ -3589,15 +3576,15 @@ const { log__: si, err__: ci } = P("init-flows"), ae = (t, n) => {
3589
3576
  if (e.current.isSuccess)
3590
3577
  throw new Error("This flow has already been initialized.");
3591
3578
  const a = await n(r);
3592
- si(`✔ ${t} flow initialized successfully. Result:`, a), e.set(a);
3579
+ oi(`✔ ${t} flow initialized successfully. Result:`, a), e.set(a);
3593
3580
  } catch (a) {
3594
- ci(`𝙭 ${t} flow initialization failed. Error:`, J(a), "Details:", a), e.throw(a, J(a));
3581
+ ai(`𝙭 ${t} flow initialization failed. Error:`, H(a), "Details:", a), e.throw(a, H(a));
3595
3582
  }
3596
3583
  }
3597
3584
  };
3598
- }, li = async (t, n, e) => {
3585
+ }, ii = async (t, n, e) => {
3599
3586
  await Promise.all(Object.values(t).map((r) => r.initialize({ context: n, formCallbacks: e })));
3600
- }, ui = () => ({
3587
+ }, si = () => ({
3601
3588
  // 💡 Add new init flows here
3602
3589
  // Stripe PR
3603
3590
  stripePR: ae("Stripe PR", A.stripePR.init),
@@ -3614,7 +3601,7 @@ const { log__: si, err__: ci } = P("init-flows"), ae = (t, n) => {
3614
3601
  // Authnet ApplePay
3615
3602
  authorizeNetApplePay: ae("Authnet ApplePay", A.authorizeNetApplePay.init)
3616
3603
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3617
- }), { err__: di } = P("form-callbacks"), $ = o.function().optional(), Et = o.object({
3604
+ }), { err__: ci } = P("form-callbacks"), $ = o.function().optional(), Et = o.object({
3618
3605
  onFocus: $,
3619
3606
  onBlur: $,
3620
3607
  onChange: $,
@@ -3630,7 +3617,7 @@ const { log__: si, err__: ci } = P("init-flows"), ae = (t, n) => {
3630
3617
  constructor() {
3631
3618
  this.setCallbacks = (n) => {
3632
3619
  this._callbacks = W.createEmptyCallbacks(), Object.entries(n).forEach(([e, r]) => {
3633
- const a = kn(e, r ?? W.NOOP, di);
3620
+ const a = kn(e, r ?? W.NOOP, ci);
3634
3621
  this._callbacks[e] = a;
3635
3622
  });
3636
3623
  }, this._callbacks = W.createEmptyCallbacks();
@@ -3653,11 +3640,13 @@ W.NOOP = () => {
3653
3640
  return e.setCallbacks(Et.parse(n)), e;
3654
3641
  };
3655
3642
  let Qe = W;
3656
- class pi {
3643
+ class li {
3657
3644
  constructor(n, e, r, a) {
3658
3645
  this.handleMessage = (i) => {
3659
- if (!i.source)
3660
- throw new Error("No source found");
3646
+ if (!i.source) {
3647
+ console.warn("[OJS] No source found");
3648
+ return;
3649
+ }
3661
3650
  if (Ct(i.origin) !== Ct(this.baseUrl) || typeof i.data == "object" && i.data.penpal || typeof i.data == "object" && i.data.source && i.data.source === "react-devtools-bridge")
3662
3651
  return;
3663
3652
  let s = null;
@@ -3697,7 +3686,7 @@ class pi {
3697
3686
  }
3698
3687
  }
3699
3688
  const Ct = (t) => new URL(t).origin;
3700
- async function mi(t, n) {
3689
+ async function ui(t, n) {
3701
3690
  const r = await At({
3702
3691
  iframe: t,
3703
3692
  debug: !1,
@@ -3707,7 +3696,7 @@ async function mi(t, n) {
3707
3696
  throw new Error("Got invalid CDE connection object");
3708
3697
  return r;
3709
3698
  }
3710
- class yi {
3699
+ class di {
3711
3700
  constructor() {
3712
3701
  this.connections = /* @__PURE__ */ new Map();
3713
3702
  }
@@ -3724,7 +3713,7 @@ class yi {
3724
3713
  return this.connections;
3725
3714
  }
3726
3715
  }
3727
- const fi = (t, n, e) => {
3716
+ const pi = (t, n, e) => {
3728
3717
  const { stripePR: r } = t;
3729
3718
  r.publisher.subscribe((a) => {
3730
3719
  if (a.isSuccess) {
@@ -3750,13 +3739,13 @@ const fi = (t, n, e) => {
3750
3739
  }, St = (t, n, e, r, a) => A.stripePR.run({
3751
3740
  context: e,
3752
3741
  checkoutPaymentMethod: ve(e.checkoutPaymentMethods, t),
3753
- nonCdeFormInputs: H(e.formDiv),
3742
+ nonCdeFormInputs: J(e.formDiv),
3754
3743
  formCallbacks: r,
3755
3744
  customParams: { provider: t, overridePaymentRequest: a == null ? void 0 : a.overridePaymentRequest },
3756
3745
  initResult: n
3757
3746
  }), Pt = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: Z, err__: B } = P("op-form"), Q = class Q {
3758
3747
  constructor(n) {
3759
- this.cdeLoadEvent = new Me(), this.anyCdeConn = new Me(), this.context = new Me(), this.initFlows = ui(), this.startFormInit = async () => {
3748
+ this.cdeLoadEvent = new Me(), this.anyCdeConn = new Me(), this.context = new Me(), this.initFlows = si(), this.startFormInit = async () => {
3760
3749
  try {
3761
3750
  Z("Initializing OpenPay form:"), Z("├ Waiting for CDE load event...");
3762
3751
  const e = await this.cdeLoadEvent.waitForLoad({
@@ -3775,9 +3764,9 @@ const fi = (t, n, e) => {
3775
3764
  r,
3776
3765
  this.getFormDiv()
3777
3766
  );
3778
- this.context.set(a), fi(this.initFlows, a, this.formCallbacks), Z("├ Starting OJS init flows..."), await li(this.initFlows, a, this.formCallbacks), this.formCallbacks.get.onLoad(e.totalAmountAtoms, e.currency), Z("╰ Done initializing OJS flows.");
3767
+ this.context.set(a), pi(this.initFlows, a, this.formCallbacks), Z("├ Starting OJS init flows..."), await ii(this.initFlows, a, this.formCallbacks), this.formCallbacks.get.onLoad(e.totalAmountAtoms, e.currency), Z("╰ Done initializing OJS flows.");
3779
3768
  } catch (e) {
3780
- const r = J(e);
3769
+ const r = H(e);
3781
3770
  B("╰ Error initializing OP form:", r), this.formCallbacks.get.onLoadError(r);
3782
3771
  }
3783
3772
  }, this.setFormHeight = (e) => {
@@ -3813,7 +3802,7 @@ const fi = (t, n, e) => {
3813
3802
  const r = new URLSearchParams();
3814
3803
  return r.append("referer", this.referrer), r.append("formId", this.formId), e.styles && r.append("styles", ur(e.styles)), r.append("secureToken", this.config.checkoutSecureToken), r;
3815
3804
  }, this.connectToElement = (e) => {
3816
- mi(e.node).then((r) => {
3805
+ ui(e.node).then((r) => {
3817
3806
  this.connectionManager.addConnection(e.type, r), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(r);
3818
3807
  }).catch((r) => B("[FORM] Error connecting to CDE iframe", r));
3819
3808
  }, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
@@ -3825,7 +3814,7 @@ const fi = (t, n, e) => {
3825
3814
  A.commonCC.run({
3826
3815
  context: e,
3827
3816
  checkoutPaymentMethod: ve(e.checkoutPaymentMethods, "credit_card"),
3828
- nonCdeFormInputs: H(e.formDiv),
3817
+ nonCdeFormInputs: J(e.formDiv),
3829
3818
  formCallbacks: this.formCallbacks,
3830
3819
  customParams: {
3831
3820
  currentCdeConnections: this.connectionManager.getAllConnections()
@@ -3859,7 +3848,7 @@ const fi = (t, n, e) => {
3859
3848
  return A.pockytPaypal.run({
3860
3849
  context: a,
3861
3850
  checkoutPaymentMethod: ve(a.checkoutPaymentMethods, "paypal", "pockyt"),
3862
- nonCdeFormInputs: H(a.formDiv),
3851
+ nonCdeFormInputs: J(a.formDiv),
3863
3852
  formCallbacks: this.formCallbacks,
3864
3853
  customParams: { settings: r },
3865
3854
  initResult: void 0
@@ -3911,7 +3900,7 @@ const fi = (t, n, e) => {
3911
3900
  return A.loopCrypto.run({
3912
3901
  context: a,
3913
3902
  checkoutPaymentMethod: ve(a.checkoutPaymentMethods, "crypto", "loop"),
3914
- nonCdeFormInputs: H(a.formDiv),
3903
+ nonCdeFormInputs: J(a.formDiv),
3915
3904
  formCallbacks: this.formCallbacks,
3916
3905
  // AI generated stuff below to get the typing right.
3917
3906
  // TODO: Move the email, firstName and lastName fields to `nonCdeFormInputs`
@@ -3942,7 +3931,7 @@ const fi = (t, n, e) => {
3942
3931
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
3943
3932
  }, this.updateCallbacks = (e) => {
3944
3933
  this.formCallbacks.setCallbacks(e);
3945
- }, Q.assignAsSingleton(this), this.ojsVersion = "0.2.17", this.ojsReleaseVersion = "0.2.17-alpha.f7c2cdd", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Qe.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${Xe()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new yi(), this.eventHandler = new pi(this.formId, this.baseUrl, this.formCallbacks, {
3934
+ }, Q.assignAsSingleton(this), this.ojsVersion = "0.2.18", this.ojsReleaseVersion = "0.2.18", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Qe.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${Xe()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new di(), this.eventHandler = new li(this.formId, this.baseUrl, this.formCallbacks, {
3946
3935
  setFormHeight: this.setFormHeight,
3947
3936
  onCdeLoaded: this.onCdeLoaded,
3948
3937
  onCdeLoadError: this.onCdeLoadError
@@ -3969,7 +3958,7 @@ let kt = Q;
3969
3958
  export {
3970
3959
  p as FieldName,
3971
3960
  kt as OpenPayForm,
3972
- bi as SubmitMethod,
3961
+ _i as SubmitMethod,
3973
3962
  x as SubmitMethods
3974
3963
  };
3975
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbmNvbnN0IFN1Ym1pdE1ldGhvZCA9IHoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6LmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xuY29uc3QgRWxlbWVudEV2ZW50ID0gei5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnouZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCh0cnVlKSwgaHJlZjogei5zdHJpbmcoKSB9KSxcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbmNvbnN0IENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gIH1cbiAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgcmVzcG9uc2VTY2hlbWEsIFwiQWN0dWFsOlwiLCByZXNwb25zZSk7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZVxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGVycm9yLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlKHBhcmFtcy5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGVycm9yTWVzc2FnZSk7XG4gICAgICBlcnJfXyhlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJGcoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIG5ld19jdXN0b21lcl9lbWFpbDogZmllbGRzLmVtYWlsLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICB6aXBfY29kZTogZmllbGRzLnppcENvZGUsXG4gICAgICBjb3VudHJ5OiBmaWVsZHMuY291bnRyeVxuICAgIH0sXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZmllbGRzLmxhc3ROYW1lXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMpID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJGYoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdEZpZWxkVmFsdWVzKSkge1xuICAgICAgaWYgKCFub25DZGVGb3JtSW5wdXRzW2tleV0pIHtcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRmKGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBmb3IgKGNvbnN0IHRva2VuaXplUmVzdWx0IG9mIHRva2VuaXplUmVzdWx0cykge1xuICAgIGlmICh0b2tlbml6ZVJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEFsbEZpZWxkTmFtZXMuc2FmZVBhcnNlKGVycm9yLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGVycl9fJGYoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGYoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kZShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kZShgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyRlKGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJGUoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kZShgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRlKGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyRlKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kZShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kZShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyRlKFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZShgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBsb2dfXyRlKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyRlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGUoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGUoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJGUoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsLCBiYXNlVXJsIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoZWxlbWVudHMuaWZyYW1lLCBvblN1Y2Nlc3MsIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcyk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaHJlZjogcmVzdWx0LmhyZWZcbiAgfTtcbn07XG5jb25zdCBvcGVuUG9wdXBXaW5kb3cgPSAocG9wdXBOYW1lLCB1cmwpID0+IHtcbiAgY29uc3QgcG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgfVxuICByZXR1cm4gcG9wdXBXaW5kb3c7XG59O1xuY29uc3Qgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwb3B1cE5hbWUsIGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4sIHVybCkgPT4ge1xuICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwb3B1cFdpbmRvdyA9IG9wZW5Qb3B1cFdpbmRvdyhwb3B1cE5hbWUsIHVybCk7XG4gICAgY29uc3QgcG9sbGluZyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkKGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4pO1xuICAgICAgICBpZiAodmVyaWZ5UmVzdWx0LnByZXNlbnQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICAgIHBvcHVwV2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGhyZWY6IHZlcmlmeVJlc3VsdC5ocmVmIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcHVwV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICByZWplY3QoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMiA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyRkKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmF1bHRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRkKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt2YXVsdElkfV1gKTtcbiAgICByZXR1cm4gdmF1bHRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kZChlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHBhcnNlQXJnRnJvbUhyZWYgPSAoaHJlZiwgYXJnTmFtZSkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICByZXR1cm4gdXJsLnNlYXJjaFBhcmFtcy5nZXQoYXJnTmFtZSk7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5Qb2NreXQzZHNGbG93ID0gYXN5bmMgKGJhc2VVcmwsIGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQyKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQxID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGMoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kYyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kYyhlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRjKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbmNvbnN0IEFkeWVuTG9jYWxlID0gei5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xuY29uc3QgeyBsb2dfXzogbG9nX18kYiwgZXJyX186IGVycl9fJGIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tY2NcIik7XG5jb25zdCBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGIoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgZGVjb2RlQWR5ZW5BY3Rpb24gPSAoYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGRlc2VyaWFsaXplZCA9IEpTT04ucGFyc2UoYWN0aW9uKTtcbiAgcmV0dXJuIGRlc2VyaWFsaXplZDtcbn07XG5jb25zdCBpc0FkeWVuQXZhaWxhYmxlID0gKCkgPT4ge1xuICByZXR1cm4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3dbXCJBZHllbldlYlwiXTtcbn07XG5jb25zdCBnZXRBZHllbkNoZWNrb3V0ID0gYXN5bmMgKCkgPT4ge1xuICBsb2dfXyRiKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgIGVycl9fJGIoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGxvZ19fJGIoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgcmV0dXJuIHdpbmRvd1tcIkFkeWVuV2ViXCJdW1wiQWR5ZW5DaGVja291dFwiXTtcbn07XG5jb25zdCBoYW5kbGVBZHllbjNkcyA9IChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzLCBsb2NhbGUsIGNvdW50cnlDb2RlLCBjb21wb25lbnQsIGhvc3QsIGNhbmNlbEJ1dHRvbiB9ID0gcGFyYW1zO1xuICBjb25zdCBhY3Rpb24gPSBkZWNvZGVBZHllbkFjdGlvbihoZWFkZXJzW1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgbG9nX18kYihgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9YCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRiKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIik7XG4gICAgICBjYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBvblBheW1lbnRGYWlsZWQgPSAoc3RhdGUpID0+IHtcbiAgICAgIGVycl9fJGIoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgc3RhdGUpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18kYihcIkFkeWVuIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVELCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgY29uc3Qgb25BZGRpdGlvbmFsRGV0YWlscyA9IChzdGF0ZSwgXywgX18pID0+IHtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBzdGF0ZSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGdldEFkeWVuQ2hlY2tvdXQoKS50aGVuKFxuICAgICAgKGFkeWVuQ2hlY2tvdXQpID0+IGFkeWVuQ2hlY2tvdXQoe1xuICAgICAgICBjbGllbnRLZXk6IGhlYWRlcnNbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogaGVhZGVyc1tcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGNvdW50cnlDb2RlLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQsXG4gICAgICAgIG9uRXJyb3JcbiAgICAgIH0pXG4gICAgKS50aGVuKChjaGVja291dCkgPT4ge1xuICAgICAgY2hlY2tvdXQuY3JlYXRlRnJvbUFjdGlvbihhY3Rpb24sIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGNvbXBvbmVudCk7XG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGRldGVybWluZUxvY2FsZSA9IChwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGJyb3dzZXJMb2NhbGUgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgY29uc3QgbG9jYWxlID0gcHJlZmlsbExvY2FsZSA/PyBicm93c2VyTG9jYWxlO1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFkeWVuTG9jYWxlLnNhZmVQYXJzZShsb2NhbGUpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRiKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtsb2NhbGV9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApO1xuICAgIHJldHVybiBcImVuLVVTXCI7XG4gIH1cbiAgbG9nX18kYihgUmVzb2x2ZWQgbG9jYWxlOiAke3BhcnNlUmVzdWx0LmRhdGF9YCk7XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWR5ZW4tYWN0aW9uXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuQWR5ZW4zZHNGbG93ID0gYXN5bmMgKGNvdW50cnlDb2RlLCBlcnJvclJlc3BvbnNlSGVhZGVycywgcHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJGIoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGEsIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJGEoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGEoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRhKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGEoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGEoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRhKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYShcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWR5ZW4zZHMgPSBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBZHllbjNkcykge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFkeWVuXCJdID0gYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyRhKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VTdHJpcGVGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgaWYgKCFyZXF1aXJlc1BvY2t5dDNkcykge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2dfXyRhKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjY1BtSWQgPSBzdGFydFBmUmVzdWx0LmNjX3BtX2lkO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtjY1BtSWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHshc2hvdWxkVXNlU3RyaXBlRmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWQsXG4gICAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHNob3VsZFVzZVN0cmlwZUZsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYShg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kYShg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyRhKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbjNEU0FjdGlvblR5cGVzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdO1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gY29tbW9uM0RTQWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYShg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYShg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGEoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyQ5IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ5KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kOShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDkoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDkoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ5KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kOShgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQ5KGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDkoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCk7XG4gICAgfVxuICAgIGxvZ19fJDkoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQ5KGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQ5KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQ5KGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kOShgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDkoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOShgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IHNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IHNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDkoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZywgc3RyaXBlQXBwbGVQYXkpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ4KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDgoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmIChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG4gIH1cbiAgcmV0dXJuIGJhc2VSZXF1ZXN0O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCI7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufTtcbmxldCBwYXltZW50c0NsaWVudCA9IG51bGw7XG5jb25zdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudCA9IChiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IGlzUHJvZHVjdGlvbiA9IGJhc2VVcmwgPT09IEZSQU1FX0JBU0VfVVJMIHx8IGJhc2VVcmwgPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gIHJldHVybiBpc1Byb2R1Y3Rpb24gPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChiaWxsaW5nQWRkcmVzcykge1xuICAgIGNvbnN0IFtmaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gPSBpbnB1dHNbRmllbGROYW1lLkFERFJFU1NdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgZmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgbGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBpbnB1dHM7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ3LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDcoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQ3KFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNyhgTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLmApO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGdldEdvb2dsZVBheUVudmlyb25tZW50KGNvbnRleHQuYmFzZVVybCk7XG4gICAgaWYgKGVudmlyb25tZW50ID09PSBcIlBST0RVQ1RJT05cIiAmJiAhcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkKSB7XG4gICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNyhcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpLmlzUmVhZHlUb1BheShcbiAgICAgICAgcGF5bWVudERhdGFSZXF1ZXN0XG4gICAgICApO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kNyhcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDcoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJDcoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyQ3KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGVuY3J5cHRlZFBheW1lbnRUb2tlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ3KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyQ3KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyQ3KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNyhcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgbG9hZEFwcGxlUGF5U2NyaXB0ID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIjtcbiAgICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkgPSAoZm9ybUlucHV0cywgYXBwbGVQYXlQYXltZW50KSA9PiB7XG4gIGNvbnN0IHBtQmlsbGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3QgYmlsbGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IHNoaXBwaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5zaGlwcGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBpZiAocG1CaWxsaW5nQ29udGFjdCB8fCBiaWxsaW5nQ29udGFjdCB8fCBzaGlwcGluZ0NvbnRhY3QpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBiaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IHNoaXBwaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgcG1CaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBiaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgQXBwbGVQYXlFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBwYXJzZUFwcGxlUGF5RXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gQXBwbGVQYXlFdmVudFNjaGVtYS5zYWZlUGFyc2UoZXZlbnQpO1xuICByZXR1cm4gcGFyc2VkLmRhdGE7XG59O1xuY29uc3QgaGFuZGxlQXBwbGVQYXlRUlBvcHVwQ2xvc2UgPSAob25DYW5jZWwpID0+IHtcbiAgY29uc3QgZXZlbnRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgIFwibWVzc2FnZVwiLFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgbWF5QmVBcHBsZVBheUV2ZW50ID0gcGFyc2VBcHBsZVBheUV2ZW50KGV2ZW50KTtcbiAgICAgIGlmIChtYXlCZUFwcGxlUGF5RXZlbnQ/LmRhdGE/Lm1lc3NhZ2VUeXBlID09PSBcIndpbmRvd2Nsb3NpbmdcIikge1xuICAgICAgICBvbkNhbmNlbCgpO1xuICAgICAgICBldmVudEFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgc2lnbmFsOiBldmVudEFib3J0Q29udHJvbGxlci5zaWduYWxcbiAgICB9XG4gICk7XG4gIHJldHVybiB7XG4gICAgY2xlYW51cENhbmNlbExpc3RlbmVyOiAoKSA9PiBldmVudEFib3J0Q29udHJvbGxlci5hYm9ydCgpXG4gIH07XG59O1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/PyB2b2lkIDAsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCkge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIH1cbiAgbG9nX18kNihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICB9KTtcbiAgbG9nX18kNihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgbG9nX18kNihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZXF1aXJlZFVzZXJBY3Rpb25zID0gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXTtcbiAgICBjb25zdCBjb25zZW50SWQgPSByZXF1aXJlZFVzZXJBY3Rpb25zLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJDYoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhPy5yZWRpcmVjdF91cmwgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkKSB7XG4gICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCk7XG4gICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgfVxuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDUsIGVycl9fOiBlcnJfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDUoYExvYWRpbmcgQXBwbGUgUGF5IFNESy4uLmApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICAgIGxvZ19fJDUoXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ2KFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kNShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kNShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ2KFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgeyBjdXJyZW5jeUNvZGUsIHRvdGFsIH0gPSBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWwsXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgICB0b3RhbCxcbiAgICAgICAgcHJlZmlsbFxuICAgICAgfSksXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID8/IHt9XG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGFwcGxlUGF5Q3BtLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJDUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgeyBjbGVhbnVwQ2FuY2VsTGlzdGVuZXIgfSA9IGhhbmRsZUFwcGxlUGF5UVJQb3B1cENsb3NlKGhhbmRsZUNhbmNlbCk7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4udG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICBjbGVhbnVwQ2FuY2VsTGlzdGVuZXIoKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJDYoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCBMT09QX0NSWVBUT19NSU5fVVNEX0NIQVJHRV9BTU9VTlRfQVRPTSA9IDE7XG5jb25zdCBMb29wQ3J5cHRvQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwibG9vcC1jcnlwdG9cIik7XG5jb25zdCBpbml0TG9vcEZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQ0KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExvb3BDcnlwdG9DcG0pO1xuICAgIGxvZ19fJDQoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeShjaGVja291dFBheW1lbnRNZXRob2QpfWApO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5gKTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxldCBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IExPT1BfQ1JZUFRPX01JTl9VU0RfQ0hBUkdFX0FNT1VOVF9BVE9NO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbTtcbiAgICB9XG4gICAgaWYgKHByZWZpbGwuY3VycmVuY3kgIT09IFwidXNkXCIgJiYgcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCIpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IHN1cHBvcnQgbm9uIFVTRCBjdXJyZW5jeSBmb3IgTG9vcFwiKTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudFVzZEFtb3VudCA9IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgY29uc3Qgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHBheW1lbnRVc2RBbW91bnQgKiAxMiwgMWU1KTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZFxuICAgIH07XG4gICAgY29uc3QgaW5pdExvb3BDb25uZWN0UHJvcHMgPSB7XG4gICAgICBhcGlLZXk6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5tZXJjaGFudF9pZFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgd2lkZ2V0UHJvcHMsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wc1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5Mb29wRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyQ0KFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyQ0KFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kNChcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kNChcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kNChcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGxvZ19fJDQoXCJpbml0UmVzdWx0XCIsIGluaXRSZXN1bHQpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgaWYgKCFpbml0UmVzdWx0LmlzQXZhaWxhYmxlKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBpbml0aWFsaXplIExvb3AgZmxvdy4gQ2Fubm90IHN1Ym1pdCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBFeGl0aW5nIHJ1bm5pbmcgTG9vcCBmbG93LlwiKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjdXN0b21QYXJhbXMuZW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY3VzdG9tUGFyYW1zLmZpcnN0TmFtZSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGN1c3RvbVBhcmFtcy5sYXN0TmFtZSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogaW5pdFJlc3VsdC53aWRnZXRQcm9wcy5wYXltZW50VXNkQW1vdW50XG4gICAgICB9IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBQYXlpbiB3YXMgbm90IHN1Y2Nlc3NmdWw6ICR7Y3VzdG9tUGFyYW1zLmRldGFpbC50eXBlfSAke2N1c3RvbVBhcmFtcy5kZXRhaWwubWVzc2FnZX0gJHtKU09OLnN0cmluZ2lmeShjdXN0b21QYXJhbXMuZGV0YWlsLmRhdGEpfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IGN1c3RvbVBhcmFtcy5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiID8gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogY3VzdG9tUGFyYW1zLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheWluOiBjdXN0b21QYXJhbXMucGF5aW5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBDb25maXJtIHJlc3VsdDogJHtjb25maXJtUmVzdWx0fWApO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgbG9nX18kNChg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICBsb2dfXyQ0KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDQoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kNShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoZm9ybUlucHV0cywgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBtb2JpbGVXYWxsZXRQYXltZW50RGF0YSA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IG1vYmlsZVdhbGxldFBheW1lbnREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCBBcHBsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1hcHBsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kMyhgTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgICAgbG9nX18kMyhcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDQoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyQzKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyQzKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJDQoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbCxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1wic3VwcG9ydHMzRFNcIiwgXCJzdXBwb3J0c0NyZWRpdFwiLCBcInN1cHBvcnRzRGViaXRcIl0sXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgICB0b3RhbCxcbiAgICAgICAgcHJlZmlsbFxuICAgICAgfSksXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID8/IHt9XG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3NcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyQzKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogcGF5bWVudFJlcXVlc3QudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kNChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMihcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQzKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kMihgTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLmApO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJDMoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQyKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkuaXNSZWFkeVRvUGF5KFxuICAgICAgICBwYXltZW50RGF0YVJlcXVlc3RcbiAgICAgICk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyQyKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDMoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJDMoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyQyKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQyKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShlbmNyeXB0ZWRQYXltZW50VG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDMoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQxKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDIoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICAgIGFpcndhbGxleEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgICBhaXJ3YWxsZXhBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gTG9vcFxuICAgIGxvb3A6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiTG9vcFwiLCBPanNGbG93cy5sb29wQ3J5cHRvLmluaXQpLFxuICAgIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBmb3VuZGApO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSlcbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpLnRoZW4oKGNvbm4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgZXJyX18oXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluaXRGbG93TmFtZU1hcCA9IHtcbiAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiAoe1xuICAgICAgICBuYW1lOiBpbml0Rmxvd05hbWVNYXBba2V5XSA/PyBrZXksXG4gICAgICAgIC4uLmZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5jdXJyZW50O1xuICAgICAgICAgIGlmICghaW5pdFJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiTG9vcCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gQ2Fubm90IHN1Ym1pdC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAvLyBBSSBnZW5lcmF0ZWQgc3R1ZmYgYmVsb3cgdG8gZ2V0IHRoZSB0eXBpbmcgcmlnaHQuXG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSBlbWFpbCwgZmlyc3ROYW1lIGFuZCBsYXN0TmFtZSBmaWVsZHMgdG8gYG5vbkNkZUZvcm1JbnB1dHNgXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzICYmIFwic3VjY2Vzc1wiIGluIHNldHRpbmdzICYmIHNldHRpbmdzLnN1Y2Nlc3MgPyB7XG4gICAgICAgICAgICAgIGN1c3RvbWVyOiBzZXR0aW5ncy5jdXN0b21lcixcbiAgICAgICAgICAgICAgcGF5aW46IHNldHRpbmdzLnBheWluLFxuICAgICAgICAgICAgICBlbWFpbDogc2V0dGluZ3MuZW1haWwsXG4gICAgICAgICAgICAgIGZpcnN0TmFtZTogc2V0dGluZ3MuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICBsYXN0TmFtZTogc2V0dGluZ3MubGFzdE5hbWUsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgIGRldGFpbDogc2V0dGluZ3MuZGV0YWlsLFxuICAgICAgICAgICAgICBlbWFpbDogc2V0dGluZ3MuZW1haWwsXG4gICAgICAgICAgICAgIGZpcnN0TmFtZTogc2V0dGluZ3MuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICBsYXN0TmFtZTogc2V0dGluZ3MubGFzdE5hbWUsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogaW5pdFJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0TmV2ZXIobWV0aG9kKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMTdcIjtcbiAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjIuMTctYWxwaGEuZjdjMmNkZFwiO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfTtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3QoY29uZmlnKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gO1xuICAgIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9O1xuICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IHsgRmllbGROYW1lLCBPcGVuUGF5Rm9ybSwgU3VibWl0TWV0aG9kLCBTdWJtaXRNZXRob2RzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFBQSxTQUFTO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtB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QUFBQSxFQUNyQjtBQUFBLEVBaUJBLElBQUksc0JBQXNCO0FBQ3hCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFjRjtBQS9CSXVDLEVBQUssV0FBV25ELEdBR2hCbUQsRUFBSyxvQkFBb0IsQ0FBQzJCLE1BQVM7QUFDakMsTUFBSTNCLEVBQVksWUFBWTtBQUMxQixVQUFNLElBQUksTUFBTSxnRUFBZ0U7QUFFbEYsU0FBTyxNQUFTMkI7QUFDbEIsR0FHQTNCLEVBQUssY0FBYyxNQUNWLE9BQU8sT0FBVSxNQU8xQkEsRUFBSyxzQkFBc0IsQ0FBQ3ZPLEdBQVFtUSxHQUFrQkMsR0FBa0JDLE9BQy9EO0FBQUEsRUFDTCxxQkFBcUJyUSxFQUFPO0FBQUEsRUFDNUIsU0FBUyxJQUFJLElBQUlBLEVBQU8sV0FBV3NRLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUFEO0FBQUEsRUFDQSxtQkFBbUJGLEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBQztBQUFBLEVBQ0Esa0JBQWtCcFEsRUFBTyxvQkFBb0IsQ0FBQztBQUNoRDtBQTNTTixJQUFNdVEsS0FBTmhDOyIsCiAgIm5hbWVzIjogWyJ6IiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgImNoYWxrIiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAiZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZm4iLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlN1Ym1pdE1ldGhvZCIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgInZhbHVlIiwgImZpZWxkTmFtZSIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgInJlc29sdmUiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAicmVqZWN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzdW0iLCAiYXJyIiwgImEiLCAiYiIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiQ2RlRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgImNkZUNvbm4iLCAiZGF0YSIsICJyZXNwb25zZVNjaGVtYSIsICJpc0NERVJlc3BvbnNlRXJyb3IiLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgImdldFByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgImZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kIiwgImNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkIiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJhbW91bnRBdG9tIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3IzZHNTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAicHJlcGFyZVBheW1lbnRGbG93IiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJlcnJvck1lc3NhZ2UiLCAiYXNzZXJ0TmV2ZXIiLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJwYXJhbXMiLCAiZmxvd1Jlc3VsdCIsICJlcnJvckNvZGUiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAibG9nX18kZyIsICJlcnJfXyRnIiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0iLCAiZmllbGRzIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImxvZ19fJGYiLCAiZXJyX18kZiIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kZSIsICJlcnJfXyRlIiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImNvbnRleHQiLCAiZm9ybUNhbGxiYWNrcyIsICJpbml0UGFyYW1zIiwgInN0cmlwZUxpbmtDcG0iLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJpbml0aWFsUHJldmlldyIsICJlbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImV2ZW50IiwgIk9qc0Zsb3dzIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImN1c3RvbVBhcmFtcyIsICJtZXJnZWRJbnB1dHMiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJub25DZGVGb3JtRmllbGRzIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJvdXJFeGlzdGluZ1BtSWQiLCAiZm9ybUlucHV0cyIsICJfZSIsICJpbnB1dHMiLCAicGF5ZXJGaXJzdE5hbWUiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAiaWQiLCAiZ2V0RWxlbWVudCIsICJlbGVtZW50IiwgImNyZWF0ZUFuZE9wZW5GcmFtZSIsICJ1cmwiLCAidGVtcGxhdGUiLCAiaG9zdCIsICJzaGFkb3dSb290IiwgImNhbmNlbEJ1dHRvbiIsICJzdGFydFBvbGxpbmciLCAib25TdWNjZXNzIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJoYW5kbGVFdmVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgImJhc2VVcmwiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImxvZ19fJGQiLCAiZXJyX18kZCIsICJQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJocmVmIiwgInZhdWx0SWQiLCAiZXJyTXNnIiwgInBhcnNlQXJnRnJvbUhyZWYiLCAiYXJnTmFtZSIsICJjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMiLCAicnVuUG9ja3l0M2RzRmxvdyIsICJoZWFkZXJzIiwgImxvZ19fJGMiLCAiZXJyX18kYyIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQxIiwgImNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyIsICJwYXJzZUludGVudElkRnJvbTNkc0hyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJpbml0aWFsSW50ZW50SWQiLCAiQXBwbGVQYXlDcG0kMSIsICJHb29nbGVQYXlDcG0kMSIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJGIiLCAiZXJyX18kYiIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyIsICJkZWNvZGVBZHllbkFjdGlvbiIsICJhY3Rpb24iLCAiaXNBZHllbkF2YWlsYWJsZSIsICJnZXRBZHllbkNoZWNrb3V0IiwgImhhbmRsZUFkeWVuM2RzIiwgImxvY2FsZSIsICJjb3VudHJ5Q29kZSIsICJjb21wb25lbnQiLCAiY2xlYW51cCIsICJvbkNhbmNlbCIsICJvblBheW1lbnRGYWlsZWQiLCAic3RhdGUiLCAib25FcnJvciIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgImFkeWVuQ2hlY2tvdXQiLCAiY2hlY2tvdXQiLCAiZGV0ZXJtaW5lTG9jYWxlIiwgInByZWZpbGxMb2NhbGUiLCAiYnJvd3NlckxvY2FsZSIsICJjaGVja0lmUmVxdWlyZXNBZHllbjNkcyIsICJydW5BZHllbjNkc0Zsb3ciLCAibG9nX18kYSIsICJlcnJfXyRhIiwgInN0cmlwZUxvZ19fIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJjb21tb25DaGVja291dFBhcmFtcyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgInJlcXVpcmVzUG9ja3l0M2RzIiwgInBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCIsICJhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic3RhcnRQZlJlc3VsdCIsICJzaG91bGRVc2VTdHJpcGVGbG93IiwgInN0cmlwZUNDM0RTRmxvdyIsICJjb21tb25DQzNEU0Zsb3ciLCAiY2NQbUlkIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJjb21tb24zRFNBY3Rpb25UeXBlcyIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjb21tb25BY3Rpb24iLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2dfXyQ5IiwgImVycl9fJDkiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgInByb3ZpZGVyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbUV2dCIsICJiaWxsaW5nQWRkcmVzcyIsICJzaGlwcGluZ0FkZHJlc3MiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsb2dfXyQ4IiwgImVycl9fJDgiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAibmV3Q3VzdG9tZXJGaWVsZHMiLCAiZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyIsICJpc1BheUZpcnN0RmxvdyIsICJzdGFydFBheW1lbnRGbG93UmVxdWVzdCIsICJwcmVBY3Rpb25VcmwiLCAiZW5jb2RlZFJlcXVlc3QiLCAic2VhcmNoUGFyYW1zIiwgInJlZGlyZWN0VXJsIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInNjcmlwdCIsICJwYXltZW50c0NsaWVudCIsICJnZXRHb29nbGVQYXlFbnZpcm9ubWVudCIsICJnZXRHb29nbGVQYXltZW50c0NsaWVudCIsICJwYXltZW50RGF0YVJlcXVlc3QiLCAiZW52aXJvbm1lbnQiLCAicGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAicGF5bWVudERhdGEiLCAiZmlyc3ROYW1lIiwgImxhc3ROYW1lUGFydHMiLCAibGFzdE5hbWUiLCAibG9nX18kNyIsICJlcnJfXyQ3IiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgInVuYXZhaWxhYmxlUmVzdWx0IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImlzUmVhZHlUb1BheSIsICJvbkdvb2dsZVBheVN0YXJ0RmxvdyIsICJydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgIl9mIiwgIl9nIiwgImNsaWVudCIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAic3RhcnRGbG93TmV4dEFjdGlvbnMiLCAib3VyUG1JZCIsICJsb2FkQXBwbGVQYXlTY3JpcHQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSIsICJhcHBsZVBheVBheW1lbnQiLCAicG1CaWxsaW5nQ29udGFjdCIsICJiaWxsaW5nQ29udGFjdCIsICJzaGlwcGluZ0NvbnRhY3QiLCAiQXBwbGVQYXlFdmVudFNjaGVtYSIsICJwYXJzZUFwcGxlUGF5RXZlbnQiLCAiaGFuZGxlQXBwbGVQYXlRUlBvcHVwQ2xvc2UiLCAiZXZlbnRBYm9ydENvbnRyb2xsZXIiLCAibWF5QmVBcHBsZVBheUV2ZW50IiwgImNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0IiwgInRvdGFsIiwgImxpbmVJdGVtIiwgImNyZWF0ZUFwcGxlUGF5VG90YWwiLCAiZGVmYXVsdExhYmVsIiwgImxvZ19fJDYiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlM0RTIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEiLCAiY29uc2VudElkIiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgImFwcGxlUGF5Q3BtIiwgIm9uQXBwbGVQYXlTdGFydEZsb3ciLCAicnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAiY2xlYW51cENhbmNlbExpc3RlbmVyIiwgInVwZGF0ZSIsICJMT09QX0NSWVBUT19NSU5fVVNEX0NIQVJHRV9BTU9VTlRfQVRPTSIsICJMb29wQ3J5cHRvQ3BtIiwgImxvZ19fJDQiLCAiZXJyX18kNSIsICJpbml0TG9vcEZsb3ciLCAiY2hhcmdlQW1vdW50VXNkQXRvbSIsICJwYXltZW50VXNkQW1vdW50IiwgInN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgIm1vYmlsZVdhbGxldFBheW1lbnREYXRhIiwgIkFwcGxlUGF5Q3BtIiwgIkdvb2dsZVBheUNwbSIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiaW5pdEF1dGhuZXRBcHBsZVBheUZsb3ciLCAicnVuQXV0aG5ldEFwcGxlUGF5RmxvdyIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRHb29nbGVQYXlGbG93IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgInJlamVjdGVkIiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJpIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgImxvZ19fJDEiLCAiZXJyX18kMiIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJwdWJsaXNoZXIiLCAiaW5pdFBhcmFtcyIsICJpbml0UmVzdWx0IiwgImdldEVycm9yTWVzc2FnZSIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJjb250ZXh0IiwgImZvcm1DYWxsYmFja3MiLCAiZmxvdyIsICJjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzIiwgIk9qc0Zsb3dzIiwgImVycl9fJDEiLCAiT3B0aW9uYWxGbiIsICJ6IiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJiYXNlVXJsIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImV2ZW50IiwgImdldENsZWFuT3JpZ2luIiwgImV2ZW50RGF0YSIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJldmVudFR5cGUiLCAidXJsIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiY29ubmVjdFRvQ2hpbGQiLCAiaXNWYWxpZE9iamVjdCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgImlzUmVzdWx0VmFsaWQiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAiY29ubmVjdGlvbiIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgInJlc3VsdCIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAicHJvdmlkZXIiLCAicGFyYW1zIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiZXJyX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUxvYWRlZCIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZXJyb3JNZXNzYWdlIiwgImhlaWdodCIsICJlbGVtZW50IiwgImVsZW1lbnRWYWx1ZSIsICJvcHRpb25zIiwgInR5cGUiLCAiRWxlbWVudFR5cGUiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAic2VsZWN0b3IiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiaW5pdEZsb3dOYW1lTWFwIiwgIlN1Ym1pdE1ldGhvZHMiLCAibWV0aG9kIiwgInNldHRpbmdzIiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAibmV3Q2FsbGJhY2tzIiwgInY0IiwgImZvcm0iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJhbnlDZGVDb25uZWN0aW9uIiwgImZvcm1EaXYiLCAiRlJBTUVfQkFTRV9VUkwiLCAiT3BlblBheUZvcm0iXQp9Cg==
3964
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbmNvbnN0IFN1Ym1pdE1ldGhvZCA9IHoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6LmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xuY29uc3QgRWxlbWVudEV2ZW50ID0gei5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnouZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCh0cnVlKSwgaHJlZjogei5zdHJpbmcoKSB9KSxcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbmNvbnN0IENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gIH1cbiAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgcmVzcG9uc2VTY2hlbWEsIFwiQWN0dWFsOlwiLCByZXNwb25zZSk7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZVxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGVycm9yLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlKHBhcmFtcy5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGVycm9yTWVzc2FnZSk7XG4gICAgICBlcnJfXyhlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJGcoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIG5ld19jdXN0b21lcl9lbWFpbDogZmllbGRzLmVtYWlsLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICB6aXBfY29kZTogZmllbGRzLnppcENvZGUsXG4gICAgICBjb3VudHJ5OiBmaWVsZHMuY291bnRyeVxuICAgIH0sXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZmllbGRzLmxhc3ROYW1lXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMpID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJGYoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdEZpZWxkVmFsdWVzKSkge1xuICAgICAgaWYgKCFub25DZGVGb3JtSW5wdXRzW2tleV0pIHtcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRmKGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBmb3IgKGNvbnN0IHRva2VuaXplUmVzdWx0IG9mIHRva2VuaXplUmVzdWx0cykge1xuICAgIGlmICh0b2tlbml6ZVJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEFsbEZpZWxkTmFtZXMuc2FmZVBhcnNlKGVycm9yLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGVycl9fJGYoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGYoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kZShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kZShgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyRlKGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJGUoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kZShgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRlKGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyRlKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kZShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kZShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyRlKFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZShgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBsb2dfXyRlKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyRlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGUoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGUoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJGUoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsLCBiYXNlVXJsIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoZWxlbWVudHMuaWZyYW1lLCBvblN1Y2Nlc3MsIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcyk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaHJlZjogcmVzdWx0LmhyZWZcbiAgfTtcbn07XG5jb25zdCBvcGVuUG9wdXBXaW5kb3cgPSAocG9wdXBOYW1lLCB1cmwpID0+IHtcbiAgY29uc3QgcG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgfVxuICByZXR1cm4gcG9wdXBXaW5kb3c7XG59O1xuY29uc3Qgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwb3B1cE5hbWUsIGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4sIHVybCkgPT4ge1xuICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwb3B1cFdpbmRvdyA9IG9wZW5Qb3B1cFdpbmRvdyhwb3B1cE5hbWUsIHVybCk7XG4gICAgY29uc3QgcG9sbGluZyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkKGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4pO1xuICAgICAgICBpZiAodmVyaWZ5UmVzdWx0LnByZXNlbnQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICAgIHBvcHVwV2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGhyZWY6IHZlcmlmeVJlc3VsdC5ocmVmIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcHVwV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICByZWplY3QoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMiA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyRkKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmF1bHRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRkKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt2YXVsdElkfV1gKTtcbiAgICByZXR1cm4gdmF1bHRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kZChlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHBhcnNlQXJnRnJvbUhyZWYgPSAoaHJlZiwgYXJnTmFtZSkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICByZXR1cm4gdXJsLnNlYXJjaFBhcmFtcy5nZXQoYXJnTmFtZSk7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5Qb2NreXQzZHNGbG93ID0gYXN5bmMgKGJhc2VVcmwsIGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQyKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQxID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGMoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kYyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kYyhlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRjKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbmNvbnN0IEFkeWVuTG9jYWxlID0gei5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xuY29uc3QgeyBsb2dfXzogbG9nX18kYiwgZXJyX186IGVycl9fJGIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tY2NcIik7XG5jb25zdCBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGIoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgZGVjb2RlQWR5ZW5BY3Rpb24gPSAoYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGRlc2VyaWFsaXplZCA9IEpTT04ucGFyc2UoYWN0aW9uKTtcbiAgcmV0dXJuIGRlc2VyaWFsaXplZDtcbn07XG5jb25zdCBpc0FkeWVuQXZhaWxhYmxlID0gKCkgPT4ge1xuICByZXR1cm4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3dbXCJBZHllbldlYlwiXTtcbn07XG5jb25zdCBnZXRBZHllbkNoZWNrb3V0ID0gYXN5bmMgKCkgPT4ge1xuICBsb2dfXyRiKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgIGVycl9fJGIoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGxvZ19fJGIoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgcmV0dXJuIHdpbmRvd1tcIkFkeWVuV2ViXCJdW1wiQWR5ZW5DaGVja291dFwiXTtcbn07XG5jb25zdCBoYW5kbGVBZHllbjNkcyA9IChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzLCBsb2NhbGUsIGNvdW50cnlDb2RlLCBjb21wb25lbnQsIGhvc3QsIGNhbmNlbEJ1dHRvbiB9ID0gcGFyYW1zO1xuICBjb25zdCBhY3Rpb24gPSBkZWNvZGVBZHllbkFjdGlvbihoZWFkZXJzW1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgbG9nX18kYihgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9YCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRiKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIik7XG4gICAgICBjYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBvblBheW1lbnRGYWlsZWQgPSAoc3RhdGUpID0+IHtcbiAgICAgIGVycl9fJGIoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgc3RhdGUpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18kYihcIkFkeWVuIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVELCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgY29uc3Qgb25BZGRpdGlvbmFsRGV0YWlscyA9IChzdGF0ZSwgXywgX18pID0+IHtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBzdGF0ZSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGdldEFkeWVuQ2hlY2tvdXQoKS50aGVuKFxuICAgICAgKGFkeWVuQ2hlY2tvdXQpID0+IGFkeWVuQ2hlY2tvdXQoe1xuICAgICAgICBjbGllbnRLZXk6IGhlYWRlcnNbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogaGVhZGVyc1tcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGNvdW50cnlDb2RlLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQsXG4gICAgICAgIG9uRXJyb3JcbiAgICAgIH0pXG4gICAgKS50aGVuKChjaGVja291dCkgPT4ge1xuICAgICAgY2hlY2tvdXQuY3JlYXRlRnJvbUFjdGlvbihhY3Rpb24sIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGNvbXBvbmVudCk7XG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGRldGVybWluZUxvY2FsZSA9IChwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGJyb3dzZXJMb2NhbGUgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgY29uc3QgbG9jYWxlID0gcHJlZmlsbExvY2FsZSA/PyBicm93c2VyTG9jYWxlO1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFkeWVuTG9jYWxlLnNhZmVQYXJzZShsb2NhbGUpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRiKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtsb2NhbGV9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApO1xuICAgIHJldHVybiBcImVuLVVTXCI7XG4gIH1cbiAgbG9nX18kYihgUmVzb2x2ZWQgbG9jYWxlOiAke3BhcnNlUmVzdWx0LmRhdGF9YCk7XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWR5ZW4tYWN0aW9uXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuQWR5ZW4zZHNGbG93ID0gYXN5bmMgKGNvdW50cnlDb2RlLCBlcnJvclJlc3BvbnNlSGVhZGVycywgcHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJGIoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGEsIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJGEoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGEoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRhKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGEoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGEoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRhKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYShcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWR5ZW4zZHMgPSBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBZHllbjNkcykge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFkeWVuXCJdID0gYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyRhKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VTdHJpcGVGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgaWYgKCFyZXF1aXJlc1BvY2t5dDNkcykge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2dfXyRhKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjY1BtSWQgPSBzdGFydFBmUmVzdWx0LmNjX3BtX2lkO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtjY1BtSWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHshc2hvdWxkVXNlU3RyaXBlRmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWQsXG4gICAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHNob3VsZFVzZVN0cmlwZUZsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYShg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kYShg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyRhKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbjNEU0FjdGlvblR5cGVzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdO1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gY29tbW9uM0RTQWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYShg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYShg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGEoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyQ5IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ5KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kOShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDkoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDkoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ5KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kOShgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQ5KGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDkoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCk7XG4gICAgfVxuICAgIGxvZ19fJDkoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQ5KGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQ5KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQ5KGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kOShgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDkoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOShgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IHNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IHNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDkoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZywgc3RyaXBlQXBwbGVQYXkpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ4KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDgoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmIChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG4gIH1cbiAgcmV0dXJuIGJhc2VSZXF1ZXN0O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCI7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufTtcbmxldCBwYXltZW50c0NsaWVudCA9IG51bGw7XG5jb25zdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudCA9IChiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IGlzUHJvZHVjdGlvbiA9IGJhc2VVcmwgPT09IEZSQU1FX0JBU0VfVVJMIHx8IGJhc2VVcmwgPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gIHJldHVybiBpc1Byb2R1Y3Rpb24gPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChiaWxsaW5nQWRkcmVzcykge1xuICAgIGNvbnN0IFtmaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gPSBpbnB1dHNbRmllbGROYW1lLkFERFJFU1NdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgZmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgbGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBpbnB1dHM7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ3LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDcoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQ3KFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNyhgTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLmApO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGdldEdvb2dsZVBheUVudmlyb25tZW50KGNvbnRleHQuYmFzZVVybCk7XG4gICAgaWYgKGVudmlyb25tZW50ID09PSBcIlBST0RVQ1RJT05cIiAmJiAhcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkKSB7XG4gICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNyhcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpLmlzUmVhZHlUb1BheShcbiAgICAgICAgcGF5bWVudERhdGFSZXF1ZXN0XG4gICAgICApO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kNyhcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDcoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJDcoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyQ3KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGVuY3J5cHRlZFBheW1lbnRUb2tlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ3KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyQ3KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyQ3KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNyhcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgbG9hZEFwcGxlUGF5U2NyaXB0ID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIjtcbiAgICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkgPSAoZm9ybUlucHV0cywgYXBwbGVQYXlQYXltZW50KSA9PiB7XG4gIGNvbnN0IHBtQmlsbGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3QgYmlsbGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IHNoaXBwaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5zaGlwcGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBpZiAocG1CaWxsaW5nQ29udGFjdCB8fCBiaWxsaW5nQ29udGFjdCB8fCBzaGlwcGluZ0NvbnRhY3QpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBiaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IHNoaXBwaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgcG1CaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBiaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBpbnB1dHM7XG59O1xuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IGNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0ID0gKHtcbiAgdG90YWwsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGJpbGxpbmcgcG9ydGFsIHVybFxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vcGFzc2tpdC9wa3JlY3VycmluZ3BheW1lbnRyZXF1ZXN0L21hbmFnZW1lbnR1cmwjRGlzY3Vzc2lvblxuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB1c2VkIHdoZW4gdXNlciByZW1vdmUgYSBjYXJkIGZyb20gdGhlaXIgQXBwbGVQYXkgd2FsbGV0LlxuICAgICAgLy8gQ3VycmVudHkgc2V0IHRvIGNoZWNrb3V0IHNlc3Npb24gdXJsIHRvIHNhdGlzZnkgQXBwbGVQYXkgdHlwZXNcbiAgICAgIG1hbmFnZW1lbnRVUkw6IG5ldyBVUkwoYC9wYXkvJHtwcmVmaWxsLnRva2VufWAsIEZSQU1FX0JBU0VfVVJMKS50b1N0cmluZygpXG4gICAgfTtcbiAgfVxuICBjb25zdCBsaW5lSXRlbSA9IHByZWZpbGwubGluZV9pdGVtcz8uWzBdO1xuICBpZiAoIWxpbmVJdGVtKSByZXR1cm4gdm9pZCAwO1xuICByZXR1cm4ge1xuICAgIHBheW1lbnREZXNjcmlwdGlvbjogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgbGFiZWw6IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWxfY291bnQgPz8gdm9pZCAwLFxuICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgIH0sXG4gICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke3ByZWZpbGwudG9rZW59YFxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZUFwcGxlUGF5VG90YWwgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBhbW91bnRBdG9tID0gb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5hbW91bnRBdG9tID8/IGluaXRpYWxQcmV2aWV3Py5hbW91bnRBdG9tID8/IDA7XG4gIGNvbnN0IGFtb3VudCA9IChhbW91bnRBdG9tIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmxhYmVsID8/IGRlZmF1bHRMYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnRcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJDYoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJDYoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJDYoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIGZvcm1JbnB1dHMsXG4gICAgICBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29udGV4dC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgY29uc2VudElkID0gcmVxdWlyZWRVc2VyQWN0aW9ucy5jb25zZW50X2lkO1xuICAgIGlmICghY29uc2VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyQ2KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YT8ucmVkaXJlY3RfdXJsICYmIG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkICYmIG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCkge1xuICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpO1xuICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIH1cbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQ1KGBMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgICBsb2dfXyQ1KFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kNihcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJDUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQ1KFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJDUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kNihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZSxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgICAgXSxcbiAgICAgIHRvdGFsLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IGNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0KHtcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHByZWZpbGxcbiAgICAgIH0pLFxuICAgICAgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCA/PyB7fVxuICAgIH07XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyQ1KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kNihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IExPT1BfQ1JZUFRPX01JTl9VU0RfQ0hBUkdFX0FNT1VOVF9BVE9NID0gMTtcbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJDQoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kNChgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbGV0IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gTE9PUF9DUllQVE9fTUlOX1VTRF9DSEFSR0VfQU1PVU5UX0FUT007XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tO1xuICAgIH1cbiAgICBpZiAocHJlZmlsbC5jdXJyZW5jeSAhPT0gXCJ1c2RcIiAmJiBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIikge1xuICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3Qgc3VwcG9ydCBub24gVVNEIGN1cnJlbmN5IGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgocGF5bWVudFVzZEFtb3VudCAqIDEyLCAxZTUpO1xuICAgIGNvbnN0IGN1c3RvbWVyUmVmSWQgPSB2NCgpO1xuICAgIGNvbnN0IHdpZGdldFByb3BzID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudCxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBjdXN0b21lclJlZklkXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaUtleTogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW50aXR5X2lkLFxuICAgICAgbWVyY2hhbnRJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLm1lcmNoYW50X2lkXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIExvb3AgZmxvdy4uLmApO1xuICAgIGxvZ19fJDQoXCJjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgIGxvZ19fJDQoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ0KFwibm9uQ2RlRm9ybUlucHV0c1wiLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICBsb2dfXyQ0KFwiZmxvd0NhbGxiYWNrc1wiLCBmb3JtQ2FsbGJhY2tzKTtcbiAgICBsb2dfXyQ0KFwiY3VzdG9tUGFyYW1zXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgbG9nX18kNChcImluaXRSZXN1bHRcIiwgaW5pdFJlc3VsdCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBpZiAoIWluaXRSZXN1bHQuaXNBdmFpbGFibGUpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgTG9vcCBmbG93LiBDYW5ub3Qgc3VibWl0IHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIEV4aXRpbmcgcnVubmluZyBMb29wIGZsb3cuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCI7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGN1c3RvbVBhcmFtcy5lbWFpbCxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjdXN0b21QYXJhbXMuZmlyc3ROYW1lLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY3VzdG9tUGFyYW1zLmxhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpbml0UmVzdWx0LndpZGdldFByb3BzLnBheW1lbnRVc2RBbW91bnRcbiAgICAgIH0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFBheWluIHdhcyBub3Qgc3VjY2Vzc2Z1bDogJHtjdXN0b21QYXJhbXMuZGV0YWlsLnR5cGV9ICR7Y3VzdG9tUGFyYW1zLmRldGFpbC5tZXNzYWdlfSAke0pTT04uc3RyaW5naWZ5KGN1c3RvbVBhcmFtcy5kZXRhaWwuZGF0YSl9YFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCIgPyBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBjdXN0b21QYXJhbXMuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5aW46IGN1c3RvbVBhcmFtcy5wYXlpblxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJDQoYENvbmZpcm0gcmVzdWx0OiAke2NvbmZpcm1SZXN1bHR9YCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBsb2dfXyQ0KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIGxvZ19fJDQoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ1KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhmb3JtSW5wdXRzLCBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IEFwcGxlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWFwcGxlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQzKGBMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgICBsb2dfXyQzKFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kNChcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJDMoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJDMoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kNChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgY29uc3QgeyBjdXJyZW5jeUNvZGUsIHRvdGFsIH0gPSBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZSxcbiAgICAgIHRvdGFsLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXCJzdXBwb3J0czNEU1wiLCBcInN1cHBvcnRzQ3JlZGl0XCIsIFwic3VwcG9ydHNEZWJpdFwiXSxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBwcmVmaWxsXG4gICAgICB9KSxcbiAgICAgIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPz8ge31cbiAgICB9O1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJDMoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBwYXltZW50UmVxdWVzdC50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyQ0KFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMiwgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1nb29nbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQyKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kMihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJDMoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQyKGBMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uYCk7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kMyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIHBheW1lbnREYXRhUmVxdWVzdFxuICAgICAgKTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kMyhcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kMyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDIoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kMyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0ID0gKGNwbXMsIHdpdGhQcm92aWRlciwgd2l0aFByb2Nlc3NvcikgPT4ge1xuICBjb25zdCBtYXRjaGVzID0gY3Btcy5maWx0ZXIoKGNwbSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXNQcm9jZXNzb3IgPSB3aXRoUHJvY2Vzc29yID09PSB2b2lkIDAgPyB0cnVlIDogY3BtLnByb2Nlc3Nvcl9uYW1lID09PSB3aXRoUHJvY2Vzc29yO1xuICAgIGNvbnN0IG1hdGNoZXNQcm92aWRlciA9IGNwbS5wcm92aWRlciA9PT0gd2l0aFByb3ZpZGVyO1xuICAgIHJldHVybiBtYXRjaGVzUHJvY2Vzc29yICYmIG1hdGNoZXNQcm92aWRlcjtcbiAgfSk7XG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IHJ1blBvY2t5dFBheXBhbEZsb3dcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3dcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogaW5pdExvb3BGbG93LFxuICAgIHJ1bjogcnVuTG9vcEZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEdvb2dsZVBheUZsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/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+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIgPSAoZmxvd05hbWUsIGluaXRGbG93KSA9PiB7XG4gIGNvbnN0IHB1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChpbml0UGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgaW5pdEZsb3coaW5pdFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDEoYOKclCAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGluaXRSZXN1bHQpO1xuICAgICAgICBwdWJsaXNoZXIuc2V0KGluaXRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMihg8J2ZrSAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgXCJEZXRhaWxzOlwiLCBlcnJvcik7XG4gICAgICAgIHB1Ymxpc2hlci50aHJvdyhlcnJvciwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWxsSW5pdEZsb3dzID0gYXN5bmMgKGZsb3dzLCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZmxvd3MpLm1hcCgoZmxvdykgPT4gZmxvdy5pbml0aWFsaXplKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSkpO1xufTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAgIC8vIFN0cmlwZSBQUlxuICAgIHN0cmlwZVBSOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KSxcbiAgICAvLyBTdHJpcGUgTGlua1xuICAgIHN0cmlwZUxpbms6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIExpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgICBhdXRob3JpemVOZXRBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQxKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSlcbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpLnRoZW4oKGNvbm4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgZXJyX18oXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluaXRGbG93TmFtZU1hcCA9IHtcbiAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiAoe1xuICAgICAgICBuYW1lOiBpbml0Rmxvd05hbWVNYXBba2V5XSA/PyBrZXksXG4gICAgICAgIC4uLmZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5jdXJyZW50O1xuICAgICAgICAgIGlmICghaW5pdFJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiTG9vcCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gQ2Fubm90IHN1Ym1pdC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAvLyBBSSBnZW5lcmF0ZWQgc3R1ZmYgYmVsb3cgdG8gZ2V0IHRoZSB0eXBpbmcgcmlnaHQuXG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSBlbWFpbCwgZmlyc3ROYW1lIGFuZCBsYXN0TmFtZSBmaWVsZHMgdG8gYG5vbkNkZUZvcm1JbnB1dHNgXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzICYmIFwic3VjY2Vzc1wiIGluIHNldHRpbmdzICYmIHNldHRpbmdzLnN1Y2Nlc3MgPyB7XG4gICAgICAgICAgICAgIGN1c3RvbWVyOiBzZXR0aW5ncy5jdXN0b21lcixcbiAgICAgICAgICAgICAgcGF5aW46IHNldHRpbmdzLnBheWluLFxuICAgICAgICAgICAgICBlbWFpbDogc2V0dGluZ3MuZW1haWwsXG4gICAgICAgICAgICAgIGZpcnN0TmFtZTogc2V0dGluZ3MuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICBsYXN0TmFtZTogc2V0dGluZ3MubGFzdE5hbWUsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgIGRldGFpbDogc2V0dGluZ3MuZGV0YWlsLFxuICAgICAgICAgICAgICBlbWFpbDogc2V0dGluZ3MuZW1haWwsXG4gICAgICAgICAgICAgIGZpcnN0TmFtZTogc2V0dGluZ3MuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICBsYXN0TmFtZTogc2V0dGluZ3MubGFzdE5hbWUsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogaW5pdFJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0TmV2ZXIobWV0aG9kKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMThcIjtcbiAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjIuMThcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IGNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxuICAgICAgfTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB7IEZpZWxkTmFtZSwgT3BlblBheUZvcm0sIFN1Ym1pdE1ldGhvZCwgU3VibWl0TWV0aG9kcyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBQUEsU0FBUztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBVztBQUVsQixNQUFNQyxLQUFpQiw4QkFFakJDLEtBQTRCTCxFQUFFLE9BQU87QUFBQSxFQUN6QyxNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLEtBQUtBLEVBQUUsTUFBTUEsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN2QixLQUFLQSxFQUFFLE9BQU87QUFBQSxFQUNkLEtBQUtBLEVBQUUsT0FBTztBQUNoQixDQUFDLEdBQ0tNLEtBQWtDTixFQUFFLE1BQU1LLEVBQXlCLEdBQ25FRSxLQUFnQlAsRUFBRSxPQUFPO0FBQUEsRUFDN0IsTUFBTUEsRUFBRSxPQUFPO0FBQUEsRUFDZixTQUFTQSxFQUFFLE9BQU87QUFBQSxFQUNsQixNQUFNQSxFQUFFLE1BQU1BLEVBQUUsT0FBTyxDQUFDO0FBQzFCLENBQUMsR0FDS1EsS0FBaUJSLEVBQUUsTUFBTU8sRUFBYSxHQUN0Q0UsS0FBa0M7QUFBQSxFQUN0QyxtQkFBbUI7QUFDckIsR0FDTUMsS0FBMEIsQ0FBQ0MsTUFBbUI7QUFDbEQsUUFBTUMsSUFBTUQsRUFBZSxZQUFZLEVBQUUsS0FBSztBQUM5QyxTQUFPRixHQUFnQ0csQ0FBRyxLQUFLRDtBQUNqRCxHQUNNRSxLQUEwQixDQUFDQyxNQUFRO0FBQ3ZDLE1BQUk7QUFFRixXQUFPLE9BRFEsS0FBSyxNQUFNQSxDQUFHLEtBQ0o7QUFBQSxFQUMzQixRQUFZO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFDRixHQUNNQyxLQUEyQyxDQUFDQyxNQUM1Q0EsRUFBUyxXQUFXLElBQ2ZOLEdBQXdCTSxFQUFTLENBQUMsRUFBRSxHQUFHLElBR3ZDO0FBQUEsRUFEVUEsRUFBUyxJQUFJLENBQUNDLE1BQVEsS0FBS1AsR0FBd0JPLEVBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQUEsQ0FBSSxDQUVuRixJQUdKQyxLQUFrQyxDQUFDQyxNQUVoQztBQUFBLEVBRGNBLEVBQU8sSUFBSSxDQUFDRixNQUFRLEtBQUtBLEVBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLQSxFQUFJLE9BQU8sRUFBRSxFQUFFLEtBQUs7QUFBQSxDQUFJLENBRWpGLElBRVJHLElBQWtCLENBQUNDLE1BQU07QUFDN0IsTUFBSUEsYUFBYTtBQUNmLFFBQUlSLEdBQXdCUSxFQUFFLE9BQU8sR0FBRztBQUN0QyxZQUFNQyxJQUFNLEtBQUssTUFBTUQsRUFBRSxPQUFPO0FBQ2hDLGFBQUlmLEdBQWdDLFVBQVVnQixDQUFHLEVBQUUsVUFDMUNQLEdBQXlDTyxDQUFHLElBQzFDZCxHQUFlLFVBQVVjLENBQUcsRUFBRSxVQUNoQ0osR0FBZ0NJLENBQUcsS0FFMUMsUUFBUSxLQUFLO0FBQUEsRUFDbkJELEVBQUUsT0FBTyxFQUFFLEdBQ0VBLEVBQUU7QUFBQSxJQUViO0FBQ0UsYUFBT1gsR0FBd0JXLEVBQUUsT0FBTztBQUc1QyxNQUFJLE9BQU9BLEtBQU07QUFDZixRQUFJO0FBQ0YsYUFBTyxLQUFLLFVBQVVBLENBQUM7QUFBQSxJQUN6QixTQUFTRSxHQUFJO0FBQ1gsYUFBT0EsSUFBSztBQUFBLElBQ2Q7QUFBQTtBQUVBLFdBQU9GLElBQUk7QUFFZixHQUNNRyxLQUFtQixDQUFDQyxHQUFjQyxHQUFJQyxNQUNuQyxJQUFJQyxNQUFTO0FBQ2xCLE1BQUk7QUFDRixXQUFPRixFQUFHLEdBQUdFLENBQUk7QUFBQSxFQUNuQixTQUFTQyxHQUFPO0FBQ2QsSUFBQUYsRUFBWSxrQ0FBa0NGLENBQVksTUFBTUksQ0FBSztBQUNyRTtBQUFBLEVBQ0Y7QUFDRjtBQUdGLElBQUlDLElBQWlDLGtCQUFDQyxPQUNwQ0EsRUFBZSxlQUFrQixpQkFDakNBLEVBQWUscUJBQXdCLHdCQUN2Q0EsRUFBZSxvQkFBdUIsdUJBQ3RDQSxFQUFlLHdCQUEyQiwyQkFDMUNBLEVBQWUsdUJBQTBCLDBCQUN6Q0EsRUFBZSxhQUFnQixlQUN4QkEsSUFDTkQsS0FBaUIsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1FLEtBQWVoQyxFQUFFLFdBQVc4QixDQUFhLEdBRXpDRyxJQUFpQmpDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGtCQUFrQixDQUFDLEdBQ3hFa0MsSUFBaUJsQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUM1Q21DLElBQWtCLENBQUNDLE1BQVVwQyxFQUFFLFNBQVNvQyxFQUFNLFNBQVMsQ0FBQztBQUM5RCxJQUFJQyxJQUE2QixrQkFBQ0MsT0FDaENBLEVBQVcsYUFBZ0IsYUFDM0JBLEVBQVcsWUFBZSxZQUMxQkEsRUFBVyxRQUFXLFNBQ3RCQSxFQUFXLFdBQWMsV0FDekJBLEVBQVcsT0FBVSxRQUNyQkEsRUFBVyxRQUFXLFNBQ3RCQSxFQUFXLFVBQWEsV0FDeEJBLEVBQVcsVUFBYSxXQUN4QkEsRUFBVyxRQUFXLFNBQ3RCQSxFQUFXLGlCQUFvQixpQkFDeEJBLElBQ05ELEtBQWEsQ0FBQyxDQUFDO0FBQ2xCLE1BQU1FLEtBQWdCdkMsRUFBRSxXQUFXcUMsQ0FBUztBQUM1QyxJQUFJRyxLQUFvQyxrQkFBQ0MsT0FDdkNBLEVBQWtCLGNBQWlCLGNBQ25DQSxFQUFrQixjQUFpQixjQUNuQ0EsRUFBa0IsV0FBYyxXQUN6QkEsSUFDTkQsTUFBb0IsQ0FBQyxDQUFDO0FBQ3pCLE1BQU1FLEtBQXVCMUMsRUFBRSxXQUFXd0MsRUFBZ0IsR0FDcERHLEtBQWdCM0MsRUFBRSxNQUFNLENBQUN1QyxJQUFlRyxFQUFvQixDQUFDO0FBQ25FLElBQUlFLEtBQW1DLGtCQUFDQyxPQUN0Q0EsRUFBaUIsT0FBVSxRQUMzQkEsRUFBaUIsY0FBaUIsZUFDbENBLEVBQWlCLGNBQWlCLGVBQ2xDQSxFQUFpQixXQUFjLFlBQ3hCQSxJQUNORCxNQUFtQixDQUFDLENBQUM7QUFDeEIsTUFBTUUsS0FBYzlDLEVBQUUsV0FBVzRDLEVBQWUsR0FDMUNHLEtBQTBCL0MsRUFBRSxPQUFPO0FBQUEsRUFDdkMsVUFBVUEsRUFBRSxPQUFPO0FBQUEsRUFDbkIsZ0JBQWdCbUMsRUFBZ0JuQyxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQzFDLFVBQVVtQyxFQUFnQm5DLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyxHQUNLZ0QsS0FBdUJoRCxFQUFFLE9BQU87QUFBQSxFQUNwQyxJQUFJQSxFQUFFLE9BQU87QUFDZixDQUFDO0FBQ0RBLEVBQUUsT0FBTztBQUFBLEVBQ1AsWUFBWWtDO0FBQUEsRUFDWixRQUFRQTtBQUFBLEVBQ1IsS0FBS0E7QUFDUCxDQUFDO0FBQ0RsQyxFQUFFLE9BQU87QUFBQSxFQUNQLGlCQUFpQmtDO0FBQUEsRUFDakIsT0FBT0E7QUFBQSxFQUNQLFlBQVlBO0FBQUEsRUFDWixVQUFVQTtBQUFBLEVBQ1YsWUFBWUE7QUFBQSxFQUNaLFFBQVFBO0FBQUEsRUFDUixTQUFTQTtBQUFBLEVBQ1QsZUFBZUE7QUFBQSxFQUNmLFlBQVlBO0FBQUEsRUFDWixVQUFVQTtBQUNaLENBQUM7QUFDRCxNQUFNZSxJQUFZakQsRUFBRSxLQUFLO0FBQUE7QUFBQSxFQUV2QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixDQUFDLEdBQ0trRCxLQUFtQkQsRUFBVSxRQUFRLENBQUMsb0JBQW9CLGtCQUFrQixDQUFDLEdBQzdFRSxLQUFzQm5ELEVBQUUsT0FBTyxFQUFFLE1BQU1rRCxHQUFpQixDQUFDLEdBQ3pERSxLQUFpQkgsRUFBVSxRQUFRLENBQUMsUUFBUSxTQUFTLFFBQVEsQ0FBQyxHQUM5REksS0FBb0JyRCxFQUFFLE9BQU87QUFBQSxFQUNqQyxNQUFNb0Q7QUFBQSxFQUNOLGFBQWFWO0FBQUEsRUFDYixRQUFRMUMsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFDdkMsQ0FBQyxHQUNLc0QsS0FBaUJMLEVBQVUsUUFBUSxDQUFDLGNBQWMsa0JBQWtCLGdCQUFnQixDQUFDLEdBQ3JGTSxLQUFvQnZELEVBQUUsT0FBTztBQUFBLEVBQ2pDLE1BQU1zRDtBQUFBLEVBQ04sU0FBU3JCO0FBQUEsRUFDVCxTQUFTakMsRUFBRSxPQUFPQSxFQUFFLE9BQU8sR0FBR0EsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTO0FBQ3JELENBQUMsR0FDS3dELEtBQTJCUCxFQUFVLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUNqRVEsS0FBOEJ6RCxFQUFFLE9BQU87QUFBQSxFQUMzQyxNQUFNd0Q7QUFBQSxFQUNOLGFBQWFiO0FBQUEsRUFDYixRQUFRM0MsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUM1QixDQUFDLEdBQ0swRCxLQUFxQjFELEVBQUUsT0FBTztBQUFBLEVBQ2xDLE1BQU1BLEVBQUUsUUFBUWlELEVBQVUsS0FBSyxNQUFNO0FBQUEsRUFDckMsUUFBUWhCO0FBQ1YsQ0FBQyxHQUNLMEIsS0FBcUIzRCxFQUFFLE9BQU87QUFBQSxFQUNsQyxNQUFNQSxFQUFFLFFBQVFpRCxFQUFVLEtBQUssTUFBTTtBQUFBLEVBQ3JDLFdBQVdoQjtBQUFBLEVBQ1gsa0JBQWtCakMsRUFBRSxPQUFPO0FBQUEsRUFDM0IsVUFBVWtDO0FBQUEsRUFDVix3QkFBd0JsQyxFQUFFLE1BQU0rQyxFQUF1QjtBQUN6RCxDQUFDLEdBQ0thLEtBQWlDNUQsRUFBRSxPQUFPO0FBQUEsRUFDOUMsTUFBTUEsRUFBRSxRQUFRaUQsRUFBVSxLQUFLLG9CQUFvQjtBQUFBLEVBQ25ELG9CQUFvQmpELEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFDaEQscUJBQXFCQSxFQUFFLElBQUksRUFBRSxTQUFTO0FBQUEsRUFDdEMsaUJBQWlCQSxFQUFFLFNBQVNBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsQ0FBQyxHQUNLNkQsS0FBbUM3RCxFQUFFLE9BQU87QUFBQSxFQUNoRCxNQUFNQSxFQUFFLFFBQVFpRCxFQUFVLEtBQUssNEJBQTRCO0FBQUEsRUFDM0QsaUJBQWlCakQsRUFBRSxPQUFPO0FBQzVCLENBQUMsR0FDSzhELEtBQXFCOUQsRUFBRSxPQUFPO0FBQUEsRUFDakMsV0FBK0JpQztBQUFBLEVBQy9CLFVBQTZCQTtBQUFBLEVBQzdCLE9BQXNCQTtBQUFBLEVBQ3RCLFNBQTJCQTtBQUFBLEVBQzNCLFNBQTBCQTtBQUFBLEVBQzFCLGVBQXVDQztBQUMxQyxDQUFDLEdBQ0s2QixLQUFlL0QsRUFBRSxPQUFPO0FBQUEsRUFDM0IsV0FBK0JrQztBQUFBLEVBQy9CLFVBQTZCQTtBQUFBLEVBQzdCLE9BQXNCRDtBQUFBLEVBQ3RCLFNBQTJCQTtBQUFBLEVBQzNCLFNBQTBCQTtBQUFBLEVBQzFCLGVBQXVDQztBQUFBLEVBQ3ZDLFNBQTBCQTtBQUFBLEVBQzFCLE1BQW9CQTtBQUFBLEVBQ3BCLE9BQXNCQTtBQUN6QixDQUFDLEdBQ0s4QixLQUFrQmYsRUFBVSxRQUFRLENBQUMsWUFBWSxZQUFZLG9CQUFvQixDQUFDLEdBQ2xGZ0IsS0FBcUJqRSxFQUFFLE9BQU87QUFBQSxFQUNsQyxNQUFNZ0U7QUFBQSxFQUNOLFdBQVcvQjtBQUFBLEVBQ1gsdUJBQXVCYztBQUFBLEVBQ3ZCLHFCQUFxQi9DLEVBQUUsSUFBSSxFQUFFLFNBQVM7QUFBQSxFQUN0QyxzQkFBc0JBLEVBQUUsUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUMzQyxnQkFBZ0JrQztBQUNsQixDQUFDLEVBQUUsT0FBTzRCLEdBQW1CLEtBQUssR0FDNUJJLEtBQThCbEUsRUFBRSxPQUFPO0FBQUEsRUFDM0MsTUFBTUEsRUFBRSxRQUFRaUQsRUFBVSxLQUFLLGdCQUFnQjtBQUFBLEVBQy9DLG9CQUFvQmpELEVBQUUsUUFBUTtBQUNoQyxDQUFDLEdBQ0ttRSxLQUE4Qm5FLEVBQUUsT0FBTztBQUFBLEVBQzNDLE1BQU1BLEVBQUUsUUFBUWlELEVBQVUsS0FBSyxnQkFBZ0I7QUFBQSxFQUMvQyxhQUFhakQsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQy9CLGlCQUFpQkEsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ25DLFlBQVlBLEVBQUUsT0FBTztBQUN2QixDQUFDLEdBQ0tvRSxLQUFlcEUsRUFBRSxtQkFBbUIsUUFBUTtBQUFBLEVBQ2hEbUQ7QUFBQSxFQUNBRTtBQUFBLEVBQ0FFO0FBQUEsRUFDQUU7QUFBQSxFQUNBQztBQUFBLEVBQ0FDO0FBQUEsRUFDQU07QUFBQSxFQUNBQztBQUFBLEVBQ0FDO0FBQUEsRUFDQVA7QUFBQSxFQUNBQztBQUNGLENBQUMsR0FDS1EsS0FBZXJFLEVBQUUsT0FBTztBQUFBLEVBQzVCLFNBQVNvRTtBQUFBLEVBQ1QsT0FBT25DO0FBQUEsRUFDUCxRQUFRQTtBQUFBLEVBQ1IsV0FBV0E7QUFDYixDQUFDO0FBQ0RqQyxFQUFFLE9BQU87QUFBQSxFQUNQLFlBQVlBLEVBQUUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSXJCLFVBQVVpQztBQUNaLENBQUM7QUFDRGpDLEVBQUUsS0FBSyxDQUFDLGFBQWEsWUFBWSxDQUFDO0FBQ2xDQSxFQUFFLE9BQU87QUFBQSxFQUNQLGNBQWNBLEVBQUUsT0FBTztBQUFBLEVBQ3ZCLGdCQUFnQkEsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUN0QyxDQUFDO0FBQ0RBLEVBQUUsT0FBTztBQUFBLEVBQ1AsY0FBY0EsRUFBRSxPQUFPO0FBQUEsRUFDdkIsbUJBQW1CbUMsRUFBZ0JuQyxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQzdDLGFBQWFtQyxFQUFnQm5DLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDdkMscUJBQXFCbUMsRUFBZ0JuQyxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQy9DLDZCQUE2Qm1DLEVBQWdCbkMsRUFBRSxPQUFPQSxFQUFFLE9BQU8sR0FBR0EsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBQ0QsTUFBTXNFLEtBQTBCdEUsRUFBRSxPQUFPO0FBQUEsRUFDdkMsY0FBY0EsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ2hDLGtCQUFrQkEsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3BDLGFBQWFBLEVBQUUsT0FBTztBQUN4QixDQUFDLEdBQ0t1RSxLQUF1QnZFLEVBQUUsT0FBTztBQUFBLEVBQ3BDLGFBQWFBLEVBQUUsT0FBTztBQUFBLEVBQ3RCLFFBQVFBLEVBQUUsTUFBTUEsRUFBRSxPQUFPLENBQUM7QUFDNUIsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLFlBQVlBLEVBQUUsT0FBTztBQUN2QixDQUFDO0FBQ0QsTUFBTXdFLEtBQTRCeEUsRUFBRSxPQUFPO0FBQUEsRUFDekMsU0FBU0EsRUFBRSxRQUFRLEVBQUs7QUFBQSxFQUN4QixZQUFZQSxFQUFFLFFBQVEsa0JBQWtCO0FBQUEsRUFDeEMsUUFBUUEsRUFBRSxNQUFNdUUsRUFBb0I7QUFDdEMsQ0FBQyxHQUNLRSxLQUF1QnpFLEVBQUUsbUJBQW1CLFdBQVc7QUFBQSxFQUMzREEsRUFBRSxPQUFPLEVBQUUsU0FBU0EsRUFBRSxRQUFRLEVBQUksRUFBRSxDQUFDO0FBQUEsRUFDckN3RTtBQUNGLENBQUM7QUFDRHhFLEVBQUUsT0FBTztBQUFBLEVBQ1AsWUFBWUEsRUFBRSxPQUFPO0FBQUEsRUFDckIseUJBQXlCK0M7QUFBQSxFQUN6QixxQkFBcUJlO0FBQUEsRUFDckIsMkJBQTJCOUQsRUFBRSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQ2hELG1CQUFtQm1DLEVBQWdCbkMsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUM3QyxnQkFBZ0JBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDO0FBQzlDLENBQUM7QUFDREEsRUFBRSxPQUFPO0FBQUEsRUFDUCxZQUFZQSxFQUFFLE9BQU87QUFBQSxFQUNyQix5QkFBeUIrQztBQUFBLEVBQ3pCLHFCQUFxQmU7QUFBQSxFQUNyQixnQkFBZ0I5RCxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVM7QUFDekQsQ0FBQztBQUNELElBQUkwRSxJQUFpQyxrQkFBQ0MsT0FDcENBLEVBQWUsVUFBYSxXQUM1QkEsRUFBZSxVQUFhLFdBQzVCQSxFQUFlLFlBQWUsYUFDdkJBLElBQ05ELEtBQWlCLENBQUMsQ0FBQztBQUN0QixNQUFNRSxLQUF3QjVFLEVBQUUsT0FBTztBQUFBLEVBQ3JDLFFBQVFBLEVBQUUsS0FBSztBQUFBLElBQUM7QUFBQSxJQUF5QjtBQUFBLElBQXlCO0FBQUE7QUFBQSxFQUEyQixDQUFDO0FBQUEsRUFDOUYsTUFBTUEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVM7QUFDdkMsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLE1BQU1BLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTO0FBQ3ZDLENBQUM7QUFDRCxNQUFNNkUsS0FBOEI3RSxFQUFFLE9BQU87QUFBQSxFQUMzQyxNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLGNBQWNBLEVBQUUsT0FBTztBQUFBLEVBQ3ZCLG1CQUFtQkEsRUFBRSxPQUFPO0FBQUEsRUFDNUIsWUFBWUEsRUFBRSxPQUFPO0FBQUEsRUFDckIsYUFBYUEsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUNuQyxDQUFDLEdBQ0s4RSxLQUEyQjlFLEVBQUUsT0FBTztBQUFBLEVBQ3hDLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsY0FBY21DLEVBQWdCbkMsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN4QyxtQkFBbUJtQyxFQUFnQm5DLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDN0MsWUFBWW1DLEVBQWdCbkMsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN0QyxhQUFhbUMsRUFBZ0JuQyxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLGlCQUFpQm1DLEVBQWdCbkMsRUFBRSxPQUFPQSxFQUFFLE9BQU8sR0FBR0EsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRSxDQUFDLEdBQ0srRSxLQUFxQy9FLEVBQUUsbUJBQW1CLFdBQVc7QUFBQSxFQUN6RUEsRUFBRSxPQUFPLEVBQUUsU0FBU0EsRUFBRSxRQUFRLEVBQUksR0FBRyxNQUFNQSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsRUFDdkRBLEVBQUUsT0FBTyxFQUFFLFNBQVNBLEVBQUUsUUFBUSxFQUFLLEVBQUUsQ0FBQztBQUN4QyxDQUFDLEdBQ0tnRixLQUE2QmhGLEVBQUUsT0FBTztBQUFBLEVBQzFDLGlCQUFpQkEsRUFBRSxNQUFNZ0QsRUFBb0I7QUFBQSxFQUM3Qyw0QkFBNEJiLEVBQWdCbUMsRUFBdUI7QUFBQSxFQUNuRSx1QkFBdUJuQyxFQUFnQm5DLEVBQUUsTUFBTThFLEVBQXdCLENBQUM7QUFDMUUsQ0FBQyxHQUVLRyxLQUF3QixDQUFDcEQsTUFBVTtBQUN2QyxRQUFNcUQsSUFBaUIsQ0FBQztBQUN4QixnQkFBTyxRQUFRckQsQ0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDakIsR0FBS3VFLENBQUssTUFBTTtBQUM5QyxRQUFJO0FBQ0YsWUFBTUMsSUFBWTdDLEdBQWMsTUFBTTNCLENBQUc7QUFDekMsTUFBSSxNQUFNLFFBQVF1RSxDQUFLLElBQ3JCRCxFQUFlRSxDQUFTLElBQUlELElBQ25CLE1BQU0sUUFBUUEsRUFBTSxPQUFPLE1BQ3BDRCxFQUFlRSxDQUFTLElBQUlELEVBQU07QUFBQSxJQUV0QyxRQUFRO0FBQ047QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDLEdBQ01EO0FBQ1QsR0FFTUcsS0FBOEJyRixFQUFFLE9BQU87QUFBQSxFQUMzQyxXQUFXQSxFQUFFLE9BQU87QUFBQSxFQUNwQixlQUFlQSxFQUFFLE9BQU87QUFBQSxFQUN4QixjQUFjQSxFQUFFLE9BQU87QUFDekIsQ0FBQyxHQUNLc0YsS0FBbUN0RixFQUFFLE9BQU87QUFBQSxFQUNoRCxNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLGVBQWVBLEVBQUUsT0FBTztBQUFBLEVBQ3hCLFdBQVdBLEVBQUUsT0FBTztBQUN0QixDQUFDLEdBQ0t1RixLQUFzQjtBQUFBLEVBQzFCLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFDUCxHQUNNQyxLQUFrQixPQUFPQyxNQUFtQjtBQUNoRCxXQUFTQyxJQUFJLEdBQUdBLElBQUksSUFBSUE7QUFDdEIsSUFBS0MsR0FBa0IsS0FDckIsTUFBTUMsR0FBTSxHQUFHO0FBR25CLE1BQUksQ0FBQ0QsR0FBa0I7QUFDckIsa0JBQVEsSUFBSSxzQkFBc0IsR0FDNUIsSUFBSSxNQUFNLHNCQUFzQjtBQUd4QyxTQURlLElBQUksT0FBT0YsQ0FBYztBQUUxQyxHQUNNSSxLQUF1QixPQUFPQyxHQUFjQyxNQUFvQjtBQUNwRSxRQUFNQyxJQUFTLE1BQU1SLEdBQWdCTSxDQUFZO0FBQ2pELFNBQU87QUFBQSxJQUNMLFVBQVVFLEVBQU8sU0FBU0QsQ0FBZTtBQUFBLElBQ3pDLFFBQUFDO0FBQUEsRUFDRjtBQUNGLEdBQ01DLEtBQTZCLE9BQU9ILEdBQWNJLEdBQWlCQyxHQUFVQyxHQUFpQkMsTUFBZTtBQUNqSCxRQUFNTCxJQUFTLE1BQU1SLEdBQWdCTSxDQUFZLEdBQzNDUSxJQUFpQmYsR0FBb0JZLEVBQVMsWUFBWSxFQUFFLEtBQUssQ0FBQztBQWV4RSxTQWR1QkgsRUFBTyxlQUFlO0FBQUE7QUFBQSxJQUUzQyxTQUFTO0FBQUEsSUFDVCxVQUFVTTtBQUFBLElBQ1YsT0FBTztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1AsUUFBUUo7QUFBQSxNQUNSLFNBQVNFO0FBQUEsSUFDWDtBQUFBO0FBQUEsSUFFQSxrQkFBa0I7QUFBQSxJQUNsQixtQkFBbUI7QUFBQSxJQUNuQixnQkFBZ0IsQ0FBQztBQUFBLEVBQ25CLENBQUM7QUFFSCxHQUNNUixLQUFRLENBQUNXLE1BQ04sSUFBSSxRQUFRLENBQUNDLE1BQVk7QUFDOUIsYUFBV0EsR0FBU0QsQ0FBUztBQUMvQixDQUFDLEdBRUdaLEtBQW9CLE1BQ2pCLFlBQVksUUFFZmMsS0FBZ0MsT0FBT0MsTUFDcEMsSUFBSSxRQUFRLENBQUNGLEdBQVNHLE1BQVc7QUFDdEMsTUFBSTtBQUNGLElBQUFELEVBQWUsR0FBRyxpQkFBaUIsT0FBT0UsTUFBUTtBQUNoRCxjQUFRLElBQUksd0JBQXdCQSxDQUFHLEdBQ3ZDSixFQUFRSSxDQUFHO0FBQUEsSUFDYixDQUFDLEdBQ0RGLEVBQWUsR0FBRyxTQUFTLE9BQU9FLE1BQVE7QUFDeEMsY0FBUSxJQUFJLGdCQUFnQkEsQ0FBRztBQUFBLElBQ2pDLENBQUMsR0FDREYsRUFBZSxHQUFHLFVBQVUsTUFBTTtBQUNoQyxNQUFBQyxFQUFPLElBQUksTUFBTSxxREFBcUQsQ0FBQztBQUFBLElBQ3pFLENBQUM7QUFBQSxFQUNILFNBQVN0RixHQUFHO0FBQ1YsSUFBQXNGLEVBQU90RixDQUFDO0FBQUEsRUFDVjtBQUNGLENBQUMsR0FFR3dGLEtBQW9CLE9BQU9DLEdBQW9CQyxNQUFhO0FBQ2hFLE1BQUksQ0FBQ0QsRUFBbUIsYUFBYSxDQUFDQSxFQUFtQjtBQUN2RCxVQUFNLElBQUksTUFBTSx3Q0FBd0MsS0FBSyxVQUFVQSxDQUFrQixDQUFDLEVBQUU7QUFHOUYsUUFBTUUsSUFBZ0IsT0FEUCxNQUFNeEIsR0FBZ0JzQixFQUFtQixTQUFTLEdBQzlCLGlCQUFpQkEsRUFBbUIsZUFBZTtBQUFBLElBQ3BGLGdCQUFnQkMsRUFBUyxjQUFjO0FBQUEsRUFDekMsQ0FBQztBQUNELE1BQUlDLEVBQWM7QUFDaEIsVUFBQUQsRUFBUyxTQUFTLE1BQU0sR0FDbEIsSUFBSSxNQUFNLG1CQUFtQkMsRUFBYyxNQUFNLFdBQVcsU0FBUyxFQUFFO0FBRTdFLFNBQUFELEVBQVMsU0FBUyxTQUFTLEdBRXRCQztBQUNULEdBQ01DLEtBQTRCLE9BQU9ILE1BQXVCO0FBaGVoRSxNQUFBSSxHQUFBQyxHQUFBQyxHQUFBQztBQWtlRSxRQUFNTCxJQUFnQixPQURQLE1BQU14QixHQUFnQnNCLEVBQW1CLFNBQVMsR0FDOUIsaUJBQWlCQSxFQUFtQixlQUFlO0FBQUEsSUFDcEYsZ0JBQWdCQSxFQUFtQjtBQUFBLEVBQ3JDLENBQUMsR0FDS1EsS0FBZUosSUFBQUYsRUFBYyxnQkFBZCxnQkFBQUUsRUFBMkI7QUFDaEQsTUFBSUksTUFBaUI7QUFDbkIsWUFBUSxJQUFJLHdCQUF3QlIsRUFBbUIsWUFBWSxHQUNuRSxRQUFRLElBQUksK0JBQStCRSxFQUFjLFdBQVc7QUFBQSxNQUMvRCxPQUFJTSxNQUFpQixhQUNwQixJQUFJLE1BQU0scURBQXFELElBRS9ELElBQUk7QUFBQSxJQUNSLEtBQUdILElBQUFILEVBQWMsVUFBZCxnQkFBQUcsRUFBcUIsY0FBV0UsS0FBQUQsSUFBQUosRUFBYyxnQkFBZCxnQkFBQUksRUFBMkIscUJBQTNCLGdCQUFBQyxFQUE2QyxZQUFXLG1EQUFtRDtBQUFBLEVBQ2hKO0FBRUosR0FFTUUsS0FBNkIsQ0FBQ0MsTUFDVCxLQUFLLFVBQVVBLENBQU0sR0FJMUNDLElBQTJCLENBQUNDLEdBQVNDLE1BQ2xCLE1BQU0sS0FBS0QsRUFBUSxpQkFBaUIsYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUM5QyxPQUFPLENBQUNFLEdBQUtDLE1BQVU7QUFDdEQsUUFBTWpILElBQU1pSCxFQUFNLGFBQWEsV0FBVztBQUMxQyxTQUFLakgsSUFDRSxFQUFFLEdBQUdnSCxHQUFLLENBQUNoSCxDQUFHLEdBQUdpSCxFQUFNLE1BQU0sSUFEbkJEO0FBRW5CLEdBQUcsQ0FBQyxDQUFDLEdBR0RFLEtBQW9CLENBQUNDLE1BQWM7QUFDdkMsTUFBSTtBQUNGLFdBQU8xRCxHQUFhLE1BQU0wRCxDQUFTO0FBQUEsRUFDckMsU0FBU2xHLEdBQU87QUFDZCxrQkFBUSxNQUFNLGdDQUFnQ2tHLEdBQVdsRyxDQUFLLEdBQ3hEQTtBQUFBLEVBQ1I7QUFDRixHQUVNbUcsS0FBa0MsT0FBTzFHLE1BQVE7QUFDckQsTUFBSSxPQUFPQSxLQUFRLFlBQVksQ0FBQ0EsRUFBSyxRQUFPO0FBQzVDLE1BQUk7QUFDRixVQUFNMkcsSUFBTyxFQUFFLE1BQU0sT0FBTyxHQUN0QkMsSUFBUyxNQUFNNUcsRUFBSSxLQUFLMkcsQ0FBSTtBQUNsQyxRQUFJQyxNQUFXO0FBQ2IsWUFBTSxJQUFJLE1BQU0sbUNBQW1DLEtBQUssVUFBVUEsQ0FBTSxDQUFDLEVBQUU7QUFFN0UsV0FBTztBQUFBLEVBQ1QsU0FBUzdHLEdBQUc7QUFDVixtQkFBUSxNQUFNLGlDQUFpQ0EsQ0FBQyxHQUN6QztBQUFBLEVBQ1Q7QUFDRixHQUNNOEcsS0FBZ0IsQ0FBQzdHLEdBQUs4RyxNQUNuQixDQUFDLENBQUM5RyxLQUFPOEcsR0FHWkMsSUFBZ0IsQ0FBQ2pHLE1BQVVwQyxFQUFFLFNBQVNvQyxFQUFNLFNBQVMsQ0FBQztBQUM1RHBDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGtCQUFrQixDQUFDO0FBQ3ZELE1BQU1zSSxLQUFtQnRJLEVBQUUsT0FBTztBQUFBLEVBQ2hDLG1CQUFtQkEsRUFBRSxRQUFRLE9BQU87QUFBQSxFQUNwQyxTQUFTQSxFQUFFLE9BQU87QUFBQSxFQUNsQixTQUFTQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFDckQsQ0FBQztBQUNEQSxFQUFFLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQztBQUNyQixNQUFNdUksS0FBZ0J2SSxFQUFFLE9BQU87QUFBQSxFQUM3QixNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLGlCQUFpQnFJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3pDLGFBQWFxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNyQyxVQUFVcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDbEMsVUFBVUEsRUFBRSxPQUFPO0FBQUEsRUFDbkIsb0JBQW9CcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQzlDLENBQUMsR0FDS3dJLEtBQVd4SSxFQUFFLE9BQU87QUFBQSxFQUN4QixzQkFBc0JBLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFBQSxFQUNyQyxtQkFBbUJBLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFBQSxFQUNsQyxVQUFVQSxFQUFFLE9BQU87QUFBQSxFQUNuQixhQUFhcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDckMsVUFBVUEsRUFBRSxPQUFPO0FBQUEsRUFDbkIsa0JBQWtCcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDMUMsd0JBQXdCcUksRUFBY3JJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztBQUFBLEVBQ3RELFVBQVVBLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFDM0IsQ0FBQyxHQUNLeUksS0FBZ0J6SSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQyxHQUM1QzBJLEtBQVExSSxFQUFFLE9BQU87QUFBQSxFQUNyQixNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLFVBQVVxSSxFQUFjSSxFQUFhO0FBQ3ZDLENBQUMsR0FDS0UsS0FBd0IzSSxFQUFFLE9BQU87QUFBQSxFQUNyQyxVQUFVQSxFQUFFLE9BQU87QUFBQSxFQUNuQixnQkFBZ0JxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN4QyxVQUFVcUksRUFBY3JJLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQyxHQUNLNEksS0FBMEI1SSxFQUFFLE9BQU87QUFBQSxFQUN2QyxVQUFVQSxFQUFFLE9BQU87QUFDckIsQ0FBQyxHQUNLNkksS0FBc0I3SSxFQUFFLE9BQU87QUFBQSxFQUNuQyxJQUFJcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDNUIsa0JBQWtCcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDMUMsd0JBQXdCcUksRUFBY3JJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztBQUFBLEVBQ3RELG9CQUFvQkEsRUFBRSxNQUFNNEksRUFBdUI7QUFBQSxFQUNuRCxhQUFhUCxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNyQyxXQUFXcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQ3JDLENBQUMsR0FDSzhJLEtBQW9DOUksRUFBRSxPQUFPO0FBQUEsRUFDakQsYUFBYUEsRUFBRSxPQUFPO0FBQ3hCLENBQUMsR0FDSytJLEtBQXlCL0ksRUFBRSxPQUFPO0FBQUEsRUFDdEMsYUFBYUEsRUFBRSxPQUFPO0FBQUEsRUFDdEIsMENBQTBDQSxFQUFFLE9BQU87QUFBQSxFQUNuRCxVQUFVQSxFQUFFLE9BQU87QUFBQSxFQUNuQix1QkFBdUJBLEVBQUUsTUFBTThJLEVBQWlDO0FBQUEsRUFDaEUsc0JBQXNCOUksRUFBRSxPQUFPO0FBQ2pDLENBQUMsR0FDS2dKLEtBQWtCaEosRUFBRSxPQUFPO0FBQUEsRUFDL0IsUUFBUXVJO0FBQ1YsQ0FBQyxHQUNLVSxLQUFpQmpKLEVBQUUsT0FBTztBQUFBLEVBQzlCLFVBQVVBLEVBQUUsT0FBTztBQUFBLEVBQ25CLFdBQVdBLEVBQUUsTUFBTWdKLEVBQWU7QUFBQSxFQUNsQyxvQkFBb0JYLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQzVDLE9BQU9BLEVBQUUsTUFBTStJLEVBQXNCO0FBQUEsRUFDckMsdUJBQXVCL0ksRUFBRSxPQUFPO0FBQUEsRUFDaEMsaUJBQWlCQSxFQUFFLE9BQU87QUFBQSxFQUMxQixtQkFBbUJBLEVBQUUsT0FBTztBQUFBLEVBQzVCLDZCQUE2QkEsRUFBRSxNQUFNOEksRUFBaUM7QUFDeEUsQ0FBQyxHQUNLSSxLQUFvQ2xKLEVBQUUsT0FBTztBQUFBLEVBQ2pELFNBQVNBLEVBQUUsTUFBTTZJLEVBQW1CO0FBQUEsRUFDcEMsVUFBVTdJLEVBQUUsTUFBTWlKLEVBQWM7QUFDbEMsQ0FBQyxHQUNLRSxLQUEwQm5KLEVBQUUsT0FBTztBQUFBLEVBQ3ZDLFNBQVNrSjtBQUFBLEVBQ1Qsb0JBQW9CYixFQUFjYSxFQUFpQztBQUFBLEVBQ25FLFNBQVNsSixFQUFFLE1BQU11SSxFQUFhO0FBQ2hDLENBQUMsR0FDS2EsS0FBNEJwSixFQUFFLE9BQU87QUFBQSxFQUN6QyxRQUFRQSxFQUFFLFFBQVEsTUFBTTtBQUFBLEVBQ3hCLFFBQVFxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNoQyxPQUFPQSxFQUFFLE9BQU87QUFBQSxFQUNoQixPQUFPcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDL0IsWUFBWUEsRUFBRSxNQUFNd0ksRUFBUTtBQUFBLEVBQzVCLHNCQUFzQnhJLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFBQSxFQUNyQyxtQkFBbUJBLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFBQSxFQUNsQyxPQUFPMEk7QUFBQSxFQUNQLGNBQWNMLEVBQWNjLEVBQXVCO0FBQUE7QUFBQSxFQUVuRCxtQkFBbUJuSixFQUFFLE1BQU0ySSxFQUFxQjtBQUNsRCxDQUFDLEdBQ0tVLEtBQXFCckosRUFBRSxtQkFBbUIsUUFBUTtBQUFBLEVBQ3REQSxFQUFFLE9BQU87QUFBQSxJQUNQLE1BQU1BLEVBQUUsUUFBUSxPQUFPO0FBQUEsSUFDdkIsVUFBVUEsRUFBRSxTQUFTQSxFQUFFLFVBQVUsQ0FBQztBQUFBLEVBQ3BDLENBQUMsRUFBRSxPQUFPb0osR0FBMEIsS0FBSztBQUFBLEVBQ3pDcEosRUFBRSxPQUFPO0FBQUEsSUFDUCxNQUFNQSxFQUFFLEtBQUssQ0FBQyxXQUFXLGNBQWMsQ0FBQztBQUFBLElBQ3hDLFVBQVVBLEVBQUUsT0FBTztBQUFBLEVBQ3JCLENBQUMsRUFBRSxPQUFPb0osR0FBMEIsS0FBSztBQUMzQyxDQUFDLEdBQ0tFLEtBQXVCdEosRUFBRSxPQUFPO0FBQUEsRUFDcEMsUUFBUUEsRUFBRSxRQUFRLFVBQVU7QUFDOUIsQ0FBQyxHQUNLdUosS0FBcUJ2SixFQUFFLE9BQU87QUFBQSxFQUNsQyxRQUFRQSxFQUFFLFFBQVEsU0FBUztBQUM3QixDQUFDO0FBQ0RBLEVBQUUsTUFBTSxDQUFDcUosSUFBb0JDLElBQXNCQyxFQUFrQixDQUFDO0FBQ3RFdkosRUFBRSxPQUFPO0FBQUEsRUFDUCxNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsZUFBZUEsRUFBRSxPQUFPO0FBQUEsRUFDeEIsaUJBQWlCQSxFQUFFLE9BQU87QUFDNUIsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLGNBQWNBLEVBQUUsT0FBTztBQUFBLEVBQ3ZCLE9BQU9BLEVBQUUsT0FBTztBQUNsQixDQUFDO0FBQ0RBLEVBQUUsT0FBTztBQUFBLEVBQ1AsY0FBY0EsRUFBRSxPQUFPO0FBQUEsRUFDdkIsZUFBZUEsRUFBRSxJQUFJO0FBQUE7QUFBQSxFQUVyQixxQkFBcUJBLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUN6QyxvQkFBb0JBLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUN4QyxnQkFBZ0JBLEVBQUUsT0FBTztBQUFBLEVBQ3pCLG1CQUFtQkEsRUFBRSxPQUFPO0FBQUEsRUFDNUIsa0JBQWtCQSxFQUFFLE9BQU87QUFBQSxFQUMzQixZQUFZQSxFQUFFLE1BQU13SSxFQUFRO0FBQUEsRUFDNUIsbUJBQW1CeEksRUFBRSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ2xDLGVBQWVBLEVBQUUsUUFBUTtBQUFBLEVBQ3pCLHlCQUF5QjJJO0FBQUEsRUFDekIsZ0JBQWdCM0ksRUFBRSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQ3BDLDJCQUEyQkEsRUFBRSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQ2hELHFCQUFxQnFJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUMvQyxDQUFDO0FBQ0QsTUFBTXdKLEtBQXdCeEosRUFBRSxPQUFPO0FBQUEsRUFDckMsbUJBQW1CQSxFQUFFLE9BQU87QUFDOUIsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLElBQUlBLEVBQUUsT0FBTztBQUFBLEVBQ2IsWUFBWUEsRUFBRSxPQUFPO0FBQ3ZCLENBQUM7QUFDRCxNQUFNeUosS0FBMEJ6SixFQUFFLE9BQU87QUFBQSxFQUN2QyxNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLEtBQUtBLEVBQUUsTUFBTUEsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN2QixLQUFLQSxFQUFFLE9BQU87QUFBQSxFQUNkLEtBQUtBLEVBQUUsT0FBTztBQUNoQixDQUFDO0FBQ0RBLEVBQUUsTUFBTXlKLEVBQXVCO0FBQy9CLE1BQU1DLEtBQW9CMUosRUFBRSxPQUFPO0FBQUEsRUFDakMsb0JBQW9CQSxFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDeEMsc0JBQXNCQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVM7QUFBQSxFQUM3RCx5QkFBeUJBLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUM3Qyx3QkFBd0JBLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFDOUMsQ0FBQyxHQUNLMkosS0FBVzNKLEVBQUUsT0FBTztBQUFBLEVBQ3hCLFVBQVVBLEVBQUUsT0FBTztBQUFBLEVBQ25CLFVBQVVBLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFDM0IsQ0FBQyxHQUNLNEosS0FBVzVKLEVBQUUsT0FBTztBQUFBLEVBQ3hCLFlBQVlBLEVBQUUsTUFBTTJKLEVBQVE7QUFBQSxFQUM1QixnQkFBZ0IzSixFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDcEMsNkJBQTZCQSxFQUFFLE9BQU8sRUFBRSxJQUFJO0FBQzlDLENBQUMsR0FDSzZKLEtBQTRCN0osRUFBRSxPQUFPO0FBQUEsRUFDekMsNkJBQTZCcUksRUFBY3JJLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLGtCQUFrQkEsRUFBRSxPQUFPO0FBQUEsRUFDM0IseUJBQXlCMkk7QUFBQSxFQUN6QixtQkFBbUIzSSxFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDdkMsc0JBQXNCQSxFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDMUMsb0JBQW9CQSxFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQUEsRUFDekMsMEJBQTBCNEosR0FBUyxTQUFTO0FBQzlDLENBQUMsRUFBRSxPQUFPRixHQUFrQixLQUFLLEVBQUUsT0FBT0csR0FBMEIsS0FBSztBQUN6RSxNQUFNQyxLQUEyQjlKLEVBQUUsT0FBTztBQUFBLEVBQ3hDLHVCQUF1QkEsRUFBRSxNQUFNQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDNUQscUJBQXFCcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQy9DLENBQUM7QUFDREEsRUFBRSxPQUFPO0FBQUEsRUFDUCxRQUFRK0Q7QUFBQSxFQUNSLHVCQUF1QjRFO0FBQ3pCLENBQUM7QUFDRDNJLEVBQUUsT0FBTztBQUFBLEVBQ1AsWUFBWUEsRUFBRSxPQUFPO0FBQUEsRUFDckIscUJBQXFCOEQ7QUFBQSxFQUNyQix5QkFBeUI2RTtBQUFBLEVBQ3pCLGdCQUFnQjNJLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDO0FBQUE7QUFFOUMsQ0FBQztBQUNELE1BQU0rSixLQUFnQy9KLEVBQUUsT0FBTztBQUFBLEVBQzdDLHVCQUF1QkEsRUFBRSxNQUFNQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDNUQsVUFBVUEsRUFBRSxPQUFPO0FBQ3JCLENBQUM7QUFDREEsRUFBRSxPQUFPQSxFQUFFLElBQUksQ0FBQztBQUNoQkEsRUFBRSxPQUFPO0FBQUEsRUFDUCxZQUFZcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDcEMsV0FBV3FJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ25DLE9BQU9xSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUMvQixPQUFPcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDL0IsT0FBT3FJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQy9CLE1BQU1xSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUM5QixPQUFPcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDL0IsU0FBU3FJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ2pDLFVBQVVxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNsQyxPQUFPcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDL0IsZUFBZXFJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLGNBQWNxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN0QywyQkFBMkJxSSxFQUFjckksRUFBRSxRQUFRLENBQUM7QUFDdEQsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLElBQUlBLEVBQUUsT0FBTztBQUFBLEVBQ2IsT0FBT3FJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQy9CLFlBQVlxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNwQyxXQUFXcUksRUFBY3JJLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDbkMsY0FBY3FJLEVBQWNySSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3RDLGVBQWVxSSxFQUFjckksRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN2QyxTQUFTcUksRUFBY3JJLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNEQSxFQUFFLE9BQU87QUFBQSxFQUNQLFNBQVNBLEVBQUUsT0FBTztBQUNwQixDQUFDO0FBQ0QsTUFBTWdLLEtBQWdDaEssRUFBRSxPQUFPO0FBQUEsRUFDN0MsWUFBWUEsRUFBRSxPQUFPO0FBQ3ZCLENBQUM7QUFDREEsRUFBRSxPQUFPO0FBQUEsRUFDUCx5QkFBeUIySTtBQUFBLEVBQ3pCLDZCQUE2QjNJLEVBQUUsT0FBT0EsRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTO0FBQzFELENBQUM7QUFDRCxNQUFNaUssS0FBNkJqSyxFQUFFLE9BQU87QUFBQSxFQUMxQyxzQkFBc0JxSSxFQUFjckksRUFBRSxPQUFPQSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZELENBQUMsR0FFS2tLLEtBQU0sQ0FBQ0MsTUFDSkEsRUFBSSxPQUFPLENBQUNDLEdBQUdDLE1BQU1ELElBQUlDLEdBQUcsQ0FBQztBQUd0QyxTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVE3SSxHQUFJO0FBQzVCLEVBQUlBLE1BQU8sV0FDVEEsSUFBSzZJLEVBQU87QUFHZCxNQUFJSSxJQUFvQixNQUFNO0FBQzlCLEVBQUFBLEtBQXFCQSxFQUFrQkosR0FBUTdJLENBQUU7QUFDbkQ7QUFFQSxJQUFJa0osS0FBYywyQkFBWTtBQUM1QixNQUFJQyxJQUFpQixTQUF1QkMsR0FBR1QsR0FBRztBQUNoRCxXQUFBUSxJQUFpQixPQUFPLGtCQUFrQjtBQUFBLE1BQ3hDLFdBQVcsQ0FBQztBQUFBLElBQ2QsYUFBYSxTQUFTLFNBQVVDLEdBQUdULEdBQUc7QUFDcEMsTUFBQVMsRUFBRSxZQUFZVDtBQUFBLElBQ2hCLEtBQUssU0FBVVMsR0FBR1QsR0FBRztBQUNuQixlQUFTVSxLQUFLVjtBQUNaLFFBQUksT0FBTyxVQUFVLGVBQWUsS0FBS0EsR0FBR1UsQ0FBQyxNQUFHRCxFQUFFQyxDQUFDLElBQUlWLEVBQUVVLENBQUM7QUFBQSxJQUU5RCxHQUVPRixFQUFlQyxHQUFHVCxDQUFDO0FBQUEsRUFDNUI7QUFFQSxTQUFPLFNBQVVTLEdBQUdULEdBQUc7QUFDckIsUUFBSSxPQUFPQSxLQUFNLGNBQWNBLE1BQU0sS0FBTSxPQUFNLElBQUksVUFBVSx5QkFBeUIsT0FBT0EsQ0FBQyxJQUFJLCtCQUErQjtBQUVuSSxJQUFBUSxFQUFlQyxHQUFHVCxDQUFDO0FBRW5CLGFBQVNXLElBQUs7QUFDWixXQUFLLGNBQWNGO0FBQUEsSUFDckI7QUFFQSxJQUFBQSxFQUFFLFlBQVlULE1BQU0sT0FBTyxPQUFPLE9BQU9BLENBQUMsS0FBS1csRUFBRyxZQUFZWCxFQUFFLFdBQVcsSUFBSVcsRUFBRztBQUFBLEVBQ3BGO0FBQ0YsRUFBRSxHQUVFQyxLQUFjLFNBQVVDLEdBQVE7QUFDbEMsRUFBQU4sR0FBWUssR0FBYUMsQ0FBTTtBQUUvQixXQUFTRCxFQUFZRSxHQUFTQyxHQUFTO0FBQ3JDLFFBQUlDLElBQWEsS0FBSyxhQUVsQkMsSUFBUUosRUFBTyxLQUFLLE1BQU1DLEdBQVNDLENBQU8sS0FBSztBQUVuRCxrQkFBTyxlQUFlRSxHQUFPLFFBQVE7QUFBQSxNQUNuQyxPQUFPRCxFQUFXO0FBQUEsTUFDbEIsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLElBQ2hCLENBQUMsR0FDRGYsR0FBU2dCLEdBQU9ELEVBQVcsU0FBUyxHQUNwQ1gsR0FBU1ksQ0FBSyxHQUNQQTtBQUFBLEVBQ1Q7QUFFQSxTQUFPTDtBQUNULEVBQUUsS0FBSztBQUVQLE1BQU1NLFdBQWlCTixHQUFZO0FBQUEsRUFDakMsWUFBWWpLLEdBQVU7QUFDcEIsVUFBTXdLLElBQWtCLEdBQUd4SyxFQUFTLE9BQU87QUFDM0MsVUFBTXdLLENBQWUsR0FDckIsS0FBSyxXQUFXeEs7QUFBQSxFQUNsQjtBQUFBLEVBQ0EsSUFBSSx1QkFBdUI7QUFDekIsV0FBTyxLQUFLLFNBQVM7QUFBQSxFQUN2QjtBQUNGO0FBQ0EsTUFBTXlLLElBQVcsT0FBT0MsR0FBU0MsR0FBTUMsTUFBbUI7QUFDeEQsUUFBTTVLLElBQVcsTUFBTTBLLEVBQVEsS0FBS0MsQ0FBSTtBQUN4QyxNQUFJRSxHQUFtQjdLLENBQVE7QUFDN0IsVUFBTSxJQUFJdUssR0FBU3ZLLENBQVE7QUFFN0IsTUFBSSxDQUFDOEssR0FBd0I5SyxHQUFVNEssQ0FBYyxHQUFHO0FBQ3RELFVBQU0xRCxJQUFTMEQsRUFBZSxVQUFVNUssQ0FBUTtBQUNoRCxVQUFJa0gsRUFBTyxVQUFlLElBQUksTUFBTSxlQUFlLEtBQ25ELFFBQVEsTUFBTSxxREFBcUQwRCxHQUFnQixXQUFXNUssQ0FBUSxHQUNoR2tILEVBQU87QUFBQSxFQUNmO0FBQ0EsU0FBT2xIO0FBQ1QsR0FDTThLLEtBQTBCLENBQUMzRyxHQUFPNEcsTUFDL0JBLEVBQU8sVUFBVTVHLENBQUssRUFBRSxTQUUzQjBHLEtBQXFCLENBQUM3SyxNQUNuQnNILEdBQWlCLFVBQVV0SCxDQUFRLEVBQUUsU0FFeENnTCxLQUFxQixPQUFPTixHQUFTTyxNQUNsQyxNQUFNUixFQUFTQyxHQUFTLEVBQUUsTUFBTSx3QkFBd0IsU0FBU08sRUFBUSxHQUFHOUMsRUFBdUIsR0FFdEcrQyxJQUFhLE9BQU9SLE1BQ2pCLE1BQU1ELEVBQVNDLEdBQVMsRUFBRSxNQUFNLGVBQWUsU0FBUyxDQUFDLEVBQUUsR0FBR3JDLEVBQWtCLEdBRW5GOEMsS0FBbUIsT0FBT1QsR0FBU1UsTUFDaEMsTUFBTVgsRUFBU0MsR0FBUyxFQUFFLE1BQU0seUJBQXlCLFNBQUFVLEVBQVEsR0FBR3RDLEVBQXdCLEdBRS9GdUMsS0FBd0IsT0FBT1gsR0FBU1UsTUFDckMsTUFBTVgsRUFBU0MsR0FBUyxFQUFFLE1BQU0sNkJBQTZCLFNBQUFVLEVBQVEsR0FBR3JDLEVBQTZCLEdBRXhHdUMsS0FBd0IsT0FBT1osR0FBU1UsTUFDckMsTUFBTVgsRUFBU0MsR0FBUyxFQUFFLE1BQU0sNkJBQTZCLFNBQUFVLEVBQVEsR0FBR3RDLEVBQXdCLEdBRW5HeUMsSUFBcUIsT0FBT2IsR0FBU1UsTUFDbEMsTUFBTVgsRUFBU0MsR0FBUyxFQUFFLE1BQU0sd0JBQXdCLFNBQUFVLEVBQVEsR0FBR3BILEVBQTBCLEdBRWhHd0gsS0FBNkIsT0FBT2QsR0FBU1UsTUFDMUMsTUFBTVgsRUFBU0MsR0FBUyxFQUFFLE1BQU0saUNBQWlDLFNBQUFVLEVBQVEsR0FBRzVDLEVBQXFCLEdBRXBHaUQsS0FBNkIsT0FBT2YsR0FBU1UsTUFDMUMsTUFBTVg7QUFBQSxFQUNYQztBQUFBLEVBQ0EsRUFBRSxNQUFNLGtDQUFrQyxTQUFBVSxFQUFRO0FBQUEsRUFDbERySDtBQUNGLEdBRUkySCxLQUFtQixPQUFPaEIsR0FBU2lCLEdBQWFDLE1BQWM7QUFDbEUsUUFBTUMsSUFBa0IsTUFBTWIsR0FBbUJOLEdBQVM7QUFBQSxJQUN4RCxjQUFjaUI7QUFBQSxJQUNkLGdCQUFnQkM7QUFBQSxFQUNsQixDQUFDLEdBQ0tFLElBQWEsSUFBSSxJQUFJRCxFQUFnQixRQUFRLFNBQVMsSUFBSSxDQUFDRSxNQUFRQSxFQUFJLFFBQVEsQ0FBQztBQUN0RixNQUFJRCxFQUFXLFNBQVM7QUFDdEIsVUFBTSxJQUFJLE1BQU0sc0NBQXNDQSxFQUFXLElBQUksRUFBRTtBQUV6RSxRQUFNM0csSUFBVzJHLEVBQVcsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLE9BQy9DRSxJQUFhOUMsR0FBSTJDLEVBQWdCLFFBQVEsU0FBUyxJQUFJLENBQUNFLE1BQVFBLEVBQUkscUJBQXFCLENBQUM7QUFDL0YsU0FBTztBQUFBLElBQ0wsVUFBQTVHO0FBQUEsSUFDQSxZQUFBNkc7QUFBQSxFQUNGO0FBQ0YsR0FDTUMsS0FBMkIsT0FBT3ZCLEdBQVNpQixHQUFhTyxHQUFhTixNQUFjO0FBQ3ZGLE1BQUlNO0FBQ0YsV0FBTyxFQUFFLFlBQVksR0FBRyxVQUFVLE1BQU07QUFDbkM7QUFDTCxJQUFBTixJQUFhQSxLQUFZO0FBQ3pCLFVBQU1DLElBQWtCLE1BQU1ILEdBQWlCaEIsR0FBU2lCLEdBQWFDLENBQVM7QUFDOUUsV0FBTyxFQUFFLFlBQVlDLEVBQWdCLFlBQVksVUFBVUEsRUFBZ0IsU0FBUztBQUFBLEVBQ3RGO0FBQ0YsR0FDTU0sS0FBK0IsT0FBT0MsR0FBbUJoQixNQUFZO0FBQ3pFLE1BQUlnQixFQUFrQixTQUFTO0FBQzdCLFVBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQU81QyxTQUxrQixNQUFNLFFBQVE7QUFBQSxJQUM5QixNQUFNLEtBQUtBLEVBQWtCLE9BQU8sQ0FBQyxFQUFFO0FBQUEsTUFDckMsQ0FBQzFCLE1BQVlELEVBQVNDLEdBQVMsRUFBRSxNQUFNLGlCQUFpQixTQUFBVSxFQUFRLEdBQUczSCxFQUFvQjtBQUFBLElBQ3pGO0FBQUEsRUFDRjtBQUVGLEdBQ000SSxLQUF1QixPQUFPM0IsR0FBU1UsTUFBWTtBQUN2RCxNQUFJO0FBQ0YsV0FBTyxNQUFNWCxFQUFTQyxHQUFTLEVBQUUsTUFBTSwwQkFBMEIsU0FBQVUsRUFBUSxHQUFHOUgsRUFBdUI7QUFBQSxFQUNyRyxTQUFTekMsR0FBTztBQUNkLGtCQUFRLE1BQU0sbURBQW1EQSxHQUFPLEtBQUssVUFBVUEsQ0FBSyxDQUFDLEdBQ3ZGQTtBQUFBLEVBQ1I7QUFDRixHQUNNeUwsS0FBZ0IsT0FBTzVCLEdBQVNVLE1BQzdCLE1BQU1YLEVBQVNDLEdBQVMsRUFBRSxNQUFNLHdCQUF3QixTQUFBVSxFQUFRLEdBQUc1QyxFQUFxQixHQUUzRitELEtBQWtCLE9BQU83QixHQUFTVSxNQUMvQixNQUFNWCxFQUFTQyxHQUFTLEVBQUUsTUFBTSxZQUFZLFNBQUFVLEVBQVEsR0FBRzlILEVBQXVCLEdBRWpGa0osS0FBdUIsS0FDdkJDLEtBQXNCLE9BQU9DLEdBQVFDLE1BQWdCO0FBQ3pELFVBQVEsSUFBSUEsQ0FBVztBQVF2QixRQUFNQyxJQUFnQixNQVBIMU4sR0FBZTtBQUFBLElBQ2hDLFFBQUF3TjtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1AsU0FBU0Y7QUFBQSxJQUNULGFBQWE7QUFBQTtBQUFBLEVBRWYsQ0FBQyxFQUNzQyxTQUNqQ3RGLElBQVMsTUFBTXVELEVBQVNtQyxHQUFlLEVBQUUsTUFBTSxrQkFBa0IsR0FBR2hKLEVBQXFCO0FBQy9GLGlCQUFRLElBQUksNkRBQTZEc0QsQ0FBTSxHQUN4RUE7QUFDVCxHQUNNMkYsS0FBcUIsT0FBT25DLEdBQVNVLE1BQ2xDLE1BQU1YLEVBQVNDLEdBQVMsRUFBRSxNQUFNLHdCQUF3QixTQUFBVSxFQUFRLEdBQUduQyxFQUEwQixHQUVoRzZELEtBQWlDLE9BQU9wQyxHQUFTcUMsTUFBaUI7QUFDdEUsTUFBSTtBQU9GLFlBTGlCLE1BQU10QztBQUFBLE1BQ3JCQztBQUFBLE1BQ0EsRUFBRSxNQUFNLCtCQUErQixTQUh6QixFQUFFLFNBQVNxQyxFQUFhLEVBR1M7QUFBQSxNQUMvQy9EO0FBQUEsSUFDRixHQUNnQjtBQUFBLEVBQ2xCLFNBQVNuSSxHQUFPO0FBQ2QsbUJBQVEsTUFBTSx1REFBdURULEVBQWdCUyxDQUFLLENBQUMsR0FDcEY7QUFBQSxFQUNUO0FBQ0Y7QUFFQSxTQUFTbU0sR0FBWTdJLEdBQU87QUFDMUIsUUFBTSxJQUFJLE1BQU0sbUJBQW1CQSxDQUFLLEVBQUU7QUFDNUM7QUFFQSxNQUFNOEksS0FBbUMsQ0FBQ0MsTUFDakMsT0FBT0MsTUFBVztBQXg5QjNCLE1BQUFqSCxHQUFBQztBQXk5QkksTUFBSTtBQUNGLEtBQUFBLEtBQUFELElBQUFpSCxFQUFPLGNBQWMsS0FBSSxzQkFBekIsUUFBQWhILEVBQUEsS0FBQUQ7QUFDQSxVQUFNa0gsSUFBYSxNQUFNRixFQUFjQyxDQUFNO0FBQzdDLFFBQUlDLEVBQVcsU0FBUztBQUN0QixNQUFBRCxFQUFPLGNBQWMsSUFBSSw0QkFBNEJDLEVBQVcsT0FBTyxpQkFBaUI7QUFBQSxhQUMvRUEsRUFBVyxTQUFTO0FBQzdCLE1BQUFELEVBQU8sY0FBYyxJQUFJO0FBQUEsUUFDdkJDLEVBQVcsT0FBTztBQUFBLFFBQ2xCQSxFQUFXLE9BQU87QUFBQSxRQUNsQkEsRUFBVyxPQUFPO0FBQUEsTUFDcEI7QUFBQTtBQUVBLFlBQU0sSUFBSSxNQUFNLG1CQUFtQkEsQ0FBVSxFQUFFO0FBQUEsRUFFbkQsU0FBU3ZNLEdBQU87QUFDZCxVQUFNa00sSUFBZTNNLEVBQWdCUyxDQUFLLEdBQ3BDd00sSUFBWSxNQUFNUCxHQUErQkssRUFBTyxRQUFRLGtCQUFrQkosQ0FBWTtBQUNwRyxJQUFBSSxFQUFPLGNBQWMsSUFBSSxnQkFBZ0JKLEdBQWNNLENBQVM7QUFBQSxFQUNsRTtBQUNGLEdBRUlDLEtBQXlCLENBQUNDLE1BQ3ZCLE9BQU9KLE1BQVc7QUFDdkIsTUFBSTtBQUNGLFdBQU8sTUFBTUksRUFBS0osQ0FBTTtBQUFBLEVBQzFCLFNBQVN0TSxHQUFPO0FBQ2QsVUFBTSxFQUFFLE9BQUEyTSxFQUFNLElBQUlDLEVBQXFCLG9CQUFvQixHQUNyRFYsSUFBZTNNLEVBQWdCUyxDQUFLLEdBQ3BDd00sSUFBWSxNQUFNUCxHQUErQkssRUFBTyxRQUFRLGtCQUFrQkosQ0FBWTtBQUNwRyxXQUFBUyxFQUFNSCxHQUFXTixHQUFjbE0sQ0FBSyxHQUM3QixFQUFFLGFBQWEsSUFBTyxRQUFRa00sR0FBYyxXQUFBTSxFQUFVO0FBQUEsRUFDL0Q7QUFDRixHQUVJSSxJQUF1QixDQUFDQyxNQUFXO0FBQ3ZDLFFBQU1DLElBQU0sSUFBSS9NLE1BQVM7QUFDdkIsV0FBTyxRQUFXLElBQUksR0FBR3pCLEdBQU0sTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHQSxHQUFNLEtBQUssS0FBSyxHQUFHdU8sQ0FBTSxFQUFFLENBQUMsS0FBSyxHQUFHOU0sQ0FBSTtBQUFBLEVBQzlGLEdBQ01YLElBQU0sSUFBSVcsTUFBUztBQUN2QixXQUFPLFFBQVcsS0FBSyxHQUFHekIsR0FBTSxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUdBLEdBQU0sS0FBSyxLQUFLLEdBQUd1TyxDQUFNLEVBQUUsQ0FBQyxLQUFLLEdBQUc5TSxDQUFJO0FBQUEsRUFDN0Y7QUFDQSxTQUFPO0FBQUEsSUFDTCxLQUFBK007QUFBQSxJQUNBLEtBQUExTjtBQUFBLElBQ0EsT0FBTzBOO0FBQUEsSUFDUCxPQUFPMU47QUFBQSxFQUNUO0FBQ0YsR0FFTSxFQUFFLE9BQU8yTixJQUFTLE9BQU9DLEdBQVEsSUFBSUosRUFBcUIsUUFBUSxHQUNsRUssS0FBa0MsQ0FBQzlOLE1BQWE7QUFDcEQsTUFBSUEsRUFBUyxnQkFBZ0IsV0FBVztBQUN0QyxVQUFNLElBQUksTUFBTSw0Q0FBNENBLEVBQVMsZ0JBQWdCLE1BQU0sRUFBRTtBQUUvRixTQUFPLEVBQUUsbUJBQW1CQSxFQUFTLGdCQUFnQixDQUFDLEVBQUUsR0FBRztBQUM3RCxHQUNNK04sSUFBc0IsQ0FBQ0MsR0FBU0MsTUFBYTtBQUNqRCxRQUFNQyxJQUFNRixFQUFRLEtBQUssQ0FBQ0csTUFBU0YsRUFBUyxVQUFVRSxDQUFJLEVBQUUsT0FBTztBQUNuRSxNQUFJLENBQUNEO0FBQ0gsVUFBQUwsR0FBUSx3Q0FBd0NHLENBQU8sR0FDakQsSUFBSSxNQUFNLHlCQUF5QjtBQUUzQyxTQUFPQyxFQUFTLE1BQU1DLENBQUc7QUFDM0IsR0FDTUUsS0FBK0IsQ0FBQ0MsT0FDN0I7QUFBQSxFQUNMLG9CQUFvQkEsRUFBTztBQUFBLEVBQzNCLHNCQUFzQjtBQUFBLElBQ3BCLFVBQVVBLEVBQU87QUFBQSxJQUNqQixTQUFTQSxFQUFPO0FBQUEsRUFDbEI7QUFBQSxFQUNBLHlCQUF5QkEsRUFBTztBQUFBLEVBQ2hDLHdCQUF3QkEsRUFBTztBQUNqQyxJQUVJQyxLQUErQixPQUFPMU4sTUFBUztBQUNuRCxRQUFNLEVBQUUsT0FBTzJOLEVBQU8sSUFBSWQsRUFBcUI3TSxFQUFLLFNBQVMsR0FDdkQ0TixJQUFVLE1BQU10RCxFQUFXdEssRUFBSyxnQkFBZ0IsR0FDaEQ2TixJQUF1QlgsR0FBZ0NsTixFQUFLLGFBQWE7QUFDL0UsTUFBSTROLEVBQVEsU0FBUztBQUNuQixXQUFBRCxFQUFPLDhCQUE4QixHQUs5QixFQUFFLE1BQU0sU0FBUyxRQUpKLE1BQU0vQyxHQUEyQjVLLEVBQUssa0JBQWtCO0FBQUEsTUFDMUUsY0FBYzROLEVBQVE7QUFBQSxNQUN0QixPQUFPQyxFQUFxQjtBQUFBLElBQzlCLENBQUMsRUFDMkM7QUFDdkM7QUFDTCxJQUFBRixFQUFPLG1CQUFtQjtBQUMxQixVQUFNRyxJQUFrQjtBQUFBLE1BQ3RCLGNBQWNGLEVBQVE7QUFBQSxNQUN0QixlQUFlO0FBQUEsUUFDYixlQUFlNU4sRUFBSyxzQkFBc0I7QUFBQSxNQUM1QztBQUFBLE1BQ0EsZ0JBQWdCQSxFQUFLLG1CQUFtQlMsRUFBVSxLQUFLO0FBQUEsTUFDdkQsbUJBQW1CVCxFQUFLLG1CQUFtQlMsRUFBVSxRQUFRO0FBQUEsTUFDN0Qsa0JBQWtCVCxFQUFLLG1CQUFtQlMsRUFBVSxPQUFPO0FBQUEsTUFDM0QsZ0JBQWdCVCxFQUFLLG1CQUFtQlMsRUFBVSxjQUFjO0FBQUEsTUFDaEUsWUFBWW1OLEVBQVE7QUFBQSxNQUNwQixtQkFBbUJBLEVBQVE7QUFBQSxNQUMzQixlQUFlO0FBQUEsTUFDZix5QkFBeUI1TixFQUFLO0FBQUEsTUFDOUIscUJBQXFCNk4sRUFBcUI7QUFBQSxJQUM1QztBQUVBLFdBQU8sRUFBRSxNQUFNLFlBQVksUUFEWixNQUFNbEMsR0FBZ0IzTCxFQUFLLGtCQUFrQjhOLENBQWUsRUFDekM7QUFBQSxFQUNwQztBQUNGLEdBRU0sRUFBRSxPQUFPQyxJQUFTLE9BQU9DLEdBQVEsSUFBSW5CLEVBQXFCLFdBQVcsR0FDckVvQixLQUFnQyxDQUFDQyxHQUFrQkMsR0FBbUJDLE1BQXVCO0FBQ2pHLE1BQUlBLEdBQW9CO0FBQ3RCLElBQUFMLEdBQVEsa0NBQWtDLEtBQUssVUFBVUssQ0FBa0IsQ0FBQyxFQUFFO0FBQzlFLGVBQVcsQ0FBQ3BQLEdBQUt1RSxDQUFLLEtBQUssT0FBTyxRQUFRNkssQ0FBa0I7QUFDMUQsTUFBS0YsRUFBaUJsUCxDQUFHLE1BQ3ZCa1AsRUFBaUJsUCxDQUFHLElBQUl1RTtBQUFBLEVBRzlCO0FBQ0EsUUFBTWlILElBQVV0SSxHQUFtQixVQUFVZ00sQ0FBZ0I7QUFDN0QsTUFBSSxDQUFDMUQsRUFBUSxTQUFTO0FBQ3BCLFVBQU02RCxJQUFZN0QsRUFBUSxNQUFNLE9BQU8sR0FDakM4RCxJQUFTakwsR0FBc0JnTCxDQUFTO0FBQzlDLGVBQVcsQ0FBQzdLLEdBQVdqRSxDQUFNLEtBQUssT0FBTyxRQUFRK08sQ0FBTTtBQUNyRCxNQUFBSCxFQUFrQjNLLEdBQVdqRSxHQUFRaUUsQ0FBUztBQUVoRCxVQUFBd0ssR0FBUSxnREFBZ0RNLENBQU0sR0FDeEQsSUFBSSxNQUFNLDhDQUE4QztBQUFBLEVBQ2hFO0FBQ0EsU0FBTzlELEVBQVE7QUFDakIsR0FDTStELEtBQThCLENBQUNDLEdBQWlCTCxNQUFzQjtBQUMxRSxhQUFXTSxLQUFrQkQ7QUFDM0IsUUFBSUMsRUFBZSxZQUFZO0FBQzdCLFlBQUFBLEVBQWUsT0FBTyxRQUFRLENBQUN4TyxNQUFVO0FBQ3ZDLGNBQU15TyxJQUFTM04sR0FBYyxVQUFVZCxFQUFNLFdBQVc7QUFDeEQsWUFBSSxDQUFDeU8sRUFBTztBQUNWLFVBQUFWLEdBQVEsNENBQTRDL04sRUFBTSxXQUFXLG1CQUFtQkEsQ0FBSztBQUFBLGFBQ3hGO0FBQ0wsZ0JBQU11RCxJQUFZa0wsRUFBTztBQUN6QixVQUFBUCxFQUFrQjNLLEdBQVd2RCxFQUFNLE1BQU07QUFBQSxRQUMzQztBQUFBLE1BQ0YsQ0FBQyxHQUNEOE4sR0FBUSxpREFBaUQsS0FBSyxVQUFVVSxFQUFlLE1BQU0sQ0FBQyxFQUFFLEdBQzFGLElBQUksTUFBTSw2Q0FBNkM7QUFHbkUsR0FFTUUsS0FBeUIsdUJBQ3pCLEVBQUUsT0FBT0MsR0FBUyxPQUFPQyxHQUFRLElBQUloQyxFQUFxQixhQUFhLEdBQ3ZFaUMsS0FBZ0IxUSxFQUFFLE9BQU87QUFBQSxFQUM3QixVQUFVQSxFQUFFLFFBQVEsYUFBYTtBQUFBLEVBQ2pDLGdCQUFnQkEsRUFBRSxRQUFRLFFBQVE7QUFBQSxFQUNsQyxVQUFVQSxFQUFFLE9BQU87QUFBQSxJQUNqQixXQUFXQSxFQUFFLE9BQU87QUFBQSxFQUN0QixDQUFDO0FBQ0gsQ0FBQyxHQUNLMlEsS0FBZ0MzUSxFQUFFO0FBQUEsRUFDdENBLEVBQUUsT0FBTztBQUFBLElBQ1Asb0JBQW9CQSxFQUFFLE9BQU87QUFBQSxFQUMvQixDQUFDO0FBQ0gsRUFBRSxPQUFPLENBQUMsR0FDSjRRLEtBQXFCdEM7QUFBQSxFQUN6QixPQUFPLEVBQUUsU0FBQXVDLEdBQVMsZUFBQUMsRUFBYyxNQUFNO0FBQ3BDLFVBQU1DLElBQWFGLEVBQVEsaUJBQWlCO0FBQzVDLElBQUFMLEVBQVEsbURBQW1EO0FBQzNELFVBQU1RLElBQWdCakMsRUFBb0I4QixFQUFRLHdCQUF3QkgsRUFBYTtBQUN2RixJQUFBRixFQUFRLDhCQUE4QjtBQUN0QyxVQUFNUyxJQUFtQkosRUFBUSxrQkFDM0JyQixJQUFVLE1BQU10RCxFQUFXK0UsQ0FBZ0IsR0FDM0MvRCxJQUFjc0MsRUFBUSxTQUFTO0FBQ3JDLElBQUFnQixFQUFRLDZCQUE2QjtBQUNyQyxVQUFNVSxJQUFpQixNQUFNakUsR0FBeUJnRSxHQUFrQnpCLEVBQVEsT0FBT3RDLEdBQWEsTUFBTSxHQUNwRyxFQUFFLFVBQUFpRSxHQUFVLFFBQUFuTCxFQUFPLElBQUksTUFBTUgsR0FBcUJtTCxFQUFjLFNBQVMsV0FBVztBQUFBLE1BQ3hGLE1BQU07QUFBQSxNQUNOLFVBQVVFLEVBQWU7QUFBQSxNQUN6QixvQkFBb0I7QUFBQSxNQUNwQix1QkFBdUI7QUFBQSxJQUN6QixDQUFDO0FBQ0QsSUFBQVYsRUFBUSw4QkFBOEI7QUFDdEMsVUFBTVksSUFBeUJELEVBQVMsT0FBTyxtQkFBbUI7QUFBQSxNQUNoRSxjQUFjSixLQUFBLGdCQUFBQSxFQUFZO0FBQUEsTUFDMUIsZ0JBQWdCO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsTUFDVjtBQUFBLElBQ0YsQ0FBQyxHQUNLTSxJQUFjLE1BQU07QUFDeEIsTUFBQUQsRUFBdUIsTUFBTSxJQUFJYixFQUFzQixFQUFFO0FBQUEsSUFDM0QsR0FDTWUsSUFBaUIsTUFBTTtBQUMzQixNQUFBRixFQUF1QixRQUFRO0FBQUEsSUFDakM7QUFDQSxXQUFJTCxLQUFBLFFBQUFBLEVBQVksbUJBQ2RQLEVBQVEsNERBQTRELEtBRXBFQSxFQUFRLGdDQUFnQyxHQUN4Q2EsRUFBWSxJQUVkRCxFQUF1QixHQUFHLFNBQVMsT0FBT0csTUFBVTtBQUVsRCxVQURBZixFQUFRLDRCQUE0QixHQUNoQ08sS0FBQSxRQUFBQSxFQUFZLHNCQUVWLENBRGlCLE1BQU1BLEVBQVcsbUJBQW1CLEdBQ3RDO0FBQ2pCLFFBQUFQLEVBQVEsa0RBQWtEO0FBQzFEO0FBQUEsTUFDRjtBQUVGLE1BQUFlLEVBQU0sUUFBUTtBQUFBLElBQ2hCLENBQUMsR0FDREgsRUFBdUIsR0FBRyxXQUFXLE9BQU9HLE1BQVU7QUFDcEQsTUFBQWYsRUFBUSxnQ0FBZ0NlLENBQUs7QUFDN0MsWUFBTXJKLElBQVMsTUFBTWxDLEVBQU8sb0JBQW9CO0FBQUEsUUFDOUMsVUFBQW1MO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDTixpQkFBaUJJLEVBQU07QUFBQSxRQUN6QjtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUlySixFQUFPLFNBQ1R1SSxHQUFRLFNBQVN2SSxFQUFPLEtBQUssR0FDN0I0SSxFQUFjLElBQUksZ0JBQWdCNUksRUFBTyxNQUFNLFdBQVcsMkJBQTJCLE1BRXJGc0ksRUFBUSxpQkFBaUJ0SSxFQUFPLGFBQWEsR0FDN0NzSixFQUFTLFdBQVcsSUFBSTtBQUFBLFFBQ3RCLFNBQUFYO0FBQUEsUUFDQSx1QkFBdUJHO0FBQUEsUUFDdkIsa0JBQWtCdkosRUFBeUJvSixFQUFRLE9BQU87QUFBQSxRQUMxRCxlQUFBQztBQUFBLFFBQ0EsY0FBYyxFQUFFLFVBQVU1SSxFQUFPLGNBQWM7QUFBQSxRQUMvQyxZQUFZLEVBQUUsYUFBYSxHQUFLO0FBQUEsTUFDbEMsQ0FBQztBQUFBLElBRUwsQ0FBQyxHQUNNO0FBQUEsTUFDTCxhQUFhO0FBQUEsTUFDYixZQUFZO0FBQUEsUUFDVixhQUFBbUo7QUFBQSxRQUNBLGdCQUFBQztBQUFBLFFBQ0Esc0JBQXNCLFlBQVksTUFBTUcsR0FBb0JsQixFQUFzQjtBQUFBLE1BQ3BGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixHQUNNbUIsS0FBb0J6RDtBQUFBLEVBQ3hCLE9BQU87QUFBQSxJQUNMLFNBQUE0QztBQUFBLElBQ0EsdUJBQUFjO0FBQUEsSUFDQSxrQkFBQTdCO0FBQUEsSUFDQSxlQUFBZ0I7QUFBQSxJQUNBLGNBQUFjO0FBQUEsRUFDRixNQUFNO0FBQ0osSUFBQXBCLEVBQVEsNkJBQTZCO0FBQ3JDLFVBQU1TLElBQW1CSixFQUFRO0FBQ2pDLElBQUFMLEVBQVEsdUNBQXVDO0FBQy9DLFVBQU1xQixJQUFlQyxHQUFnQ2hDLEdBQWtCOEIsRUFBYSxRQUFRLEdBQ3RGRyxJQUFtQmxDLEdBQThCZ0MsR0FBY2YsRUFBYyxJQUFJLGlCQUFpQjtBQUN4RyxJQUFBTixFQUFRLDBCQUEwQjtBQUNsQyxVQUFNd0IsSUFBMkIsTUFBTTdGLEdBQWlCOEUsR0FBa0I7QUFBQSxNQUN4RSxrQkFBa0JVLEVBQXNCO0FBQUEsTUFDeEMseUJBQXlCQTtBQUFBLE1BQ3pCLHNCQUFzQkMsRUFBYSxTQUFTO0FBQUEsTUFDNUMsb0JBQW9CRyxFQUFpQjFQLEVBQVUsS0FBSztBQUFBLE1BQ3BELHlCQUF5QjBQLEVBQWlCMVAsRUFBVSxVQUFVO0FBQUEsTUFDOUQsd0JBQXdCMFAsRUFBaUIxUCxFQUFVLFNBQVM7QUFBQSxNQUM1RCxzQkFBc0I7QUFBQSxRQUNwQixVQUFVMFAsRUFBaUIxUCxFQUFVLFFBQVE7QUFBQSxRQUM3QyxTQUFTMFAsRUFBaUIxUCxFQUFVLE9BQU87QUFBQSxNQUM3QztBQUFBLElBQ0YsQ0FBQztBQUNELElBQUFtTyxFQUFRLCtCQUErQndCLENBQXdCO0FBRS9ELFVBQU1DLElBRHFCdEIsR0FBOEIsTUFBTXFCLEVBQXlCLHFCQUFxQixFQUNsRSxDQUFDLEVBQUUsb0JBQ3hDeEMsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCO0FBQ2pELFFBQUl6QixFQUFRLFNBQVMsU0FBUztBQUM1QixNQUFBZ0IsRUFBUSx3QkFBd0I7QUFDaEMsWUFBTXhKLElBQWdCLE1BQU11RixFQUFtQjBFLEdBQWtCO0FBQUEsUUFDL0QsY0FBY3pCLEVBQVE7QUFBQSxRQUN0QixtQkFBbUJ5QztBQUFBLE1BQ3JCLENBQUM7QUFFRCxhQUFPLEVBQUUsTUFBTSxTQUFTLFFBREtuRCxHQUFnQzlILENBQWEsRUFDckI7QUFBQSxJQUN2RCxPQUFPO0FBQ0wsTUFBQXdKLEVBQVEsbUJBQW1CO0FBQzNCLFlBQU1kLElBQWtCO0FBQUEsUUFDdEIsY0FBY0YsRUFBUTtBQUFBLFFBQ3RCLGVBQWU7QUFBQSxVQUNiLGVBQWVtQyxFQUFzQjtBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxnQkFBZ0JJLEVBQWlCMVAsRUFBVSxLQUFLO0FBQUEsUUFDaEQsbUJBQW1CMFAsRUFBaUIxUCxFQUFVLFFBQVE7QUFBQSxRQUN0RCxrQkFBa0IwUCxFQUFpQjFQLEVBQVUsT0FBTztBQUFBLFFBQ3BELGdCQUFnQjBQLEVBQWlCMVAsRUFBVSxjQUFjO0FBQUEsUUFDekQsWUFBWW1OLEVBQVE7QUFBQSxRQUNwQixtQkFBbUJBLEVBQVE7QUFBQSxRQUMzQixlQUFlO0FBQUEsUUFDZix5QkFBeUJtQztBQUFBLE1BQzNCO0FBRUEsYUFBTyxFQUFFLE1BQU0sWUFBWSxRQURaLE1BQU1wRSxHQUFnQjBELEdBQWtCdkIsQ0FBZSxFQUNwQztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUNGLEdBQ01vQyxLQUFrQyxDQUFDSSxHQUFZbkwsTUFBYTtBQXp3Q2xFLE1BQUFHLEdBQUFDLEdBQUFDLEdBQUFDLEdBQUE4SztBQTB3Q0UsUUFBTUMsSUFBUyxFQUFFLEdBQUdGLEVBQVcsR0FDekIsQ0FBQ0csR0FBZ0IsR0FBR0MsQ0FBa0IsTUFBSW5MLEtBQUFELElBQUFILEVBQVMsZ0JBQWdCLFNBQXpCLGdCQUFBRyxFQUErQixXQUEvQixnQkFBQUMsRUFBdUMsTUFBTSxXQUFVLENBQUMsR0FDbEdvTCxJQUFnQkQsRUFBbUIsS0FBSyxHQUFHLEtBQUs7QUFDdEQsU0FBQUYsRUFBTy9QLEVBQVUsVUFBVSxJQUFJK1AsRUFBTy9QLEVBQVUsVUFBVSxLQUFLZ1EsS0FBa0IsZUFDakZELEVBQU8vUCxFQUFVLFNBQVMsSUFBSStQLEVBQU8vUCxFQUFVLFNBQVMsS0FBS2tRLEtBQWlCLGVBQzlFSCxFQUFPL1AsRUFBVSxLQUFLLElBQUkrUCxFQUFPL1AsRUFBVSxLQUFLO0FBQUEsSUFDaEQrRSxJQUFBTCxFQUFTLFNBQVQsZ0JBQUFLLEVBQWtCLFVBQVNMLEVBQVMsZ0JBQWdCLFNBQVMsOEJBQzdEcUwsRUFBTy9QLEVBQVUsUUFBUSxJQUFJK1AsRUFBTy9QLEVBQVUsUUFBUSxPQUFLZ0YsSUFBQU4sRUFBUyxnQkFBZ0IsWUFBekIsZ0JBQUFNLEVBQWtDLGdCQUFlLFNBQzVHK0ssRUFBTy9QLEVBQVUsT0FBTyxJQUFJK1AsRUFBTy9QLEVBQVUsT0FBTyxPQUFLOFAsSUFBQXBMLEVBQVMsZ0JBQWdCLFlBQXpCLGdCQUFBb0wsRUFBa0MsWUFBVyxNQUN0RzNCLEVBQVEsc0JBQXNCNEIsQ0FBTSxHQUM3QkE7QUFDVCxHQUNNWCxLQUFzQixDQUFDZSxNQUFPLElBQUksUUFBUSxDQUFDaE0sTUFBWTtBQUMzRCxRQUFNaU0sSUFBYSxNQUFNO0FBQ3ZCLFVBQU1DLElBQVUsU0FBUyxlQUFlRixDQUFFO0FBQzFDLElBQUlFLElBQ0ZsTSxFQUFRa00sQ0FBTyxJQUVmLHNCQUFzQkQsQ0FBVTtBQUFBLEVBRXBDO0FBQ0EsRUFBQUEsRUFBVztBQUNiLENBQUMsR0FFS2pMLEtBQVMsc29CQUVUbUwsS0FBcUIsQ0FBQ0MsTUFBUTtBQUNsQyxRQUFNQyxJQUFXLFNBQVMsY0FBYyxVQUFVO0FBQ2xELEVBQUFBLEVBQVMsWUFBWTtBQUFBO0FBQUEsUUFFZnJMLEVBQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUtTb0wsQ0FBRztBQUFBO0FBQUE7QUFBQTtBQUl4QixRQUFNRSxJQUFPLFNBQVMsY0FBYyxLQUFLLEdBQ25DQyxJQUFhRCxFQUFLLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNyRCxFQUFBQyxFQUFXLFlBQVlGLEVBQVMsUUFBUSxVQUFVLEVBQUksQ0FBQztBQUN2RCxRQUFNbkYsSUFBU3FGLEVBQVcsY0FBYyxrQkFBa0IsR0FDcERDLElBQWVELEVBQVcsY0FBYyxnQkFBZ0I7QUFDOUQsa0JBQVMsS0FBSyxZQUFZRCxDQUFJLEdBQ3ZCLEVBQUUsTUFBQUEsR0FBTSxRQUFBcEYsR0FBUSxjQUFBc0YsRUFBYTtBQUN0QztBQUVBLFNBQVNDLEdBQWF2RixHQUFRd0YsR0FBV3ZGLEdBQWE7QUFDcEQsUUFBTXdGLElBQWdCLFlBQVk7QUFDaEMsUUFBSTtBQUNGLFlBQU1DLElBQVMsTUFBTTNGLEdBQW9CQyxHQUFRQyxDQUFXO0FBQzVELE1BQUl5RixNQUNGLGNBQWNDLENBQWUsR0FDN0JILEVBQVVFLENBQU07QUFBQSxJQUVwQixRQUFnQjtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUNBLEVBQUFELEVBQWM7QUFDZCxRQUFNRSxJQUFrQixZQUFZRixHQUFlM0YsRUFBb0I7QUFDdkUsU0FBTzZGO0FBQ1Q7QUFDQSxTQUFTQyxHQUFhO0FBQUEsRUFDcEIsVUFBQW5DO0FBQUEsRUFDQSxpQkFBQWtDO0FBQUEsRUFDQSxTQUFBN007QUFDRixHQUFHO0FBQ0QsUUFBTStNLElBQWUsTUFBTTtBQUN6QixrQkFBY0YsQ0FBZSxHQUM3QmxDLEVBQVMsS0FBSyxPQUFPLEdBQ3JCM0ssRUFBUSxFQUFFLFFBQVE5QixFQUFjLFVBQVUsQ0FBQztBQUFBLEVBQzdDO0FBQ0EsU0FBQXlNLEVBQVMsYUFBYSxpQkFBaUIsU0FBU29DLENBQVksR0FDOUIsTUFBTTtBQUNsQyxJQUFBcEMsRUFBUyxhQUFhLG9CQUFvQixTQUFTb0MsQ0FBWTtBQUFBLEVBQ2pFO0FBRUY7QUFDQSxlQUFlQyxHQUFxQnJGLEdBQVE7QUFDMUMsUUFBTSxFQUFFLEtBQUF5RSxHQUFLLFNBQUFhLEVBQVEsSUFBSXRGLEdBQ25CZ0QsSUFBV3dCLEdBQW1CQyxDQUFHO0FBQ3ZDLFNBQU8sSUFBSSxRQUFRLENBQUNwTSxNQUFZO0FBQzlCLFVBQU0wTSxJQUFZLENBQUNFLE1BQVc7QUFDNUIsaUJBQVcsTUFBTTtBQUNmLFFBQUFqQyxFQUFTLEtBQUssT0FBTztBQUFBLE1BQ3ZCLEdBQUcsR0FBRyxHQUNOM0ssRUFBUTRNLENBQU0sR0FDZE0sS0FBQSxRQUFBQTtBQUFBLElBQ0YsR0FDTUwsSUFBa0JKLEdBQWE5QixFQUFTLFFBQVErQixHQUFXLElBQUksSUFBSU8sQ0FBTyxFQUFFLE1BQU0sR0FDbEZDLElBQXdCSixHQUFhO0FBQUEsTUFDekMsVUFBQW5DO0FBQUEsTUFDQSxpQkFBQWtDO0FBQUEsTUFDQSxTQUFBN007QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQUNBLE1BQU1tTixLQUE2QixPQUFPeEYsTUFBVztBQUNuRCxRQUFNakcsSUFBUyxNQUFNc0wsR0FBcUJyRixDQUFNO0FBQ2hELE1BQUlqRyxFQUFPLFdBQVd4RCxFQUFjO0FBQ2xDLFVBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUN2QyxNQUFJd0QsRUFBTyxXQUFXeEQsRUFBYztBQUN6QyxVQUFNLElBQUksTUFBTSx5QkFBeUI7QUFDcEMsU0FBSXdELEVBQU8sV0FBV3hELEVBQWMsV0FDekNzSixHQUFZOUYsRUFBTyxNQUFNLEdBRXBCO0FBQUEsSUFDTCxNQUFNQSxFQUFPO0FBQUEsRUFDZjtBQUNGLEdBQ00wTCxLQUFrQixDQUFDQyxHQUFXakIsTUFBUTtBQUMxQyxRQUFNa0IsSUFBYyxPQUFPLEtBQUtsQixHQUFLLFFBQVE7QUFDN0MsTUFBSSxDQUFDa0I7QUFDSCxVQUFNLElBQUksTUFBTSxHQUFHRCxDQUFTLDJEQUEyRDtBQUV6RixTQUFPQztBQUNULEdBQ01DLEtBQXFDLE9BQU9GLEdBQVduSSxHQUFTc0ksR0FBcUJwQixNQUFRO0FBQ2pHLFFBQU0sRUFBRSxPQUFBcEUsRUFBTSxJQUFJQyxFQUFxQixjQUFjO0FBQ3JELFNBQU8sSUFBSSxRQUFRLENBQUNqSSxHQUFTRyxNQUFXO0FBQ3RDLFVBQU1tTixJQUFjRixHQUFnQkMsR0FBV2pCLENBQUcsR0FDNUNxQixJQUFVLFlBQVksWUFBWTtBQUN0QyxVQUFJO0FBQ0YsY0FBTUMsSUFBZSxNQUFNekgsR0FBMkJmLEdBQVNzSSxDQUFtQjtBQUNsRixZQUFJRSxFQUFhO0FBQ2Ysd0JBQWNELENBQU8sR0FDckJILEVBQVksTUFBTSxHQUNsQnROLEVBQVEsRUFBRSxNQUFNME4sRUFBYSxLQUFLLENBQUM7QUFBQSxpQkFDMUJKLEVBQVk7QUFDckIsZ0JBQU0sSUFBSSxNQUFNLEdBQUdELENBQVMsb0JBQW9CO0FBQUEsTUFHcEQsU0FBU2hTLEdBQU87QUFDZCxRQUFBMk0sRUFBTXBOLEVBQWdCUyxDQUFLLENBQUMsR0FDNUIsY0FBY29TLENBQU8sR0FDckJ0TixFQUFPdkYsRUFBZ0JTLENBQUssQ0FBQztBQUFBLE1BQy9CO0FBQUEsSUFDRixHQUFHLEdBQUc7QUFBQSxFQUNSLENBQUM7QUFDSCxHQUVNLEVBQUUsT0FBT3NTLElBQVMsT0FBT0MsR0FBUSxJQUFJM0YsRUFBcUIsV0FBVyxHQUNyRTRGLEtBQWdDclUsRUFBRSxPQUFPO0FBQUEsRUFDN0MscUJBQXFCQSxFQUFFLE9BQU87QUFBQSxFQUM5QixvQkFBb0JBLEVBQUUsT0FBTztBQUFBLEVBQzdCLG9CQUFvQkEsRUFBRSxPQUFPO0FBQy9CLENBQUMsR0FDS3NVLEtBQXlCLENBQUNDLE1BQXlCO0FBQ3ZELFFBQU1DLElBQWNILEdBQThCLFVBQVVFLENBQW9CO0FBQ2hGLE1BQUksQ0FBQ0MsRUFBWSxTQUFTO0FBQ3hCLFVBQU1DLElBQWMsOEVBQ2RDLElBQVMsMERBQTBELEtBQUssVUFBVUgsQ0FBb0IsQ0FBQztBQUM3RyxVQUFBSCxHQUFRTSxDQUFNLEdBQ1IsSUFBSSxNQUFNRCxDQUFXO0FBQUEsRUFDN0I7QUFDQSxTQUFPRCxFQUFZO0FBQ3JCLEdBQ01HLEtBQTBCLENBQUNDLE1BQVM7QUFDeEMsTUFBSTtBQUNGLFVBQU1DLElBQVUsSUFBSSxJQUFJRCxLQUFRLEVBQUUsRUFBRSxhQUFhLElBQUksU0FBUztBQUM5RCxRQUFJLENBQUNDO0FBQ0gsWUFBTSxJQUFJLE1BQU0sOENBQThDO0FBRWhFLFdBQUFWLEdBQVEsd0NBQXdDVSxDQUFPLEdBQUcsR0FDbkRBO0FBQUEsRUFDVCxTQUFTaFQsR0FBTztBQUNkLFVBQU1pVCxJQUFTO0FBQ2YsVUFBQVYsR0FBUVUsR0FBUSxrQkFBa0JGLENBQUk7QUFBQSxTQUNqQ3hULEVBQWdCUyxDQUFLLENBQUMsRUFBRSxHQUN2QixJQUFJLE1BQU1pVCxDQUFNO0FBQUEsRUFDeEI7QUFDRixHQUNNQyxLQUFtQixDQUFDSCxHQUFNSSxNQUNsQixJQUFJLElBQUlKLENBQUksRUFDYixhQUFhLElBQUlJLENBQU8sR0FFL0JDLEtBQTJCLENBQUNWLE9BQ3pCQSxLQUFBLGdCQUFBQSxFQUF1QiwwQkFBeUIsUUFFbkRXLEtBQW1CLE9BQU96QixHQUFTYyxNQUF5QjtBQUNoRSxRQUFNWSxJQUFVYixHQUF1QkMsQ0FBb0IsR0FDckRyTSxJQUFTLE1BQU15TCxHQUEyQixFQUFFLEtBQUt3QixFQUFRLG1CQUFtQixHQUFHLFNBQUExQixFQUFRLENBQUM7QUFTOUYsU0FQaUM7QUFBQSxJQUMvQixhQUFhO0FBQUEsTUFDWCxVQUhZa0IsR0FBd0J6TSxFQUFPLFFBQVEsRUFBRTtBQUFBLE1BSXJELGdCQUFnQmlOLEVBQVEsa0JBQWtCO0FBQUEsTUFDMUMsY0FBY0EsRUFBUSxrQkFBa0I7QUFBQSxJQUMxQztBQUFBLEVBQ0Y7QUFFRixHQUVNLEVBQUUsT0FBT0MsSUFBUyxPQUFPQyxHQUFRLElBQUk1RyxFQUFxQixjQUFjLEdBQ3hFNkcsS0FBbUN0VixFQUFFLE9BQU87QUFBQSxFQUNoRCx3QkFBd0JBLEVBQUUsT0FBTztBQUFBLEVBQ2pDLGtDQUFrQ0EsRUFBRSxPQUFPO0FBQUEsRUFDM0MsMkJBQTJCQSxFQUFFLE9BQU87QUFDdEMsQ0FBQyxHQUNLdVYsS0FBeUIsQ0FBQ2hCLE1BQXlCO0FBQ3ZELFFBQU1DLElBQWNjLEdBQWlDLFVBQVVmLENBQW9CO0FBQ25GLE1BQUksQ0FBQ0MsRUFBWSxTQUFTO0FBQ3hCLFVBQU1DLElBQWMsOEVBQ2RDLElBQVMsNkRBQTZELEtBQUssVUFBVUgsQ0FBb0IsQ0FBQztBQUNoSCxVQUFBYyxHQUFRWCxDQUFNLEdBQ1IsSUFBSSxNQUFNRCxDQUFXO0FBQUEsRUFDN0I7QUFDQSxTQUFPRCxFQUFZO0FBQ3JCLEdBQ01nQixLQUE4QixDQUFDakIsT0FDNUJBLEtBQUEsZ0JBQUFBLEVBQXVCLDZCQUE0QixRQUV0RGtCLEtBQTJCLENBQUNiLE1BQVM7QUFDekMsTUFBSTtBQUNGLFVBQU1jLElBQVcsSUFBSSxJQUFJZCxLQUFRLEVBQUUsRUFBRSxhQUFhLElBQUksbUJBQW1CO0FBQ3pFLFFBQUksQ0FBQ2M7QUFDSCxZQUFNLElBQUksTUFBTSx5REFBeUQ7QUFFM0UsV0FBQU4sR0FBUSxtREFBbURNLENBQVEsR0FBRyxHQUMvREE7QUFBQSxFQUNULFNBQVM3VCxHQUFPO0FBQ2QsVUFBTWlULElBQVM7QUFDZixVQUFBTyxHQUFRUCxHQUFRLGtCQUFrQkYsQ0FBSTtBQUFBLFNBQ2pDeFQsRUFBZ0JTLENBQUssQ0FBQyxFQUFFLEdBQ3ZCLElBQUksTUFBTWlULENBQU07QUFBQSxFQUN4QjtBQUNGLEdBQ01hLEtBQXNCLE9BQU9sQyxHQUFTYyxNQUF5QjtBQUNuRSxRQUFNWSxJQUFVSSxHQUF1QmhCLENBQW9CLEdBQ3JEck0sSUFBUyxNQUFNeUwsR0FBMkIsRUFBRSxLQUFLd0IsRUFBUSxzQkFBc0IsR0FBRyxTQUFBMUIsRUFBUSxDQUFDLEdBQzNGaUMsSUFBV0QsR0FBeUJ2TixFQUFPLFFBQVEsRUFBRSxHQUNyRDBOLElBQWtCVCxFQUFRLGdDQUFnQztBQUNoRSxNQUFJUyxNQUFvQkYsR0FBVTtBQUNoQyxVQUFNakIsSUFBYyw4RUFDZEMsSUFBUyw0QkFBNEJnQixDQUFRLDJDQUEyQ0UsQ0FBZTtBQUM3RyxVQUFBUCxHQUFRWCxDQUFNLEdBQ1IsSUFBSSxNQUFNRCxDQUFXO0FBQUEsRUFDN0I7QUFPQSxTQU5pQztBQUFBLElBQy9CLGFBQWE7QUFBQSxNQUNYLG1CQUFtQmlCO0FBQUEsTUFDbkIsWUFBWVAsRUFBUSx5QkFBeUI7QUFBQSxJQUMvQztBQUFBLEVBQ0Y7QUFFRixHQUNNVSxLQUFnQjdWLEVBQUUsT0FBTztBQUFBLEVBQzdCLFVBQVVBLEVBQUUsUUFBUSxXQUFXO0FBQUEsRUFDL0IsZ0JBQWdCQSxFQUFFLFFBQVEsV0FBVztBQUFBLEVBQ3JDLFVBQVVBLEVBQUUsT0FBTztBQUFBLElBQ2pCLHNCQUFzQkEsRUFBRSxPQUFPO0FBQUEsSUFDL0Isd0JBQXdCQSxFQUFFLE9BQU87QUFBQSxFQUNuQyxDQUFDO0FBQ0gsQ0FBQyxHQUNLOFYsS0FBaUI5VixFQUFFLE9BQU87QUFBQSxFQUM5QixVQUFVQSxFQUFFLFFBQVEsWUFBWTtBQUFBLEVBQ2hDLGdCQUFnQkEsRUFBRSxRQUFRLFdBQVc7QUFBQSxFQUNyQyxVQUFVQSxFQUFFLE9BQU87QUFBQSxJQUNqQixzQkFBc0JBLEVBQUUsT0FBTztBQUFBLElBQy9CLHdCQUF3QkEsRUFBRSxPQUFPO0FBQUEsSUFDakMsd0JBQXdCQSxFQUFFLE9BQU8sRUFBRSxRQUFRO0FBQUEsRUFDN0MsQ0FBQztBQUNILENBQUMsR0FFSytWLEtBQW1CL1YsRUFBRSxLQUFLLENBQUMsUUFBUSxRQUFRLFdBQVcsV0FBVyxhQUFhLFNBQVMsQ0FBQyxHQUN4RmdXLEtBQWNoVyxFQUFFLEtBQUs7QUFBQSxFQUN6QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixDQUFDLEdBQ0ssRUFBRSxPQUFPaVcsSUFBUyxPQUFPQyxHQUFRLElBQUl6SCxFQUFxQixVQUFVLEdBQ3BFMEgsS0FBMEJuVyxFQUFFLE9BQU87QUFBQSxFQUN2QyxpQkFBaUJBLEVBQUUsT0FBTztBQUFBLEVBQzFCLHVCQUF1QkEsRUFBRSxPQUFPO0FBQUEsRUFDaEMsd0JBQXdCK1Y7QUFBQSxFQUN4QixtQkFBbUIvVixFQUFFLE9BQU87QUFDOUIsQ0FBQyxHQUNLeVUsS0FBYyw4RUFDZDJCLEtBQXVCLENBQUM3QixNQUF5QjtBQUNyRCxRQUFNQyxJQUFjMkIsR0FBd0IsVUFBVTVCLENBQW9CO0FBQzFFLE1BQUksQ0FBQ0MsRUFBWTtBQUNmLFVBQUEwQixHQUFRLHlEQUF5RCxLQUFLLFVBQVUzQixDQUFvQixDQUFDLEVBQUUsR0FDakcsSUFBSSxNQUFNRSxFQUFXO0FBRTdCLFNBQU9ELEVBQVk7QUFDckIsR0FDTTZCLEtBQW9CLENBQUNDLE1BQ0osS0FBSyxNQUFNQSxDQUFNLEdBR2xDQyxLQUFtQixNQUNoQixjQUFjLFVBQVUsbUJBQW1CLE9BQU8sVUFFckRDLEtBQW1CLFlBQVk7QUFDbkMsRUFBQVAsR0FBUSxrQ0FBa0M7QUFDMUMsV0FBU3ZRLElBQUksR0FBR0EsSUFBSSxJQUFJQTtBQUN0QixJQUFLNlEsR0FBaUIsS0FDcEIsTUFBTTNRLEdBQU0sR0FBRztBQUduQixNQUFJLENBQUMyUSxHQUFpQjtBQUNwQixVQUFBTCxHQUFRLCtCQUErQixHQUNqQyxJQUFJLE1BQU16QixFQUFXO0FBRTdCLFNBQUF3QixHQUFRLCtCQUErQixHQUNoQyxPQUFPLFNBQVk7QUFDNUIsR0FDTVEsS0FBaUIsQ0FBQ3RJLE1BQVc7QUFDakMsUUFBTSxFQUFFLFNBQUFnSCxHQUFTLFFBQUF1QixHQUFRLGFBQUFDLEdBQWEsV0FBQUMsR0FBVyxNQUFBOUQsR0FBTSxjQUFBRSxFQUFhLElBQUk3RSxHQUNsRW1JLElBQVNELEdBQWtCbEIsRUFBUSxpQkFBaUIsQ0FBQztBQUMzRCxTQUFBYyxHQUFRLDJDQUEyQ0ssRUFBTyxJQUFJLEVBQUUsR0FDekQsSUFBSSxRQUFRLENBQUM5UCxNQUFZO0FBQzlCLFVBQU1xUSxJQUFVLE1BQU07QUFDcEIsTUFBQVosR0FBUSw0QkFBNEIsR0FDcENqRCxFQUFhLG9CQUFvQixTQUFTOEQsQ0FBUSxHQUNsRGhFLEVBQUssT0FBTztBQUFBLElBQ2QsR0FDTWlFLElBQWtCLENBQUNDLE1BQVU7QUFDakMsTUFBQWQsR0FBUSxrQ0FBa0NjLENBQUssR0FDL0N4USxFQUFRLEVBQUUsUUFBUTlCLEVBQWMsU0FBUyxTQUFBbVMsRUFBUSxDQUFDO0FBQUEsSUFDcEQsR0FDTUksSUFBVSxDQUFDcFYsTUFBVTtBQUN6QixNQUFBcVUsR0FBUSxnQkFBZ0JyVSxDQUFLLEdBQzdCMkUsRUFBUSxFQUFFLFFBQVE5QixFQUFjLFNBQVMsU0FBQW1TLEVBQVEsQ0FBQztBQUFBLElBQ3BELEdBQ01DLElBQVcsTUFBTTtBQUNyQixNQUFBdFEsRUFBUSxFQUFFLFFBQVE5QixFQUFjLFdBQVcsU0FBQW1TLEVBQVEsQ0FBQztBQUFBLElBQ3REO0FBQ0EsSUFBQTdELEVBQWEsaUJBQWlCLFNBQVM4RCxDQUFRO0FBQy9DLFVBQU1JLElBQXNCLENBQUNGLEdBQU8sR0FBR2hNLE1BQU87QUFDNUMsTUFBQThILEVBQUssT0FBTyxHQUNadE0sRUFBUSxFQUFFLFFBQVE5QixFQUFjLFNBQVMsbUJBQW1Cc1MsR0FBTyxTQUFBSCxFQUFRLENBQUM7QUFBQSxJQUM5RTtBQUNBLElBQUFMLEdBQWlCLEVBQUU7QUFBQSxNQUNqQixDQUFDVyxNQUFrQkEsRUFBYztBQUFBLFFBQy9CLFdBQVdoQyxFQUFRLHFCQUFxQjtBQUFBLFFBQ3hDLGFBQWFBLEVBQVEsc0JBQXNCO0FBQUEsUUFDM0MsUUFBQXVCO0FBQUEsUUFDQSxhQUFBQztBQUFBLFFBQ0EscUJBQUFPO0FBQUEsUUFDQSxpQkFBQUg7QUFBQSxRQUNBLFNBQUFFO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxFQUFFLEtBQUssQ0FBQ0csTUFBYTtBQUNuQixNQUFBQSxFQUFTLGlCQUFpQmQsR0FBUSxFQUFFLHFCQUFxQixLQUFLLENBQUMsRUFBRSxNQUFNTSxDQUFTO0FBQUEsSUFDbEYsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNILEdBQ01TLEtBQWtCLENBQUNDLE1BQWtCO0FBQ3pDLFFBQU1DLElBQWdCLFVBQVUsYUFBYSxVQUFVLFVBQVUsU0FBUyxVQUFVLFVBQVUsQ0FBQyxJQUFJLFVBQVUsVUFDdkdiLElBQVNZLEtBQWlCQyxHQUMxQi9DLElBQWN3QixHQUFZLFVBQVVVLENBQU07QUFDaEQsU0FBS2xDLEVBQVksV0FJakJ5QixHQUFRLG9CQUFvQnpCLEVBQVksSUFBSSxFQUFFLEdBQ3ZDQSxFQUFZLFNBSmpCMEIsR0FBUSw0QkFBNEJRLENBQU0sd0JBQXdCLEdBQzNEO0FBSVgsR0FDTWMsS0FBMEIsQ0FBQ2pELE9BQ3hCQSxLQUFBLGdCQUFBQSxFQUF1Qix3QkFBdUIsUUFFakRrRCxLQUFrQixPQUFPZCxHQUFhcEMsR0FBc0IrQyxNQUFrQjtBQUNsRixRQUFNbkMsSUFBVWlCLEdBQXFCN0IsQ0FBb0IsR0FDbkRxQyxJQUFZLFNBQVMsY0FBYyxLQUFLO0FBQzlDLEVBQUFBLEVBQVUsS0FBSztBQUNmLFFBQU0sRUFBRSxNQUFBOUQsR0FBTSxRQUFBcEYsR0FBUSxjQUFBc0YsRUFBYSxJQUFJTCxHQUFtQixvQkFBb0I7QUFDOUUsRUFBQWpGLEVBQU8sWUFBWWtKLENBQVM7QUFDNUIsUUFBTTFPLElBQVMsTUFBTXVPLEdBQWU7QUFBQSxJQUNsQyxTQUFBdEI7QUFBQSxJQUNBLFFBQVFrQyxHQUFnQkMsQ0FBYTtBQUFBLElBQ3JDLGFBQUFYO0FBQUEsSUFDQSxXQUFBQztBQUFBLElBQ0EsTUFBQTlEO0FBQUEsSUFDQSxjQUFBRTtBQUFBLEVBQ0YsQ0FBQztBQUVELE1BREE5SyxFQUFPLFFBQVEsR0FDWEEsRUFBTyxXQUFXeEQsRUFBYztBQUNsQyxVQUFNLElBQUksTUFBTSx5QkFBeUI7QUFDcEMsTUFBSXdELEVBQU8sV0FBV3hELEVBQWM7QUFDekMsVUFBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQ3ZDLE1BQUl3RCxFQUFPLFdBQVd4RCxFQUFjLFNBQVM7QUFDbEQsUUFBSSxDQUFDd0QsRUFBTztBQUNWLFlBQU0sSUFBSSxNQUFNLG9FQUFvRTtBQUV0RixXQUFBK04sR0FBUSw0QkFBNEIsR0FDN0I7QUFBQSxNQUNMLGFBQWE7QUFBQSxRQUNYLG9CQUFvQi9OLEVBQU8sa0JBQWtCO0FBQUEsTUFDL0M7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNFLElBQUE4RixHQUFZOUYsRUFBTyxNQUFNO0FBRTdCLEdBRU0sRUFBRSxPQUFPd1AsR0FBUyxPQUFPQyxHQUFRLElBQUlsSixFQUFxQixXQUFXLEdBQ3JFLEVBQUUsT0FBT21KLEdBQVksSUFBSW5KLEVBQXFCLFdBQVc7QUFDL0R6TyxFQUFFO0FBQUEsRUFDQUEsRUFBRSxPQUFPO0FBQUEsSUFDUCxvQkFBb0JBLEVBQUUsT0FBTztBQUFBLEVBQy9CLENBQUM7QUFDSCxFQUFFLE9BQU8sQ0FBQztBQUNWLE1BQU02WCxLQUFrQjVKO0FBQUEsRUFDdEIsT0FBTztBQUFBLElBQ0wsU0FBQTRDO0FBQUEsSUFDQSx1QkFBQWM7QUFBQSxJQUNBLGtCQUFBN0I7QUFBQSxJQUNBLGVBQUFnQjtBQUFBLElBQ0EsY0FBQWM7QUFBQSxFQUNGLE1BQU07QUFsc0RSLFFBQUExSztBQW1zREksSUFBQXdRLEVBQVEsK0JBQStCLEVBQUUsdUJBQUEvRixFQUFzQixDQUFDO0FBQ2hFLFVBQU1WLElBQW1CSixFQUFRLGtCQUMzQnJCLElBQVUsTUFBTXRELEVBQVcrRSxDQUFnQjtBQUNqRCxJQUFBeUcsRUFBUSwyQ0FBMkNsSSxFQUFRLElBQUksR0FBRztBQUNsRSxVQUFNdUMsSUFBbUJsQyxHQUE4QkMsR0FBa0JnQixFQUFjLElBQUksaUJBQWlCLEdBQ3RHZ0gsSUFBdUI7QUFBQSxNQUMzQixZQUFZakgsRUFBUTtBQUFBLE1BQ3BCLHlCQUF5QmM7QUFBQSxNQUN6QixxQkFBcUJJO0FBQUEsTUFDckIsZ0JBQWdCO0FBQUEsUUFDZCxRQUFRLE9BQU8sU0FBUztBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixNQUFBMkYsRUFBUSwyQ0FBMkM3RyxFQUFRLGlCQUFpQixHQUFHO0FBQy9FLFlBQU1rSCxJQUFzQixNQUFNNUssR0FBNkJ5RSxFQUFhLHVCQUF1QjtBQUFBLFFBQ2pHLFlBQVlmLEVBQVE7QUFBQSxNQUN0QixDQUFDO0FBRUQsVUFEQVYsR0FBNEI0SCxHQUFxQmpILEVBQWMsSUFBSSxpQkFBaUIsR0FDaEZ0QixFQUFRLFNBQVMsU0FBUztBQUM1QixRQUFBa0ksRUFBUSw4Q0FBOENsSSxFQUFRLEtBQUssR0FBRztBQUN0RSxjQUFNdEgsSUFBUyxNQUFNb0YsR0FBYzJELEdBQWtCNkcsQ0FBb0I7QUFDekUsZUFBQUosRUFBUSwwQ0FBMEN4UCxFQUFPLGlCQUFpQixHQUFHLEdBQ3RFLEVBQUUsTUFBTSxTQUFTLFFBQUFBLEVBQU87QUFBQSxNQUNqQyxPQUFPO0FBQ0wsUUFBQXdQLEVBQVEsb0VBQW9FN0csRUFBUSxpQkFBaUIsR0FBRztBQUN4RyxjQUFNM0ksSUFBUyxNQUFNbUYsR0FBcUI0RCxHQUFrQjZHLENBQW9CO0FBQ2hGLGVBQUFKLEVBQVEsb0NBQW9DLEdBQ3JDLEVBQUUsTUFBTSxZQUFZLFFBQUF4UCxFQUFPO0FBQUEsTUFDcEM7QUFBQSxJQUNGLFNBQVNyRyxHQUFPO0FBQ2QsVUFBSUEsYUFBaUIwSixNQUNmMUosRUFBTSxxQkFBcUIsU0FBUyxjQUFjLEdBQUc7QUFDdkQsUUFBQTZWLEVBQVEsdURBQXVELEdBQy9EQSxFQUFRLHdDQUF3QzdWLEVBQU0sU0FBUyxPQUFPO0FBQ3RFLGNBQU1tVyxJQUFvQi9DLEdBQXlCcFQsRUFBTSxTQUFTLE9BQU87QUFDekUsWUFBSW1XLEdBQW1CO0FBQ3JCLFVBQUFOLEVBQVEsNERBQTREO0FBQ3BFLGdCQUFNTyxJQUE0QixNQUFNL0MsR0FBaUJyRSxFQUFRLFNBQVNoUCxFQUFNLFNBQVMsT0FBTztBQUNoRyxVQUFBaVcsRUFBcUIsZUFBZSxTQUFZRztBQUFBLFFBQ2xEO0FBRUEsWUFENkJ6QyxHQUE0QjNULEVBQU0sU0FBUyxPQUFPLEdBQ3JEO0FBQ3hCLFVBQUE2VixFQUFRLGtFQUFrRTtBQUMxRSxnQkFBTVEsSUFBK0IsTUFBTXZDLEdBQW9COUUsRUFBUSxTQUFTaFAsRUFBTSxTQUFTLE9BQU87QUFDdEcsVUFBQWlXLEVBQXFCLGVBQWUsWUFBZUk7QUFBQSxRQUNyRDtBQUVBLFlBRHlCVixHQUF3QjNWLEVBQU0sU0FBUyxPQUFPLEdBQ2pEO0FBQ3BCLFVBQUE2VixFQUFRLDBEQUEwRDtBQUNsRSxnQkFBTVMsSUFBMkIsTUFBTVY7QUFBQSxZQUNyQzNILEVBQWlCek4sRUFBVSxPQUFPO0FBQUEsWUFDbENSLEVBQU0sU0FBUztBQUFBLFlBQ2YyTixFQUFRO0FBQUEsVUFDVjtBQUNBLFVBQUFzSSxFQUFxQixlQUFlLFFBQVdLO0FBQUEsUUFDakQ7QUFDQSxjQUFNQyxJQUFnQixNQUFNL0wsR0FBc0I0RSxHQUFrQjZHLENBQW9CO0FBQ3hGLFFBQUFKLEVBQVEsMEJBQTBCVSxDQUFhO0FBQy9DLGNBQU1DLE1BQXNCblIsSUFBQXJGLEVBQU0sU0FBUyxZQUFmLGdCQUFBcUYsRUFBeUIsK0JBQThCO0FBQ25GLFFBQUs4USxJQVNITixFQUFRLGlFQUFpRSxJQVJyRVcsS0FDRlgsRUFBUSx5QkFBeUIsR0FDakMsTUFBTVksR0FBZ0JGLENBQWEsTUFFbkNWLEVBQVEseUJBQXlCLEdBQ2pDLE1BQU1hLEdBQWdCSCxHQUFldkgsRUFBUSxPQUFPO0FBS3hELGNBQU0ySCxJQUFTSixFQUFjO0FBQzdCLFlBQUk1SSxFQUFRLFNBQVMsU0FBUztBQUM1QixVQUFBa0ksRUFBUSx3Q0FBd0NjLENBQU0sR0FBRztBQUN6RCxnQkFBTXhSLElBQWdCLE1BQU11RixFQUFtQjBFLEdBQWtCO0FBQUEsWUFDL0QsY0FBY3pCLEVBQVE7QUFBQSxZQUN0QixtQkFBbUJnSjtBQUFBLFVBQ3JCLENBQUM7QUFDRCxVQUFBZCxFQUFRLGtEQUFrRDFRLENBQWE7QUFDdkUsZ0JBQU15SSxJQUF1QlgsR0FBZ0M5SCxDQUFhO0FBQzFFLGlCQUFBMFEsRUFBUSwwQ0FBMENqSSxFQUFxQixpQkFBaUIsR0FBRyxHQUNwRixFQUFFLE1BQU0sU0FBUyxRQUFRQSxFQUFxQjtBQUFBLFFBQ3ZELE9BQU87QUFDTCxVQUFBaUksRUFBUSx3Q0FBeUNXLElBQThCLFdBQVIsS0FBZ0IsR0FBRztBQUMxRixnQkFBTW5RLElBQVMsTUFBTW1GLEdBQXFCNEQsR0FBa0I7QUFBQSxZQUMxRCxHQUFHNkc7QUFBQSxZQUNILG1CQUFtQlU7QUFBQSxZQUNuQiwyQkFBMkJIO0FBQUEsVUFDN0IsQ0FBQztBQUNELGlCQUFBWCxFQUFRLG9DQUFvQyxHQUNyQyxFQUFFLE1BQU0sWUFBWSxRQUFBeFAsRUFBTztBQUFBLFFBQ3BDO0FBQUEsTUFDRjtBQUVGLFlBQUF5UCxHQUFRLHVDQUF1QyxHQUMvQ0EsR0FBUTlWLENBQUssR0FDUEE7QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNGLEdBQ000VyxLQUFtQyxDQUFDelgsTUFBYTtBQUNyRCxRQUFNMFgsSUFBZTFYLEVBQVMsc0JBQXNCLEtBQUssQ0FBQ3NWLE1BQVdBLEVBQU8sU0FBUyxZQUFZO0FBQ2pHLE1BQUksQ0FBQ29DO0FBQ0gsVUFBTSxJQUFJLE1BQU0sNEJBQTRCO0FBRTlDLFNBQU9yVCxHQUE0QixNQUFNcVQsQ0FBWTtBQUN2RCxHQUNNQyxLQUF1QixDQUFDLDZCQUE2QixPQUFPLEdBQzVEQyxLQUFtQyxDQUFDNVgsTUFBYTtBQUNyRCxRQUFNNlgsSUFBZTdYLEVBQVMsc0JBQXNCLEtBQUssQ0FBQ3NWLE1BQVdxQyxHQUFxQixTQUFTckMsRUFBTyxJQUFJLENBQUM7QUFDL0csTUFBSSxDQUFDdUM7QUFDSCxVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFFOUMsU0FBT2hVLEdBQTRCLE1BQU1nVSxDQUFZO0FBQ3ZELEdBQ01OLEtBQWtCLE9BQU9ILEdBQWUzRSxNQUFZO0FBQ3hELFFBQU0zTSxJQUFxQjhSLEdBQWlDUixDQUFhO0FBQ3pFLE1BQUl0UixFQUFtQixpQkFBaUIsZ0JBQWdCO0FBQ3RELElBQUE0USxFQUFRLG1DQUFtQztBQUMzQztBQUFBLEVBQ0Y7QUFDQSxFQUFBQSxFQUFRLGlDQUFpQzVRLEVBQW1CLFlBQVksR0FBRztBQUMzRSxRQUFNLEVBQUUsUUFBQXNNLEVBQU8sSUFBSSxNQUFNSSxHQUFxQixFQUFFLEtBQUsxTSxFQUFtQixjQUFjLFNBQUEyTSxFQUFRLENBQUM7QUFFL0YsTUFEQWlFLEVBQVEseUNBQXlDdEUsQ0FBTSxHQUFHLEdBQ3REQSxNQUFXMU8sRUFBYztBQUMzQixVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFFOUMsTUFBSTBPLE1BQVcxTyxFQUFjO0FBQzNCLFVBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUU3QyxHQUNNNFQsS0FBa0IsT0FBT0YsTUFBa0I7QUFDL0MsUUFBTXRSLElBQXFCMlIsR0FBaUNMLENBQWE7QUFDekUsRUFBQVIsR0FBWSwyQ0FBMkM5USxFQUFtQixjQUFjLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUM3RyxNQUFNRyxHQUEwQkgsQ0FBa0IsR0FDbEQ4USxHQUFZLDBDQUEwQztBQUN4RCxHQUVNa0IsSUFBbUI5WSxFQUFFLEtBQUssQ0FBQyxVQUFVLGFBQWEsZUFBZSxDQUFDO0FBRTNEOFksRUFBaUIsS0FBSztBQU9uQyxNQUFNLEVBQUUsT0FBT0MsR0FBUyxPQUFPQyxHQUFRLElBQUl2SyxFQUFxQixXQUFXLEdBQ3JFd0ssS0FBY2paLEVBQUUsT0FBTztBQUFBLEVBQzNCLFVBQVVBLEVBQUUsTUFBTSxDQUFDQSxFQUFFLFFBQVEsV0FBVyxHQUFHQSxFQUFFLFFBQVEsWUFBWSxDQUFDLENBQUM7QUFBQSxFQUNuRSxnQkFBZ0JBLEVBQUUsUUFBUSxRQUFRO0FBQUEsRUFDbEMsVUFBVUEsRUFBRSxPQUFPO0FBQUEsSUFDakIsV0FBV0EsRUFBRSxPQUFPO0FBQUEsRUFDdEIsQ0FBQztBQUNILENBQUMsR0FDS2taLEtBQW1CNUs7QUFBQSxFQUN2QixPQUFPLEVBQUUsU0FBQXVDLEdBQVMsZUFBQUMsRUFBYyxNQUFNO0FBQ3BDLElBQUFpSSxFQUFRLGlEQUFpRDtBQUN6RCxVQUFNcEgsSUFBd0I1QyxFQUFvQjhCLEVBQVEsd0JBQXdCb0ksRUFBVztBQUM3RixJQUFBRixFQUFRLGdDQUFnQztBQUN4QyxVQUFNOUgsSUFBbUJKLEVBQVEsa0JBQzNCckIsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCLEdBQzNDL0QsSUFBY3NDLEVBQVEsU0FBUztBQUNyQyxJQUFBdUosRUFBUSxnQ0FBZ0M7QUFDeEMsVUFBTTdILElBQWlCLE1BQU1qRSxHQUF5QmdFLEdBQWtCekIsRUFBUSxPQUFPdEMsR0FBYSxNQUFNLEdBQ3BHaU0sSUFBSyxNQUFNbFQ7QUFBQSxNQUNmMEwsRUFBc0IsU0FBUztBQUFBLE1BQy9CVCxFQUFlO0FBQUEsTUFDZkEsRUFBZTtBQUFBLE1BQ2ZoRTtBQUFBLElBQ0Y7QUFDQSxJQUFBNkwsRUFBUSw4QkFBOEI7QUFDdEMsVUFBTUssSUFBaUIsTUFBTUQsRUFBRyxlQUFlO0FBQy9DLFFBQUlDLE1BQW1CO0FBQ3JCLGFBQUFKLEdBQVEsOEJBQThCLEdBQy9CLEVBQUUsYUFBYSxJQUFPLFFBQVEsK0JBQStCO0FBRXRFLElBQUFELEVBQVEsNkRBQTZESyxDQUFjO0FBQ25GLFVBQU1DLElBQW1CLENBQUNDLEdBQVVuTCxNQUMzQnFELEVBQVMsU0FBUyxJQUFJO0FBQUEsTUFDM0IsU0FBQVg7QUFBQSxNQUNBLHVCQUF1QjBJLEdBQWdDMUksRUFBUSx3QkFBd0J5SSxDQUFRO0FBQUEsTUFDL0Ysa0JBQWtCN1IsRUFBeUJvSixFQUFRLE9BQU87QUFBQSxNQUMxRCxlQUFBQztBQUFBLE1BQ0EsY0FBYyxFQUFFLFVBQUF3SSxHQUFVLHdCQUF3Qm5MLEtBQUEsZ0JBQUFBLEVBQVEsdUJBQXVCO0FBQUEsTUFDakYsWUFBWTtBQUFBLFFBQ1YsV0FBVzJLLEVBQWlCLEtBQUs7QUFBQSxRQUNqQyxJQUFBSztBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBQ2Isb0JBQW9CLEVBQUUsVUFBVUMsRUFBZSxVQUFVLFdBQVdBLEVBQWUsVUFBVTtBQUFBLFFBQzdGLFdBQVdDO0FBQUEsTUFDYjtBQUFBLElBQ0YsQ0FBQztBQUVILFdBQU87QUFBQSxNQUNMLFdBQVdQLEVBQWlCLEtBQUs7QUFBQSxNQUNqQyxhQUFhO0FBQUEsTUFDYixJQUFBSztBQUFBLE1BQ0Esb0JBQW9CO0FBQUEsUUFDbEIsVUFBVUMsRUFBZTtBQUFBLFFBQ3pCLFdBQVdBLEVBQWU7QUFBQSxNQUM1QjtBQUFBLE1BQ0EsV0FBV0M7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUNGLEdBQ01HLEtBQW9Cdkw7QUFBQSxFQUN4QixPQUFPO0FBQUEsSUFDTCxTQUFBNEM7QUFBQSxJQUNBLHVCQUFBYztBQUFBLElBQ0Esa0JBQUE3QjtBQUFBLElBQ0EsZUFBQWdCO0FBQUEsSUFDQSxjQUFBYztBQUFBLElBQ0EsWUFBQTZIO0FBQUEsRUFDRixNQUFNO0FBRUosUUFEQVYsRUFBUSwyQkFBMkIsR0FDL0JuSCxFQUFhLGFBQWFELEVBQXNCO0FBQ2xELFlBQU0sSUFBSSxNQUFNLCtCQUErQkMsRUFBYSxRQUFRLFNBQVNELEVBQXNCLFFBQVEsRUFBRTtBQUUvRyxVQUFNVixJQUFtQkosRUFBUSxrQkFDM0JzSSxJQUFLTSxFQUFXO0FBQ3RCLFFBQUk3SCxLQUFBLFFBQUFBLEVBQWMsd0JBQXdCO0FBQ3hDLFlBQU04SCxJQUFXOUgsRUFBYTtBQUM5QixNQUFBbUgsRUFBUSw2QkFBNkJXLENBQVEsR0FDN0NDLEdBQW1CUixHQUFJTyxFQUFTLFFBQVFBLEVBQVMsU0FBU0EsRUFBUyxzQkFBc0I7QUFBQSxJQUMzRjtBQUNBLElBQUFYLEVBQVEsc0JBQXNCLEdBQzlCSSxFQUFHLEtBQUs7QUFDUixVQUFNUyxJQUFxQixNQUFNblQsR0FBOEIwUyxDQUFFO0FBQ2pFLElBQUFKLEVBQVEsMEJBQTBCYSxDQUFrQixHQUNwRGIsRUFBUSx1Q0FBdUM7QUFDL0MsVUFBTWxILElBQWVnSSxHQUFnQy9KLEdBQWtCOEosQ0FBa0IsR0FDbkY3SCxJQUFtQmxDLEdBQThCZ0MsR0FBY2YsRUFBYyxJQUFJLGlCQUFpQjtBQUN4RyxJQUFBaUksRUFBUSxnREFBZ0RoSCxDQUFnQjtBQUN4RSxVQUFNQyxJQUEyQixNQUFNMUYsR0FBc0IyRSxHQUFrQjtBQUFBLE1BQzdFLFFBQVFjO0FBQUEsTUFDUix1QkFBQUo7QUFBQSxJQUNGLENBQUMsR0FDSzdLLElBQXFCZ1QsR0FBMEI5SCxDQUF3QjtBQUM3RSxJQUFBK0csRUFBUSw4QkFBOEIsR0FDdEMsTUFBTWxTLEdBQWtCQyxHQUFvQjhTLENBQWtCO0FBQzlELFVBQU1wSyxJQUFVLE1BQU10RCxFQUFXK0UsQ0FBZ0I7QUFDakQsUUFBSXpCLEVBQVEsU0FBUyxTQUFTO0FBQzVCLE1BQUF1SixFQUFRLHNDQUFzQztBQUM5QyxZQUFNL1IsSUFBZ0IsTUFBTXVGLEVBQW1CMEUsR0FBa0I7QUFBQSxRQUMvRCxjQUFjekIsRUFBUTtBQUFBLE1BQ3hCLENBQUM7QUFFRCxhQUFPLEVBQUUsTUFBTSxTQUFTLFFBREtWLEdBQWdDOUgsQ0FBYSxFQUNyQjtBQUFBLElBQ3ZELE9BQU87QUFDTCxNQUFBK1IsRUFBUSx3QkFBd0I7QUFDaEMsWUFBTXJKLElBQWtCO0FBQUEsUUFDdEIsY0FBY0YsRUFBUTtBQUFBLFFBQ3RCLGVBQWU7QUFBQSxVQUNiLGVBQWVtQyxFQUFzQjtBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxxQkFBcUJJLEVBQWlCMVAsRUFBVSxVQUFVO0FBQUEsUUFDMUQsb0JBQW9CMFAsRUFBaUIxUCxFQUFVLFNBQVM7QUFBQSxRQUN4RCxnQkFBZ0IwUCxFQUFpQjFQLEVBQVUsS0FBSztBQUFBLFFBQ2hELG1CQUFtQjBQLEVBQWlCMVAsRUFBVSxRQUFRO0FBQUEsUUFDdEQsa0JBQWtCMFAsRUFBaUIxUCxFQUFVLE9BQU87QUFBQSxRQUNwRCxnQkFBZ0IwUCxFQUFpQjFQLEVBQVUsY0FBYztBQUFBLFFBQ3pELFlBQVltTixFQUFRO0FBQUEsUUFDcEIsbUJBQW1CQSxFQUFRO0FBQUEsUUFDM0IsZUFBZTtBQUFBLFFBQ2YseUJBQXlCbUM7QUFBQSxNQUMzQjtBQUVBLGFBQU8sRUFBRSxNQUFNLFlBQVksUUFEWixNQUFNcEUsR0FBZ0IwRCxHQUFrQnZCLENBQWUsRUFDcEM7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFDRixHQUNNbUssS0FBa0MsQ0FBQzNILEdBQVk2SCxNQUFnQjtBQW45RHJFLE1BQUE3UyxHQUFBQyxHQUFBQyxHQUFBQztBQW85REUsUUFBTStLLElBQVMsRUFBRSxHQUFHRixFQUFXLEdBQ3pCLENBQUNHLEdBQWdCLEdBQUdDLENBQWtCLE1BQUluTCxLQUFBRCxJQUFBNlMsRUFBWSxjQUFaLGdCQUFBN1MsRUFBdUIsV0FBdkIsZ0JBQUFDLEVBQStCLE1BQU0sV0FBVSxDQUFDLEdBQzFGb0wsSUFBZ0JELEVBQW1CLEtBQUssR0FBRyxLQUFLLFFBQ2hEMEgsS0FBaUIzUyxLQUFBRCxJQUFBMlMsRUFBWSxrQkFBWixnQkFBQTNTLEVBQTJCLG9CQUEzQixnQkFBQUMsRUFBNEMsU0FDN0Q0UyxJQUFrQkYsRUFBWTtBQUNwQyxTQUFBM0gsRUFBTy9QLEVBQVUsVUFBVSxJQUFJK1AsRUFBTy9QLEVBQVUsVUFBVSxLQUFLZ1EsS0FBa0IsZUFDakZELEVBQU8vUCxFQUFVLFNBQVMsSUFBSStQLEVBQU8vUCxFQUFVLFNBQVMsS0FBS2tRLEtBQWlCLGVBQzlFSCxFQUFPL1AsRUFBVSxLQUFLLElBQUkrUCxFQUFPL1AsRUFBVSxLQUFLLEtBQUswWCxFQUFZLGNBQWMsOEJBQy9FM0gsRUFBTy9QLEVBQVUsUUFBUSxJQUFJK1AsRUFBTy9QLEVBQVUsUUFBUSxNQUFLMlgsS0FBQSxnQkFBQUEsRUFBZ0IsaUJBQWVDLEtBQUEsZ0JBQUFBLEVBQWlCLGVBQWMsU0FDekg3SCxFQUFPL1AsRUFBVSxPQUFPLElBQUkrUCxFQUFPL1AsRUFBVSxPQUFPLE1BQUsyWCxLQUFBLGdCQUFBQSxFQUFnQixhQUFXQyxLQUFBLGdCQUFBQSxFQUFpQixZQUFXLE1BQ2hIbEIsRUFBUSxzQkFBc0IzRyxDQUFNLEdBQzdCQTtBQUNULEdBQ011SCxLQUFxQixDQUFDUixHQUFJZSxHQUFRQyxHQUFXQyxNQUFtQjtBQUNwRSxFQUFBakIsRUFBRyxPQUFPO0FBQUEsSUFDUixPQUFPO0FBQUEsTUFDTCxRQUFRZSxFQUFPO0FBQUEsTUFDZixPQUFPO0FBQUEsTUFDUCxTQUFTQztBQUFBLElBQ1g7QUFBQSxJQUNBLFVBQVVELEVBQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlqQixVQUFVRTtBQUFBLEVBQ1osQ0FBQztBQUNILEdBQ01OLEtBQTRCLENBQUM5WSxNQUFhO0FBQzlDLE1BQUlBLEVBQVMsc0JBQXNCLFdBQVc7QUFDNUMsVUFBTSxJQUFJLE1BQU07QUFBQSxlQUNMQSxFQUFTLHNCQUFzQixNQUFNLHdCQUF3QjtBQUUxRSxTQUFPc0UsR0FBaUMsTUFBTXRFLEVBQVMsc0JBQXNCLENBQUMsQ0FBQztBQUNqRixHQUVNLEVBQUUsT0FBT3FaLEdBQVMsT0FBT0MsR0FBUSxJQUFJN0wsRUFBcUIsZUFBZSxHQUN6RThMLEtBQWtCdmEsRUFBRSxPQUFPO0FBQUEsRUFDL0IsZ0JBQWdCQSxFQUFFLFFBQVEsUUFBUTtBQUFBLEVBQ2xDLFVBQVVBLEVBQUUsUUFBUSxRQUFRO0FBQzlCLENBQUM7QUFDREEsRUFBRTtBQUFBLEVBQ0FBLEVBQUUsT0FBTztBQUFBLElBQ1AsbUJBQW1CQSxFQUFFLE9BQU87QUFBQSxJQUM1QixjQUFjQSxFQUFFLE9BQU87QUFBQSxFQUN6QixDQUFDO0FBQ0gsRUFBRSxPQUFPLENBQUM7QUFDVixNQUFNd2EsS0FBc0J2TTtBQUFBLEVBQzFCLE9BQU87QUFBQSxJQUNMLFNBQUE0QztBQUFBLElBQ0EsdUJBQUFjO0FBQUEsSUFDQSxrQkFBQTdCO0FBQUEsSUFDQSxlQUFBZ0I7QUFBQSxJQUNBLGNBQUFjO0FBQUEsRUFDRixNQUFNO0FBemdFUixRQUFBMUssR0FBQUM7QUEwZ0VJLElBQUFrVCxFQUFRLCtCQUErQjtBQUN2QyxVQUFNcEosSUFBbUJKLEVBQVEsa0JBQzNCckIsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCO0FBQ2pELElBQUFvSixFQUFRLGtCQUFrQjtBQUMxQixVQUFNbkwsSUFBTXFMLEdBQWdCLE1BQU01SSxDQUFxQjtBQUN2RCxJQUFBMEksRUFBUSxrQ0FBa0M7QUFDMUMsVUFBTUksSUFBVzdJLEtBQUEsZ0JBQUFBLEVBQWMsVUFDekJHLElBQW1CbEM7QUFBQSxNQUN2QkM7QUFBQSxNQUNBZ0IsRUFBYyxJQUFJO0FBQUEsTUFDbEIySixLQUFBLGdCQUFBQSxFQUFVO0FBQUEsSUFDWixHQUNNQyxJQUFvQnRMLEdBQTZCMkMsQ0FBZ0I7QUFDdkUsSUFBQXNJLEVBQVEsa0NBQWtDN0ssRUFBUSxJQUFJLEVBQUU7QUFDeEQsVUFBTW1MLElBQStCMWEsR0FBRyxHQUNsQzJhLElBQWlCcEwsRUFBUSxTQUFTLFNBQ2xDcUwsSUFBMEI7QUFBQSxNQUM5QixrQkFBa0IzTCxFQUFJO0FBQUEsTUFDdEIseUJBQXlCQTtBQUFBLE1BQ3pCLG9CQUFvQjBMO0FBQUEsTUFDcEIsMEJBQTBCQSxJQUFpQjtBQUFBO0FBQUEsUUFFekMsWUFBWXBMLEVBQVE7QUFBQSxRQUNwQiw2QkFBNkJBLEVBQVE7QUFBQSxNQUN2QyxJQUFJO0FBQUEsTUFDSiw2QkFBNkI7QUFBQSxRQUMzQiwwQkFBMEIsQ0FBQyxHQUFDdEksSUFBQTBLLEtBQUEsZ0JBQUFBLEVBQWMsYUFBZCxRQUFBMUssRUFBd0I7QUFBQSxRQUNwRCxrQ0FBa0N5VDtBQUFBLE1BQ3BDO0FBQUEsTUFDQSxHQUFHRDtBQUFBLElBQ0wsR0FDTUksSUFBZSxJQUFJLElBQUksMEJBQTBCakssRUFBUSxPQUFPLEVBQUUsU0FBUyxHQUMzRWtLLElBQWlCLEtBQUssS0FBSyxVQUFVRixDQUF1QixDQUFDLEdBQzdERyxJQUFlLElBQUksZ0JBQWdCO0FBQUEsTUFDdkMsSUFBSXhMLEVBQVE7QUFBQSxNQUNaLEdBQUd1TDtBQUFBLElBQ0wsQ0FBQyxHQUNLRSxJQUFjLEdBQUdILENBQVksSUFBSUUsRUFBYSxTQUFTLENBQUM7QUFDOUQsU0FBSTdULEtBQUF5SyxLQUFBLGdCQUFBQSxFQUFjLGFBQWQsUUFBQXpLLEdBQXdCO0FBQzFCLFlBQUFrVCxFQUFRLHNDQUFzQyxHQUM5QyxPQUFPLFNBQVMsT0FBT1ksR0FDdkIsTUFBTXJWLEdBQU0sS0FBSyxHQUFHLEdBQ2QsSUFBSSxNQUFNLHNFQUFzRTtBQUV4RixJQUFBeVUsRUFBUSxtQ0FBbUMsR0FDM0NBLEVBQVEsMEJBQTBCO0FBQ2xDLFVBQU1hLElBQW1CLE1BQU1uSDtBQUFBLE1BQzdCO0FBQUEsTUFDQTlDO0FBQUEsTUFDQTBKO0FBQUEsTUFDQU07QUFBQSxJQUNGO0FBQ0EsSUFBQVosRUFBUSxzQkFBc0JhLENBQWdCO0FBQzlDLFVBQU1yRyxJQUFVRixHQUF3QnVHLEVBQWlCLElBQUksR0FDdkRDLElBQW9CcEcsR0FBaUJtRyxFQUFpQixNQUFNLE1BQU07QUFDeEUsUUFBSSxDQUFDQztBQUNILFlBQUFiLEdBQVEsa0RBQWtEWSxFQUFpQixJQUFJLEdBQ3pFLElBQUksTUFBTSwrQ0FBK0M7QUFFakUsSUFBQWIsRUFBUSwwQ0FBMEN4RixDQUFPLEVBQUU7QUFDM0QsVUFBTTdOLElBQWdCLE1BQU11RixFQUFtQjBFLEdBQWtCO0FBQUEsTUFDL0QsY0FBY3pCLEVBQVE7QUFBQSxNQUN0QixhQUFhcUY7QUFBQSxNQUNiLHFCQUFxQitGLElBQWlCTyxJQUFvQjtBQUFBLElBQzVELENBQUM7QUFFRCxRQURBZCxFQUFRLCtCQUErQnJULENBQWEsR0FDaER3SSxFQUFRLFNBQVM7QUFDbkIsYUFBTztBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFVBQ04sbUJBQW1CeEksRUFBYyxnQkFBZ0IsQ0FBQyxFQUFFO0FBQUEsUUFDdEQ7QUFBQSxNQUNGO0FBRUEsUUFBSSxDQUFDQSxFQUFjO0FBQ2pCLFlBQUFzVCxHQUFRLG1EQUFtRHRULENBQWEsR0FDbEUsSUFBSSxNQUFNLGdFQUFnRTtBQUVsRixXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixRQUFRQSxFQUFjO0FBQUEsSUFDeEI7QUFBQSxFQUVKO0FBQ0YsR0FFTW9VLEtBQXdCLENBQUM7QUFBQSxFQUM3QixTQUFBQztBQUFBLEVBQ0EsbUJBQUFDO0FBQUEsRUFDQSxjQUFBQztBQUFBLEVBQ0EsWUFBQUM7QUFBQSxFQUNBLGdCQUFBdEs7QUFBQSxFQUNBLHdCQUFBdUs7QUFBQSxFQUNBLFNBQUFqTTtBQUNGLE1BQU07QUF4bUVOLE1BQUF0SSxHQUFBQztBQXltRUUsUUFBTTZGLE1BQWE5RixJQUFBdVUsS0FBQSxnQkFBQUEsRUFBd0IsV0FBeEIsZ0JBQUF2VSxFQUFnQyxnQkFBY2dLLEtBQUEsZ0JBQUFBLEVBQWdCLGVBQWMsR0FDekZ3SyxJQUFhLEtBQUssSUFBSTFPLElBQWEsS0FBSyxDQUFDLEdBQ3pDMk8sT0FBZ0J4VSxJQUFBc1UsS0FBQSxnQkFBQUEsRUFBd0IsV0FBeEIsZ0JBQUF0VSxFQUFnQyxjQUFZcUksS0FBQSxnQkFBQUEsRUFBUyxhQUFZMEIsRUFBZSxVQUFVLFlBQVksR0FDdEgwSyxJQUFjO0FBQUEsSUFDbEIsWUFBWTtBQUFBLElBQ1osaUJBQWlCO0FBQUEsSUFDakIsdUJBQXVCO0FBQUEsTUFDckI7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLG9CQUFvQixDQUFDLFlBQVksZ0JBQWdCO0FBQUEsVUFDakQscUJBQXFCLENBQUMsUUFBUSxZQUFZLFdBQVcsT0FBTyxjQUFjLE1BQU07QUFBQSxVQUNoRix3QkFBd0I7QUFBQSxVQUN4QiwwQkFBMEI7QUFBQSxZQUN4QixRQUFRO0FBQUEsVUFDVjtBQUFBLFVBQ0Esa0JBQWtCO0FBQUEsVUFDbEIsbUJBQW1CO0FBQUEsUUFDckI7QUFBQSxRQUNBLDJCQUEyQjtBQUFBLFVBQ3pCLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxZQUNWLFNBQUFQO0FBQUEsWUFDQSxtQkFBQUM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUE7QUFBQTtBQUFBLE1BR1osWUFBWUUsS0FBYztBQUFBLE1BQzFCLGNBQUFEO0FBQUEsSUFDRjtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsTUFDZixhQUFhO0FBQUEsTUFDYixjQUFBSTtBQUFBLE1BQ0Esa0JBQWtCRixLQUFBLFFBQUFBLEVBQXdCLFVBQVUsY0FBYztBQUFBLE1BQ2xFLFlBQVlDLEVBQVcsUUFBUSxDQUFDO0FBQUEsSUFDbEM7QUFBQSxFQUNGO0FBQ0EsU0FBSUQsS0FBQSxRQUFBQSxFQUF3QiwwQkFDbkIsRUFBRSxHQUFHRyxHQUFhLEdBQUdILEVBQXVCLHdCQUF3QixJQUV0RUc7QUFDVCxHQUNNQyxLQUFzQixNQUNuQixJQUFJLFFBQVEsQ0FBQ3JWLEdBQVNHLE1BQVc7QUFDdEMsUUFBTW1WLElBQVMsU0FBUyxjQUFjLFFBQVE7QUFDOUMsRUFBQUEsRUFBTyxNQUFNLHlDQUNiQSxFQUFPLFFBQVEsSUFDZkEsRUFBTyxTQUFTLE1BQU10VixFQUFRLEdBQzlCc1YsRUFBTyxVQUFVLE1BQU1uVixFQUFPLElBQUksTUFBTSwrQkFBK0IsQ0FBQyxHQUN4RSxTQUFTLEtBQUssWUFBWW1WLENBQU07QUFDbEMsQ0FBQztBQUVILElBQUlDLEtBQWlCO0FBQ3JCLE1BQU1DLEtBQTBCLENBQUN2SSxNQUNWQSxNQUFZclQsTUFBa0JxVCxNQUFZLE9BQU8sU0FBUyxTQUN6RCxlQUFlLFFBRWpDd0ksS0FBMEIsQ0FBQ3hJLEdBQVN5SSxNQUF1QjtBQUMvRCxRQUFNQyxJQUFjSCxHQUF3QnZJLENBQU87QUFDbkQsU0FBSXNJLE9BQW1CLFNBQ3JCQSxLQUFpQixJQUFJLE9BQU8sT0FBTyxTQUFTLElBQUksZUFBZTtBQUFBLElBQzdELGFBQUFJO0FBQUEsSUFDQSxjQUFjRCxFQUFtQjtBQUFBLEVBQ25DLENBQUMsSUFFSUg7QUFDVCxHQUNNSyxLQUF5QyxDQUFDcGIsTUFBYTtBQUMzRCxRQUFNNlgsSUFBZTdYLEVBQVMsc0JBQXNCLEtBQUssQ0FBQ3NWLE1BQVdBLEVBQU8sU0FBUywyQkFBMkI7QUFDaEgsU0FBS3VDLElBR0UvVCxHQUF5QixNQUFNK1QsQ0FBWSxJQUZ6QztBQUdYLEdBQ013RCxLQUFtQyxDQUFDbkssR0FBWW9LLE1BQWdCO0FBeHJFdEUsTUFBQXBWLEdBQUFDLEdBQUFDLEdBQUFDO0FBeXJFRSxRQUFNK0ssSUFBUyxFQUFFLEdBQUdGLEVBQVcsR0FDekI4SCxLQUFpQjdTLEtBQUFELElBQUFvVixFQUFZLHNCQUFaLGdCQUFBcFYsRUFBK0IsU0FBL0IsZ0JBQUFDLEVBQXFDO0FBQzVELE1BQUk2UyxHQUFnQjtBQUNsQixVQUFNLENBQUN1QyxHQUFXLEdBQUdDLENBQWEsTUFBSW5WLEtBQUFELElBQUE0UyxFQUFlLFNBQWYsZ0JBQUE1UyxFQUFxQixXQUFyQixnQkFBQUMsRUFBNkIsTUFBTSxXQUFVLENBQUMsR0FDOUVvVixJQUFXRCxFQUFjLEtBQUssR0FBRyxLQUFLO0FBQzVDLElBQUFwSyxFQUFPL1AsRUFBVSxLQUFLLElBQUkrUCxFQUFPL1AsRUFBVSxLQUFLLEtBQUtpYSxFQUFZLFNBQVMsOEJBQzFFbEssRUFBTy9QLEVBQVUsT0FBTyxJQUFJK1AsRUFBTy9QLEVBQVUsT0FBTyxLQUFLMlgsRUFBZSxlQUFlLE1BQ3ZGNUgsRUFBTy9QLEVBQVUsT0FBTyxJQUFJK1AsRUFBTy9QLEVBQVUsT0FBTyxLQUFLMlgsRUFBZSxZQUFZLElBQ3BGNUgsRUFBTy9QLEVBQVUsSUFBSSxJQUFJK1AsRUFBTy9QLEVBQVUsSUFBSSxLQUFLMlgsRUFBZSxZQUFZLElBQzlFNUgsRUFBTy9QLEVBQVUsUUFBUSxJQUFJK1AsRUFBTy9QLEVBQVUsUUFBUSxLQUFLMlgsRUFBZSxjQUFjLFNBQ3hGNUgsRUFBTy9QLEVBQVUsS0FBSyxJQUFJK1AsRUFBTy9QLEVBQVUsS0FBSyxLQUFLMlgsRUFBZSxzQkFBc0IsSUFDMUY1SCxFQUFPL1AsRUFBVSxVQUFVLElBQUkrUCxFQUFPL1AsRUFBVSxVQUFVLEtBQUtrYSxLQUFhLGVBQzVFbkssRUFBTy9QLEVBQVUsU0FBUyxJQUFJK1AsRUFBTy9QLEVBQVUsU0FBUyxLQUFLb2EsS0FBWTtBQUFBLEVBQzNFO0FBQ0EsU0FBT3JLO0FBQ1QsR0FFTSxFQUFFLE9BQU9zSyxHQUFTLE9BQU9DLEdBQVEsSUFBSWxPLEVBQXFCLGdCQUFnQixHQUMxRW1PLEtBQTZCdE87QUFBQSxFQUNqQyxPQUFPLEVBQUUsU0FBQXVDLEdBQVMsZUFBQUMsRUFBYyxNQUFNO0FBNXNFeEMsUUFBQTVKLEdBQUFDO0FBNnNFSSxVQUFNMFYsSUFBb0I7QUFBQSxNQUN4QixXQUFXL0QsRUFBaUIsS0FBSztBQUFBLE1BQ2pDLGFBQWE7QUFBQSxNQUNiLFdBQVc7QUFBQSxNQUNYLFdBQVcsWUFBWTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRixHQUNNZ0UsSUFBZS9OLEVBQW9COEIsRUFBUSx3QkFBd0JpRixFQUFjO0FBQ3ZGLFFBQUksQ0FBQ2dIO0FBQ0gsYUFBT0Q7QUFFVCxJQUFBSCxFQUFRLGtCQUFrQkksQ0FBWTtBQUN0QyxVQUFNQyxJQUFtQkQsRUFBYTtBQUN0QyxRQUFJLENBQUNDLEVBQWlCO0FBQ3BCLGFBQUFKLEdBQVEsbURBQW1ELEdBQ3BERTtBQUlULFFBRkFILEVBQVEsMkJBQTJCLEdBQ25DLE1BQU1iLEdBQW9CLEdBQ3RCLEdBQUMxVSxLQUFBRCxJQUFBLE9BQU8sV0FBUCxnQkFBQUEsRUFBZSxhQUFmLFFBQUFDLEVBQXlCO0FBQzVCLGFBQUF3VixHQUFRLG9DQUFvQyxHQUNyQ0U7QUFHVCxRQURvQmIsR0FBd0JuTCxFQUFRLE9BQU8sTUFDdkMsZ0JBQWdCLENBQUNrTSxFQUFpQjtBQUNwRCxhQUFBSixHQUFRLCtEQUErRCxHQUNoRUU7QUFFVCxJQUFBSCxFQUFRLHlCQUF5QixPQUFPLE9BQU8sUUFBUTtBQUN2RCxRQUFJO0FBQ0YsWUFBTVIsSUFBcUJkLEdBQXNCO0FBQUEsUUFDL0MsU0FBUztBQUFBLFFBQ1QsbUJBQW1CMkIsRUFBaUI7QUFBQSxRQUNwQyxjQUFjQSxFQUFpQjtBQUFBLFFBQy9CLFlBQVlBLEVBQWlCLDBCQUEwQjtBQUFBO0FBQUEsUUFFdkQsZ0JBQWdCO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWjtBQUFBLE1BQ0YsQ0FBQyxHQUNLLEVBQUUsUUFBUUMsRUFBYSxJQUFJLE1BQU1mLEdBQXdCcEwsRUFBUSxTQUFTcUwsQ0FBa0IsRUFBRTtBQUFBLFFBQ2xHQTtBQUFBLE1BQ0Y7QUFDQSxVQUFJLENBQUNjO0FBQ0gsZUFBQU4sRUFBUSwyQ0FBMkMsR0FDNUNHO0FBQUEsSUFFWCxTQUFTNWIsR0FBSztBQUNaLGFBQUEwYixHQUFRLDBDQUEwQzFiLENBQUcsR0FDOUM0YjtBQUFBLElBQ1Q7QUFDQSxVQUFNNUwsSUFBbUJKLEVBQVEsa0JBQzNCckIsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCLEdBQzNDL0QsSUFBY3NDLEVBQVEsU0FBUyxTQUMvQjBCLElBQWlCLE1BQU1qRSxHQUF5QmdFLEdBQWtCekIsRUFBUSxPQUFPdEMsR0FBYSxNQUFNLEdBQ3BHK1AsSUFBdUIsT0FBT3JMLE1BQWlCO0FBQ25ELFVBQUk7QUFDRixRQUFBSixFQUFTLG1CQUFtQixJQUFJO0FBQUEsVUFDOUIsU0FBQVg7QUFBQSxVQUNBLHVCQUF1QmlNO0FBQUEsVUFDdkIsa0JBQWtCclYsRUFBeUJvSixFQUFRLE9BQU87QUFBQSxVQUMxRCxlQUFBQztBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFlBQ1osR0FBR2M7QUFBQSxZQUNILGdCQUFBVjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILFNBQVNqUSxHQUFLO0FBQ1osUUFBQTBiLEdBQVEsNEJBQTRCMWIsQ0FBRyxHQUN2QzZQLEVBQWMsSUFBSSxpQkFBZ0I3UCxLQUFBLGdCQUFBQSxFQUFLLFlBQVcsZUFBZTtBQUFBLE1BQ25FO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVc2WCxFQUFpQixLQUFLO0FBQUEsTUFDakMsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsV0FBV21FO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFDRixHQUNNQyxLQUE0QmpQO0FBQUEsRUFDaEMsT0FBTztBQUFBLElBQ0wsU0FBQTRDO0FBQUEsSUFDQSx1QkFBQWM7QUFBQSxJQUNBLGtCQUFBN0I7QUFBQSxJQUNBLGVBQUFnQjtBQUFBLElBQ0EsY0FBQWM7QUFBQSxFQUNGLE1BQU07QUF0eUVSLFFBQUExSyxHQUFBQyxHQUFBQyxHQUFBQyxHQUFBOEssR0FBQWdMLEdBQUFDO0FBdXlFSSxJQUFBVixFQUFRLDZCQUE2QjtBQUNyQyxVQUFNSSxJQUFlL04sRUFBb0I4QixFQUFRLHdCQUF3QmlGLEVBQWMsR0FDakYsRUFBRSxnQkFBQTVFLEdBQWdCLHdCQUFBdUssRUFBdUIsSUFBSTdKLEdBQzdDbUwsSUFBbUJELEVBQWE7QUFDdEMsUUFBSSxDQUFDQyxFQUFpQjtBQUNwQixZQUFNLElBQUksTUFBTSxtREFBbUQ7QUFFckUsVUFBTWIsSUFBcUJkLEdBQXNCO0FBQUEsTUFDL0MsU0FBUztBQUFBLE1BQ1QsbUJBQW1CMkIsRUFBaUI7QUFBQSxNQUNwQyxjQUFjQSxFQUFpQjtBQUFBLE1BQy9CLFlBQVlBLEVBQWlCLDBCQUEwQjtBQUFBLE1BQ3ZELGdCQUFBN0w7QUFBQSxNQUNBLHdCQUFBdUs7QUFBQSxJQUNGLENBQUMsR0FDSzRCLElBQVNwQixHQUF3QnBMLEVBQVEsU0FBU3FMLENBQWtCO0FBQzFFLFFBQUk7QUFDRixZQUFNSSxJQUFjLE1BQU1lLEVBQU8sZ0JBQWdCbkIsQ0FBa0I7QUFDbkUsTUFBQVEsRUFBUSwyQkFBMkJKLENBQVc7QUFDOUMsWUFBTXJMLElBQW1CSixFQUFRLGtCQUMzQnJCLElBQVUsTUFBTXRELEVBQVcrRSxDQUFnQixHQUMzQ1ksSUFBZXdLLEdBQWlDdk0sR0FBa0J3TSxDQUFXLEdBQzdFdkssSUFBbUJsQztBQUFBLFFBQ3ZCZ0M7QUFBQSxRQUNBZixFQUFjLElBQUk7QUFBQSxRQUNsQmMsS0FBQSxnQkFBQUEsRUFBYztBQUFBLE1BQ2hCLEdBQ00wTCxNQUF3Qm5XLEtBQUFELElBQUFvVixFQUFZLHNCQUFaLGdCQUFBcFYsRUFBK0IscUJBQS9CLGdCQUFBQyxFQUFpRDtBQUMvRSxVQUFJLENBQUNtVztBQUNILGNBQU0sSUFBSSxNQUFNLDJDQUEyQztBQUU3RCxZQUFNdEwsS0FBMkIsTUFBTTdGLEdBQWlCOEUsR0FBa0I7QUFBQSxRQUN4RSxrQkFBa0JVLEVBQXNCO0FBQUEsUUFDeEMseUJBQXlCQTtBQUFBLFFBQ3pCLG9CQUFvQkksRUFBaUIxUCxFQUFVLEtBQUs7QUFBQSxRQUNwRCx5QkFBeUIwUCxFQUFpQjFQLEVBQVUsVUFBVTtBQUFBLFFBQzlELHdCQUF3QjBQLEVBQWlCMVAsRUFBVSxTQUFTO0FBQUEsUUFDNUQsc0JBQXNCO0FBQUEsVUFDcEIsVUFBVTBQLEVBQWlCMVAsRUFBVSxRQUFRO0FBQUEsVUFDN0MsU0FBUzBQLEVBQWlCMVAsRUFBVSxPQUFPO0FBQUEsUUFDN0M7QUFBQSxNQUNGLENBQUMsR0FDS2tiLEtBQXVCbkIsR0FBdUNwSyxFQUF3QjtBQUM1RixNQUFBMEssRUFBUSwyQkFBMkJhLEVBQW9CO0FBQ3ZELFVBQUl2VyxLQUFnQixNQUFNdUYsRUFBbUIwRSxHQUFrQjtBQUFBLFFBQzdELGNBQWN6QixFQUFRO0FBQUEsUUFDdEIsNkJBQTZCO0FBQUEsVUFDM0Isa0JBQWtCbUMsRUFBc0I7QUFBQTtBQUFBLFVBRXhDLHNCQUFzQjRMLE1BQUEsZ0JBQUFBLEdBQXNCO0FBQUEsVUFDNUMsK0JBQStCO0FBQUEsWUFDN0IsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLGNBQ1QsbUJBQW1CO0FBQUEsY0FDbkIseUJBQXlCRDtBQUFBLFlBQzNCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFDRCxNQUFBWixFQUFRLHVDQUF1QzFWLEVBQWE7QUFDNUQsVUFBSXdXLE1BQVVuVyxLQUFBRCxJQUFBSixHQUFjLG9CQUFkLGdCQUFBSSxFQUFnQyxPQUFoQyxnQkFBQUMsRUFBb0M7QUFDbEQsWUFBTVAsTUFBcUJxTCxJQUFBbkwsR0FBYywwQkFBZCxnQkFBQW1MLEVBQXFDO0FBQUEsUUFDOUQsQ0FBQ21FLE9BQVdBLEdBQU8sU0FBUztBQUFBO0FBRTlCLFVBQUl4UCxNQUFzQkEsR0FBbUIsY0FBYztBQUN6RCxRQUFBNFYsRUFBUSwwQ0FBMEM1VixFQUFrQjtBQUNwRSxjQUFNLEVBQUUsUUFBQXNNLEdBQU8sSUFBSSxNQUFNSSxHQUFxQjtBQUFBLFVBQzVDLEtBQUsxTSxHQUFtQjtBQUFBLFVBQ3hCLFNBQVMrSixFQUFRO0FBQUEsUUFDbkIsQ0FBQztBQUVELFlBREE2TCxFQUFRLHlDQUF5Q3RKLEVBQU0sR0FBRyxHQUN0REEsT0FBVzFPLEVBQWM7QUFDM0IsZ0JBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUU5QyxZQUFJME8sT0FBVzFPLEVBQWM7QUFDM0IsZ0JBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BRTdDO0FBYUEsVUFaSW9DLE1BQXNCLENBQUMwVyxPQUN6QnhXLEtBQWdCLE1BQU11RixFQUFtQjBFLEdBQWtCO0FBQUEsUUFDekQsY0FBY3pCLEVBQVE7QUFBQSxRQUN0QixhQUFhMUksR0FBbUI7QUFBQSxRQUNoQyw2QkFBNkI7QUFBQSxVQUMzQixrQkFBa0I2SyxFQUFzQjtBQUFBLFVBQ3hDLHNCQUFzQjdLLEdBQW1CO0FBQUEsUUFDM0M7QUFBQSxNQUNGLENBQUMsR0FDRDRWLEVBQVEsdUNBQXVDMVYsRUFBYSxHQUM1RHdXLE1BQVVKLEtBQUFELElBQUFuVyxHQUFjLG9CQUFkLGdCQUFBbVcsRUFBZ0MsT0FBaEMsZ0JBQUFDLEVBQW9DLEtBRTVDLENBQUNJO0FBQ0gsY0FBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBRWxDLGFBQU9sTyxHQUE2QjtBQUFBLFFBQ2xDLFdBQVc7QUFBQSxRQUNYLGtCQUFBMkI7QUFBQSxRQUNBLHVCQUFBVTtBQUFBLFFBQ0Esb0JBQW9CSTtBQUFBLFFBQ3BCLGVBQUEvSztBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsTUFDbkIsQ0FBQztBQUFBLElBQ0gsU0FBUy9GLEdBQUs7QUFDWixZQUFBMGIsR0FBUSw0QkFBNEIxYixDQUFHLEdBQ2pDLElBQUksT0FBTUEsS0FBQSxnQkFBQUEsRUFBSyxZQUFXLGVBQWU7QUFBQSxJQUNqRDtBQUFBLEVBQ0Y7QUFDRixHQUVNd2MsS0FBcUIsTUFDbEIsSUFBSSxRQUFRLENBQUNqWCxHQUFTRyxNQUFXO0FBQ3RDLFFBQU1tVixJQUFTLFNBQVMsY0FBYyxRQUFRO0FBQzlDLEVBQUFBLEVBQU8sTUFBTSxrRUFDYkEsRUFBTyxjQUFjLGFBQ3JCQSxFQUFPLFFBQVEsSUFDZkEsRUFBTyxTQUFTLE1BQU10VixFQUFRLEdBQzlCc1YsRUFBTyxVQUFVLE1BQU1uVixFQUFPLElBQUksTUFBTSw4QkFBOEIsQ0FBQyxHQUN2RSxTQUFTLEtBQUssWUFBWW1WLENBQU07QUFDbEMsQ0FBQyxHQUVHNEIsS0FBa0MsQ0FBQ3hMLEdBQVl5TCxNQUFvQjtBQUN2RSxRQUFNQyxJQUFtQkQsRUFBZ0IsTUFBTSxjQUFjLGdCQUN2REUsSUFBaUJGLEVBQWdCLGdCQUNqQ0csSUFBa0JILEVBQWdCLGlCQUNsQ3ZMLElBQVMsRUFBRSxHQUFHRixFQUFXO0FBQy9CLFVBQUkwTCxLQUFvQkMsS0FBa0JDLE9BQ3hDMUwsRUFBTy9QLEVBQVUsS0FBSyxJQUFJK1AsRUFBTy9QLEVBQVUsS0FBSyxNQUFLdWIsS0FBQSxnQkFBQUEsRUFBa0Isa0JBQWdCQyxLQUFBLGdCQUFBQSxFQUFnQixrQkFBZ0JDLEtBQUEsZ0JBQUFBLEVBQWlCLGlCQUFnQix5QkFDeEoxTCxFQUFPL1AsRUFBVSxPQUFPLElBQUkrUCxFQUFPL1AsRUFBVSxPQUFPLE1BQUt1YixLQUFBLGdCQUFBQSxFQUFrQixpQkFBZUMsS0FBQSxnQkFBQUEsRUFBZ0IsaUJBQWVDLEtBQUEsZ0JBQUFBLEVBQWlCLGdCQUFlLE1BQ3pKMUwsRUFBTy9QLEVBQVUsUUFBUSxJQUFJK1AsRUFBTy9QLEVBQVUsUUFBUSxNQUFLdWIsS0FBQSxnQkFBQUEsRUFBa0IsZ0JBQWNDLEtBQUEsZ0JBQUFBLEVBQWdCLGdCQUFjQyxLQUFBLGdCQUFBQSxFQUFpQixlQUFjLFNBQ3hKMUwsRUFBTy9QLEVBQVUsVUFBVSxJQUFJK1AsRUFBTy9QLEVBQVUsVUFBVSxNQUFLdWIsS0FBQSxnQkFBQUEsRUFBa0IsZUFBYUMsS0FBQSxnQkFBQUEsRUFBZ0IsZUFBYUMsS0FBQSxnQkFBQUEsRUFBaUIsY0FBYSxlQUN6SjFMLEVBQU8vUCxFQUFVLFNBQVMsSUFBSStQLEVBQU8vUCxFQUFVLFNBQVMsTUFBS3ViLEtBQUEsZ0JBQUFBLEVBQWtCLGdCQUFjQyxLQUFBLGdCQUFBQSxFQUFnQixnQkFBY0MsS0FBQSxnQkFBQUEsRUFBaUIsZUFBYyxnQkFFckoxTDtBQUNUO0FBQ0FwUyxFQUFFLE9BQU87QUFBQSxFQUNQLE1BQU1BLEVBQUUsT0FBTztBQUFBLElBQ2IsZ0JBQWdCQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQztBQUFBLElBQzVDLFFBQVFBLEVBQUUsTUFBTUEsRUFBRSxJQUFJLENBQUM7QUFBQSxJQUN2QixhQUFhQSxFQUFFLE9BQU87QUFBQSxJQUN0QixhQUFhQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxHQUFHQSxFQUFFLElBQUksQ0FBQztBQUFBLEVBQzNDLENBQUM7QUFBQSxFQUNELFFBQVFBLEVBQUUsUUFBUSxnQ0FBZ0M7QUFDcEQsQ0FBQztBQUNELE1BQU0rZCxLQUFnQyxDQUFDO0FBQUEsRUFDckMsT0FBQUM7QUFBQSxFQUNBLFNBQUF4TztBQUNGLE1BQU07QUF4N0VOLE1BQUF0STtBQXk3RUUsTUFBSXNJLEVBQVEsU0FBUztBQUNuQixXQUFPO0FBQUEsTUFDTCxvQkFBb0I7QUFBQSxNQUNwQixnQkFBZ0I7QUFBQSxRQUNkLFFBQVF3TyxFQUFNO0FBQUEsUUFDZCxPQUFPO0FBQUEsUUFDUCxlQUFlO0FBQUEsUUFDZixNQUFNO0FBQUEsTUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLQSxlQUFlLElBQUksSUFBSSxRQUFReE8sRUFBUSxLQUFLLElBQUlwUCxFQUFjLEVBQUUsU0FBUztBQUFBLElBQzNFO0FBRUYsUUFBTTZkLEtBQVcvVyxJQUFBc0ksRUFBUSxlQUFSLGdCQUFBdEksRUFBcUI7QUFDdEMsTUFBSytXO0FBQ0wsV0FBTztBQUFBLE1BQ0wscUJBQW9CQSxLQUFBLGdCQUFBQSxFQUFVLGdCQUFlO0FBQUEsTUFDN0MsZ0JBQWdCO0FBQUEsUUFDZCxRQUFRRCxFQUFNO0FBQUEsUUFDZCxRQUFPQyxLQUFBLGdCQUFBQSxFQUFVLGdCQUFlO0FBQUEsUUFDaEMsOEJBQThCQSxLQUFBLGdCQUFBQSxFQUFVO0FBQUEsUUFDeEMsZ0NBQStCQSxLQUFBLGdCQUFBQSxFQUFVLDJCQUEwQjtBQUFBLFFBQ25FLGVBQWU7QUFBQSxRQUNmLE1BQU07QUFBQSxNQUNSO0FBQUEsTUFDQSxlQUFlLGtDQUFrQ3pPLEVBQVEsS0FBSztBQUFBLElBQ2hFO0FBQ0YsR0FDTTBPLEtBQXNCLENBQUM7QUFBQSxFQUMzQix3QkFBQXpDO0FBQUEsRUFDQSxnQkFBQXZLO0FBQUEsRUFDQSxTQUFBMUI7QUFBQSxFQUNBLGNBQUEyTyxJQUFlO0FBQ2pCLE1BQU07QUE3OUVOLE1BQUFqWCxHQUFBQztBQTg5RUUsUUFBTXdVLE9BQWdCelUsSUFBQXVVLEtBQUEsZ0JBQUFBLEVBQXdCLFdBQXhCLGdCQUFBdlUsRUFBZ0MsY0FBWXNJLEtBQUEsZ0JBQUFBLEVBQVMsYUFBWTBCLEVBQWUsVUFBVSxZQUFZLEdBRXRIZ0osUUFEYS9TLElBQUFzVSxLQUFBLGdCQUFBQSxFQUF3QixXQUF4QixnQkFBQXRVLEVBQWdDLGdCQUFjK0osS0FBQSxnQkFBQUEsRUFBZ0IsZUFBYyxLQUNsRSxLQUFLLFFBQVEsQ0FBQztBQUMzQyxTQUFPO0FBQUEsSUFDTCxjQUFBeUs7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLFFBQU9GLEtBQUEsZ0JBQUFBLEVBQXdCLFVBQVMwQyxLQUFnQjtBQUFBLE1BQ3hELE1BQU0xQyxLQUFBLFFBQUFBLEVBQXdCLFVBQVUsWUFBWTtBQUFBLE1BQ3BELFFBQUF2QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsR0FFTSxFQUFFLE9BQU9rRSxHQUFRLElBQUkzUCxFQUFxQixlQUFlO0FBQy9ELGVBQWU0UCxHQUF5QjlNLEdBQU9WLEdBQVM7QUFDdEQsTUFBSTtBQVdGLFVBQU0vSixLQVY2QixNQUFNK0csR0FBbUJnRCxFQUFRLFlBQVk7QUFBQSxNQUM5RSx5QkFBeUJBLEVBQVE7QUFBQSxNQUNqQyw2QkFBNkI7QUFBQSxRQUMzQiwyQkFBMkI7QUFBQSxVQUN6QixnQkFBZ0JVLEVBQU07QUFBQSxVQUN0QixvQkFBb0IsT0FBTyxTQUFTO0FBQUEsVUFDcEMsa0JBQWtCVixFQUFRLGlCQUFpQjtBQUFBLFFBQzdDO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQyxHQUNxRCxzQkFDaER5TixJQUF5QnhYLEtBQUEsZ0JBQUFBLEVBQXFCO0FBQ3BELFFBQUksQ0FBQ3dYO0FBQ0gsWUFBTSxJQUFJLE1BQU0sNENBQTRDO0FBRTlELElBQUF6TixFQUFRLFFBQVEsMkJBQTJCeU4sQ0FBc0I7QUFBQSxFQUNuRSxTQUFTcmQsR0FBSztBQUNaLFVBQUE0UCxFQUFRLFFBQVEsTUFBTSxHQUNoQjVQO0FBQUEsRUFDUjtBQUNGO0FBQ0EsZUFBZXNkLEdBQVV6WCxHQUFvQitKLEdBQVM7QUFDcEQsTUFBSSxDQUFDL0osRUFBbUI7QUFDdEIsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBRXpDLEVBQUFzWCxHQUFRLDBDQUEwQ3RYLENBQWtCO0FBQ3BFLFFBQU0sRUFBRSxRQUFBc00sRUFBTyxJQUFJLE1BQU1JLEdBQXFCO0FBQUEsSUFDNUMsS0FBSzFNLEVBQW1CO0FBQUEsSUFDeEIsU0FBUytKLEVBQVE7QUFBQSxFQUNuQixDQUFDO0FBRUQsTUFEQXVOLEdBQVEseUNBQXlDaEwsQ0FBTSxHQUFHLEdBQ3REQSxNQUFXMU8sRUFBYztBQUMzQixVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFFOUMsTUFBSTBPLE1BQVcxTyxFQUFjO0FBQzNCLFVBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUUzQyxRQUFNc0MsSUFBZ0IsTUFBTXVGLEVBQW1Cc0UsRUFBUSxZQUFZO0FBQUEsSUFDakUsY0FBY0EsRUFBUSxRQUFRO0FBQUEsSUFDOUIsNkJBQTZCO0FBQUEsTUFDM0IsYUFBYS9KLEVBQW1CO0FBQUEsTUFDaEMsc0JBQXNCQSxFQUFtQjtBQUFBLE1BQ3pDLGtCQUFrQitKLEVBQVEsc0JBQXNCO0FBQUEsSUFDbEQ7QUFBQSxFQUNGLENBQUM7QUFDRCxTQUFBdU4sR0FBUSx1Q0FBdUNwWCxDQUFhLEdBQ3JEQTtBQUNUO0FBQ0EsZUFBZXdYLEdBQTBCak4sR0FBT1YsR0FBUztBQTloRnpELE1BQUEzSixHQUFBQyxHQUFBQyxHQUFBQyxHQUFBOEs7QUEraEZFLE1BQUk7QUFDRixVQUFNbUssSUFBYy9LLEVBQU0sU0FDcEJXLElBQWF3TCxHQUFnQzdNLEVBQVEsa0JBQWtCeUwsQ0FBVyxHQUNsRnZLLElBQW1CbEM7QUFBQSxNQUN2QnFDO0FBQUEsTUFDQXJCLEVBQVEsY0FBYyxJQUFJO0FBQUEsTUFDMUJBLEVBQVE7QUFBQSxJQUNWLEdBYU00TixLQVoyQixNQUFNdFMsR0FBaUIwRSxFQUFRLFlBQVk7QUFBQSxNQUMxRSxrQkFBa0JBLEVBQVEsc0JBQXNCO0FBQUEsTUFDaEQseUJBQXlCQSxFQUFRO0FBQUEsTUFDakMsb0JBQW9Ca0IsRUFBaUIxUCxFQUFVLEtBQUs7QUFBQSxNQUNwRCx5QkFBeUIwUCxFQUFpQjFQLEVBQVUsVUFBVTtBQUFBLE1BQzlELHdCQUF3QjBQLEVBQWlCMVAsRUFBVSxTQUFTO0FBQUEsTUFDNUQsc0JBQXNCO0FBQUEsUUFDcEIsVUFBVTBQLEVBQWlCMVAsRUFBVSxRQUFRO0FBQUEsUUFDN0MsU0FBUzBQLEVBQWlCMVAsRUFBVSxPQUFPO0FBQUEsTUFDN0M7QUFBQSxJQUNGLENBQUMsR0FDb0Qsc0JBQXNCLENBQUMsRUFDdEM7QUFDdEMsUUFBSSxDQUFDb2M7QUFDSCxZQUFNLElBQUksTUFBTSwwQ0FBMEM7QUFFNUQsUUFBSXpYLElBQWdCLE1BQU11RixFQUFtQnNFLEVBQVEsWUFBWTtBQUFBLE1BQy9ELGNBQWNBLEVBQVEsUUFBUTtBQUFBLE1BQzlCLDZCQUE2QjtBQUFBLFFBQzNCLGtCQUFrQkEsRUFBUSxzQkFBc0I7QUFBQSxRQUNoRCxzQkFBc0I0TjtBQUFBLFFBQ3RCLCtCQUErQjtBQUFBLFVBQzdCLE1BQU07QUFBQSxVQUNOLFVBQVU7QUFBQSxZQUNSLG1CQUFtQjtBQUFBLFlBQ25CLHlCQUF5QixLQUFLLFVBQVVuQyxFQUFZLEtBQUs7QUFBQSxVQUMzRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QsSUFBQThCLEdBQVEsdUNBQXVDcFgsQ0FBYTtBQUM1RCxRQUFJd1csS0FBVXJXLEtBQUFELElBQUFGLEVBQWMsb0JBQWQsZ0JBQUFFLEVBQWdDLE9BQWhDLGdCQUFBQyxFQUFvQztBQUNsRCxVQUFNTCxLQUFxQk0sSUFBQUosRUFBYywwQkFBZCxnQkFBQUksRUFBcUM7QUFBQSxNQUM5RCxDQUFDa1AsTUFBV0EsRUFBTyxTQUFTO0FBQUE7QUFNOUIsUUFKSXhQLEtBQUEsUUFBQUEsRUFBb0IsZ0JBQWdCQSxFQUFtQixjQUFjQSxFQUFtQixnQkFDMUZFLElBQWdCLE1BQU11WCxHQUFVelgsR0FBb0IrSixDQUFPLEdBQzNEMk0sS0FBVXJMLEtBQUE5SyxJQUFBTCxFQUFjLG9CQUFkLGdCQUFBSyxFQUFnQyxPQUFoQyxnQkFBQThLLEVBQW9DLEtBRTVDLENBQUNxTDtBQUNILFlBQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUVsQyxVQUFNdFYsSUFBUztBQUFBLE1BQ2IsUUFBUSxnQkFBZ0I7QUFBQSxJQUMxQjtBQUNBLFdBQUEySSxFQUFRLFFBQVEsZ0JBQWdCM0ksQ0FBTSxHQUMvQm9ILEdBQTZCO0FBQUEsTUFDbEMsV0FBVztBQUFBLE1BQ1gsa0JBQWtCdUIsRUFBUTtBQUFBLE1BQzFCLHVCQUF1QkEsRUFBUTtBQUFBLE1BQy9CLG9CQUFvQmtCO0FBQUEsTUFDcEIsZUFBQS9LO0FBQUEsTUFDQSxpQkFBaUI7QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSCxTQUFTL0YsR0FBSztBQUNaLFVBQU1pSCxJQUFTO0FBQUEsTUFDYixRQUFRLGdCQUFnQjtBQUFBLElBQzFCO0FBQ0EsVUFBQTJJLEVBQVEsUUFBUSxnQkFBZ0IzSSxDQUFNLEdBQ2hDakg7QUFBQSxFQUNSO0FBQ0Y7QUFFQSxNQUFNLEVBQUUsT0FBT3lkLElBQVMsT0FBT0MsR0FBUSxJQUFJbFEsRUFBcUIsZUFBZSxHQUN6RW1RLEtBQTRCdFE7QUFBQSxFQUNoQyxPQUFPLEVBQUUsU0FBQXVDLEdBQVMsZUFBQUMsRUFBYyxNQUFNO0FBQ3BDLFVBQU0rTCxJQUFvQjtBQUFBLE1BQ3hCLFdBQVcvRCxFQUFpQixLQUFLO0FBQUEsTUFDakMsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsV0FBVyxZQUFZO0FBQUEsTUFDdkI7QUFBQSxJQUNGLEdBQ00rRixJQUFjOVAsRUFBb0I4QixFQUFRLHdCQUF3QmdGLEVBQWE7QUFDckYsUUFBSSxDQUFDZ0o7QUFDSCxhQUFPaEM7QUFFVCxJQUFBNkIsR0FBUSwwQkFBMEI7QUFDbEMsUUFBSTtBQUNGLFlBQU1qQixHQUFtQixHQUN6QmlCLEdBQVEsbUNBQW1DO0FBQUEsSUFDN0MsU0FBU3pkLEdBQUs7QUFDWixhQUFBMGQsR0FBUSxnQ0FBZ0MxZCxDQUFHLEdBQ3BDNGI7QUFBQSxJQUNUO0FBQ0EsUUFBSSxDQUFDLE9BQU8sbUJBQW1CLENBQUMsZ0JBQWdCLGdCQUFnQjtBQUM5RCxhQUFBNkIsR0FBUSxtREFBbUQsR0FDcEQ3QjtBQUlULFFBRkE2QixHQUFRLGtCQUFrQixHQUV0QixDQURvQixNQUFNLGdCQUFnQixnQkFBZ0I7QUFFNUQsYUFBQUEsR0FBUSx5Q0FBeUMsR0FDMUM3QjtBQUdULFFBQUksQ0FEcUJnQyxFQUFZLFNBQ2Y7QUFDcEIsWUFBTSxJQUFJLE1BQU0sbURBQW1EO0FBRXJFLFVBQU01TixJQUFtQkosRUFBUSxrQkFDM0JyQixJQUFVLE1BQU10RCxFQUFXK0UsQ0FBZ0IsR0FDM0MvRCxJQUFjc0MsRUFBUSxTQUFTLFNBQy9CMEIsSUFBaUIsTUFBTWpFLEdBQXlCZ0UsR0FBa0J6QixFQUFRLE9BQU90QyxHQUFhLE1BQU0sR0FDcEc0UixJQUFzQixPQUFPbE4sTUFBaUI7QUFDbEQsVUFBSTtBQUNGLGNBQU1KLEVBQVMsa0JBQWtCLElBQUk7QUFBQSxVQUNuQyxTQUFBWDtBQUFBLFVBQ0EsdUJBQXVCZ087QUFBQSxVQUN2QixrQkFBa0JwWCxFQUF5Qm9KLEVBQVEsT0FBTztBQUFBLFVBQzFELGVBQUFDO0FBQUEsVUFDQSxjQUFjO0FBQUEsWUFDWixHQUFHYztBQUFBLFlBQ0gsZ0JBQUFWO0FBQUEsVUFDRjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFFBQ2QsQ0FBQztBQUFBLE1BQ0gsU0FBU2pRLEdBQUs7QUFDWixRQUFBMGQsR0FBUSwyQkFBMkIxZCxDQUFHLEdBQ3RDNlAsRUFBYyxJQUFJLGlCQUFnQjdQLEtBQUEsZ0JBQUFBLEVBQUssWUFBVyxlQUFlO0FBQUEsTUFDbkU7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLE1BQ0wsV0FBVzZYLEVBQWlCLEtBQUs7QUFBQSxNQUNqQyxhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXZ0c7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUNGLEdBQ01DLEtBQTJCOVE7QUFBQSxFQUMvQixPQUFPO0FBQUEsSUFDTCxTQUFBNEM7QUFBQSxJQUNBLHVCQUFBYztBQUFBLElBQ0Esa0JBQUE3QjtBQUFBLElBQ0EsY0FBQThCO0FBQUEsSUFDQSxlQUFBZDtBQUFBLEVBQ0YsTUFBTTtBQS9xRlIsUUFBQTVKO0FBZ3JGSSxVQUFNMlgsSUFBYzlQLEVBQW9COEIsRUFBUSx3QkFBd0JnRixFQUFhLEdBQy9FLEVBQUUsd0JBQUE0RixHQUF3QixnQkFBQXZLLEVBQWUsSUFBSVUsR0FDN0NYLElBQW1CSixFQUFRLGtCQUMzQnJCLElBQVUsTUFBTXRELEVBQVcrRSxDQUFnQixHQUMzQy9ELElBQWNzQyxFQUFRLFNBQVMsU0FDL0IsRUFBRSxjQUFBbU0sR0FBYyxPQUFBcUMsRUFBTSxJQUFJRSxHQUFvQjtBQUFBLE1BQ2xELHdCQUFBekM7QUFBQSxNQUNBLGdCQUFBdks7QUFBQSxNQUNBLGVBQWNoSyxJQUFBMlgsS0FBQSxnQkFBQUEsRUFBYSxhQUFiLGdCQUFBM1gsRUFBdUI7QUFBQSxJQUN2QyxDQUFDLEdBQ0tSLElBQWlCO0FBQUEsTUFDckIsYUFBYTtBQUFBLE1BQ2IsY0FBQWlWO0FBQUEsTUFDQSw4QkFBOEIsQ0FBQyxTQUFTLGlCQUFpQixNQUFNO0FBQUEsTUFDL0QsK0JBQStCLENBQUMsT0FBTztBQUFBLE1BQ3ZDLG1CQUFtQixDQUFDLFFBQVEsY0FBYyxRQUFRLFVBQVU7QUFBQSxNQUM1RCxzQkFBc0I7QUFBQSxRQUNwQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxNQUNBLE9BQUFxQztBQUFBLE1BQ0EseUJBQXlCRCxHQUE4QjtBQUFBLFFBQ3JELE9BQUFDO0FBQUEsUUFDQSxTQUFBeE87QUFBQSxNQUNGLENBQUM7QUFBQSxNQUNELElBQUdpTSxLQUFBLGdCQUFBQSxFQUF3QiwyQkFBMEIsQ0FBQztBQUFBLElBQ3hELEdBQ011RCxJQUFVLElBQUksZ0JBQWdCLEdBQUd0WSxDQUFjLEdBQy9DdVksSUFBaUI7QUFBQSxNQUNyQixTQUFBRDtBQUFBLE1BQ0EsWUFBWW5PLEVBQVE7QUFBQSxNQUNwQix1QkFBQWM7QUFBQSxNQUNBLGtCQUFBN0I7QUFBQSxNQUNBLGtCQUFrQitPLEVBQVk7QUFBQSxNQUM5QixTQUFBclA7QUFBQSxNQUNBLGFBQUF0QztBQUFBLE1BQ0EsU0FBUzJELEVBQVE7QUFBQSxNQUNqQixlQUFBQztBQUFBLE1BQ0Esb0JBQW9CYyxLQUFBLGdCQUFBQSxFQUFjO0FBQUEsSUFDcEM7QUFDQSxXQUFPLElBQUksUUFBUSxDQUFDcEwsR0FBU0csTUFBVztBQUN0QyxZQUFNNE0sSUFBZSxNQUFNO0FBQ3pCLFFBQUFtTCxHQUFRLDJCQUEyQixHQUNuQy9YLEVBQU8sSUFBSSxNQUFNLDJCQUEyQixDQUFDO0FBQUEsTUFDL0M7QUFDQSxNQUFBcVksRUFBUSxXQUFXekwsR0FDbkJ5TCxFQUFRLHFCQUFxQixPQUFPek4sTUFBVTtBQUM1QyxZQUFJO0FBQ0YsZ0JBQU04TSxHQUF5QjlNLEdBQU8wTixDQUFjO0FBQUEsUUFDdEQsU0FBU2hlLEdBQUs7QUFDWixVQUFBMEYsRUFBTzFGLENBQUc7QUFBQSxRQUNaO0FBQUEsTUFDRixHQUNBK2QsRUFBUSwwQkFBMEIsTUFBTTtBQUN0QyxjQUFNRSxJQUFTO0FBQUEsVUFDYixVQUFVLEVBQUUsR0FBR2xCLEVBQU07QUFBQSxRQUN2QjtBQUNBLFFBQUFnQixFQUFRLCtCQUErQkUsQ0FBTTtBQUFBLE1BQy9DLEdBQ0FGLEVBQVEsc0JBQXNCLE9BQU96TixNQUFVO0FBQzdDLFlBQUk7QUFDRixnQkFBTXJKLElBQVMsTUFBTXNXLEdBQTBCak4sR0FBTzBOLENBQWM7QUFDcEUsVUFBQXpZLEVBQVEwQixDQUFNO0FBQUEsUUFDaEIsU0FBU2pILEdBQUs7QUFDWixVQUFBMEYsRUFBTzFGLENBQUc7QUFBQSxRQUNaO0FBQUEsTUFDRixHQUNBK2QsRUFBUSxNQUFNO0FBQUEsSUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQy9kLE1BQVE7QUFDaEIsWUFBQTBkLEdBQVEsMkJBQTJCMWQsQ0FBRyxHQUNoQ0E7QUFBQSxJQUNSLENBQUM7QUFBQSxFQUNIO0FBQ0YsR0FFTWtlLEtBQXlDLEdBQ3pDQyxLQUFnQnBmLEVBQUUsT0FBTztBQUFBLEVBQzdCLGdCQUFnQkEsRUFBRSxRQUFRLE1BQU07QUFBQSxFQUNoQyxVQUFVQSxFQUFFLFFBQVEsUUFBUTtBQUFBLEVBQzVCLFVBQVVBLEVBQUUsT0FBTztBQUFBLElBQ2pCLGFBQWFBLEVBQUUsT0FBTztBQUFBLElBQ3RCLFdBQVdBLEVBQUUsT0FBTztBQUFBLElBQ3BCLFdBQVdBLEVBQUUsT0FBTztBQUFBLEVBQ3RCLENBQUM7QUFDSCxDQUFDLEdBRUssRUFBRSxPQUFPcWYsR0FBUyxPQUFPQyxHQUFRLElBQUk3USxFQUFxQixhQUFhLEdBQ3ZFOFEsS0FBZWpSO0FBQUEsRUFDbkIsT0FBTyxFQUFFLFNBQUF1QyxFQUFRLE1BQU07QUFDckIsSUFBQXdPLEVBQVEsbURBQW1EO0FBQzNELFVBQU0xTixJQUF3QjVDLEVBQW9COEIsRUFBUSx3QkFBd0J1TyxFQUFhO0FBQy9GLElBQUFDLEVBQVEsMEJBQTBCLEtBQUssVUFBVTFOLENBQXFCLENBQUMsRUFBRSxHQUN6RTBOLEVBQVEsOEJBQThCO0FBQ3RDLFVBQU03UCxJQUFVLE1BQU10RCxFQUFXMkUsRUFBUSxnQkFBZ0I7QUFDekQsUUFBSTJPO0FBTUosUUFMSWhRLEVBQVEsU0FBUyxVQUNuQmdRLElBQXNCTCxLQUV0QkssSUFBc0JoUSxFQUFRLG1CQUU1QkEsRUFBUSxhQUFhLFNBQVNBLEVBQVEsU0FBUztBQUNqRCxZQUFNLE1BQU0sMENBQTBDO0FBRXhELFVBQU1pUSxJQUFtQkQsR0FDbkJFLElBQWtDLEtBQUssSUFBSUQsSUFBbUIsSUFBSSxHQUFHLEdBQ3JFRSxJQUFnQjFmLEdBQUcsR0FDbkIyZixJQUFjO0FBQUEsTUFDbEIsa0JBQUFIO0FBQUEsTUFDQSxpQ0FBQUM7QUFBQSxNQUNBLGVBQUFDO0FBQUEsSUFDRixHQUNNRSxJQUF1QjtBQUFBLE1BQzNCLFFBQVFsTyxFQUFzQixTQUFTO0FBQUEsTUFDdkMsVUFBVUEsRUFBc0IsU0FBUztBQUFBLE1BQ3pDLFlBQVlBLEVBQXNCLFNBQVM7QUFBQSxJQUM3QztBQUNBLFdBQU87QUFBQSxNQUNMLGFBQWE7QUFBQSxNQUNiLGFBQUFpTztBQUFBLE1BQ0Esc0JBQUFDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixHQUNNQyxLQUFjN1I7QUFBQSxFQUNsQixPQUFPO0FBQUEsSUFDTCxTQUFBNEM7QUFBQSxJQUNBLHVCQUFBYztBQUFBLElBQ0Esa0JBQUE3QjtBQUFBLElBQ0EsZUFBQWdCO0FBQUEsSUFDQSxjQUFBYztBQUFBLElBQ0EsWUFBQTZIO0FBQUEsRUFDRixNQUFNO0FBQ0osSUFBQTRGLEVBQVEsc0JBQXNCLEdBQzlCQSxFQUFRLFdBQVd4TyxDQUFPLEdBQzFCd08sRUFBUSx5QkFBeUIxTixDQUFxQixHQUN0RDBOLEVBQVEsb0JBQW9CdlAsQ0FBZ0IsR0FDNUN1UCxFQUFRLGlCQUFpQnZPLENBQWEsR0FDdEN1TyxFQUFRLGdCQUFnQnpOLENBQVksR0FDcEN5TixFQUFRLGNBQWM1RixDQUFVO0FBQ2hDLFVBQU14SSxJQUFtQkosRUFBUTtBQUNqQyxRQUFJLENBQUM0SSxFQUFXO0FBQ2QsWUFBTSxNQUFNLGtHQUFrRztBQUVoSCxVQUFNakssSUFBVSxNQUFNdEQsRUFBVzJFLEVBQVEsZ0JBQWdCLEdBQ25EK0osSUFBaUJwTCxFQUFRLFNBQVMsU0FDbEN3QyxJQUEyQixNQUFNN0YsR0FBaUIwRSxFQUFRLGtCQUFrQjtBQUFBLE1BQ2hGLHlCQUF5QmM7QUFBQSxNQUN6QixrQkFBa0JBLEVBQXNCO0FBQUEsTUFDeEMsb0JBQW9CQyxFQUFhO0FBQUEsTUFDakMseUJBQXlCQSxFQUFhO0FBQUEsTUFDdEMsd0JBQXdCQSxFQUFhO0FBQUEsTUFDckMsb0JBQW9CZ0o7QUFBQSxNQUNwQiwwQkFBMEJBLElBQWlCO0FBQUE7QUFBQSxRQUV6QyxZQUFZcEwsRUFBUTtBQUFBLFFBQ3BCLDZCQUE2QmlLLEVBQVcsWUFBWTtBQUFBLE1BQ3RELElBQUk7QUFBQSxJQUNOLENBQUM7QUFDRCxRQUFJLENBQUM3SCxFQUFhO0FBQ2hCLFlBQU07QUFBQSxRQUNKLDZCQUE2QkEsRUFBYSxPQUFPLElBQUksSUFBSUEsRUFBYSxPQUFPLE9BQU8sSUFBSSxLQUFLLFVBQVVBLEVBQWEsT0FBTyxJQUFJLENBQUM7QUFBQSxNQUNsSTtBQUVGLFVBQU01SyxJQUFnQixNQUFNdUYsRUFBbUIwRSxHQUFrQjtBQUFBLE1BQy9ELGNBQWN6QixFQUFRO0FBQUEsTUFDdEIsYUFBYW9DLEVBQWEsTUFBTSxjQUFjO0FBQUEsTUFDOUMscUJBQXFCcEMsRUFBUSxTQUFTLFVBQVV3QyxFQUF5QixzQkFBc0I7QUFBQSxNQUMvRiw2QkFBNkI7QUFBQSxRQUMzQixlQUFlSixFQUFhO0FBQUEsUUFDNUIsWUFBWUEsRUFBYTtBQUFBLE1BQzNCO0FBQUEsSUFDRixDQUFDO0FBRUQsUUFEQXlOLEVBQVEsbUJBQW1CclksQ0FBYSxFQUFFLEdBQ3RDd0ksRUFBUSxTQUFTLFNBQVM7QUFDNUIsTUFBQTZQLEVBQVEsd0JBQXdCLEdBQ2hDQSxFQUFRLGtEQUFrRHJZLENBQWE7QUFDdkUsWUFBTXlJLElBQXVCWCxHQUFnQzlILENBQWE7QUFDMUUsYUFBQXFZLEVBQVEsMENBQTBDNVAsRUFBcUIsaUJBQWlCLEdBQUcsR0FDcEYsRUFBRSxNQUFNLFNBQVMsUUFBUUEsRUFBcUI7QUFBQSxJQUN2RCxPQUFPO0FBRUwsVUFEQTRQLEVBQVEsbUJBQW1CLEdBQ3ZCLENBQUNyWSxFQUFjO0FBQ2pCLGNBQUFzWSxHQUFRLG1EQUFtRHRZLENBQWEsR0FDbEUsSUFBSSxNQUFNLGdFQUFnRTtBQUVsRixhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixRQUFRQSxFQUFjO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsZUFBZStZLEdBQXVCeE8sR0FBT1YsR0FBUztBQUNwRCxNQUFJO0FBV0YsVUFBTS9KLEtBVjZCLE1BQU0rRyxHQUFtQmdELEVBQVEsWUFBWTtBQUFBLE1BQzlFLHlCQUF5QkEsRUFBUTtBQUFBLE1BQ2pDLDZCQUE2QjtBQUFBLFFBQzNCLHVCQUF1QjtBQUFBLFVBQ3JCLGdCQUFnQlUsRUFBTTtBQUFBLFVBQ3RCLG9CQUFvQixPQUFPLFNBQVM7QUFBQSxVQUNwQyxrQkFBa0JWLEVBQVEsaUJBQWlCO0FBQUEsUUFDN0M7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDLEdBQ3FELHNCQUNoRHlOLElBQXlCeFgsS0FBQSxnQkFBQUEsRUFBcUI7QUFDcEQsUUFBSSxDQUFDd1g7QUFDSCxZQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFFOUQsSUFBQXpOLEVBQVEsUUFBUSwyQkFBMkJ5TixDQUFzQjtBQUFBLEVBQ25FLFNBQVNyZCxHQUFLO0FBQ1osVUFBQTRQLEVBQVEsUUFBUSxNQUFNLEdBQ2hCNVA7QUFBQSxFQUNSO0FBQ0Y7QUFDQSxlQUFlK2UsR0FBd0J6TyxHQUFPVixHQUFTO0FBMTRGdkQsTUFBQTNKLEdBQUFDO0FBMjRGRSxNQUFJO0FBQ0YsVUFBTW1WLElBQWMvSyxFQUFNLFNBQ3BCVyxJQUFhd0wsR0FBZ0M3TSxFQUFRLGtCQUFrQnlMLENBQVcsR0FDbEZ2SyxJQUFtQmxDLEdBQThCcUMsR0FBWXJCLEVBQVEsY0FBYyxJQUFJLGlCQUFpQjtBQUM5RyxVQUFNMUUsR0FBaUIwRSxFQUFRLFlBQVk7QUFBQSxNQUN6QyxrQkFBa0JBLEVBQVEsc0JBQXNCO0FBQUEsTUFDaEQseUJBQXlCQSxFQUFRO0FBQUEsTUFDakMsb0JBQW9Ca0IsRUFBaUIxUCxFQUFVLEtBQUs7QUFBQSxNQUNwRCx5QkFBeUIwUCxFQUFpQjFQLEVBQVUsVUFBVTtBQUFBLE1BQzlELHdCQUF3QjBQLEVBQWlCMVAsRUFBVSxTQUFTO0FBQUEsTUFDNUQsc0JBQXNCO0FBQUEsUUFDcEIsVUFBVTBQLEVBQWlCMVAsRUFBVSxRQUFRO0FBQUEsUUFDN0MsU0FBUzBQLEVBQWlCMVAsRUFBVSxPQUFPO0FBQUEsTUFDN0M7QUFBQSxJQUNGLENBQUM7QUFDRCxVQUFNNGQsSUFBMEI7QUFBQSxNQUM5QixnQkFBZ0I7QUFBQSxNQUNoQixXQUFXLE9BQU8sS0FBSyxLQUFLLFVBQVUzRCxFQUFZLE1BQU0sV0FBVyxDQUFDO0FBQUEsSUFDdEUsR0FDTXRWLElBQWdCLE1BQU11RixFQUFtQnNFLEVBQVEsWUFBWTtBQUFBLE1BQ2pFLGNBQWNBLEVBQVEsUUFBUTtBQUFBLE1BQzlCLDZCQUE2QjtBQUFBLFFBQzNCLGtCQUFrQkEsRUFBUSxzQkFBc0I7QUFBQSxRQUNoRCw0QkFBNEJvUDtBQUFBLE1BQzlCO0FBQUEsSUFDRixDQUFDO0FBRUQsUUFBSSxHQURZOVksS0FBQUQsSUFBQUYsRUFBYyxvQkFBZCxnQkFBQUUsRUFBZ0MsT0FBaEMsZ0JBQUFDLEVBQW9DO0FBRWxELFlBQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUVsQyxVQUFNZSxJQUFTO0FBQUEsTUFDYixRQUFRLGdCQUFnQjtBQUFBLElBQzFCO0FBQ0EsV0FBQTJJLEVBQVEsUUFBUSxnQkFBZ0IzSSxDQUFNLEdBQy9Cb0gsR0FBNkI7QUFBQSxNQUNsQyxXQUFXO0FBQUEsTUFDWCxrQkFBa0J1QixFQUFRO0FBQUEsTUFDMUIsdUJBQXVCQSxFQUFRO0FBQUEsTUFDL0Isb0JBQW9Ca0I7QUFBQSxNQUNwQixlQUFBL0s7QUFBQSxNQUNBLGlCQUFpQjtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNILFNBQVMvRixHQUFLO0FBQ1osVUFBTWlILElBQVM7QUFBQSxNQUNiLFFBQVEsZ0JBQWdCO0FBQUEsSUFDMUI7QUFDQSxVQUFBMkksRUFBUSxRQUFRLGdCQUFnQjNJLENBQU0sR0FDaENqSDtBQUFBLEVBQ1I7QUFDRjtBQUVBLE1BQU1pZixLQUFjbGdCLEVBQUUsT0FBTztBQUFBLEVBQzNCLFVBQVVBLEVBQUUsUUFBUSxXQUFXO0FBQUEsRUFDL0IsZ0JBQWdCQSxFQUFFLFFBQVEsZUFBZTtBQUFBLEVBQ3pDLFVBQVVBLEVBQUUsT0FBTztBQUFBLElBQ2pCLHNCQUFzQkEsRUFBRSxPQUFPO0FBQUEsSUFDL0Isd0JBQXdCQSxFQUFFLE9BQU87QUFBQSxFQUNuQyxDQUFDO0FBQ0gsQ0FBQyxHQUNLbWdCLEtBQWVuZ0IsRUFBRSxPQUFPO0FBQUEsRUFDNUIsVUFBVUEsRUFBRSxRQUFRLFlBQVk7QUFBQSxFQUNoQyxnQkFBZ0JBLEVBQUUsUUFBUSxlQUFlO0FBQUEsRUFDekMsVUFBVUEsRUFBRSxPQUFPO0FBQUEsSUFDakIsc0JBQXNCQSxFQUFFLE9BQU87QUFBQSxJQUMvQix3QkFBd0JBLEVBQUUsT0FBTztBQUFBLElBQ2pDLHdCQUF3QkEsRUFBRSxPQUFPLEVBQUUsUUFBUTtBQUFBLEVBQzdDLENBQUM7QUFDSCxDQUFDLEdBRUssRUFBRSxPQUFPb2dCLElBQVMsT0FBT0MsR0FBUSxJQUFJNVIsRUFBcUIsa0JBQWtCLEdBQzVFNlIsS0FBMEJoUztBQUFBLEVBQzlCLE9BQU8sRUFBRSxTQUFBdUMsR0FBUyxlQUFBQyxFQUFjLE1BQU07QUFDcEMsVUFBTStMLElBQW9CO0FBQUEsTUFDeEIsV0FBVy9ELEVBQWlCLEtBQUs7QUFBQSxNQUNqQyxhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXLFlBQVk7QUFBQSxNQUN2QjtBQUFBLElBQ0YsR0FDTStGLElBQWM5UCxFQUFvQjhCLEVBQVEsd0JBQXdCcVAsRUFBVztBQUNuRixRQUFJLENBQUNyQjtBQUNILGFBQU9oQztBQUVULElBQUF1RCxHQUFRLDBCQUEwQjtBQUNsQyxRQUFJO0FBQ0YsWUFBTTNDLEdBQW1CLEdBQ3pCMkMsR0FBUSxtQ0FBbUM7QUFBQSxJQUM3QyxTQUFTbmYsR0FBSztBQUNaLGFBQUFvZixHQUFRLGdDQUFnQ3BmLENBQUcsR0FDcEM0YjtBQUFBLElBQ1Q7QUFDQSxRQUFJLENBQUMsT0FBTyxtQkFBbUIsQ0FBQyxnQkFBZ0IsZ0JBQWdCO0FBQzlELGFBQUF1RCxHQUFRLG1EQUFtRCxHQUNwRHZEO0FBR1QsUUFBSSxDQURvQixNQUFNLGdCQUFnQixnQkFBZ0I7QUFFNUQsYUFBQXVELEdBQVEseUNBQXlDLEdBQzFDdkQ7QUFHVCxRQUFJLENBRHFCZ0MsRUFBWSxTQUNmO0FBQ3BCLFlBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUVyRSxVQUFNNU4sSUFBbUJKLEVBQVEsa0JBQzNCckIsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCLEdBQzNDL0QsSUFBY3NDLEVBQVEsU0FBUyxTQUMvQjBCLElBQWlCLE1BQU1qRSxHQUF5QmdFLEdBQWtCekIsRUFBUSxPQUFPdEMsR0FBYSxNQUFNLEdBQ3BHNFIsSUFBc0IsT0FBT2xOLE1BQWlCO0FBQ2xELFVBQUk7QUFDRixjQUFNSixFQUFTLHFCQUFxQixJQUFJO0FBQUEsVUFDdEMsU0FBQVg7QUFBQSxVQUNBLHVCQUF1QmdPO0FBQUEsVUFDdkIsa0JBQWtCcFgsRUFBeUJvSixFQUFRLE9BQU87QUFBQSxVQUMxRCxlQUFBQztBQUFBLFVBQ0EsY0FBYztBQUFBLFlBQ1osR0FBR2M7QUFBQSxZQUNILGdCQUFBVjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLFlBQVk7QUFBQSxRQUNkLENBQUM7QUFBQSxNQUNILFNBQVNqUSxHQUFLO0FBQ1osUUFBQW9mLEdBQVEsMkJBQTJCcGYsQ0FBRyxHQUN0QzZQLEVBQWMsSUFBSSxpQkFBZ0I3UCxLQUFBLGdCQUFBQSxFQUFLLFlBQVcsZUFBZTtBQUFBLE1BQ25FO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVc2WCxFQUFpQixLQUFLO0FBQUEsTUFDakMsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsV0FBV2dHO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFDRixHQUNNeUIsS0FBeUJ0UztBQUFBLEVBQzdCLE9BQU87QUFBQSxJQUNMLFNBQUE0QztBQUFBLElBQ0EsdUJBQUFjO0FBQUEsSUFDQSxrQkFBQTdCO0FBQUEsSUFDQSxjQUFBOEI7QUFBQSxJQUNBLGVBQUFkO0FBQUEsRUFDRixNQUFNO0FBeGhHUixRQUFBNUo7QUF5aEdJLFVBQU0sRUFBRSxnQkFBQWdLLEdBQWdCLHdCQUFBdUssRUFBdUIsSUFBSTdKLEdBQzdDaU4sSUFBYzlQLEVBQW9COEIsRUFBUSx3QkFBd0JxUCxFQUFXLEdBQzdFLEVBQUUsY0FBQXZFLEdBQWMsT0FBQXFDLEVBQU0sSUFBSUUsR0FBb0I7QUFBQSxNQUNsRCx3QkFBQXpDO0FBQUEsTUFDQSxnQkFBQXZLO0FBQUEsTUFDQSxlQUFjaEssSUFBQTJYLEtBQUEsZ0JBQUFBLEVBQWEsYUFBYixnQkFBQTNYLEVBQXVCO0FBQUEsSUFDdkMsQ0FBQyxHQUNLK0osSUFBbUJKLEVBQVEsa0JBQzNCckIsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCLEdBQzNDL0QsSUFBY3NDLEVBQVEsU0FBUyxTQUMvQjlJLElBQWlCO0FBQUEsTUFDckIsYUFBYTtBQUFBLE1BQ2IsY0FBQWlWO0FBQUEsTUFDQSxPQUFBcUM7QUFBQSxNQUNBLDhCQUE4QixDQUFDLFNBQVMsaUJBQWlCLE1BQU07QUFBQSxNQUMvRCwrQkFBK0IsQ0FBQyxPQUFPO0FBQUEsTUFDdkMsbUJBQW1CLENBQUMsUUFBUSxjQUFjLFFBQVEsVUFBVTtBQUFBLE1BQzVELHNCQUFzQixDQUFDLGVBQWUsa0JBQWtCLGVBQWU7QUFBQSxNQUN2RSx5QkFBeUJELEdBQThCO0FBQUEsUUFDckQsT0FBQUM7QUFBQSxRQUNBLFNBQUF4TztBQUFBLE1BQ0YsQ0FBQztBQUFBLE1BQ0QsSUFBR2lNLEtBQUEsZ0JBQUFBLEVBQXdCLDJCQUEwQixDQUFDO0FBQUEsSUFDeEQsR0FDTXVELElBQVUsSUFBSSxnQkFBZ0IsR0FBR3RZLENBQWMsR0FDL0N1WSxJQUFpQjtBQUFBLE1BQ3JCLFNBQUFEO0FBQUEsTUFDQSxZQUFZbk8sRUFBUTtBQUFBLE1BQ3BCLHVCQUFBYztBQUFBLE1BQ0Esa0JBQUE3QjtBQUFBLE1BQ0Esa0JBQWtCNkIsRUFBc0I7QUFBQSxNQUN4QyxTQUFBbkM7QUFBQSxNQUNBLGFBQUF0QztBQUFBLE1BQ0EsU0FBUzJELEVBQVE7QUFBQSxNQUNqQixlQUFBQztBQUFBLElBQ0Y7QUFDQSxXQUFPLElBQUksUUFBUSxDQUFDdEssR0FBU0csTUFBVztBQUN0QyxNQUFBcVksRUFBUSxXQUFXLE1BQU07QUFDdkIsUUFBQW9CLEdBQVEsMkJBQTJCLEdBQ25DelosRUFBTyxJQUFJLE1BQU0sMkJBQTJCLENBQUM7QUFBQSxNQUMvQyxHQUNBcVksRUFBUSxxQkFBcUIsT0FBT3pOLE1BQVU7QUFDNUMsWUFBSTtBQUNGLGdCQUFNd08sR0FBdUJ4TyxHQUFPME4sQ0FBYztBQUFBLFFBQ3BELFNBQVNoZSxHQUFLO0FBQ1osVUFBQTBGLEVBQU8xRixDQUFHO0FBQUEsUUFDWjtBQUFBLE1BQ0YsR0FDQStkLEVBQVEsMEJBQTBCLE1BQU07QUFDdEMsY0FBTUUsSUFBUztBQUFBLFVBQ2IsVUFBVXhZLEVBQWU7QUFBQSxRQUMzQjtBQUNBLFFBQUFzWSxFQUFRLCtCQUErQkUsQ0FBTTtBQUFBLE1BQy9DLEdBQ0FGLEVBQVEsc0JBQXNCLE9BQU96TixNQUFVO0FBQzdDLFlBQUk7QUFDRixnQkFBTXJKLElBQVMsTUFBTThYLEdBQXdCek8sR0FBTzBOLENBQWM7QUFDbEUsVUFBQXpZLEVBQVEwQixDQUFNO0FBQUEsUUFDaEIsU0FBU2pILEdBQUs7QUFDWixVQUFBMEYsRUFBTzFGLENBQUc7QUFBQSxRQUNaO0FBQUEsTUFDRixHQUNBK2QsRUFBUSxNQUFNO0FBQUEsSUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQy9kLE1BQVE7QUFDaEIsWUFBQW9mLEdBQVEsMkJBQTJCcGYsQ0FBRyxHQUNoQ0E7QUFBQSxJQUNSLENBQUM7QUFBQSxFQUNIO0FBQ0YsR0FFTSxFQUFFLE9BQU91ZixJQUFTLE9BQU9DLEdBQVEsSUFBSWhTLEVBQXFCLG1CQUFtQixHQUM3RWlTLEtBQTJCcFM7QUFBQSxFQUMvQixPQUFPLEVBQUUsU0FBQXVDLEdBQVMsZUFBQUMsRUFBYyxNQUFNO0FBam1HeEMsUUFBQTVKLEdBQUFDO0FBa21HSSxJQUFBcVosR0FBUSxxQ0FBcUM7QUFDN0MsVUFBTTNELElBQW9CO0FBQUEsTUFDeEIsV0FBVy9ELEVBQWlCLEtBQUs7QUFBQSxNQUNqQyxhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXLFlBQVk7QUFBQSxNQUN2QjtBQUFBLElBQ0YsR0FDTWdFLElBQWUvTixFQUFvQjhCLEVBQVEsd0JBQXdCc1AsRUFBWTtBQUNyRixRQUFJLENBQUNyRDtBQUNILGFBQU9EO0FBRVQsSUFBQTJELEdBQVEsa0JBQWtCMUQsQ0FBWTtBQUN0QyxVQUFNQyxJQUFtQkQsRUFBYTtBQUN0QyxRQUFJLENBQUNDLEVBQWlCO0FBQ3BCLGFBQUEwRCxHQUFRLG1EQUFtRCxHQUNwRDVEO0FBSVQsUUFGQTJELEdBQVEsMkJBQTJCLEdBQ25DLE1BQU0zRSxHQUFvQixHQUN0QixHQUFDMVUsS0FBQUQsSUFBQSxPQUFPLFdBQVAsZ0JBQUFBLEVBQWUsYUFBZixRQUFBQyxFQUF5QjtBQUM1QixhQUFBc1osR0FBUSxvQ0FBb0MsR0FDckM1RDtBQUVULElBQUEyRCxHQUFRLHlCQUF5QixPQUFPLE9BQU8sUUFBUTtBQUN2RCxRQUFJO0FBQ0YsWUFBTXRFLElBQXFCZCxHQUFzQjtBQUFBLFFBQy9DLFNBQVM7QUFBQSxRQUNULG1CQUFtQjJCLEVBQWlCO0FBQUEsUUFDcEMsY0FBY0EsRUFBaUI7QUFBQSxRQUMvQixZQUFZQSxFQUFpQiwwQkFBMEI7QUFBQTtBQUFBLFFBRXZELGdCQUFnQjtBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGLENBQUMsR0FDSyxFQUFFLFFBQVFDLEVBQWEsSUFBSSxNQUFNZixHQUF3QnBMLEVBQVEsU0FBU3FMLENBQWtCLEVBQUU7QUFBQSxRQUNsR0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxDQUFDYztBQUNILGVBQUF3RCxHQUFRLDJDQUEyQyxHQUM1QzNEO0FBQUEsSUFFWCxTQUFTNWIsR0FBSztBQUNaLGFBQUF3ZixHQUFRLDBDQUEwQ3hmLENBQUcsR0FDOUM0YjtBQUFBLElBQ1Q7QUFDQSxVQUFNNUwsSUFBbUJKLEVBQVEsa0JBQzNCckIsSUFBVSxNQUFNdEQsRUFBVytFLENBQWdCLEdBQzNDL0QsSUFBY3NDLEVBQVEsU0FBUyxTQUMvQjBCLElBQWlCLE1BQU1qRSxHQUF5QmdFLEdBQWtCekIsRUFBUSxPQUFPdEMsR0FBYSxNQUFNLEdBQ3BHK1AsSUFBdUIsT0FBT3JMLE1BQWlCO0FBQ25ELFVBQUk7QUFDRixRQUFBSixFQUFTLHNCQUFzQixJQUFJO0FBQUEsVUFDakMsU0FBQVg7QUFBQSxVQUNBLHVCQUF1QmlNO0FBQUEsVUFDdkIsa0JBQWtCclYsRUFBeUJvSixFQUFRLE9BQU87QUFBQSxVQUMxRCxlQUFBQztBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFlBQ1osR0FBR2M7QUFBQSxZQUNILGdCQUFBVjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILFNBQVNqUSxHQUFLO0FBQ1osUUFBQXdmLEdBQVEsNEJBQTRCeGYsQ0FBRyxHQUN2QzZQLEVBQWMsSUFBSSxpQkFBZ0I3UCxLQUFBLGdCQUFBQSxFQUFLLFlBQVcsZUFBZTtBQUFBLE1BQ25FO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVc2WCxFQUFpQixLQUFLO0FBQUEsTUFDakMsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsV0FBV21FO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFDRixHQUNNMEQsS0FBMEIxUztBQUFBLEVBQzlCLE9BQU87QUFBQSxJQUNMLFNBQUE0QztBQUFBLElBQ0Esa0JBQUFmO0FBQUEsSUFDQSx1QkFBQTZCO0FBQUEsSUFDQSxlQUFBYjtBQUFBLElBQ0EsY0FBQWM7QUFBQSxFQUNGLE1BQU07QUF2ckdSLFFBQUExSyxHQUFBQyxHQUFBQyxHQUFBQztBQXdyR0ksVUFBTSxFQUFFLGdCQUFBNkosR0FBZ0Isd0JBQUF1SyxFQUF1QixJQUFJN0osR0FFN0NtTCxJQURlaE8sRUFBb0I4QixFQUFRLHdCQUF3QnNQLEVBQVksRUFDL0MsVUFDaENqRSxJQUFxQmQsR0FBc0I7QUFBQSxNQUMvQyxTQUFTO0FBQUEsTUFDVCxtQkFBbUIyQixFQUFpQjtBQUFBLE1BQ3BDLGNBQWNBLEVBQWlCO0FBQUEsTUFDL0IsWUFBWUEsRUFBaUIsMEJBQTBCO0FBQUEsTUFDdkQsZ0JBQUE3TDtBQUFBLE1BQ0Esd0JBQUF1SztBQUFBLElBQ0YsQ0FBQyxHQUNLNEIsSUFBU3BCLEdBQXdCcEwsRUFBUSxTQUFTcUwsQ0FBa0I7QUFDMUUsUUFBSTtBQUNGLFlBQU1JLElBQWMsTUFBTWUsRUFBTyxnQkFBZ0JuQixDQUFrQjtBQUNuRSxNQUFBc0UsR0FBUSwyQkFBMkJsRSxDQUFXO0FBQzlDLFlBQU1yTCxJQUFtQkosRUFBUSxrQkFDM0JyQixJQUFVLE1BQU10RCxFQUFXK0UsQ0FBZ0IsR0FDM0NZLElBQWV3SyxHQUFpQ3ZNLEdBQWtCd00sQ0FBVyxHQUM3RXZLLElBQW1CbEMsR0FBOEJnQyxHQUFjZixFQUFjLElBQUksaUJBQWlCLEdBQ2xHd00sS0FBd0JuVyxLQUFBRCxJQUFBb1YsRUFBWSxzQkFBWixnQkFBQXBWLEVBQStCLHFCQUEvQixnQkFBQUMsRUFBaUQ7QUFDL0UsVUFBSSxDQUFDbVc7QUFDSCxjQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFFN0QsWUFBTXRMLElBQTJCLE1BQU03RixHQUFpQjhFLEdBQWtCO0FBQUEsUUFDeEUsa0JBQWtCVSxFQUFzQjtBQUFBLFFBQ3hDLHlCQUF5QkE7QUFBQSxRQUN6QixvQkFBb0JJLEVBQWlCMVAsRUFBVSxLQUFLO0FBQUEsUUFDcEQseUJBQXlCMFAsRUFBaUIxUCxFQUFVLFVBQVU7QUFBQSxRQUM5RCx3QkFBd0IwUCxFQUFpQjFQLEVBQVUsU0FBUztBQUFBLFFBQzVELHNCQUFzQjtBQUFBLFVBQ3BCLFVBQVUwUCxFQUFpQjFQLEVBQVUsUUFBUTtBQUFBLFVBQzdDLFNBQVMwUCxFQUFpQjFQLEVBQVUsT0FBTztBQUFBLFFBQzdDO0FBQUEsTUFDRixDQUFDO0FBQ0QsTUFBQW1lLEdBQVEsK0JBQStCeE8sQ0FBd0I7QUFDL0QsWUFBTWhMLElBQWdCLE1BQU11RixFQUFtQjBFLEdBQWtCO0FBQUEsUUFDL0QsY0FBY3pCLEVBQVE7QUFBQSxRQUN0Qiw2QkFBNkI7QUFBQSxVQUMzQixrQkFBa0JtQyxFQUFzQjtBQUFBLFVBQ3hDLDRCQUE0QjtBQUFBLFlBQzFCLGdCQUFnQjtBQUFBLFlBQ2hCLFdBQVcsT0FBTyxLQUFLMkwsQ0FBcUI7QUFBQSxVQUM5QztBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFFRCxVQUFJLEdBRFlqVyxLQUFBRCxJQUFBSixFQUFjLG9CQUFkLGdCQUFBSSxFQUFnQyxPQUFoQyxnQkFBQUMsRUFBb0M7QUFFbEQsY0FBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBRWxDLGFBQU9pSSxHQUE2QjtBQUFBLFFBQ2xDLFdBQVc7QUFBQSxRQUNYLGtCQUFBMkI7QUFBQSxRQUNBLHVCQUFBVTtBQUFBLFFBQ0Esb0JBQW9CSTtBQUFBLFFBQ3BCLGVBQUEvSztBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsTUFDbkIsQ0FBQztBQUFBLElBQ0gsU0FBUy9GLEdBQUs7QUFDWixZQUFBd2YsR0FBUSw0QkFBNEJ4ZixDQUFHLEdBQ2pDLElBQUksT0FBTUEsS0FBQSxnQkFBQUEsRUFBSyxZQUFXLGVBQWU7QUFBQSxJQUNqRDtBQUFBLEVBQ0Y7QUFDRixHQUVNc1ksS0FBa0MsQ0FBQ3FILEdBQU1DLEdBQWNDLE1BQWtCO0FBQzdFLFFBQU1DLElBQVVILEVBQUssT0FBTyxDQUFDMVIsTUFBUTtBQUNuQyxVQUFNOFIsSUFBbUJGLE1BQWtCLFNBQVMsS0FBTzVSLEVBQUksbUJBQW1CNFIsR0FDNUVHLElBQWtCL1IsRUFBSSxhQUFhMlI7QUFDekMsV0FBT0csS0FBb0JDO0FBQUEsRUFDN0IsQ0FBQztBQUNELE1BQUlGLEVBQVEsV0FBVztBQUNyQixrQkFBUSxNQUFNLGFBQWFILENBQUksR0FDekIsSUFBSSxNQUFNLGdDQUFnQ0MsQ0FBWSxvQkFBb0JDLENBQWEsR0FBRztBQUVsRyxNQUFJQyxFQUFRLFdBQVc7QUFDckIsa0JBQVEsTUFBTSxhQUFhSCxDQUFJLEdBQ3pCLElBQUksTUFBTSwwQ0FBMENDLENBQVksb0JBQW9CQyxDQUFhLEdBQUc7QUFFNUcsU0FBT0MsRUFBUSxDQUFDO0FBQ2xCLEdBQ012UCxJQUFXO0FBQUE7QUFBQTtBQUFBLEVBR2YsVUFBVTtBQUFBLElBQ1IsTUFBTSxZQUFZO0FBQUEsSUFDbEI7QUFBQSxJQUNBLEtBQUtxRztBQUFBLEVBQ1A7QUFBQTtBQUFBLEVBRUEsVUFBVTtBQUFBLElBQ1IsTUFBTXFCO0FBQUEsSUFDTixLQUFLTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLE1BQU01STtBQUFBLElBQ04sS0FBS2M7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUVBLGNBQWM7QUFBQSxJQUNaLEtBQUs4STtBQUFBLEVBQ1A7QUFBQTtBQUFBLEVBRUEsb0JBQW9CO0FBQUEsSUFDbEIsTUFBTW9DO0FBQUEsSUFDTixLQUFLTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLG1CQUFtQjtBQUFBLElBQ2pCLE1BQU0wQjtBQUFBLElBQ04sS0FBS0c7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUVBLFlBQVk7QUFBQSxJQUNWLE1BQU1RO0FBQUEsSUFDTixLQUFLTztBQUFBLEVBQ1A7QUFBQSxFQUNBLHNCQUFzQjtBQUFBLElBQ3BCLE1BQU1RO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQSxFQUNBLHVCQUF1QjtBQUFBLElBQ3JCLE1BQU1HO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQTtBQUFBO0FBR0Y7QUFrQkEsSUFBSU8sS0FBZ0IsU0FBU3BXLEdBQUdULEdBQUc7QUFDakMsU0FBQTZXLEtBQWdCLE9BQU8sa0JBQ2xCLEVBQUUsV0FBVyxDQUFDLEVBQUUsYUFBYSxTQUFTLFNBQVVwVyxHQUFHVCxHQUFHO0FBQUUsSUFBQVMsRUFBRSxZQUFZVDtBQUFBLEVBQUcsS0FDMUUsU0FBVVMsR0FBR1QsR0FBRztBQUFFLGFBQVNVLEtBQUtWLEVBQUcsQ0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFHVSxDQUFDLE1BQUdELEVBQUVDLENBQUMsSUFBSVYsRUFBRVUsQ0FBQztBQUFBLEVBQUcsR0FDN0ZtVyxHQUFjcFcsR0FBR1QsQ0FBQztBQUMzQjtBQUVBLFNBQVM4VyxHQUFVclcsR0FBR1QsR0FBRztBQUN2QixNQUFJLE9BQU9BLEtBQU0sY0FBY0EsTUFBTTtBQUNqQyxVQUFNLElBQUksVUFBVSx5QkFBeUIsT0FBT0EsQ0FBQyxJQUFJLCtCQUErQjtBQUM1RixFQUFBNlcsR0FBY3BXLEdBQUdULENBQUM7QUFDbEIsV0FBU1csSUFBSztBQUFFLFNBQUssY0FBY0Y7QUFBQSxFQUFHO0FBQ3RDLEVBQUFBLEVBQUUsWUFBWVQsTUFBTSxPQUFPLE9BQU8sT0FBT0EsQ0FBQyxLQUFLVyxFQUFHLFlBQVlYLEVBQUUsV0FBVyxJQUFJVyxFQUFHO0FBQ3BGO0FBRUEsU0FBU29XLEdBQVVDLEdBQVNDLEdBQVlDLEdBQUdDLEdBQVc7QUFDcEQsV0FBU0MsRUFBTXRjLEdBQU87QUFBRSxXQUFPQSxhQUFpQm9jLElBQUlwYyxJQUFRLElBQUlvYyxFQUFFLFNBQVUvYSxHQUFTO0FBQUUsTUFBQUEsRUFBUXJCLENBQUs7QUFBQSxJQUFHLENBQUM7QUFBQSxFQUFHO0FBQzNHLFNBQU8sS0FBS29jLE1BQU1BLElBQUksVUFBVSxTQUFVL2EsR0FBU0csR0FBUTtBQUN2RCxhQUFTK2EsRUFBVXZjLEdBQU87QUFBRSxVQUFJO0FBQUUsUUFBQXdjLEVBQUtILEVBQVUsS0FBS3JjLENBQUssQ0FBQztBQUFBLE1BQUcsU0FBUzlELEdBQUc7QUFBRSxRQUFBc0YsRUFBT3RGLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUMxRixhQUFTdWdCLEVBQVN6YyxHQUFPO0FBQUUsVUFBSTtBQUFFLFFBQUF3YyxFQUFLSCxFQUFVLE1BQVNyYyxDQUFLLENBQUM7QUFBQSxNQUFHLFNBQVM5RCxHQUFHO0FBQUUsUUFBQXNGLEVBQU90RixDQUFDO0FBQUEsTUFBRztBQUFBLElBQUU7QUFDN0YsYUFBU3NnQixFQUFLelosR0FBUTtBQUFFLE1BQUFBLEVBQU8sT0FBTzFCLEVBQVEwQixFQUFPLEtBQUssSUFBSXVaLEVBQU12WixFQUFPLEtBQUssRUFBRSxLQUFLd1osR0FBV0UsQ0FBUTtBQUFBLElBQUc7QUFDN0csSUFBQUQsR0FBTUgsSUFBWUEsRUFBVSxNQUFNSCxHQUFTQyxLQUFjLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEVBQ3hFLENBQUM7QUFDSDtBQUVBLFNBQVNPLEdBQVlSLEdBQVNTLEdBQU07QUFDbEMsTUFBSUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxNQUFNLFdBQVc7QUFBRSxRQUFJQyxFQUFFLENBQUMsSUFBSSxFQUFHLE9BQU1BLEVBQUUsQ0FBQztBQUFHLFdBQU9BLEVBQUUsQ0FBQztBQUFBLEVBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHQyxHQUFHQyxHQUFHRixHQUFHRyxJQUFJLE9BQU8sUUFBUSxPQUFPLFlBQWEsYUFBYSxXQUFXLFFBQVEsU0FBUztBQUMvTCxTQUFPQSxFQUFFLE9BQU9DLEVBQUssQ0FBQyxHQUFHRCxFQUFFLFFBQVdDLEVBQUssQ0FBQyxHQUFHRCxFQUFFLFNBQVlDLEVBQUssQ0FBQyxHQUFHLE9BQU8sVUFBVyxlQUFlRCxFQUFFLE9BQU8sUUFBUSxJQUFJLFdBQVc7QUFBRSxXQUFPO0FBQUEsRUFBTSxJQUFJQTtBQUMxSixXQUFTQyxFQUFLQyxHQUFHO0FBQUUsV0FBTyxTQUFVQyxHQUFHO0FBQUUsYUFBT1gsRUFBSyxDQUFDVSxHQUFHQyxDQUFDLENBQUM7QUFBQSxJQUFHO0FBQUEsRUFBRztBQUNqRSxXQUFTWCxFQUFLWSxHQUFJO0FBQ2QsUUFBSU4sRUFBRyxPQUFNLElBQUksVUFBVSxpQ0FBaUM7QUFDNUQsV0FBT0UsTUFBTUEsSUFBSSxHQUFHSSxFQUFHLENBQUMsTUFBTVIsSUFBSSxLQUFLQSxJQUFHLEtBQUk7QUFDMUMsVUFBSUUsSUFBSSxHQUFHQyxNQUFNRixJQUFJTyxFQUFHLENBQUMsSUFBSSxJQUFJTCxFQUFFLFNBQVlLLEVBQUcsQ0FBQyxJQUFJTCxFQUFFLFdBQWNGLElBQUlFLEVBQUUsV0FBY0YsRUFBRSxLQUFLRSxDQUFDLEdBQUcsS0FBS0EsRUFBRSxTQUFTLEVBQUVGLElBQUlBLEVBQUUsS0FBS0UsR0FBR0ssRUFBRyxDQUFDLENBQUMsR0FBRyxLQUFNLFFBQU9QO0FBRTNKLGNBRElFLElBQUksR0FBR0YsTUFBR08sSUFBSyxDQUFDQSxFQUFHLENBQUMsSUFBSSxHQUFHUCxFQUFFLEtBQUssSUFDOUJPLEVBQUcsQ0FBQyxHQUFHO0FBQUEsUUFDWCxLQUFLO0FBQUEsUUFBRyxLQUFLO0FBQUcsVUFBQVAsSUFBSU87QUFBSTtBQUFBLFFBQ3hCLEtBQUs7QUFBRyxpQkFBQVIsRUFBRSxTQUFnQixFQUFFLE9BQU9RLEVBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBTTtBQUFBLFFBQ3RELEtBQUs7QUFBRyxVQUFBUixFQUFFLFNBQVNHLElBQUlLLEVBQUcsQ0FBQyxHQUFHQSxJQUFLLENBQUMsQ0FBQztBQUFHO0FBQUEsUUFDeEMsS0FBSztBQUFHLFVBQUFBLElBQUtSLEVBQUUsSUFBSSxJQUFJLEdBQUdBLEVBQUUsS0FBSyxJQUFJO0FBQUc7QUFBQSxRQUN4QztBQUNJLGNBQU1DLElBQUlELEVBQUUsTUFBTSxFQUFBQyxJQUFJQSxFQUFFLFNBQVMsS0FBS0EsRUFBRUEsRUFBRSxTQUFTLENBQUMsT0FBT08sRUFBRyxDQUFDLE1BQU0sS0FBS0EsRUFBRyxDQUFDLE1BQU0sSUFBSTtBQUFFLFlBQUFSLElBQUk7QUFBRztBQUFBLFVBQVU7QUFDM0csY0FBSVEsRUFBRyxDQUFDLE1BQU0sTUFBTSxDQUFDUCxLQUFNTyxFQUFHLENBQUMsSUFBSVAsRUFBRSxDQUFDLEtBQUtPLEVBQUcsQ0FBQyxJQUFJUCxFQUFFLENBQUMsSUFBSztBQUFFLFlBQUFELEVBQUUsUUFBUVEsRUFBRyxDQUFDO0FBQUc7QUFBQSxVQUFPO0FBQ3JGLGNBQUlBLEVBQUcsQ0FBQyxNQUFNLEtBQUtSLEVBQUUsUUFBUUMsRUFBRSxDQUFDLEdBQUc7QUFBRSxZQUFBRCxFQUFFLFFBQVFDLEVBQUUsQ0FBQyxHQUFHQSxJQUFJTztBQUFJO0FBQUEsVUFBTztBQUNwRSxjQUFJUCxLQUFLRCxFQUFFLFFBQVFDLEVBQUUsQ0FBQyxHQUFHO0FBQUUsWUFBQUQsRUFBRSxRQUFRQyxFQUFFLENBQUMsR0FBR0QsRUFBRSxJQUFJLEtBQUtRLENBQUU7QUFBRztBQUFBLFVBQU87QUFDbEUsVUFBSVAsRUFBRSxDQUFDLEtBQUdELEVBQUUsSUFBSSxJQUFJLEdBQ3BCQSxFQUFFLEtBQUssSUFBSTtBQUFHO0FBQUEsTUFDdEI7QUFDQSxNQUFBUSxJQUFLVCxFQUFLLEtBQUtULEdBQVNVLENBQUM7QUFBQSxJQUM3QixTQUFTMWdCLEdBQUc7QUFBRSxNQUFBa2hCLElBQUssQ0FBQyxHQUFHbGhCLENBQUMsR0FBRzZnQixJQUFJO0FBQUEsSUFBRyxVQUFFO0FBQVUsTUFBQUQsSUFBSUQsSUFBSTtBQUFBLElBQUc7QUFDekQsUUFBSU8sRUFBRyxDQUFDLElBQUksRUFBRyxPQUFNQSxFQUFHLENBQUM7QUFBRyxXQUFPLEVBQUUsT0FBT0EsRUFBRyxDQUFDLElBQUlBLEVBQUcsQ0FBQyxJQUFJLFFBQVEsTUFBTSxHQUFLO0FBQUEsRUFDbkY7QUFDRjtBQUVBLFNBQVNDLEdBQVNDLEdBQUc7QUFDbkIsTUFBSUMsSUFBSSxPQUFPLFVBQVcsY0FBYyxPQUFPLFVBQVVDLElBQUlELEtBQUtELEVBQUVDLENBQUMsR0FBR2hkLElBQUk7QUFDNUUsTUFBSWlkLEVBQUcsUUFBT0EsRUFBRSxLQUFLRixDQUFDO0FBQ3RCLE1BQUlBLEtBQUssT0FBT0EsRUFBRSxVQUFXLFNBQVUsUUFBTztBQUFBLElBQzFDLE1BQU0sV0FBWTtBQUNkLGFBQUlBLEtBQUsvYyxLQUFLK2MsRUFBRSxXQUFRQSxJQUFJLFNBQ3JCLEVBQUUsT0FBT0EsS0FBS0EsRUFBRS9jLEdBQUcsR0FBRyxNQUFNLENBQUMrYyxFQUFFO0FBQUEsSUFDMUM7QUFBQSxFQUNKO0FBQ0EsUUFBTSxJQUFJLFVBQVVDLElBQUksNEJBQTRCLGlDQUFpQztBQUN2RjtBQUVBLFNBQVNFLEdBQU9ILEdBQUcsR0FBRztBQUNwQixNQUFJRSxJQUFJLE9BQU8sVUFBVyxjQUFjRixFQUFFLE9BQU8sUUFBUTtBQUN6RCxNQUFJLENBQUNFLEVBQUcsUUFBT0Y7QUFDZixNQUFJL2MsSUFBSWlkLEVBQUUsS0FBS0YsQ0FBQyxHQUFHSSxHQUFHQyxJQUFLLENBQUMsR0FBR3poQjtBQUMvQixNQUFJO0FBQ0EsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUV3aEIsSUFBSW5kLEVBQUUsS0FBSyxHQUFHLE9BQU0sQ0FBQW9kLEVBQUcsS0FBS0QsRUFBRSxLQUFLO0FBQUEsRUFDN0UsU0FDT2hoQixHQUFPO0FBQUUsSUFBQVIsSUFBSSxFQUFFLE9BQU9RLEVBQU07QUFBQSxFQUFHLFVBQ3RDO0FBQ0ksUUFBSTtBQUNBLE1BQUlnaEIsS0FBSyxDQUFDQSxFQUFFLFNBQVNGLElBQUlqZCxFQUFFLFdBQVlpZCxFQUFFLEtBQUtqZCxDQUFDO0FBQUEsSUFDbkQsVUFDQTtBQUFVLFVBQUlyRSxFQUFHLE9BQU1BLEVBQUU7QUFBQSxJQUFPO0FBQUEsRUFDcEM7QUFDQSxTQUFPeWhCO0FBQ1Q7QUFFQSxTQUFTQyxHQUFjQyxHQUFJQyxHQUFNQyxHQUFNO0FBQ3JDLE1BQUlBLEtBQVEsVUFBVSxXQUFXLEVBQUcsVUFBU3hkLElBQUksR0FBR3lkLElBQUlGLEVBQUssUUFBUUgsR0FBSXBkLElBQUl5ZCxHQUFHemQ7QUFDNUUsS0FBSW9kLEtBQU0sRUFBRXBkLEtBQUt1ZCxRQUNSSCxNQUFJQSxJQUFLLE1BQU0sVUFBVSxNQUFNLEtBQUtHLEdBQU0sR0FBR3ZkLENBQUMsSUFDbkRvZCxFQUFHcGQsQ0FBQyxJQUFJdWQsRUFBS3ZkLENBQUM7QUFHdEIsU0FBT3NkLEVBQUcsT0FBT0YsS0FBTSxNQUFNLFVBQVUsTUFBTSxLQUFLRyxDQUFJLENBQUM7QUFDekQ7QUFFQSxTQUFTRyxHQUFRZCxHQUFHO0FBQ2xCLFNBQU8sZ0JBQWdCYyxNQUFXLEtBQUssSUFBSWQsR0FBRyxRQUFRLElBQUljLEdBQVFkLENBQUM7QUFDckU7QUFFQSxTQUFTZSxHQUFpQmhDLEdBQVNDLEdBQVlFLEdBQVc7QUFDeEQsTUFBSSxDQUFDLE9BQU8sY0FBZSxPQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFDckYsTUFBSVcsSUFBSVgsRUFBVSxNQUFNSCxHQUFTQyxLQUFjLENBQUMsQ0FBQyxHQUFHNWIsR0FBRzRkLElBQUksQ0FBQztBQUM1RCxTQUFPNWQsSUFBSSxPQUFPLFFBQVEsT0FBTyxpQkFBa0IsYUFBYSxnQkFBZ0IsUUFBUSxTQUFTLEdBQUcwYyxFQUFLLE1BQU0sR0FBR0EsRUFBSyxPQUFPLEdBQUdBLEVBQUssVUFBVW1CLENBQVcsR0FBRzdkLEVBQUUsT0FBTyxhQUFhLElBQUksV0FBWTtBQUFFLFdBQU87QUFBQSxFQUFNLEdBQUdBO0FBQ3ROLFdBQVM2ZCxFQUFZdEIsR0FBRztBQUFFLFdBQU8sU0FBVUssR0FBRztBQUFFLGFBQU8sUUFBUSxRQUFRQSxDQUFDLEVBQUUsS0FBS0wsR0FBR3RiLENBQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUM5RixXQUFTeWIsRUFBS0MsR0FBR0osR0FBRztBQUFFLElBQUlFLEVBQUVFLENBQUMsTUFBSzNjLEVBQUUyYyxDQUFDLElBQUksU0FBVUMsR0FBRztBQUFFLGFBQU8sSUFBSSxRQUFRLFNBQVVsWSxHQUFHQyxHQUFHO0FBQUUsUUFBQWlaLEVBQUUsS0FBSyxDQUFDakIsR0FBR0MsR0FBR2xZLEdBQUdDLENBQUMsQ0FBQyxJQUFJLEtBQUttWixFQUFPbkIsR0FBR0MsQ0FBQztBQUFBLE1BQUcsQ0FBQztBQUFBLElBQUcsR0FBT0wsTUFBR3ZjLEVBQUUyYyxDQUFDLElBQUlKLEVBQUV2YyxFQUFFMmMsQ0FBQyxDQUFDO0FBQUEsRUFBSztBQUN2SyxXQUFTbUIsRUFBT25CLEdBQUdDLEdBQUc7QUFBRSxRQUFJO0FBQUUsTUFBQVgsRUFBS1EsRUFBRUUsQ0FBQyxFQUFFQyxDQUFDLENBQUM7QUFBQSxJQUFHLFNBQVNqaEIsR0FBRztBQUFFLE1BQUFvaUIsRUFBT0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHamlCLENBQUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUNqRixXQUFTc2dCLEVBQUtrQixHQUFHO0FBQUUsSUFBQUEsRUFBRSxpQkFBaUJPLEtBQVUsUUFBUSxRQUFRUCxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUthLEdBQVMvYyxDQUFNLElBQUk4YyxFQUFPSCxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUdULENBQUM7QUFBQSxFQUFHO0FBQ3ZILFdBQVNhLEVBQVF2ZSxHQUFPO0FBQUUsSUFBQXFlLEVBQU8sUUFBUXJlLENBQUs7QUFBQSxFQUFHO0FBQ2pELFdBQVN3QixFQUFPeEIsR0FBTztBQUFFLElBQUFxZSxFQUFPLFNBQVNyZSxDQUFLO0FBQUEsRUFBRztBQUNqRCxXQUFTc2UsRUFBT3hCLEdBQUdLLEdBQUc7QUFBRSxJQUFJTCxFQUFFSyxDQUFDLEdBQUdnQixFQUFFLE1BQU0sR0FBR0EsRUFBRSxVQUFRRSxFQUFPRixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUdBLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUFBLEVBQUc7QUFDbkY7QUFFQSxTQUFTSyxHQUFjbEIsR0FBRztBQUN4QixNQUFJLENBQUMsT0FBTyxjQUFlLE9BQU0sSUFBSSxVQUFVLHNDQUFzQztBQUNyRixNQUFJRSxJQUFJRixFQUFFLE9BQU8sYUFBYSxHQUFHL2M7QUFDakMsU0FBT2lkLElBQUlBLEVBQUUsS0FBS0YsQ0FBQyxLQUFLQSxJQUFJLE9BQU9ELE1BQWEsYUFBYUEsR0FBU0MsQ0FBQyxJQUFJQSxFQUFFLE9BQU8sUUFBUSxFQUFFLEdBQUcvYyxJQUFJLENBQUMsR0FBRzBjLEVBQUssTUFBTSxHQUFHQSxFQUFLLE9BQU8sR0FBR0EsRUFBSyxRQUFRLEdBQUcxYyxFQUFFLE9BQU8sYUFBYSxJQUFJLFdBQVk7QUFBRSxXQUFPO0FBQUEsRUFBTSxHQUFHQTtBQUM5TSxXQUFTMGMsRUFBS0MsR0FBRztBQUFFLElBQUEzYyxFQUFFMmMsQ0FBQyxJQUFJSSxFQUFFSixDQUFDLEtBQUssU0FBVUMsR0FBRztBQUFFLGFBQU8sSUFBSSxRQUFRLFNBQVU5YixHQUFTRyxHQUFRO0FBQUUsUUFBQTJiLElBQUlHLEVBQUVKLENBQUMsRUFBRUMsQ0FBQyxHQUFHbUIsRUFBT2pkLEdBQVNHLEdBQVEyYixFQUFFLE1BQU1BLEVBQUUsS0FBSztBQUFBLE1BQUcsQ0FBQztBQUFBLElBQUc7QUFBQSxFQUFHO0FBQy9KLFdBQVNtQixFQUFPamQsR0FBU0csR0FBUW1FLEdBQUd3WCxHQUFHO0FBQUUsWUFBUSxRQUFRQSxDQUFDLEVBQUUsS0FBSyxTQUFTQSxHQUFHO0FBQUUsTUFBQTliLEVBQVEsRUFBRSxPQUFPOGIsR0FBRyxNQUFNeFgsRUFBRSxDQUFDO0FBQUEsSUFBRyxHQUFHbkUsQ0FBTTtBQUFBLEVBQUc7QUFDN0g7QUFPQSxTQUFTaWQsRUFBV0MsR0FBTztBQUN2QixTQUFPLE9BQU9BLEtBQVU7QUFDNUI7QUFFQSxTQUFTQyxHQUFpQkMsR0FBWTtBQUNsQyxNQUFJQyxJQUFTLFNBQVVDLEdBQVU7QUFDN0IsVUFBTSxLQUFLQSxDQUFRLEdBQ25CQSxFQUFTLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFBQSxFQUNqQyxHQUNJQyxJQUFXSCxFQUFXQyxDQUFNO0FBQ2hDLFNBQUFFLEVBQVMsWUFBWSxPQUFPLE9BQU8sTUFBTSxTQUFTLEdBQ2xEQSxFQUFTLFVBQVUsY0FBY0EsR0FDMUJBO0FBQ1g7QUFFQSxJQUFJQyxLQUFzQkwsR0FBaUIsU0FBVUUsR0FBUTtBQUN6RCxTQUFPLFNBQWlDSSxHQUFRO0FBQzVDLElBQUFKLEVBQU8sSUFBSSxHQUNYLEtBQUssVUFBVUksSUFDVEEsRUFBTyxTQUFTO0FBQUEsSUFBOENBLEVBQU8sSUFBSSxTQUFVQyxHQUFLQyxHQUFHO0FBQUUsYUFBT0EsSUFBSSxJQUFJLE9BQU9ELEVBQUksU0FBUztBQUFBLElBQUcsQ0FBQyxFQUFFLEtBQUs7QUFBQSxHQUFNLElBQ2pKLElBQ04sS0FBSyxPQUFPLHVCQUNaLEtBQUssU0FBU0Q7QUFBQSxFQUNsQjtBQUNKLENBQUM7QUFFRCxTQUFTRyxHQUFVQyxHQUFLQyxHQUFNO0FBQzFCLE1BQUlELEdBQUs7QUFDTCxRQUFJRSxJQUFRRixFQUFJLFFBQVFDLENBQUk7QUFDNUIsU0FBS0MsS0FBU0YsRUFBSSxPQUFPRSxHQUFPLENBQUM7QUFBQSxFQUNyQztBQUNKO0FBRUEsSUFBSUMsS0FBZ0IsV0FBWTtBQUM1QixXQUFTQSxFQUFhQyxHQUFpQjtBQUNuQyxTQUFLLGtCQUFrQkEsR0FDdkIsS0FBSyxTQUFTLElBQ2QsS0FBSyxhQUFhLE1BQ2xCLEtBQUssY0FBYztBQUFBLEVBQ3ZCO0FBQ0EsU0FBQUQsRUFBYSxVQUFVLGNBQWMsV0FBWTtBQUM3QyxRQUFJRSxHQUFLQyxHQUFJQyxHQUFLQyxHQUNkWjtBQUNKLFFBQUksQ0FBQyxLQUFLLFFBQVE7QUFDZCxXQUFLLFNBQVM7QUFDZCxVQUFJYSxJQUFhLEtBQUs7QUFDdEIsVUFBSUE7QUFFQSxZQURBLEtBQUssYUFBYSxNQUNkLE1BQU0sUUFBUUEsQ0FBVTtBQUN4QixjQUFJO0FBQ0EscUJBQVNDLElBQWVDLEdBQVNGLENBQVUsR0FBR0csSUFBaUJGLEVBQWEsS0FBSyxHQUFHLENBQUNFLEVBQWUsTUFBTUEsSUFBaUJGLEVBQWEsS0FBSyxHQUFHO0FBQzVJLGtCQUFJRyxJQUFXRCxFQUFlO0FBQzlCLGNBQUFDLEVBQVMsT0FBTyxJQUFJO0FBQUEsWUFDeEI7QUFBQSxVQUNKLFNBQ09DLEdBQU87QUFBRSxZQUFBVCxJQUFNLEVBQUUsT0FBT1MsRUFBTTtBQUFBLFVBQUcsVUFDeEM7QUFDSSxnQkFBSTtBQUNBLGNBQUlGLEtBQWtCLENBQUNBLEVBQWUsU0FBU04sSUFBS0ksRUFBYSxXQUFTSixFQUFHLEtBQUtJLENBQVk7QUFBQSxZQUNsRyxVQUNBO0FBQVUsa0JBQUlMLEVBQUssT0FBTUEsRUFBSTtBQUFBLFlBQU87QUFBQSxVQUN4QztBQUFBO0FBR0EsVUFBQUksRUFBVyxPQUFPLElBQUk7QUFHOUIsVUFBSU0sSUFBbUIsS0FBSztBQUM1QixVQUFJM0IsRUFBVzJCLENBQWdCO0FBQzNCLFlBQUk7QUFDQSxVQUFBQSxFQUFpQjtBQUFBLFFBQ3JCLFNBQ09DLEdBQUc7QUFDTixVQUFBcEIsSUFBU29CLGFBQWFyQixLQUFzQnFCLEVBQUUsU0FBUyxDQUFDQSxDQUFDO0FBQUEsUUFDN0Q7QUFFSixVQUFJQyxJQUFjLEtBQUs7QUFDdkIsVUFBSUEsR0FBYTtBQUNiLGFBQUssY0FBYztBQUNuQixZQUFJO0FBQ0EsbUJBQVNDLElBQWdCUCxHQUFTTSxDQUFXLEdBQUdFLElBQWtCRCxFQUFjLEtBQUssR0FBRyxDQUFDQyxFQUFnQixNQUFNQSxJQUFrQkQsRUFBYyxLQUFLLEdBQUc7QUFDbkosZ0JBQUlFLElBQVlELEVBQWdCO0FBQ2hDLGdCQUFJO0FBQ0EsY0FBQUUsR0FBY0QsQ0FBUztBQUFBLFlBQzNCLFNBQ092QixHQUFLO0FBQ1IsY0FBQUQsSUFBU0EsS0FBZ0QsQ0FBQyxHQUN0REMsYUFBZUYsS0FDZkMsSUFBUzBCLEdBQWNBLEdBQWMsQ0FBQyxHQUFHQyxHQUFPM0IsQ0FBTSxDQUFDLEdBQUcyQixHQUFPMUIsRUFBSSxNQUFNLENBQUMsSUFHNUVELEVBQU8sS0FBS0MsQ0FBRztBQUFBLFlBRXZCO0FBQUEsVUFDSjtBQUFBLFFBQ0osU0FDTzJCLEdBQU87QUFBRSxVQUFBakIsSUFBTSxFQUFFLE9BQU9pQixFQUFNO0FBQUEsUUFBRyxVQUN4QztBQUNJLGNBQUk7QUFDQSxZQUFJTCxLQUFtQixDQUFDQSxFQUFnQixTQUFTWCxJQUFLVSxFQUFjLFdBQVNWLEVBQUcsS0FBS1UsQ0FBYTtBQUFBLFVBQ3RHLFVBQ0E7QUFBVSxnQkFBSVgsRUFBSyxPQUFNQSxFQUFJO0FBQUEsVUFBTztBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUNBLFVBQUlYO0FBQ0EsY0FBTSxJQUFJRCxHQUFvQkMsQ0FBTTtBQUFBLElBRTVDO0FBQUEsRUFDSixHQUNBTyxFQUFhLFVBQVUsTUFBTSxTQUFVc0IsR0FBVTtBQUM3QyxRQUFJbkI7QUFDSixRQUFJbUIsS0FBWUEsTUFBYTtBQUN6QixVQUFJLEtBQUs7QUFDTCxRQUFBSixHQUFjSSxDQUFRO0FBQUEsV0FFckI7QUFDRCxZQUFJQSxhQUFvQnRCLEdBQWM7QUFDbEMsY0FBSXNCLEVBQVMsVUFBVUEsRUFBUyxXQUFXLElBQUk7QUFDM0M7QUFFSixVQUFBQSxFQUFTLFdBQVcsSUFBSTtBQUFBLFFBQzVCO0FBQ0EsU0FBQyxLQUFLLGVBQWVuQixJQUFLLEtBQUssaUJBQWlCLFFBQVFBLE1BQU8sU0FBU0EsSUFBSyxDQUFDLEdBQUcsS0FBS21CLENBQVE7QUFBQSxNQUNsRztBQUFBLEVBRVIsR0FDQXRCLEVBQWEsVUFBVSxhQUFhLFNBQVV1QixHQUFRO0FBQ2xELFFBQUlqQixJQUFhLEtBQUs7QUFDdEIsV0FBT0EsTUFBZWlCLEtBQVcsTUFBTSxRQUFRakIsQ0FBVSxLQUFLQSxFQUFXLFNBQVNpQixDQUFNO0FBQUEsRUFDNUYsR0FDQXZCLEVBQWEsVUFBVSxhQUFhLFNBQVV1QixHQUFRO0FBQ2xELFFBQUlqQixJQUFhLEtBQUs7QUFDdEIsU0FBSyxhQUFhLE1BQU0sUUFBUUEsQ0FBVSxLQUFLQSxFQUFXLEtBQUtpQixDQUFNLEdBQUdqQixLQUFjQSxJQUFhLENBQUNBLEdBQVlpQixDQUFNLElBQUlBO0FBQUEsRUFDOUgsR0FDQXZCLEVBQWEsVUFBVSxnQkFBZ0IsU0FBVXVCLEdBQVE7QUFDckQsUUFBSWpCLElBQWEsS0FBSztBQUN0QixJQUFJQSxNQUFlaUIsSUFDZixLQUFLLGFBQWEsT0FFYixNQUFNLFFBQVFqQixDQUFVLEtBQzdCVixHQUFVVSxHQUFZaUIsQ0FBTTtBQUFBLEVBRXBDLEdBQ0F2QixFQUFhLFVBQVUsU0FBUyxTQUFVc0IsR0FBVTtBQUNoRCxRQUFJUixJQUFjLEtBQUs7QUFDdkIsSUFBQUEsS0FBZWxCLEdBQVVrQixHQUFhUSxDQUFRLEdBQzFDQSxhQUFvQnRCLEtBQ3BCc0IsRUFBUyxjQUFjLElBQUk7QUFBQSxFQUVuQyxHQUNBdEIsRUFBYSxRQUFTLFdBQVk7QUFDOUIsUUFBSXdCLElBQVEsSUFBSXhCLEVBQWE7QUFDN0IsV0FBQXdCLEVBQU0sU0FBUyxJQUNSQTtBQUFBLEVBQ1gsRUFBRyxHQUNJeEI7QUFDWCxFQUFFLEdBQ0V5QixLQUFxQnpCLEdBQWE7QUFDdEMsU0FBUzBCLEdBQWV4QyxHQUFPO0FBQzNCLFNBQVFBLGFBQWlCYyxNQUNwQmQsS0FBUyxZQUFZQSxLQUFTRCxFQUFXQyxFQUFNLE1BQU0sS0FBS0QsRUFBV0MsRUFBTSxHQUFHLEtBQUtELEVBQVdDLEVBQU0sV0FBVztBQUN4SDtBQUNBLFNBQVNnQyxHQUFjRCxHQUFXO0FBQzlCLEVBQUloQyxFQUFXZ0MsQ0FBUyxJQUNwQkEsRUFBVSxJQUdWQSxFQUFVLFlBQVk7QUFFOUI7QUFFQSxJQUFJVSxLQUFTO0FBQUEsRUFDVCxrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixTQUFTO0FBQUEsRUFDVCx1Q0FBdUM7QUFBQSxFQUN2QywwQkFBMEI7QUFDOUIsR0FFSUMsS0FBa0I7QUFBQSxFQUNsQixZQUFZLFNBQVVDLEdBQVNDLEdBQVM7QUFFcEMsYUFESUMsSUFBTyxDQUFDLEdBQ0hDLElBQUssR0FBR0EsSUFBSyxVQUFVLFFBQVFBO0FBQ3BDLE1BQUFELEVBQUtDLElBQUssQ0FBQyxJQUFJLFVBQVVBLENBQUU7QUFFL0IsV0FBTyxXQUFXLE1BQU0sUUFBUWIsR0FBYyxDQUFDVSxHQUFTQyxDQUFPLEdBQUdWLEdBQU9XLENBQUksQ0FBQyxDQUFDO0FBQUEsRUFDbkY7QUFBQSxFQUNBLGNBQWMsU0FBVUUsR0FBUTtBQUM1QixRQUFJQyxJQUFXTixHQUFnQjtBQUMvQixhQUFTTSxLQUFhLE9BQThCLFNBQVNBLEVBQVMsaUJBQWlCLGNBQWNELENBQU07QUFBQSxFQUMvRztBQUFBLEVBQ0EsVUFBVTtBQUNkO0FBRUEsU0FBU0UsR0FBcUJ6QyxHQUFLO0FBQy9CLEVBQUFrQyxHQUFnQixXQUFXLFdBQVk7QUFFL0IsVUFBTWxDO0FBQUEsRUFFZCxDQUFDO0FBQ0w7QUFFQSxTQUFTMEMsS0FBTztBQUFFO0FBRWxCLFNBQVNDLEdBQWFDLEdBQUk7QUFFbEIsRUFBQUEsRUFBRztBQUVYO0FBRUEsSUFBSUMsS0FBYyxTQUFVbEQsR0FBUTtBQUNoQyxFQUFBbUQsR0FBVUQsR0FBWWxELENBQU07QUFDNUIsV0FBU2tELEVBQVdFLEdBQWE7QUFDN0IsUUFBSUMsSUFBUXJELEVBQU8sS0FBSyxJQUFJLEtBQUs7QUFDakMsV0FBQXFELEVBQU0sWUFBWSxJQUNkRCxLQUNBQyxFQUFNLGNBQWNELEdBQ2hCZixHQUFlZSxDQUFXLEtBQzFCQSxFQUFZLElBQUlDLENBQUssS0FJekJBLEVBQU0sY0FBY0MsSUFFakJEO0FBQUEsRUFDWDtBQUNBLFNBQUFILEVBQVcsU0FBUyxTQUFVSyxHQUFNQyxHQUFPQyxHQUFVO0FBQ2pELFdBQU8sSUFBSUMsR0FBZUgsR0FBTUMsR0FBT0MsQ0FBUTtBQUFBLEVBQ25ELEdBQ0FQLEVBQVcsVUFBVSxPQUFPLFNBQVVyRCxHQUFPO0FBQ3pDLElBQUksS0FBSyxhQUVMLEtBQUssTUFBTUEsQ0FBSztBQUFBLEVBRXhCLEdBQ0FxRCxFQUFXLFVBQVUsUUFBUSxTQUFVN0MsR0FBSztBQUN4QyxJQUFJLEtBQUssY0FFTCxLQUFLLFlBQVksSUFDakIsS0FBSyxPQUFPQSxDQUFHO0FBQUEsRUFFdkIsR0FDQTZDLEVBQVcsVUFBVSxXQUFXLFdBQVk7QUFDeEMsSUFBSSxLQUFLLGNBRUwsS0FBSyxZQUFZLElBQ2pCLEtBQUssVUFBVTtBQUFBLEVBRXZCLEdBQ0FBLEVBQVcsVUFBVSxjQUFjLFdBQVk7QUFDM0MsSUFBSyxLQUFLLFdBQ04sS0FBSyxZQUFZLElBQ2pCbEQsRUFBTyxVQUFVLFlBQVksS0FBSyxJQUFJLEdBQ3RDLEtBQUssY0FBYztBQUFBLEVBRTNCLEdBQ0FrRCxFQUFXLFVBQVUsUUFBUSxTQUFVckQsR0FBTztBQUMxQyxTQUFLLFlBQVksS0FBS0EsQ0FBSztBQUFBLEVBQy9CLEdBQ0FxRCxFQUFXLFVBQVUsU0FBUyxTQUFVN0MsR0FBSztBQUN6QyxRQUFJO0FBQ0EsV0FBSyxZQUFZLE1BQU1BLENBQUc7QUFBQSxJQUM5QixVQUNBO0FBQ0ksV0FBSyxZQUFZO0FBQUEsSUFDckI7QUFBQSxFQUNKLEdBQ0E2QyxFQUFXLFVBQVUsWUFBWSxXQUFZO0FBQ3pDLFFBQUk7QUFDQSxXQUFLLFlBQVksU0FBUztBQUFBLElBQzlCLFVBQ0E7QUFDSSxXQUFLLFlBQVk7QUFBQSxJQUNyQjtBQUFBLEVBQ0osR0FDT0E7QUFDWCxFQUFFdkMsRUFBWSxHQUNWZ0QsS0FBUSxTQUFTLFVBQVU7QUFDL0IsU0FBU0MsR0FBS0MsR0FBSUMsR0FBUztBQUN2QixTQUFPSCxHQUFNLEtBQUtFLEdBQUlDLENBQU87QUFDakM7QUFDQSxJQUFJQyxLQUFvQixXQUFZO0FBQ2hDLFdBQVNBLEVBQWlCQyxHQUFpQjtBQUN2QyxTQUFLLGtCQUFrQkE7QUFBQSxFQUMzQjtBQUNBLFNBQUFELEVBQWlCLFVBQVUsT0FBTyxTQUFVbEUsR0FBTztBQUMvQyxRQUFJbUUsSUFBa0IsS0FBSztBQUMzQixRQUFJQSxFQUFnQjtBQUNoQixVQUFJO0FBQ0EsUUFBQUEsRUFBZ0IsS0FBS25FLENBQUs7QUFBQSxNQUM5QixTQUNPMkQsR0FBTztBQUNWLFFBQUFTLEdBQXFCVCxDQUFLO0FBQUEsTUFDOUI7QUFBQSxFQUVSLEdBQ0FPLEVBQWlCLFVBQVUsUUFBUSxTQUFVMUQsR0FBSztBQUM5QyxRQUFJMkQsSUFBa0IsS0FBSztBQUMzQixRQUFJQSxFQUFnQjtBQUNoQixVQUFJO0FBQ0EsUUFBQUEsRUFBZ0IsTUFBTTNELENBQUc7QUFBQSxNQUM3QixTQUNPbUQsR0FBTztBQUNWLFFBQUFTLEdBQXFCVCxDQUFLO0FBQUEsTUFDOUI7QUFBQTtBQUdBLE1BQUFTLEdBQXFCNUQsQ0FBRztBQUFBLEVBRWhDLEdBQ0EwRCxFQUFpQixVQUFVLFdBQVcsV0FBWTtBQUM5QyxRQUFJQyxJQUFrQixLQUFLO0FBQzNCLFFBQUlBLEVBQWdCO0FBQ2hCLFVBQUk7QUFDQSxRQUFBQSxFQUFnQixTQUFTO0FBQUEsTUFDN0IsU0FDT1IsR0FBTztBQUNWLFFBQUFTLEdBQXFCVCxDQUFLO0FBQUEsTUFDOUI7QUFBQSxFQUVSLEdBQ09PO0FBQ1gsRUFBRSxHQUNFTCxLQUFrQixTQUFVMUQsR0FBUTtBQUNwQyxFQUFBbUQsR0FBVU8sR0FBZ0IxRCxDQUFNO0FBQ2hDLFdBQVMwRCxFQUFlUSxHQUFnQlYsR0FBT0MsR0FBVTtBQUNyRCxRQUFJSixJQUFRckQsRUFBTyxLQUFLLElBQUksS0FBSyxNQUM3QmdFO0FBQ0osUUFBSXBFLEVBQVdzRSxDQUFjLEtBQUssQ0FBQ0E7QUFDL0IsTUFBQUYsSUFBa0I7QUFBQSxRQUNkLE1BQU9FLEtBQXdFO0FBQUEsUUFDL0UsT0FBT1YsS0FBNkM7QUFBQSxRQUNwRCxVQUFVQyxLQUFzRDtBQUFBLE1BQ3BFO0FBQUEsU0FFQztBQUNELFVBQUlVO0FBQ0osTUFBSWQsS0FBU2YsR0FBTyw0QkFDaEI2QixJQUFZLE9BQU8sT0FBT0QsQ0FBYyxHQUN4Q0MsRUFBVSxjQUFjLFdBQVk7QUFBRSxlQUFPZCxFQUFNLFlBQVk7QUFBQSxNQUFHLEdBQ2xFVyxJQUFrQjtBQUFBLFFBQ2QsTUFBTUUsRUFBZSxRQUFRTixHQUFLTSxFQUFlLE1BQU1DLENBQVM7QUFBQSxRQUNoRSxPQUFPRCxFQUFlLFNBQVNOLEdBQUtNLEVBQWUsT0FBT0MsQ0FBUztBQUFBLFFBQ25FLFVBQVVELEVBQWUsWUFBWU4sR0FBS00sRUFBZSxVQUFVQyxDQUFTO0FBQUEsTUFDaEYsS0FHQUgsSUFBa0JFO0FBQUEsSUFFMUI7QUFDQSxXQUFBYixFQUFNLGNBQWMsSUFBSVUsR0FBaUJDLENBQWUsR0FDakRYO0FBQUEsRUFDWDtBQUNBLFNBQU9LO0FBQ1gsRUFBRVIsRUFBVTtBQUNaLFNBQVNlLEdBQXFCVCxHQUFPO0FBRTdCLEVBQUFWLEdBQXFCVSxDQUFLO0FBRWxDO0FBQ0EsU0FBU1ksR0FBb0IvRCxHQUFLO0FBQzlCLFFBQU1BO0FBQ1Y7QUFDQSxJQUFJaUQsS0FBaUI7QUFBQSxFQUNqQixRQUFRO0FBQUEsRUFDUixNQUFNUDtBQUFBLEVBQ04sT0FBT3FCO0FBQUEsRUFDUCxVQUFVckI7QUFDZCxHQUVJc0IsS0FBYyxXQUFZO0FBQUUsU0FBUSxPQUFPLFVBQVcsY0FBYyxPQUFPLGNBQWU7QUFBZ0IsRUFBRztBQUVqSCxTQUFTQyxHQUFTQyxHQUFHO0FBQ2pCLFNBQU9BO0FBQ1g7QUFFQSxTQUFTQyxHQUFjQyxHQUFLO0FBQ3hCLFNBQUlBLEVBQUksV0FBVyxJQUNSSCxLQUVQRyxFQUFJLFdBQVcsSUFDUkEsRUFBSSxDQUFDLElBRVQsU0FBZUMsR0FBTztBQUN6QixXQUFPRCxFQUFJLE9BQU8sU0FBVUUsR0FBTWQsR0FBSTtBQUFFLGFBQU9BLEVBQUdjLENBQUk7QUFBQSxJQUFHLEdBQUdELENBQUs7QUFBQSxFQUNyRTtBQUNKO0FBRUEsSUFBSUUsSUFBYyxXQUFZO0FBQzFCLFdBQVNBLEVBQVdDLEdBQVc7QUFDM0IsSUFBSUEsTUFDQSxLQUFLLGFBQWFBO0FBQUEsRUFFMUI7QUFDQSxTQUFBRCxFQUFXLFVBQVUsT0FBTyxTQUFVRSxHQUFVO0FBQzVDLFFBQUlULElBQWEsSUFBSU8sRUFBVztBQUNoQyxXQUFBUCxFQUFXLFNBQVMsTUFDcEJBLEVBQVcsV0FBV1MsR0FDZlQ7QUFBQSxFQUNYLEdBQ0FPLEVBQVcsVUFBVSxZQUFZLFNBQVVWLEdBQWdCVixHQUFPQyxHQUFVO0FBQ3hFLFFBQUlKLElBQVEsTUFDUjBCLElBQWFDLEdBQWFkLENBQWMsSUFBSUEsSUFBaUIsSUFBSVIsR0FBZVEsR0FBZ0JWLEdBQU9DLENBQVE7QUFDbkgsV0FBQVQsR0FBYSxXQUFZO0FBQ3JCLFVBQUlsQyxJQUFLdUMsR0FBT3lCLElBQVdoRSxFQUFHLFVBQVVtRSxJQUFTbkUsRUFBRztBQUNwRCxNQUFBaUUsRUFBVyxJQUFJRCxJQUVQQSxFQUFTLEtBQUtDLEdBQVlFLENBQU0sSUFDbENBLElBRU01QixFQUFNLFdBQVcwQixDQUFVLElBRTNCMUIsRUFBTSxjQUFjMEIsQ0FBVSxDQUFDO0FBQUEsSUFDL0MsQ0FBQyxHQUNNQTtBQUFBLEVBQ1gsR0FDQUgsRUFBVyxVQUFVLGdCQUFnQixTQUFVTSxHQUFNO0FBQ2pELFFBQUk7QUFDQSxhQUFPLEtBQUssV0FBV0EsQ0FBSTtBQUFBLElBQy9CLFNBQ083RSxHQUFLO0FBQ1IsTUFBQTZFLEVBQUssTUFBTTdFLENBQUc7QUFBQSxJQUNsQjtBQUFBLEVBQ0osR0FDQXVFLEVBQVcsVUFBVSxVQUFVLFNBQVVyQixHQUFNNEIsR0FBYTtBQUN4RCxRQUFJOUIsSUFBUTtBQUNaLFdBQUE4QixJQUFjQyxHQUFlRCxDQUFXLEdBQ2pDLElBQUlBLEVBQVksU0FBVUUsR0FBU0MsR0FBUTtBQUM5QyxVQUFJUCxJQUFhLElBQUlyQixHQUFlO0FBQUEsUUFDaEMsTUFBTSxTQUFVN0QsR0FBTztBQUNuQixjQUFJO0FBQ0EsWUFBQTBELEVBQUsxRCxDQUFLO0FBQUEsVUFDZCxTQUNPUSxHQUFLO0FBQ1IsWUFBQWlGLEVBQU9qRixDQUFHLEdBQ1YwRSxFQUFXLFlBQVk7QUFBQSxVQUMzQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU9PO0FBQUEsUUFDUCxVQUFVRDtBQUFBLE1BQ2QsQ0FBQztBQUNELE1BQUFoQyxFQUFNLFVBQVUwQixDQUFVO0FBQUEsSUFDOUIsQ0FBQztBQUFBLEVBQ0wsR0FDQUgsRUFBVyxVQUFVLGFBQWEsU0FBVUcsR0FBWTtBQUNwRCxRQUFJakU7QUFDSixZQUFRQSxJQUFLLEtBQUssWUFBWSxRQUFRQSxNQUFPLFNBQVMsU0FBU0EsRUFBRyxVQUFVaUUsQ0FBVTtBQUFBLEVBQzFGLEdBQ0FILEVBQVcsVUFBVVAsRUFBVSxJQUFJLFdBQVk7QUFDM0MsV0FBTztBQUFBLEVBQ1gsR0FDQU8sRUFBVyxVQUFVLE9BQU8sV0FBWTtBQUVwQyxhQURJVyxJQUFhLENBQUMsR0FDVDVDLElBQUssR0FBR0EsSUFBSyxVQUFVLFFBQVFBO0FBQ3BDLE1BQUE0QyxFQUFXNUMsQ0FBRSxJQUFJLFVBQVVBLENBQUU7QUFFakMsV0FBTzZCLEdBQWNlLENBQVUsRUFBRSxJQUFJO0FBQUEsRUFDekMsR0FDQVgsRUFBVyxVQUFVLFlBQVksU0FBVU8sR0FBYTtBQUNwRCxRQUFJOUIsSUFBUTtBQUNaLFdBQUE4QixJQUFjQyxHQUFlRCxDQUFXLEdBQ2pDLElBQUlBLEVBQVksU0FBVUUsR0FBU0MsR0FBUTtBQUM5QyxVQUFJekY7QUFDSixNQUFBd0QsRUFBTSxVQUFVLFNBQVVrQixHQUFHO0FBQUUsZUFBUTFFLElBQVEwRTtBQUFBLE1BQUksR0FBRyxTQUFVbEUsR0FBSztBQUFFLGVBQU9pRixFQUFPakYsQ0FBRztBQUFBLE1BQUcsR0FBRyxXQUFZO0FBQUUsZUFBT2dGLEVBQVF4RixDQUFLO0FBQUEsTUFBRyxDQUFDO0FBQUEsSUFDeEksQ0FBQztBQUFBLEVBQ0wsR0FDQStFLEVBQVcsU0FBUyxTQUFVQyxHQUFXO0FBQ3JDLFdBQU8sSUFBSUQsRUFBV0MsQ0FBUztBQUFBLEVBQ25DLEdBQ09EO0FBQ1gsRUFBRTtBQUNGLFNBQVNRLEdBQWVELEdBQWE7QUFDakMsTUFBSXJFO0FBQ0osVUFBUUEsSUFBS3FFLEtBQStEN0MsR0FBTyxhQUFhLFFBQVF4QixNQUFPLFNBQVNBLElBQUs7QUFDakk7QUFDQSxTQUFTMEUsR0FBVzNGLEdBQU87QUFDdkIsU0FBT0EsS0FBU0QsRUFBV0MsRUFBTSxJQUFJLEtBQUtELEVBQVdDLEVBQU0sS0FBSyxLQUFLRCxFQUFXQyxFQUFNLFFBQVE7QUFDbEc7QUFDQSxTQUFTbUYsR0FBYW5GLEdBQU87QUFDekIsU0FBUUEsS0FBU0EsYUFBaUJxRCxNQUFnQnNDLEdBQVczRixDQUFLLEtBQUt3QyxHQUFleEMsQ0FBSztBQUMvRjtBQUVBLFNBQVM0RixHQUFRUixHQUFRO0FBQ3JCLFNBQU9yRixFQUFXcUYsS0FBVyxPQUE0QixTQUFTQSxFQUFPLElBQUk7QUFDakY7QUFDQSxTQUFTUyxHQUFRQyxHQUFNO0FBQ25CLFNBQU8sU0FBVVYsR0FBUTtBQUNyQixRQUFJUSxHQUFRUixDQUFNO0FBQ2QsYUFBT0EsRUFBTyxLQUFLLFNBQVVXLEdBQWM7QUFDdkMsWUFBSTtBQUNBLGlCQUFPRCxFQUFLQyxHQUFjLElBQUk7QUFBQSxRQUNsQyxTQUNPdkYsR0FBSztBQUNSLGVBQUssTUFBTUEsQ0FBRztBQUFBLFFBQ2xCO0FBQUEsTUFDSixDQUFDO0FBRUwsVUFBTSxJQUFJLFVBQVUsd0NBQXdDO0FBQUEsRUFDaEU7QUFDSjtBQUVBLFNBQVN3RixHQUF5QnpDLEdBQWEwQyxHQUFRQyxHQUFZQyxHQUFTQyxHQUFZO0FBQ3BGLFNBQU8sSUFBSUMsR0FBbUI5QyxHQUFhMEMsR0FBUUMsR0FBWUMsR0FBU0MsQ0FBVTtBQUN0RjtBQUNBLElBQUlDLEtBQXNCLFNBQVVsRyxHQUFRO0FBQ3hDLEVBQUFtRCxHQUFVK0MsR0FBb0JsRyxDQUFNO0FBQ3BDLFdBQVNrRyxFQUFtQjlDLEdBQWEwQyxHQUFRQyxHQUFZQyxHQUFTQyxHQUFZRSxHQUFtQjtBQUNqRyxRQUFJOUMsSUFBUXJELEVBQU8sS0FBSyxNQUFNb0QsQ0FBVyxLQUFLO0FBQzlDLFdBQUFDLEVBQU0sYUFBYTRDLEdBQ25CNUMsRUFBTSxvQkFBb0I4QyxHQUMxQjlDLEVBQU0sUUFBUXlDLElBQ1IsU0FBVWpHLEdBQU87QUFDZixVQUFJO0FBQ0EsUUFBQWlHLEVBQU9qRyxDQUFLO0FBQUEsTUFDaEIsU0FDT1EsR0FBSztBQUNSLFFBQUErQyxFQUFZLE1BQU0vQyxDQUFHO0FBQUEsTUFDekI7QUFBQSxJQUNKLElBQ0VMLEVBQU8sVUFBVSxPQUN2QnFELEVBQU0sU0FBUzJDLElBQ1QsU0FBVTNGLEdBQUs7QUFDYixVQUFJO0FBQ0EsUUFBQTJGLEVBQVEzRixDQUFHO0FBQUEsTUFDZixTQUNPQSxHQUFLO0FBQ1IsUUFBQStDLEVBQVksTUFBTS9DLENBQUc7QUFBQSxNQUN6QixVQUNBO0FBQ0ksYUFBSyxZQUFZO0FBQUEsTUFDckI7QUFBQSxJQUNKLElBQ0VMLEVBQU8sVUFBVSxRQUN2QnFELEVBQU0sWUFBWTBDLElBQ1osV0FBWTtBQUNWLFVBQUk7QUFDQSxRQUFBQSxFQUFXO0FBQUEsTUFDZixTQUNPMUYsR0FBSztBQUNSLFFBQUErQyxFQUFZLE1BQU0vQyxDQUFHO0FBQUEsTUFDekIsVUFDQTtBQUNJLGFBQUssWUFBWTtBQUFBLE1BQ3JCO0FBQUEsSUFDSixJQUNFTCxFQUFPLFVBQVUsV0FDaEJxRDtBQUFBLEVBQ1g7QUFDQSxTQUFBNkMsRUFBbUIsVUFBVSxjQUFjLFdBQVk7QUFDbkQsUUFBSXBGO0FBQ0osUUFBSSxDQUFDLEtBQUsscUJBQXFCLEtBQUssa0JBQWtCLEdBQUc7QUFDckQsVUFBSXNGLElBQVcsS0FBSztBQUNwQixNQUFBcEcsRUFBTyxVQUFVLFlBQVksS0FBSyxJQUFJLEdBQ3RDLENBQUNvRyxPQUFjdEYsSUFBSyxLQUFLLGdCQUFnQixRQUFRQSxNQUFPLFVBQWtCQSxFQUFHLEtBQUssSUFBSTtBQUFBLElBQzFGO0FBQUEsRUFDSixHQUNPb0Y7QUFDWCxFQUFFaEQsRUFBVSxHQUVSbUQsS0FBMEJ2RyxHQUFpQixTQUFVRSxHQUFRO0FBQzdELFNBQU8sV0FBdUM7QUFDMUMsSUFBQUEsRUFBTyxJQUFJLEdBQ1gsS0FBSyxPQUFPLDJCQUNaLEtBQUssVUFBVTtBQUFBLEVBQ25CO0FBQ0osQ0FBQyxHQUVHc0csS0FBVyxTQUFVdEcsR0FBUTtBQUM3QixFQUFBbUQsR0FBVW1ELEdBQVN0RyxDQUFNO0FBQ3pCLFdBQVNzRyxJQUFVO0FBQ2YsUUFBSWpELElBQVFyRCxFQUFPLEtBQUssSUFBSSxLQUFLO0FBQ2pDLFdBQUFxRCxFQUFNLFNBQVMsSUFDZkEsRUFBTSxtQkFBbUIsTUFDekJBLEVBQU0sWUFBWSxDQUFDLEdBQ25CQSxFQUFNLFlBQVksSUFDbEJBLEVBQU0sV0FBVyxJQUNqQkEsRUFBTSxjQUFjLE1BQ2JBO0FBQUEsRUFDWDtBQUNBLFNBQUFpRCxFQUFRLFVBQVUsT0FBTyxTQUFVeEIsR0FBVTtBQUN6QyxRQUFJeUIsSUFBVSxJQUFJQyxHQUFpQixNQUFNLElBQUk7QUFDN0MsV0FBQUQsRUFBUSxXQUFXekIsR0FDWnlCO0FBQUEsRUFDWCxHQUNBRCxFQUFRLFVBQVUsaUJBQWlCLFdBQVk7QUFDM0MsUUFBSSxLQUFLO0FBQ0wsWUFBTSxJQUFJRCxHQUF3QjtBQUFBLEVBRTFDLEdBQ0FDLEVBQVEsVUFBVSxPQUFPLFNBQVV6RyxHQUFPO0FBQ3RDLFFBQUl3RCxJQUFRO0FBQ1osSUFBQUwsR0FBYSxXQUFZO0FBQ3JCLFVBQUluQyxHQUFLQztBQUVULFVBREF1QyxFQUFNLGVBQWUsR0FDakIsQ0FBQ0EsRUFBTSxXQUFXO0FBQ2xCLFFBQUtBLEVBQU0scUJBQ1BBLEVBQU0sbUJBQW1CLE1BQU0sS0FBS0EsRUFBTSxTQUFTO0FBRXZELFlBQUk7QUFDQSxtQkFBU3JDLElBQUtHLEdBQVNrQyxFQUFNLGdCQUFnQixHQUFHb0QsSUFBS3pGLEVBQUcsS0FBSyxHQUFHLENBQUN5RixFQUFHLE1BQU1BLElBQUt6RixFQUFHLEtBQUssR0FBRztBQUN0RixnQkFBSTBGLElBQVdELEVBQUc7QUFDbEIsWUFBQUMsRUFBUyxLQUFLN0csQ0FBSztBQUFBLFVBQ3ZCO0FBQUEsUUFDSixTQUNPeUIsR0FBTztBQUFFLFVBQUFULElBQU0sRUFBRSxPQUFPUyxFQUFNO0FBQUEsUUFBRyxVQUN4QztBQUNJLGNBQUk7QUFDQSxZQUFJbUYsS0FBTSxDQUFDQSxFQUFHLFNBQVMzRixJQUFLRSxFQUFHLFdBQVNGLEVBQUcsS0FBS0UsQ0FBRTtBQUFBLFVBQ3RELFVBQ0E7QUFBVSxnQkFBSUgsRUFBSyxPQUFNQSxFQUFJO0FBQUEsVUFBTztBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0wsR0FDQXlGLEVBQVEsVUFBVSxRQUFRLFNBQVVqRyxHQUFLO0FBQ3JDLFFBQUlnRCxJQUFRO0FBQ1osSUFBQUwsR0FBYSxXQUFZO0FBRXJCLFVBREFLLEVBQU0sZUFBZSxHQUNqQixDQUFDQSxFQUFNLFdBQVc7QUFDbEIsUUFBQUEsRUFBTSxXQUFXQSxFQUFNLFlBQVksSUFDbkNBLEVBQU0sY0FBY2hEO0FBRXBCLGlCQURJc0csSUFBWXRELEVBQU0sV0FDZnNELEVBQVU7QUFDYixVQUFBQSxFQUFVLE1BQU0sRUFBRSxNQUFNdEcsQ0FBRztBQUFBLE1BRW5DO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTCxHQUNBaUcsRUFBUSxVQUFVLFdBQVcsV0FBWTtBQUNyQyxRQUFJakQsSUFBUTtBQUNaLElBQUFMLEdBQWEsV0FBWTtBQUVyQixVQURBSyxFQUFNLGVBQWUsR0FDakIsQ0FBQ0EsRUFBTSxXQUFXO0FBQ2xCLFFBQUFBLEVBQU0sWUFBWTtBQUVsQixpQkFESXNELElBQVl0RCxFQUFNLFdBQ2ZzRCxFQUFVO0FBQ2IsVUFBQUEsRUFBVSxNQUFNLEVBQUUsU0FBUztBQUFBLE1BRW5DO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTCxHQUNBTCxFQUFRLFVBQVUsY0FBYyxXQUFZO0FBQ3hDLFNBQUssWUFBWSxLQUFLLFNBQVMsSUFDL0IsS0FBSyxZQUFZLEtBQUssbUJBQW1CO0FBQUEsRUFDN0MsR0FDQSxPQUFPLGVBQWVBLEVBQVEsV0FBVyxZQUFZO0FBQUEsSUFDakQsS0FBSyxXQUFZO0FBQ2IsVUFBSXhGO0FBQ0osZUFBU0EsSUFBSyxLQUFLLGVBQWUsUUFBUUEsTUFBTyxTQUFTLFNBQVNBLEVBQUcsVUFBVTtBQUFBLElBQ3BGO0FBQUEsSUFDQSxZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsRUFDbEIsQ0FBQyxHQUNEd0YsRUFBUSxVQUFVLGdCQUFnQixTQUFVdkIsR0FBWTtBQUNwRCxnQkFBSyxlQUFlLEdBQ2IvRSxFQUFPLFVBQVUsY0FBYyxLQUFLLE1BQU0rRSxDQUFVO0FBQUEsRUFDL0QsR0FDQXVCLEVBQVEsVUFBVSxhQUFhLFNBQVV2QixHQUFZO0FBQ2pELGdCQUFLLGVBQWUsR0FDcEIsS0FBSyx3QkFBd0JBLENBQVUsR0FDaEMsS0FBSyxnQkFBZ0JBLENBQVU7QUFBQSxFQUMxQyxHQUNBdUIsRUFBUSxVQUFVLGtCQUFrQixTQUFVdkIsR0FBWTtBQUN0RCxRQUFJMUIsSUFBUSxNQUNSdkMsSUFBSyxNQUFNOEYsSUFBVzlGLEVBQUcsVUFBVStGLElBQVkvRixFQUFHLFdBQVc2RixJQUFZN0YsRUFBRztBQUNoRixXQUFJOEYsS0FBWUMsSUFDTHpFLE1BRVgsS0FBSyxtQkFBbUIsTUFDeEJ1RSxFQUFVLEtBQUs1QixDQUFVLEdBQ2xCLElBQUlwRSxHQUFhLFdBQVk7QUFDaEMsTUFBQTBDLEVBQU0sbUJBQW1CLE1BQ3pCOUMsR0FBVW9HLEdBQVc1QixDQUFVO0FBQUEsSUFDbkMsQ0FBQztBQUFBLEVBQ0wsR0FDQXVCLEVBQVEsVUFBVSwwQkFBMEIsU0FBVXZCLEdBQVk7QUFDOUQsUUFBSWpFLElBQUssTUFBTThGLElBQVc5RixFQUFHLFVBQVVnRyxJQUFjaEcsRUFBRyxhQUFhK0YsSUFBWS9GLEVBQUc7QUFDcEYsSUFBSThGLElBQ0E3QixFQUFXLE1BQU0rQixDQUFXLElBRXZCRCxLQUNMOUIsRUFBVyxTQUFTO0FBQUEsRUFFNUIsR0FDQXVCLEVBQVEsVUFBVSxlQUFlLFdBQVk7QUFDekMsUUFBSWpDLElBQWEsSUFBSU8sRUFBVztBQUNoQyxXQUFBUCxFQUFXLFNBQVMsTUFDYkE7QUFBQSxFQUNYLEdBQ0FpQyxFQUFRLFNBQVMsU0FBVWxELEdBQWE2QixHQUFRO0FBQzVDLFdBQU8sSUFBSXVCLEdBQWlCcEQsR0FBYTZCLENBQU07QUFBQSxFQUNuRCxHQUNPcUI7QUFDWCxFQUFFMUIsQ0FBVSxHQUNSNEIsS0FBb0IsU0FBVXhHLEdBQVE7QUFDdEMsRUFBQW1ELEdBQVVxRCxHQUFrQnhHLENBQU07QUFDbEMsV0FBU3dHLEVBQWlCcEQsR0FBYTZCLEdBQVE7QUFDM0MsUUFBSTVCLElBQVFyRCxFQUFPLEtBQUssSUFBSSxLQUFLO0FBQ2pDLFdBQUFxRCxFQUFNLGNBQWNELEdBQ3BCQyxFQUFNLFNBQVM0QixHQUNSNUI7QUFBQSxFQUNYO0FBQ0EsU0FBQW1ELEVBQWlCLFVBQVUsT0FBTyxTQUFVM0csR0FBTztBQUMvQyxRQUFJaUIsR0FBSUU7QUFDUixLQUFDQSxLQUFNRixJQUFLLEtBQUssaUJBQWlCLFFBQVFBLE1BQU8sU0FBUyxTQUFTQSxFQUFHLFVBQVUsUUFBUUUsTUFBTyxVQUFrQkEsRUFBRyxLQUFLRixHQUFJakIsQ0FBSztBQUFBLEVBQ3RJLEdBQ0EyRyxFQUFpQixVQUFVLFFBQVEsU0FBVW5HLEdBQUs7QUFDOUMsUUFBSVMsR0FBSUU7QUFDUixLQUFDQSxLQUFNRixJQUFLLEtBQUssaUJBQWlCLFFBQVFBLE1BQU8sU0FBUyxTQUFTQSxFQUFHLFdBQVcsUUFBUUUsTUFBTyxVQUFrQkEsRUFBRyxLQUFLRixHQUFJVCxDQUFHO0FBQUEsRUFDckksR0FDQW1HLEVBQWlCLFVBQVUsV0FBVyxXQUFZO0FBQzlDLFFBQUkxRixHQUFJRTtBQUNSLEtBQUNBLEtBQU1GLElBQUssS0FBSyxpQkFBaUIsUUFBUUEsTUFBTyxTQUFTLFNBQVNBLEVBQUcsY0FBYyxRQUFRRSxNQUFPLFVBQWtCQSxFQUFHLEtBQUtGLENBQUU7QUFBQSxFQUNuSSxHQUNBMEYsRUFBaUIsVUFBVSxhQUFhLFNBQVV6QixHQUFZO0FBQzFELFFBQUlqRSxHQUFJRTtBQUNSLFlBQVFBLEtBQU1GLElBQUssS0FBSyxZQUFZLFFBQVFBLE1BQU8sU0FBUyxTQUFTQSxFQUFHLFVBQVVpRSxDQUFVLE9BQU8sUUFBUS9ELE1BQU8sU0FBU0EsSUFBS29CO0FBQUEsRUFDcEksR0FDT29FO0FBQ1gsRUFBRUYsRUFBTyxHQUVMUyxLQUF3QjtBQUFBLEVBQ3hCLEtBQUssV0FBWTtBQUNiLFdBQVEsS0FBTSxJQUFJO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFVBQVU7QUFDZCxHQUVJQyxLQUFVLFNBQVVoSCxHQUFRO0FBQzVCLEVBQUFtRCxHQUFVNkQsR0FBUWhILENBQU07QUFDeEIsV0FBU2dILEVBQU9DLEdBQVdDLEdBQU07QUFDN0IsV0FBT2xILEVBQU8sS0FBSyxJQUFJLEtBQUs7QUFBQSxFQUNoQztBQUNBLFNBQUFnSCxFQUFPLFVBQVUsV0FBVyxTQUFVRyxHQUFPQyxHQUFPO0FBQ2hELFdBQU87QUFBQSxFQUNYLEdBQ09KO0FBQ1gsRUFBRXJHLEVBQVksR0FFVjBHLEtBQW1CO0FBQUEsRUFDbkIsYUFBYSxTQUFVN0UsR0FBU0MsR0FBUztBQUVyQyxhQURJQyxJQUFPLENBQUMsR0FDSEMsSUFBSyxHQUFHQSxJQUFLLFVBQVUsUUFBUUE7QUFDcEMsTUFBQUQsRUFBS0MsSUFBSyxDQUFDLElBQUksVUFBVUEsQ0FBRTtBQUUvQixXQUFPLFlBQVksTUFBTSxRQUFRYixHQUFjLENBQUNVLEdBQVNDLENBQU8sR0FBR1YsR0FBT1csQ0FBSSxDQUFDLENBQUM7QUFBQSxFQUNwRjtBQUFBLEVBQ0EsZUFBZSxTQUFVRSxHQUFRO0FBQzdCLFdBQVEsY0FBZUEsQ0FBTTtBQUFBLEVBQ2pDO0FBQUEsRUFDQSxVQUFVO0FBQ2QsR0FFSTBFLEtBQWUsU0FBVXRILEdBQVE7QUFDakMsRUFBQW1ELEdBQVVtRSxHQUFhdEgsQ0FBTTtBQUM3QixXQUFTc0gsRUFBWUwsR0FBV0MsR0FBTTtBQUNsQyxRQUFJN0QsSUFBUXJELEVBQU8sS0FBSyxNQUFNaUgsR0FBV0MsQ0FBSSxLQUFLO0FBQ2xELFdBQUE3RCxFQUFNLFlBQVk0RCxHQUNsQjVELEVBQU0sT0FBTzZELEdBQ2I3RCxFQUFNLFVBQVUsSUFDVEE7QUFBQSxFQUNYO0FBQ0EsU0FBQWlFLEVBQVksVUFBVSxXQUFXLFNBQVVILEdBQU9DLEdBQU87QUFDckQsUUFBSXRHO0FBRUosUUFESXNHLE1BQVUsV0FBVUEsSUFBUSxJQUM1QixLQUFLO0FBQ0wsYUFBTztBQUVYLFNBQUssUUFBUUQ7QUFDYixRQUFJSSxJQUFLLEtBQUssSUFDVk4sSUFBWSxLQUFLO0FBQ3JCLFdBQUlNLEtBQU0sU0FDTixLQUFLLEtBQUssS0FBSyxlQUFlTixHQUFXTSxHQUFJSCxDQUFLLElBRXRELEtBQUssVUFBVSxJQUNmLEtBQUssUUFBUUEsR0FDYixLQUFLLE1BQU10RyxJQUFLLEtBQUssUUFBUSxRQUFRQSxNQUFPLFNBQVNBLElBQUssS0FBSyxlQUFlbUcsR0FBVyxLQUFLLElBQUlHLENBQUssR0FDaEc7QUFBQSxFQUNYLEdBQ0FFLEVBQVksVUFBVSxpQkFBaUIsU0FBVUwsR0FBV08sR0FBS0osR0FBTztBQUNwRSxXQUFJQSxNQUFVLFdBQVVBLElBQVEsSUFDekJDLEdBQWlCLFlBQVlKLEVBQVUsTUFBTSxLQUFLQSxHQUFXLElBQUksR0FBR0csQ0FBSztBQUFBLEVBQ3BGLEdBQ0FFLEVBQVksVUFBVSxpQkFBaUIsU0FBVUcsR0FBWUYsR0FBSUgsR0FBTztBQUVwRSxRQURJQSxNQUFVLFdBQVVBLElBQVEsSUFDNUJBLEtBQVMsUUFBUSxLQUFLLFVBQVVBLEtBQVMsS0FBSyxZQUFZO0FBQzFELGFBQU9HO0FBRVgsSUFBSUEsS0FBTSxRQUNORixHQUFpQixjQUFjRSxDQUFFO0FBQUEsRUFHekMsR0FDQUQsRUFBWSxVQUFVLFVBQVUsU0FBVUgsR0FBT0MsR0FBTztBQUNwRCxRQUFJLEtBQUs7QUFDTCxhQUFPLElBQUksTUFBTSw4QkFBOEI7QUFFbkQsU0FBSyxVQUFVO0FBQ2YsUUFBSTVELElBQVEsS0FBSyxTQUFTMkQsR0FBT0MsQ0FBSztBQUN0QyxRQUFJNUQ7QUFDQSxhQUFPQTtBQUVOLElBQUksS0FBSyxZQUFZLE1BQVMsS0FBSyxNQUFNLFNBQzFDLEtBQUssS0FBSyxLQUFLLGVBQWUsS0FBSyxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQUEsRUFFbkUsR0FDQThELEVBQVksVUFBVSxXQUFXLFNBQVVILEdBQU9PLEdBQVE7QUFDdEQsUUFBSUMsSUFBVSxJQUNWQztBQUNKLFFBQUk7QUFDQSxXQUFLLEtBQUtULENBQUs7QUFBQSxJQUNuQixTQUNPM0YsR0FBRztBQUNOLE1BQUFtRyxJQUFVLElBQ1ZDLElBQWFwRyxLQUFRLElBQUksTUFBTSxvQ0FBb0M7QUFBQSxJQUN2RTtBQUNBLFFBQUltRztBQUNBLGtCQUFLLFlBQVksR0FDVkM7QUFBQSxFQUVmLEdBQ0FOLEVBQVksVUFBVSxjQUFjLFdBQVk7QUFDNUMsUUFBSSxDQUFDLEtBQUssUUFBUTtBQUNkLFVBQUl4RyxJQUFLLE1BQU15RyxJQUFLekcsRUFBRyxJQUFJbUcsSUFBWW5HLEVBQUcsV0FDdEMrRyxJQUFVWixFQUFVO0FBQ3hCLFdBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxZQUFZLE1BQzFDLEtBQUssVUFBVSxJQUNmMUcsR0FBVXNILEdBQVMsSUFBSSxHQUNuQk4sS0FBTSxTQUNOLEtBQUssS0FBSyxLQUFLLGVBQWVOLEdBQVdNLEdBQUksSUFBSSxJQUVyRCxLQUFLLFFBQVEsTUFDYnZILEVBQU8sVUFBVSxZQUFZLEtBQUssSUFBSTtBQUFBLElBQzFDO0FBQUEsRUFDSixHQUNPc0g7QUFDWCxFQUFFTixFQUFNLEdBRUpjLEtBQWEsV0FBWTtBQUN6QixXQUFTQSxFQUFVQyxHQUFxQkMsR0FBSztBQUN6QyxJQUFJQSxNQUFRLFdBQVVBLElBQU1GLEVBQVUsTUFDdEMsS0FBSyxzQkFBc0JDLEdBQzNCLEtBQUssTUFBTUM7QUFBQSxFQUNmO0FBQ0EsU0FBQUYsRUFBVSxVQUFVLFdBQVcsU0FBVVosR0FBTUUsR0FBT0QsR0FBTztBQUN6RCxXQUFJQyxNQUFVLFdBQVVBLElBQVEsSUFDekIsSUFBSSxLQUFLLG9CQUFvQixNQUFNRixDQUFJLEVBQUUsU0FBU0MsR0FBT0MsQ0FBSztBQUFBLEVBQ3pFLEdBQ0FVLEVBQVUsTUFBTWYsR0FBc0IsS0FDL0JlO0FBQ1gsRUFBRSxHQUVFRyxLQUFrQixTQUFVakksR0FBUTtBQUNwQyxFQUFBbUQsR0FBVThFLEdBQWdCakksQ0FBTTtBQUNoQyxXQUFTaUksRUFBZUMsR0FBaUJGLEdBQUs7QUFDMUMsSUFBSUEsTUFBUSxXQUFVQSxJQUFNRixHQUFVO0FBQ3RDLFFBQUl6RSxJQUFRckQsRUFBTyxLQUFLLE1BQU1rSSxHQUFpQkYsQ0FBRyxLQUFLO0FBQ3ZELFdBQUEzRSxFQUFNLFVBQVUsQ0FBQyxHQUNqQkEsRUFBTSxVQUFVLElBQ1RBO0FBQUEsRUFDWDtBQUNBLFNBQUE0RSxFQUFlLFVBQVUsUUFBUSxTQUFVRSxHQUFRO0FBQy9DLFFBQUlOLElBQVUsS0FBSztBQUNuQixRQUFJLEtBQUssU0FBUztBQUNkLE1BQUFBLEVBQVEsS0FBS00sQ0FBTTtBQUNuQjtBQUFBLElBQ0o7QUFDQSxRQUFJM0U7QUFDSixTQUFLLFVBQVU7QUFDZjtBQUNJLFVBQUtBLElBQVEyRSxFQUFPLFFBQVFBLEVBQU8sT0FBT0EsRUFBTyxLQUFLO0FBQ2xEO0FBQUEsV0FFRUEsSUFBU04sRUFBUSxNQUFNO0FBRWpDLFFBREEsS0FBSyxVQUFVLElBQ1hyRSxHQUFPO0FBQ1AsYUFBUTJFLElBQVNOLEVBQVEsTUFBTTtBQUMzQixRQUFBTSxFQUFPLFlBQVk7QUFFdkIsWUFBTTNFO0FBQUEsSUFDVjtBQUFBLEVBQ0osR0FDT3lFO0FBQ1gsRUFBRUgsRUFBUyxHQUVQTSxLQUFpQixJQUFJSCxHQUFlWCxFQUFXLEdBRS9DZSxLQUFlLFNBQVU5RCxHQUFHO0FBQUUsU0FBT0EsS0FBSyxPQUFPQSxFQUFFLFVBQVcsWUFBWSxPQUFPQSxLQUFNO0FBQVk7QUFFdkcsU0FBUytELEdBQVV6SSxHQUFPO0FBQ3RCLFNBQU9ELEVBQVdDLEtBQVUsT0FBMkIsU0FBU0EsRUFBTSxJQUFJO0FBQzlFO0FBRUEsU0FBUzBJLEdBQW9CN0QsR0FBTztBQUNoQyxTQUFPOUUsRUFBVzhFLEVBQU1MLEVBQVUsQ0FBQztBQUN2QztBQUVBLFNBQVNtRSxHQUFnQkMsR0FBSztBQUMxQixTQUFPLE9BQU8saUJBQWlCN0ksRUFBVzZJLEtBQVEsT0FBeUIsU0FBU0EsRUFBSSxPQUFPLGFBQWEsQ0FBQztBQUNqSDtBQUVBLFNBQVNDLEdBQWlDaEUsR0FBTztBQUM3QyxTQUFPLElBQUksVUFBVSxtQkFBbUJBLE1BQVUsUUFBUSxPQUFPQSxLQUFVLFdBQVcsc0JBQXNCLE1BQU1BLElBQVEsT0FBTywwSEFBMEg7QUFDL1A7QUFFQSxTQUFTaUUsS0FBb0I7QUFDekIsU0FBSSxPQUFPLFVBQVcsY0FBYyxDQUFDLE9BQU8sV0FDakMsZUFFSixPQUFPO0FBQ2xCO0FBQ0EsSUFBSUMsS0FBV0QsR0FBa0I7QUFFakMsU0FBU0UsR0FBV25FLEdBQU87QUFDdkIsU0FBTzlFLEVBQVc4RSxLQUFVLE9BQTJCLFNBQVNBLEVBQU1rRSxFQUFRLENBQUM7QUFDbkY7QUFFQSxTQUFTRSxHQUFtQ0MsR0FBZ0I7QUFDeEQsU0FBT0MsR0FBaUIsTUFBTSxXQUFXLFdBQWdEO0FBQ3JGLFFBQUlDLEdBQVFuSSxHQUFJakIsR0FBT3FKO0FBQ3ZCLFdBQU9DLEdBQVksTUFBTSxTQUFVbkksR0FBSTtBQUNuQyxjQUFRQSxFQUFHLE9BQU87QUFBQSxRQUNkLEtBQUs7QUFDRCxVQUFBaUksSUFBU0YsRUFBZSxVQUFVLEdBQ2xDL0gsRUFBRyxRQUFRO0FBQUEsUUFDZixLQUFLO0FBQ0QsVUFBQUEsRUFBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FDekJBLEVBQUcsUUFBUTtBQUFBLFFBQ2YsS0FBSztBQUNELGlCQUFPLENBQUMsR0FBR29JLEdBQVFILEVBQU8sS0FBSyxDQUFDLENBQUM7QUFBQSxRQUNyQyxLQUFLO0FBRUQsaUJBREFuSSxJQUFLRSxFQUFHLEtBQUssR0FBR25CLElBQVFpQixFQUFHLE9BQU9vSSxJQUFPcEksRUFBRyxNQUN2Q29JLElBQ0UsQ0FBQyxHQUFHRSxHQUFRLE1BQU0sQ0FBQyxJQURSLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFFM0IsS0FBSztBQUFHLGlCQUFPLENBQUMsR0FBR3BJLEVBQUcsS0FBSyxDQUFDO0FBQUEsUUFDNUIsS0FBSztBQUFHLGlCQUFPLENBQUMsR0FBR29JLEdBQVF2SixDQUFLLENBQUM7QUFBQSxRQUNqQyxLQUFLO0FBQUcsaUJBQU8sQ0FBQyxHQUFHbUIsRUFBRyxLQUFLLENBQUM7QUFBQSxRQUM1QixLQUFLO0FBQ0QsaUJBQUFBLEVBQUcsS0FBSyxHQUNELENBQUMsR0FBRyxDQUFDO0FBQUEsUUFDaEIsS0FBSztBQUFHLGlCQUFPLENBQUMsR0FBRyxFQUFFO0FBQUEsUUFDckIsS0FBSztBQUNELGlCQUFBaUksRUFBTyxZQUFZLEdBQ1osQ0FBQyxDQUFDO0FBQUEsUUFDYixLQUFLO0FBQUksaUJBQU8sQ0FBQyxDQUFDO0FBQUEsTUFDdEI7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMLENBQUM7QUFDTDtBQUNBLFNBQVNJLEdBQXFCWixHQUFLO0FBQy9CLFNBQU83SSxFQUFXNkksS0FBUSxPQUF5QixTQUFTQSxFQUFJLFNBQVM7QUFDN0U7QUFFQSxTQUFTYSxHQUFVNUUsR0FBTztBQUN0QixNQUFJQSxhQUFpQkU7QUFDakIsV0FBT0Y7QUFFWCxNQUFJQSxLQUFTLE1BQU07QUFDZixRQUFJNkQsR0FBb0I3RCxDQUFLO0FBQ3pCLGFBQU82RSxHQUFzQjdFLENBQUs7QUFFdEMsUUFBSTJELEdBQVkzRCxDQUFLO0FBQ2pCLGFBQU84RSxHQUFjOUUsQ0FBSztBQUU5QixRQUFJNEQsR0FBVTVELENBQUs7QUFDZixhQUFPK0UsR0FBWS9FLENBQUs7QUFFNUIsUUFBSThELEdBQWdCOUQsQ0FBSztBQUNyQixhQUFPZ0YsR0FBa0JoRixDQUFLO0FBRWxDLFFBQUltRSxHQUFXbkUsQ0FBSztBQUNoQixhQUFPaUYsR0FBYWpGLENBQUs7QUFFN0IsUUFBSTJFLEdBQXFCM0UsQ0FBSztBQUMxQixhQUFPa0YsR0FBdUJsRixDQUFLO0FBQUEsRUFFM0M7QUFDQSxRQUFNZ0UsR0FBaUNoRSxDQUFLO0FBQ2hEO0FBQ0EsU0FBUzZFLEdBQXNCZCxHQUFLO0FBQ2hDLFNBQU8sSUFBSTdELEVBQVcsU0FBVUcsR0FBWTtBQUN4QyxRQUFJOEUsSUFBTXBCLEVBQUlwRSxFQUFVLEVBQUU7QUFDMUIsUUFBSXpFLEVBQVdpSyxFQUFJLFNBQVM7QUFDeEIsYUFBT0EsRUFBSSxVQUFVOUUsQ0FBVTtBQUVuQyxVQUFNLElBQUksVUFBVSxnRUFBZ0U7QUFBQSxFQUN4RixDQUFDO0FBQ0w7QUFDQSxTQUFTeUUsR0FBY00sR0FBTztBQUMxQixTQUFPLElBQUlsRixFQUFXLFNBQVVHLEdBQVk7QUFDeEMsYUFBU3pFLElBQUksR0FBR0EsSUFBSXdKLEVBQU0sVUFBVSxDQUFDL0UsRUFBVyxRQUFRekU7QUFDcEQsTUFBQXlFLEVBQVcsS0FBSytFLEVBQU14SixDQUFDLENBQUM7QUFFNUIsSUFBQXlFLEVBQVcsU0FBUztBQUFBLEVBQ3hCLENBQUM7QUFDTDtBQUNBLFNBQVMwRSxHQUFZTSxHQUFTO0FBQzFCLFNBQU8sSUFBSW5GLEVBQVcsU0FBVUcsR0FBWTtBQUN4QyxJQUFBZ0YsRUFDSyxLQUFLLFNBQVVsSyxHQUFPO0FBQ3ZCLE1BQUtrRixFQUFXLFdBQ1pBLEVBQVcsS0FBS2xGLENBQUssR0FDckJrRixFQUFXLFNBQVM7QUFBQSxJQUU1QixHQUFHLFNBQVUxRSxHQUFLO0FBQUUsYUFBTzBFLEVBQVcsTUFBTTFFLENBQUc7QUFBQSxJQUFHLENBQUMsRUFDOUMsS0FBSyxNQUFNeUMsRUFBb0I7QUFBQSxFQUN4QyxDQUFDO0FBQ0w7QUFDQSxTQUFTNkcsR0FBYUssR0FBVTtBQUM1QixTQUFPLElBQUlwRixFQUFXLFNBQVVHLEdBQVk7QUFDeEMsUUFBSWxFLEdBQUtDO0FBQ1QsUUFBSTtBQUNBLGVBQVNtSixJQUFhOUksR0FBUzZJLENBQVEsR0FBR0UsSUFBZUQsRUFBVyxLQUFLLEdBQUcsQ0FBQ0MsRUFBYSxNQUFNQSxJQUFlRCxFQUFXLEtBQUssR0FBRztBQUM5SCxZQUFJcEssSUFBUXFLLEVBQWE7QUFFekIsWUFEQW5GLEVBQVcsS0FBS2xGLENBQUssR0FDakJrRixFQUFXO0FBQ1g7QUFBQSxNQUVSO0FBQUEsSUFDSixTQUNPekQsR0FBTztBQUFFLE1BQUFULElBQU0sRUFBRSxPQUFPUyxFQUFNO0FBQUEsSUFBRyxVQUN4QztBQUNJLFVBQUk7QUFDQSxRQUFJNEksS0FBZ0IsQ0FBQ0EsRUFBYSxTQUFTcEosSUFBS21KLEVBQVcsV0FBU25KLEVBQUcsS0FBS21KLENBQVU7QUFBQSxNQUMxRixVQUNBO0FBQVUsWUFBSXBKLEVBQUssT0FBTUEsRUFBSTtBQUFBLE1BQU87QUFBQSxJQUN4QztBQUNBLElBQUFrRSxFQUFXLFNBQVM7QUFBQSxFQUN4QixDQUFDO0FBQ0w7QUFDQSxTQUFTMkUsR0FBa0JTLEdBQWU7QUFDdEMsU0FBTyxJQUFJdkYsRUFBVyxTQUFVRyxHQUFZO0FBQ3hDLElBQUFxRixHQUFRRCxHQUFlcEYsQ0FBVSxFQUFFLE1BQU0sU0FBVTFFLEdBQUs7QUFBRSxhQUFPMEUsRUFBVyxNQUFNMUUsQ0FBRztBQUFBLElBQUcsQ0FBQztBQUFBLEVBQzdGLENBQUM7QUFDTDtBQUNBLFNBQVN1SixHQUF1QmIsR0FBZ0I7QUFDNUMsU0FBT1csR0FBa0JaLEdBQW1DQyxDQUFjLENBQUM7QUFDL0U7QUFDQSxTQUFTcUIsR0FBUUQsR0FBZXBGLEdBQVk7QUFDeEMsTUFBSXNGLEdBQWlCQyxHQUNqQnZKLEdBQUtEO0FBQ1QsU0FBT3lKLEdBQVUsTUFBTSxRQUFRLFFBQVEsV0FBWTtBQUMvQyxRQUFJMUssR0FBT21DO0FBQ1gsV0FBT21ILEdBQVksTUFBTSxTQUFVbkksR0FBSTtBQUNuQyxjQUFRQSxFQUFHLE9BQU87QUFBQSxRQUNkLEtBQUs7QUFDRCxVQUFBQSxFQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUMxQnFKLElBQWtCRyxHQUFjTCxDQUFhLEdBQzdDbkosRUFBRyxRQUFRO0FBQUEsUUFDZixLQUFLO0FBQUcsaUJBQU8sQ0FBQyxHQUFHcUosRUFBZ0IsS0FBSyxDQUFDO0FBQUEsUUFDekMsS0FBSztBQUNELGNBQU1DLElBQW9CdEosRUFBRyxLQUFLLEdBQUcsRUFBQ3NKLEVBQWtCLEtBQU8sUUFBTyxDQUFDLEdBQUcsQ0FBQztBQUczRSxjQUZBekssSUFBUXlLLEVBQWtCLE9BQzFCdkYsRUFBVyxLQUFLbEYsQ0FBSyxHQUNqQmtGLEVBQVc7QUFDWCxtQkFBTyxDQUFDLENBQUM7QUFFYixVQUFBL0QsRUFBRyxRQUFRO0FBQUEsUUFDZixLQUFLO0FBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUNwQixLQUFLO0FBQUcsaUJBQU8sQ0FBQyxHQUFHLEVBQUU7QUFBQSxRQUNyQixLQUFLO0FBQ0QsaUJBQUFnQixJQUFRaEIsRUFBRyxLQUFLLEdBQ2hCRCxJQUFNLEVBQUUsT0FBT2lCLEVBQU0sR0FDZCxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQ2pCLEtBQUs7QUFFRCxpQkFEQWhCLEVBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQ25Cc0osS0FBcUIsQ0FBQ0EsRUFBa0IsU0FBU3hKLElBQUt1SixFQUFnQixVQUNyRSxDQUFDLEdBQUd2SixFQUFHLEtBQUt1SixDQUFlLENBQUMsSUFEMEQsQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUV0RyxLQUFLO0FBQ0QsVUFBQXJKLEVBQUcsS0FBSyxHQUNSQSxFQUFHLFFBQVE7QUFBQSxRQUNmLEtBQUs7QUFBRyxpQkFBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQ3JCLEtBQUs7QUFDRCxjQUFJRCxFQUFLLE9BQU1BLEVBQUk7QUFDbkIsaUJBQU8sQ0FBQyxDQUFDO0FBQUEsUUFDYixLQUFLO0FBQUksaUJBQU8sQ0FBQyxDQUFDO0FBQUEsUUFDbEIsS0FBSztBQUNELGlCQUFBZ0UsRUFBVyxTQUFTLEdBQ2IsQ0FBQyxDQUFDO0FBQUEsTUFDakI7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMLENBQUM7QUFDTDtBQUVBLFNBQVMwRixHQUFnQkMsR0FBb0J6RCxHQUFXQyxHQUFNRSxHQUFPdUQsR0FBUTtBQUN6RSxFQUFJdkQsTUFBVSxXQUFVQSxJQUFRLElBQzVCdUQsTUFBVyxXQUFVQSxJQUFTO0FBQ2xDLE1BQUlDLElBQXVCM0QsRUFBVSxTQUFTLFdBQVk7QUFDdEQsSUFBQUMsRUFBSyxHQUNEeUQsSUFDQUQsRUFBbUIsSUFBSSxLQUFLLFNBQVMsTUFBTXRELENBQUssQ0FBQyxJQUdqRCxLQUFLLFlBQVk7QUFBQSxFQUV6QixHQUFHQSxDQUFLO0FBRVIsTUFEQXNELEVBQW1CLElBQUlFLENBQW9CLEdBQ3ZDLENBQUNEO0FBQ0QsV0FBT0M7QUFFZjtBQUVBLFNBQVNDLEdBQVdDLEdBQXFCN0QsR0FBVztBQUNoRCxNQUFJOEQsSUFBZW5MLEVBQVdrTCxDQUFtQixJQUFJQSxJQUFzQixXQUFZO0FBQUUsV0FBT0E7QUFBQSxFQUFxQixHQUNqSG5GLElBQU8sU0FBVVosR0FBWTtBQUFFLFdBQU9BLEVBQVcsTUFBTWdHLEVBQWEsQ0FBQztBQUFBLEVBQUc7QUFDNUUsU0FBTyxJQUFJbkcsRUFBV2UsQ0FBSTtBQUM5QjtBQUVBLElBQUlxRixLQUFhbEwsR0FBaUIsU0FBVUUsR0FBUTtBQUFFLFNBQU8sV0FBMEI7QUFDbkYsSUFBQUEsRUFBTyxJQUFJLEdBQ1gsS0FBSyxPQUFPLGNBQ1osS0FBSyxVQUFVO0FBQUEsRUFDbkI7QUFBRyxDQUFDO0FBRUosU0FBU2lMLEdBQWNoRyxHQUFRM0MsR0FBUTtBQUNuQyxTQUFPLElBQUksUUFBUSxTQUFVK0MsR0FBU0MsR0FBUTtBQUMxQyxRQUFJNEYsSUFBWSxJQUNaQztBQUNKLElBQUFsRyxFQUFPLFVBQVU7QUFBQSxNQUNiLE1BQU0sU0FBVXBGLEdBQU87QUFDbkIsUUFBQXNMLElBQVN0TCxHQUNUcUwsSUFBWTtBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPNUY7QUFBQSxNQUNQLFVBQVUsV0FBWTtBQUNsQixRQUFJNEYsSUFDQTdGLEVBQVE4RixDQUFNLElBR2Q3RixFQUFPLElBQUkwRixHQUFXLENBQUM7QUFBQSxNQUUvQjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0wsQ0FBQztBQUNMO0FBRUEsU0FBU0ksR0FBWXZMLEdBQU87QUFDeEIsU0FBT0EsYUFBaUIsUUFBUSxDQUFDLE1BQU1BLENBQUs7QUFDaEQ7QUFFQSxJQUFJd0wsS0FBZXZMLEdBQWlCLFNBQVVFLEdBQVE7QUFDbEQsU0FBTyxTQUEwQnNMLEdBQU07QUFDbkMsSUFBSUEsTUFBUyxXQUFVQSxJQUFPLE9BQzlCdEwsRUFBTyxJQUFJLEdBQ1gsS0FBSyxVQUFVLHdCQUNmLEtBQUssT0FBTyxnQkFDWixLQUFLLE9BQU9zTDtBQUFBLEVBQ2hCO0FBQ0osQ0FBQztBQUNELFNBQVM3SSxHQUFRSCxHQUFRaUosR0FBYztBQUNuQyxNQUFJekssSUFBTXNLLEdBQVk5SSxDQUFNLElBQUksRUFBRSxPQUFPQSxFQUFPLElBQUksT0FBT0EsS0FBVyxXQUFXLEVBQUUsTUFBTUEsRUFBTyxJQUFJQSxHQUFTa0osSUFBUTFLLEVBQUcsT0FBTzJLLElBQU8zSyxFQUFHLE1BQU1FLElBQUtGLEVBQUcsTUFBTTRLLElBQVExSyxNQUFPLFNBQVMySyxLQUFzQjNLLEdBQUl5RixJQUFLM0YsRUFBRyxXQUFXbUcsSUFBWVIsTUFBTyxTQUFTMkIsS0FBaUIzQixHQUFJbUYsSUFBSzlLLEVBQUcsTUFBTStLLElBQU9ELE1BQU8sU0FBUyxPQUFPQTtBQUMvVCxNQUFJSixLQUFTLFFBQVFDLEtBQVE7QUFDekIsVUFBTSxJQUFJLFVBQVUsc0JBQXNCO0FBRTlDLFNBQU8vRixHQUFRLFNBQVVULEdBQVFGLEdBQVk7QUFDekMsUUFBSStHLEdBQ0FDLEdBQ0FDLElBQVksTUFDWkMsSUFBTyxHQUNQQyxJQUFhLFNBQVU5RSxHQUFPO0FBQzlCLE1BQUEyRSxJQUFvQnRCLEdBQWdCMUYsR0FBWWtDLEdBQVcsV0FBWTtBQUNuRSxZQUFJO0FBQ0EsVUFBQTZFLEVBQTJCLFlBQVksR0FDdkN4QyxHQUFVb0MsRUFBTTtBQUFBLFlBQ1osTUFBTUc7QUFBQSxZQUNOLFdBQVdHO0FBQUEsWUFDWCxNQUFNQztBQUFBLFVBQ1YsQ0FBQyxDQUFDLEVBQUUsVUFBVWxILENBQVU7QUFBQSxRQUM1QixTQUNPMUUsR0FBSztBQUNSLFVBQUEwRSxFQUFXLE1BQU0xRSxDQUFHO0FBQUEsUUFDeEI7QUFBQSxNQUNKLEdBQUcrRyxDQUFLO0FBQUEsSUFDWjtBQUNBLElBQUEwRSxJQUE2QjdHLEVBQU8sVUFBVVksR0FBeUJkLEdBQVksU0FBVWxGLEdBQU87QUFDaEcsTUFBQWtNLEtBQXNCLFFBQWdEQSxFQUFrQixZQUFZLEdBQ3BHRSxLQUNBbEgsRUFBVyxLQUFNaUgsSUFBWW5NLENBQU0sR0FDbkM0TCxJQUFPLEtBQUtTLEVBQVdULENBQUk7QUFBQSxJQUMvQixHQUFHLFFBQVcsUUFBVyxXQUFZO0FBQ2pDLE1BQU1NLEtBQXNCLFFBQWdEQSxFQUFrQixVQUMxRkEsS0FBc0IsUUFBZ0RBLEVBQWtCLFlBQVksR0FFeEdDLElBQVk7QUFBQSxJQUNoQixDQUFDLENBQUMsR0FDRixDQUFDQyxLQUFRQyxFQUFXVixLQUFTLE9BQVEsT0FBT0EsS0FBVSxXQUFXQSxJQUFRLENBQUNBLElBQVF2RSxFQUFVLElBQUksSUFBS3dFLENBQUk7QUFBQSxFQUM3RyxDQUFDO0FBQ0w7QUFDQSxTQUFTRSxHQUFvQkwsR0FBTTtBQUMvQixRQUFNLElBQUlELEdBQWFDLENBQUk7QUFDL0I7QUFFQSxNQUFNYSxHQUFvQjtBQUFBLEVBQ3hCLGNBQWM7QUFDWixTQUFLLE1BQU0sQ0FBQ3RNLE1BQVU7QUFDcEIsVUFBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixjQUFNLElBQUksTUFBTSx3Q0FBd0M7QUFFMUQsV0FBSyxXQUFXLEVBQUUsUUFBUSxXQUFXLFdBQVcsSUFBTSxhQUFhQSxFQUFNLEdBQ3pFLEtBQUssU0FBUyxLQUFLQSxDQUFLLEdBQ3hCLEtBQUssU0FBUyxTQUFTO0FBQUEsSUFDekIsR0FDQSxLQUFLLFFBQVEsQ0FBQzJELEdBQU80SSxNQUFXO0FBQzlCLFVBQUksS0FBSyxTQUFTLFdBQVc7QUFDM0IsY0FBTSxJQUFJLE1BQU0sd0NBQXdDO0FBRTFELFdBQUssV0FBVyxFQUFFLFFBQVEsU0FBUyxXQUFXLElBQU8sT0FBQTVJLEdBQU8sUUFBQTRJLEVBQU8sR0FDbkUsS0FBSyxTQUFTLE1BQU01SSxDQUFLO0FBQUEsSUFDM0IsR0FDQSxLQUFLLHVCQUF1QixDQUFDNkksTUFDdkIsS0FBSyxTQUFTLFdBQVcsWUFBa0IsS0FBSyxTQUFTLGNBQ3REQSxHQUVULEtBQUssWUFBWSxDQUFDeEksTUFBTztBQUN2QixVQUFJLEtBQUssU0FBUyxXQUFXLFdBQVc7QUFDdEMsUUFBQUEsRUFBRyxLQUFLLFFBQVE7QUFDaEI7QUFBQSxNQUNGO0FBQ0EsTUFBSSxLQUFLLFNBQVMsV0FBVyxXQUMzQkEsRUFBRyxLQUFLLFFBQVE7QUFFbEIsWUFBTXlJLElBQWUsS0FBSyxTQUFTLFVBQVU7QUFBQSxRQUMzQyxNQUFNLE1BQU07QUFDVixjQUFJLEtBQUssU0FBUyxXQUFXO0FBQzNCLGtCQUFNLElBQUksTUFBTSw4RUFBOEU7QUFFaEcsVUFBQXpJLEVBQUcsS0FBSyxRQUFRLEdBQ2hCeUksRUFBYSxZQUFZO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE9BQU8sTUFBTTtBQUNYLGNBQUksS0FBSyxTQUFTLFdBQVc7QUFDM0Isa0JBQU0sSUFBSSxNQUFNLCtFQUErRTtBQUVqRyxVQUFBekksRUFBRyxLQUFLLFFBQVE7QUFBQSxRQUNsQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsR0FDQSxLQUFLLGNBQWMsQ0FBQzBJLE1BQWtCO0FBQ3BDLFVBQUksS0FBSyxTQUFTLFdBQVcsVUFBVyxRQUFPLFFBQVEsUUFBUSxLQUFLLFNBQVMsV0FBVztBQUN4RixVQUFJLEtBQUssU0FBUyxXQUFXLFFBQVMsUUFBTyxRQUFRLE9BQU8sS0FBSyxTQUFTLEtBQUs7QUFDL0UsTUFBSSxLQUFLLFNBQVMsV0FBVyxhQUFXQyxHQUFZLEtBQUssUUFBUTtBQUNqRSxZQUFNQyxJQUFnQjtBQUFBLFFBQ3BCLE9BQU9GLEVBQWMsYUFBYTtBQUFBLFFBQ2xDLE1BQU0sTUFBTTFCLEdBQVcsTUFBTSxJQUFJLE1BQU0wQixFQUFjLGFBQWEsQ0FBQztBQUFBLE1BQ3JFO0FBQ0EsYUFBT3RCLEdBQWMsS0FBSyxTQUFTLEtBQUt4SSxHQUFRZ0ssQ0FBYSxDQUFDLENBQUM7QUFBQSxJQUNqRSxHQUNBLEtBQUssV0FBVyxFQUFFLFFBQVEsV0FBVyxXQUFXLEdBQU0sR0FDdEQsS0FBSyxXQUFXLElBQUluRyxHQUFRO0FBQUEsRUFDOUI7QUFBQSxFQUNBLElBQUksVUFBVTtBQUNaLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFDRjtBQUVBLE1BQU0sRUFBRSxPQUFPb0csSUFBUyxPQUFPQyxHQUFRLElBQUlDLEVBQXFCLFlBQVksR0FDdEVDLEtBQTBCLENBQUNDLEdBQVVDLE1BQWE7QUFDdEQsUUFBTUMsSUFBWSxJQUFJYixHQUFvQjtBQUMxQyxTQUFPO0FBQUEsSUFDTCxXQUFBYTtBQUFBLElBQ0EsWUFBWSxPQUFPQyxNQUFlO0FBQ2hDLFVBQUk7QUFDRixZQUFJRCxFQUFVLFFBQVE7QUFDcEIsZ0JBQU0sSUFBSSxNQUFNLHlDQUF5QztBQUUzRCxjQUFNRSxJQUFhLE1BQU1ILEVBQVNFLENBQVU7QUFDNUMsUUFBQVAsR0FBUSxLQUFLSSxDQUFRLDJDQUEyQ0ksQ0FBVSxHQUMxRUYsRUFBVSxJQUFJRSxDQUFVO0FBQUEsTUFDMUIsU0FBUzFKLEdBQU87QUFDZCxRQUFBbUosR0FBUSxNQUFNRyxDQUFRLHVDQUF1Q0ssRUFBZ0IzSixDQUFLLEdBQUcsWUFBWUEsQ0FBSyxHQUN0R3dKLEVBQVUsTUFBTXhKLEdBQU8ySixFQUFnQjNKLENBQUssQ0FBQztBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixHQUNNNEosS0FBb0IsT0FBT0MsR0FBT0MsR0FBU0MsTUFBa0I7QUFDakUsUUFBTSxRQUFRLElBQUksT0FBTyxPQUFPRixDQUFLLEVBQUUsSUFBSSxDQUFDRyxNQUFTQSxFQUFLLFdBQVcsRUFBRSxTQUFBRixHQUFTLGVBQUFDLEVBQWMsQ0FBQyxDQUFDLENBQUM7QUFDbkcsR0FDTUUsS0FBNEIsT0FDekI7QUFBQTtBQUFBO0FBQUEsRUFHTCxVQUFVWixHQUF3QixhQUFhYSxFQUFTLFNBQVMsSUFBSTtBQUFBO0FBQUEsRUFFckUsWUFBWWIsR0FBd0IsZUFBZWEsRUFBUyxXQUFXLElBQUk7QUFBQTtBQUFBLEVBRTNFLG9CQUFvQmIsR0FBd0IsdUJBQXVCYSxFQUFTLG1CQUFtQixJQUFJO0FBQUE7QUFBQSxFQUVuRyxtQkFBbUJiLEdBQXdCLHNCQUFzQmEsRUFBUyxrQkFBa0IsSUFBSTtBQUFBO0FBQUEsRUFFaEcsTUFBTWIsR0FBd0IsUUFBUWEsRUFBUyxXQUFXLElBQUk7QUFBQTtBQUFBLEVBRTlELHVCQUF1QmIsR0FBd0IscUJBQXFCYSxFQUFTLHNCQUFzQixJQUFJO0FBQUE7QUFBQSxFQUV2RyxzQkFBc0JiLEdBQXdCLG9CQUFvQmEsRUFBUyxxQkFBcUIsSUFBSTtBQUFBO0FBRXRHLElBR0ksRUFBRSxPQUFPQyxHQUFRLElBQUlmLEVBQXFCLGdCQUFnQixHQUMxRGdCLElBQWFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FDbkNDLEtBQW1CRCxFQUFFLE9BQU87QUFBQSxFQUNoQyxTQUFTRDtBQUFBLEVBQ1QsUUFBUUE7QUFBQSxFQUNSLFVBQVVBO0FBQUEsRUFDVixRQUFRQTtBQUFBLEVBQ1IsYUFBYUE7QUFBQSxFQUNiLG1CQUFtQkE7QUFBQSxFQUNuQixtQkFBbUJBO0FBQUEsRUFDbkIsbUJBQW1CQTtBQUFBLEVBQ25CLDZCQUE2QkE7QUFBQSxFQUM3QixpQkFBaUJBO0FBQUEsRUFDakIsc0JBQXNCQTtBQUN4QixDQUFDLEdBQ0tHLElBQU4sTUFBTUEsRUFBYztBQUFBLEVBQ2xCLGNBQWM7QUFJWixTQUFLLGVBQWUsQ0FBQ0MsTUFBaUI7QUFDcEMsV0FBSyxhQUFhRCxFQUFjLHFCQUFxQixHQUNyRCxPQUFPLFFBQVFDLENBQVksRUFBRSxRQUFRLENBQUMsQ0FBQ0MsR0FBS0MsQ0FBVyxNQUFNO0FBQzNELGNBQU1DLElBQWVDLEdBQWlCSCxHQUFLQyxLQUFlSCxFQUFjLE1BQU1KLEVBQU87QUFDckYsYUFBSyxXQUFXTSxDQUFHLElBQUlFO0FBQUEsTUFDekIsQ0FBQztBQUFBLElBQ0gsR0FDQSxLQUFLLGFBQWFKLEVBQWMscUJBQXFCO0FBQUEsRUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXdCQSxJQUFJLE1BQU07QUFDUixXQUFPLEVBQUUsR0FBRyxLQUFLLFdBQVc7QUFBQSxFQUM5QjtBQUNGO0FBekJJQSxFQUFLLE9BQU8sTUFBTTtBQUNsQixHQUdBQSxFQUFLLHVCQUF1QixNQUFNO0FBQ2hDLFFBQU14SixJQUFJLENBQUM7QUFDWCxnQkFBTyxLQUFLdUosR0FBaUIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUNHLE1BQVE7QUFDMUQsSUFBQTFKLEVBQUUwSixDQUFHLElBQUlGLEVBQWM7QUFBQSxFQUN6QixDQUFDLEdBQ014SjtBQUNULEdBR0F3SixFQUFLLGFBQWEsQ0FBQ3RGLE1BQVE7QUFDekIsUUFBTXhJLElBQVcsSUFBSThOLEVBQWM7QUFDbkMsU0FBQTlOLEVBQVMsYUFBYTZOLEdBQWlCLE1BQU1yRixDQUFHLENBQUMsR0FDMUN4STtBQUNUO0FBaENKLElBQU1vTyxLQUFOTjtBQTBDQSxNQUFNTyxHQUF3QjtBQUFBLEVBQzVCLFlBQVlDLEdBQVFDLEdBQVNqQixHQUFla0IsR0FBbUI7QUFDN0QsU0FBSyxnQkFBZ0IsQ0FBQ0MsTUFBVTtBQUM5QixVQUFJLENBQUNBLEVBQU0sUUFBUTtBQUNqQixnQkFBUSxLQUFLLHVCQUF1QjtBQUNwQztBQUFBLE1BQ0Y7QUFPQSxVQU5JQyxHQUFlRCxFQUFNLE1BQU0sTUFBTUMsR0FBZSxLQUFLLE9BQU8sS0FHNUQsT0FBT0QsRUFBTSxRQUFTLFlBQVlBLEVBQU0sS0FBSyxVQUc3QyxPQUFPQSxFQUFNLFFBQVMsWUFBWUEsRUFBTSxLQUFLLFVBQWFBLEVBQU0sS0FBSyxXQUFjO0FBQ3JGO0FBRUYsVUFBSUUsSUFBWTtBQUNoQixVQUFJO0FBQ0YsUUFBQUEsSUFBWUMsR0FBa0IsS0FBSyxNQUFNSCxFQUFNLElBQUksQ0FBQztBQUFBLE1BQ3RELFFBQVk7QUFDVjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBRFksS0FBSyxjQUFjRSxDQUFTLEVBQzlCO0FBQ2QsWUFBTSxFQUFFLFdBQUFFLEdBQVcsU0FBQUMsRUFBUSxJQUFJSCxHQUN6QkksSUFBWUQsRUFBUTtBQUMxQixjQUFRQyxHQUFXO0FBQUEsUUFDakIsS0FBSztBQUNILGVBQUssa0JBQWtCLGNBQWNELEVBQVEsU0FBUyxHQUFHQSxFQUFRLE1BQU0sT0FBTyxNQUFNO0FBQ3BGO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksUUFBUUQsR0FBV0MsRUFBUSxXQUFXO0FBQzdEO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksT0FBT0QsR0FBV0MsRUFBUSxXQUFXO0FBQzVEO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksU0FBU0QsR0FBV0MsRUFBUSxhQUFhQSxFQUFRLE1BQU07QUFDOUU7QUFBQSxRQUNGLEtBQUs7QUFDSCxlQUFLLGFBQWFELENBQVMsSUFBSUosRUFBTSxRQUNyQyxLQUFLLGtCQUFrQixZQUFZSyxDQUFPO0FBQzFDO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxrQkFBa0IsZUFBZUEsRUFBUSxPQUFPO0FBQ3JEO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksa0JBQWtCQSxFQUFRLGFBQWFBLEVBQVEsUUFBUUQsQ0FBUztBQUN2RjtBQUFBLFFBQ0Y7QUFDRSxrQkFBUSxLQUFLLGdDQUFnQ0UsQ0FBUztBQUFBLE1BQzFEO0FBQUEsSUFDRixHQUNBLEtBQUssZ0JBQWdCLENBQUNKLE1BQ2hCQSxFQUFVLFdBQVcsS0FBSyxVQUFVLENBQUNBLEVBQVUsYUFDakQsUUFBUSxJQUFJLGdCQUFnQixLQUFLLFFBQVFBLEVBQVUsTUFBTSxHQUN6RCxRQUFRLEtBQUssa0NBQWtDQSxDQUFTLEdBQ2pELE1BRUwsS0FBSyxPQUFPLElBQUlBLEVBQVUsS0FBSyxLQUNqQyxRQUFRLEtBQUssb0NBQW9DQSxDQUFTLEdBQ25ELE9BRVQsS0FBSyxPQUFPLElBQUlBLEVBQVUsS0FBSyxHQUN4QixLQUVULEtBQUssZUFBZSxDQUFDLEdBQ3JCLEtBQUssU0FBeUIsb0JBQUksSUFBSSxHQUN0QyxLQUFLLFNBQVNMLEdBQ2QsS0FBSyxVQUFVQyxHQUNmLEtBQUssZ0JBQWdCakIsR0FDckIsS0FBSyxvQkFBb0JrQjtBQUFBLEVBQzNCO0FBQ0Y7QUFDQSxNQUFNRSxLQUFpQixDQUFDTSxNQUNmLElBQUksSUFBSUEsQ0FBRyxFQUFFO0FBR3RCLGVBQWVDLEdBQWlCQyxHQUFRQyxHQUFhO0FBTW5ELFFBQU1DLElBQWdCLE1BTEhDLEdBQWU7QUFBQSxJQUNoQyxRQUFBSDtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1AsYUFBQUM7QUFBQSxFQUNGLENBQUMsRUFDc0MsU0FDakNHLElBQWdCLE1BQU1DLEdBQWdDSCxDQUFhO0FBQ3pFLE1BQUksQ0FBQ0ksR0FBY0osR0FBZUUsQ0FBYTtBQUM3QyxVQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFFckQsU0FBT0Y7QUFDVDtBQUNBLE1BQU1LLEdBQWtCO0FBQUEsRUFDdEIsY0FBYztBQUNaLFNBQUssY0FBOEIsb0JBQUksSUFBSTtBQUFBLEVBQzdDO0FBQUEsRUFDQSxjQUFjbkksR0FBSW9JLEdBQVk7QUFDNUIsU0FBSyxZQUFZLElBQUlwSSxHQUFJb0ksQ0FBVTtBQUFBLEVBQ3JDO0FBQUEsRUFDQSxnQkFBZ0I7QUFDZCxVQUFNQSxJQUFhLEtBQUssWUFBWSxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ3BELFFBQUksQ0FBQ0E7QUFDSCxZQUFNLElBQUksTUFBTSxzQkFBc0I7QUFFeEMsV0FBT0E7QUFBQSxFQUNUO0FBQUEsRUFDQSxvQkFBb0I7QUFDbEIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUNGO0FBRUEsTUFBTUMsS0FBOEIsQ0FBQ0MsR0FBYXZDLEdBQVN3QyxNQUFjO0FBQ3ZFLFFBQU0sRUFBRSxVQUFBQyxFQUFTLElBQUlGO0FBQ3JCLEVBQUFFLEVBQVMsVUFBVSxVQUFVLENBQUNDLE1BQVc7QUFDdkMsUUFBSUEsRUFBTyxXQUFXO0FBQ3BCLFlBQU05QyxJQUFhOEMsRUFBTyxhQUNwQkMsSUFBYy9DLEVBQVcsZUFBZUEsRUFBVyxtQkFBbUIsVUFDdEVnRCxJQUFlaEQsRUFBVyxlQUFlQSxFQUFXLG1CQUFtQixXQUN2RWlELElBQWM7QUFBQSxRQUNsQixXQUFXO0FBQUEsVUFDVCxXQUFXO0FBQUEsVUFDWCxhQUFhRjtBQUFBLFVBQ2IsV0FBVyxPQUFPRyxNQUFlO0FBQy9CLFlBQUlILEtBQ0ZJLEdBQWdCLGFBQWFuRCxHQUFZSSxHQUFTd0MsR0FBV00sQ0FBVTtBQUFBLFVBRTNFO0FBQUEsUUFDRjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1YsV0FBVztBQUFBLFVBQ1gsYUFBYUY7QUFBQSxVQUNiLFdBQVcsT0FBT0UsTUFBZTtBQUMvQixZQUFJRixLQUNGRyxHQUFnQixjQUFjbkQsR0FBWUksR0FBU3dDLEdBQVdNLENBQVU7QUFBQSxVQUU1RTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsTUFBQU4sRUFBVSxJQUFJLHFCQUFxQkssQ0FBVztBQUFBLElBQ2hEO0FBQUEsRUFDRixDQUFDO0FBQ0gsR0FDTUUsS0FBa0IsQ0FBQ0MsR0FBVXBELEdBQVlJLEdBQVNDLEdBQWVnRCxNQUM5RDdDLEVBQVMsU0FBUyxJQUFJO0FBQUEsRUFDM0IsU0FBQUo7QUFBQSxFQUNBLHVCQUF1QmtELEdBQWdDbEQsRUFBUSx3QkFBd0JnRCxDQUFRO0FBQUEsRUFDL0Ysa0JBQWtCRyxFQUF5Qm5ELEVBQVEsT0FBTztBQUFBLEVBQzFELGVBQUFDO0FBQUEsRUFDQSxjQUFjLEVBQUUsVUFBQStDLEdBQVUsd0JBQXdCQyxLQUFBLGdCQUFBQSxFQUFRLHVCQUF1QjtBQUFBLEVBQ2pGLFlBQUFyRDtBQUNGLENBQUMsR0FHR3dELEtBQW1CLHVHQUNuQixFQUFFLE9BQUFDLEdBQU8sT0FBQUMsRUFBTSxJQUFJaEUsRUFBcUIsU0FBUyxHQUNqRGlFLElBQU4sTUFBTUEsRUFBWTtBQUFBLEVBQ2hCLFlBQVl2TyxHQUFRO0FBQ2xCLFNBQUssZUFBZSxJQUFJNkosR0FBb0IsR0FDNUMsS0FBSyxhQUFhLElBQUlBLEdBQW9CLEdBQzFDLEtBQUssVUFBVSxJQUFJQSxHQUFvQixHQUN2QyxLQUFLLFlBQVlzQixHQUEwQixHQUMzQyxLQUFLLGdCQUFnQixZQUFZO0FBQy9CLFVBQUk7QUFDRixRQUFBa0QsRUFBTSw0QkFBNEIsR0FDbENBLEVBQU0saUNBQWlDO0FBQ3ZDLGNBQU1HLElBQVksTUFBTSxLQUFLLGFBQWEsWUFBWTtBQUFBLFVBQ3BELFlBQVk7QUFBQSxVQUNaLGVBQWVKO0FBQUEsUUFDakIsQ0FBQztBQUNELFFBQUFDLEVBQU0sMkJBQTJCLEdBQ2pDQSxFQUFNLGlDQUFpQztBQUN2QyxjQUFNSSxJQUFhLE1BQU0sS0FBSyxXQUFXLFlBQVk7QUFBQSxVQUNuRCxZQUFZO0FBQUEsVUFDWixlQUFlTDtBQUFBLFFBQ2pCLENBQUM7QUFDRCxRQUFBQyxFQUFNLDJCQUEyQixHQUNqQ0EsRUFBTSxnREFBZ0Q7QUFDdEQsY0FBTUssSUFBYUgsRUFBWTtBQUFBLFVBQzdCLEtBQUs7QUFBQSxVQUNMQztBQUFBLFVBQ0FDO0FBQUEsVUFDQSxLQUFLLFdBQVc7QUFBQSxRQUNsQjtBQUNBLGFBQUssUUFBUSxJQUFJQyxDQUFVLEdBQzNCcEIsR0FBNEIsS0FBSyxXQUFXb0IsR0FBWSxLQUFLLGFBQWEsR0FDMUVMLEVBQU0sOEJBQThCLEdBQ3BDLE1BQU12RCxHQUFrQixLQUFLLFdBQVc0RCxHQUFZLEtBQUssYUFBYSxHQUN0RSxLQUFLLGNBQWMsSUFBSSxPQUFPRixFQUFVLGtCQUFrQkEsRUFBVSxRQUFRLEdBQzVFSCxFQUFNLGdDQUFnQztBQUFBLE1BQ3hDLFNBQVN0USxHQUFLO0FBQ1osY0FBTTRRLElBQWU5RCxFQUFnQjlNLENBQUc7QUFDeEMsUUFBQXVRLEVBQU0saUNBQWlDSyxDQUFZLEdBQ25ELEtBQUssY0FBYyxJQUFJLFlBQVlBLENBQVk7QUFBQSxNQUNqRDtBQUFBLElBQ0YsR0FDQSxLQUFLLGdCQUFnQixDQUFDQyxNQUFXO0FBQy9CLFdBQUssZUFBZSxTQUFTQSxHQUN6QixLQUFLLHNCQUNQLE9BQU8sT0FBTyxLQUFLLGtCQUFrQixFQUFFLFFBQVEsQ0FBQ0MsTUFBWTtBQUMxRCxRQUFLQSxNQUNMQSxFQUFRLEtBQUssTUFBTSxTQUFTRDtBQUFBLE1BQzlCLENBQUM7QUFBQSxJQUVMLEdBQ0EsS0FBSyxjQUFjLENBQUNuQyxNQUFZO0FBQzlCLE1BQUssS0FBSyxhQUFhLFFBQVEsYUFDN0IsS0FBSyxhQUFhLElBQUlBLENBQU87QUFBQSxJQUVqQyxHQUNBLEtBQUssaUJBQWlCLENBQUMzQyxNQUFXO0FBQ2hDLE1BQUssS0FBSyxhQUFhLFFBQVEsYUFDN0IsS0FBSyxhQUFhLE1BQU0sSUFBSSxNQUFNQSxDQUFNLEdBQUdBLENBQU07QUFBQSxJQUVyRCxHQUNBLEtBQUssZ0JBQWdCLENBQUNnRixHQUFjQyxJQUFVLENBQUMsTUFBTTtBQUNuRCxVQUFJLENBQUMsS0FBSyxPQUFRLE9BQU0sSUFBSSxNQUFNLDhCQUE4QjtBQUNoRSxZQUFNQyxJQUFPQyxHQUFZLE1BQU1ILENBQVksR0FDckNJLElBQVEsU0FBUyxjQUFjLFFBQVEsR0FDdkNDLElBQWMsS0FBSyxpQkFBaUJKLENBQU87QUFDakQsTUFBQUcsRUFBTSxPQUFPLEdBQUdGLENBQUk7QUFDcEIsWUFBTXJDLElBQU0sSUFBSSxJQUFJLFdBQVd1QyxFQUFNLElBQUksS0FBSyxLQUFLLE9BQU8sT0FBTztBQUNqRSxhQUFBdkMsRUFBSSxTQUFTd0MsRUFBWSxTQUFTLEdBQ2xDRCxFQUFNLE1BQU12QyxFQUFJLE1BQ2hCdUMsRUFBTSxNQUFNLFNBQVMsUUFDckJBLEVBQU0sTUFBTSxRQUFRLFFBQ00sS0FBSyxlQUFlRixHQUFNRSxDQUFLO0FBQUEsSUFFM0QsR0FDQSxLQUFLLGlCQUFpQixDQUFDRixHQUFNRSxNQUFVO0FBQ3JDLFlBQU1MLElBQVU7QUFBQSxRQUNkLE1BQUFHO0FBQUEsUUFDQSxNQUFNRTtBQUFBLFFBQ04sT0FBTyxDQUFDRSxNQUFVO0FBcC9KMUIsY0FBQTVRO0FBby9KNkIsa0JBQUFBLElBQUEsU0FBUyxjQUFjNFEsQ0FBUSxNQUEvQixnQkFBQTVRLEVBQWtDLFlBQVkwUTtBQUFBO0FBQUEsTUFDckU7QUFDQSxrQkFBSyxpQkFBaUIsRUFBRSxNQUFNTCxFQUFRLE1BQU0sTUFBTUEsRUFBUSxLQUFLLENBQUMsR0FDM0QsS0FBSyx1QkFDUixLQUFLLHFCQUFxQjtBQUFBLFFBQ3hCLENBQUNRLEdBQWdCLElBQUksR0FBRztBQUFBLFFBQ3hCLENBQUNBLEdBQWdCLFdBQVcsR0FBRztBQUFBLFFBQy9CLENBQUNBLEdBQWdCLFdBQVcsR0FBRztBQUFBLFFBQy9CLENBQUNBLEdBQWdCLFFBQVEsR0FBRztBQUFBLE1BQzlCLElBRUYsS0FBSyxtQkFBbUJMLENBQUksSUFBSUgsR0FDekJBO0FBQUEsSUFDVCxHQUNBLEtBQUssbUJBQW1CLENBQUNFLE1BQVk7QUFDbkMsWUFBTUksSUFBYyxJQUFJLGdCQUFnQjtBQUN4QyxhQUFBQSxFQUFZLE9BQU8sV0FBVyxLQUFLLFFBQVEsR0FDM0NBLEVBQVksT0FBTyxVQUFVLEtBQUssTUFBTSxHQUNwQ0osRUFBUSxVQUNWSSxFQUFZLE9BQU8sVUFBVUcsR0FBMkJQLEVBQVEsTUFBTSxDQUFDLEdBRXpFSSxFQUFZLE9BQU8sZUFBZSxLQUFLLE9BQU8sbUJBQW1CLEdBQzFEQTtBQUFBLElBQ1QsR0FDQSxLQUFLLG1CQUFtQixDQUFDTixNQUFZO0FBQ25DLE1BQUFqQyxHQUFpQmlDLEVBQVEsSUFBSSxFQUFFLEtBQUssQ0FBQ1UsTUFBUztBQUM1QyxhQUFLLGtCQUFrQixjQUFjVixFQUFRLE1BQU1VLENBQUksR0FDbEQsS0FBSyxXQUFXLFFBQVEsYUFDM0IsS0FBSyxXQUFXLElBQUlBLENBQUk7QUFBQSxNQUU1QixDQUFDLEVBQUUsTUFBTSxDQUFDeFIsTUFBUXVRLEVBQU0seUNBQXlDdlEsQ0FBRyxDQUFDO0FBQUEsSUFDdkUsR0FDQSxLQUFLLGFBQWEsTUFDVCxTQUFTLGNBQWMsS0FBSyxVQUFVLEtBQUssU0FBUyxNQUU3RCxLQUFLLGFBQWEsTUFBTTtBQUN0QixZQUFNaU4sSUFBVSxLQUFLLFFBQVEscUJBQXFCLElBQUk7QUFDdEQsVUFBSSxDQUFDQSxHQUFTO0FBQ1osUUFBQXNELEVBQU0sK0RBQStEO0FBQ3JFO0FBQUEsTUFDRjtBQUNBLE1BQUFsRCxFQUFTLFNBQVMsSUFBSTtBQUFBLFFBQ3BCLFNBQUFKO0FBQUEsUUFDQSx1QkFBdUJrRCxHQUFnQ2xELEVBQVEsd0JBQXdCLGFBQWE7QUFBQSxRQUNwRyxrQkFBa0JtRCxFQUF5Qm5ELEVBQVEsT0FBTztBQUFBLFFBQzFELGVBQWUsS0FBSztBQUFBLFFBQ3BCLGNBQWM7QUFBQSxVQUNaLHVCQUF1QixLQUFLLGtCQUFrQixrQkFBa0I7QUFBQSxRQUNsRTtBQUFBLFFBQ0EsWUFBWTtBQUFBO0FBQUEsTUFFZCxDQUFDO0FBQUEsSUFDSCxHQUNBLEtBQUssNkJBQTZCLE1BQU07QUFFdEMsVUFBSSxDQURZLEtBQUssUUFBUSxxQkFBcUIsSUFBSSxHQUN4QztBQUNaLFFBQUFzRCxFQUFNLHNGQUFzRjtBQUM1RjtBQUFBLE1BQ0Y7QUFDQSxZQUFNa0IsSUFBa0I7QUFBQSxRQUN0QixvQkFBb0JDLEVBQWM7QUFBQSxRQUNsQyxtQkFBbUJBLEVBQWM7QUFBQSxRQUNqQyx1QkFBdUJBLEVBQWM7QUFBQSxRQUNyQyxzQkFBc0JBLEVBQWM7QUFBQSxNQUN0QztBQUNBLGFBQU8sT0FBTyxRQUFRLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDOUQsR0FBS1QsQ0FBSSxPQUFPO0FBQUEsUUFDMUQsTUFBTXNFLEVBQWdCN0QsQ0FBRyxLQUFLQTtBQUFBLFFBQzlCLEdBQUdULEVBQUssVUFBVSxxQkFBcUIsSUFBSTtBQUFBLE1BQzdDLEVBQUU7QUFBQSxJQUNKLEdBQ0EsS0FBSyxnQkFBZ0IsQ0FBQ3dFLEdBQVFDLE1BQWE7QUFDekMsWUFBTTNFLElBQVUsS0FBSyxRQUFRLHFCQUFxQixJQUFJO0FBQ3RELFVBQUksQ0FBQ0EsR0FBUztBQUNaLFFBQUFzRCxFQUFNLCtEQUErRDtBQUNyRTtBQUFBLE1BQ0Y7QUFDQSxjQUFRb0IsR0FBUTtBQUFBLFFBQ2QsS0FBS0QsRUFBYztBQUNqQixpQkFBT3JFLEVBQVMsYUFBYSxJQUFJO0FBQUEsWUFDL0IsU0FBQUo7QUFBQSxZQUNBLHVCQUF1QmtELEdBQWdDbEQsRUFBUSx3QkFBd0IsVUFBVSxRQUFRO0FBQUEsWUFDekcsa0JBQWtCbUQsRUFBeUJuRCxFQUFRLE9BQU87QUFBQSxZQUMxRCxlQUFlLEtBQUs7QUFBQSxZQUNwQixjQUFjLEVBQUUsVUFBQTJFLEVBQVM7QUFBQSxZQUN6QixZQUFZO0FBQUEsVUFDZCxDQUFDO0FBQUEsUUFDSCxLQUFLRixFQUFjLG9CQUFvQjtBQUNyQyxnQkFBTUcsSUFBcUIsS0FBSyxVQUFVLG1CQUFtQixVQUFVLHFCQUFxQixJQUFJO0FBQ2hHLGNBQUksQ0FBQ0EsR0FBb0I7QUFDdkIsWUFBQXRCO0FBQUEsY0FDRTtBQUFBLFlBQ0Y7QUFDQTtBQUFBLFVBQ0Y7QUFDQSxpQkFBT3NCLEVBQW1CLFVBQVVELENBQVE7QUFBQSxRQUM5QztBQUFBLFFBQ0EsS0FBS0YsRUFBYyxtQkFBbUI7QUFDcEMsZ0JBQU1JLElBQW9CLEtBQUssVUFBVSxrQkFBa0IsVUFBVSxxQkFBcUIsSUFBSTtBQUM5RixjQUFJLENBQUNBLEdBQW1CO0FBQ3RCLFlBQUF2QjtBQUFBLGNBQ0U7QUFBQSxZQUNGO0FBQ0E7QUFBQSxVQUNGO0FBQ0EsaUJBQU91QixFQUFrQixVQUFVRixDQUFRO0FBQUEsUUFDN0M7QUFBQSxRQUNBLEtBQUtGLEVBQWMsdUJBQXVCO0FBQ3hDLGdCQUFNSyxJQUF3QixLQUFLLFVBQVUsc0JBQXNCLFVBQVUscUJBQXFCLElBQUk7QUFDdEcsY0FBSSxDQUFDQSxHQUF1QjtBQUMxQixZQUFBeEI7QUFBQSxjQUNFO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRjtBQUNBLGlCQUFPd0IsRUFBc0IsVUFBVUgsQ0FBUTtBQUFBLFFBQ2pEO0FBQUEsUUFDQSxLQUFLRixFQUFjLHNCQUFzQjtBQUN2QyxnQkFBTU0sSUFBdUIsS0FBSyxVQUFVLHFCQUFxQixVQUFVLHFCQUFxQixJQUFJO0FBQ3BHLGNBQUksQ0FBQ0EsR0FBc0I7QUFDekIsWUFBQXpCO0FBQUEsY0FDRTtBQUFBLFlBQ0Y7QUFDQTtBQUFBLFVBQ0Y7QUFDQSxpQkFBT3lCLEVBQXFCLFVBQVVKLENBQVE7QUFBQSxRQUNoRDtBQUFBLFFBQ0EsS0FBS0YsRUFBYyxZQUFZO0FBQzdCLGdCQUFNN0UsSUFBYSxLQUFLLFVBQVUsS0FBSyxVQUFVO0FBQ2pELGNBQUksQ0FBQ0EsRUFBVztBQUNkLGtCQUFNLE1BQU0sdURBQXVEO0FBRXJFLGlCQUFPUSxFQUFTLFdBQVcsSUFBSTtBQUFBLFlBQzdCLFNBQUFKO0FBQUEsWUFDQSx1QkFBdUJrRCxHQUFnQ2xELEVBQVEsd0JBQXdCLFVBQVUsTUFBTTtBQUFBLFlBQ3ZHLGtCQUFrQm1ELEVBQXlCbkQsRUFBUSxPQUFPO0FBQUEsWUFDMUQsZUFBZSxLQUFLO0FBQUE7QUFBQTtBQUFBLFlBR3BCLGNBQWMyRSxLQUFZLGFBQWFBLEtBQVlBLEVBQVMsVUFBVTtBQUFBLGNBQ3BFLFVBQVVBLEVBQVM7QUFBQSxjQUNuQixPQUFPQSxFQUFTO0FBQUEsY0FDaEIsT0FBT0EsRUFBUztBQUFBLGNBQ2hCLFdBQVdBLEVBQVM7QUFBQSxjQUNwQixVQUFVQSxFQUFTO0FBQUEsY0FDbkIsU0FBUztBQUFBLFlBQ1gsSUFBSTtBQUFBLGNBQ0YsUUFBUUEsRUFBUztBQUFBLGNBQ2pCLE9BQU9BLEVBQVM7QUFBQSxjQUNoQixXQUFXQSxFQUFTO0FBQUEsY0FDcEIsVUFBVUEsRUFBUztBQUFBLGNBQ25CLFNBQVM7QUFBQSxZQUNYO0FBQUEsWUFDQSxZQUFZL0UsRUFBVztBQUFBLFVBQ3pCLENBQUM7QUFBQSxRQUNIO0FBQUEsUUFDQTtBQUNFLFVBQUFWLEdBQVl3RixDQUFNO0FBQUEsTUFDdEI7QUFBQSxJQUNGLEdBQ0EsS0FBSyxTQUFTLEtBQUssWUFDbkIsS0FBSyxVQUFVLE1BQU07QUFDbkIsTUFBQXJCLEVBQU0sNEJBQTRCO0FBQ2xDLGlCQUFXUSxLQUFXLE9BQU8sT0FBTyxLQUFLLHNCQUFzQixDQUFDLENBQUM7QUFDL0QsUUFBS0EsS0FDTEEsRUFBUSxLQUFLLE9BQU87QUFFdEIsYUFBTyxvQkFBb0IsV0FBVyxLQUFLLGFBQWEsY0FBYyxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQzdGLEtBQUsscUJBQXFCLE1BQzFCLE9BQU8sT0FBTztBQUFBLElBQ2hCLEdBQ0EsS0FBSyxrQkFBa0IsQ0FBQ21CLE1BQWlCO0FBQ3ZDLFdBQUssY0FBYyxhQUFhQSxDQUFZO0FBQUEsSUFDOUMsR0FDQXpCLEVBQVksa0JBQWtCLElBQUksR0FDbEMsS0FBSyxhQUFhLFVBQ2xCLEtBQUssb0JBQW9CLFVBQ3pCLEtBQUssVUFBVXZPLEVBQU8sV0FBVyw4QkFDakMsS0FBSyxTQUFTLEVBQUUsR0FBR0EsR0FBUSxTQUFTLEtBQUssUUFBUSxHQUNqRCxLQUFLLGdCQUFnQitMLEdBQWMsV0FBVy9MLENBQU0sR0FDcEQsS0FBSyxxQkFBcUIsTUFDMUIsS0FBSyxTQUFTLGFBQWFpUSxHQUFHLENBQUMsSUFDL0IsS0FBSyxXQUFXLE9BQU8sU0FBUyxRQUNoQyxLQUFLLGFBQWFqUSxFQUFPLGNBQWMsUUFDdkMsS0FBSyxpQkFBaUIsRUFBRSxRQUFRLE1BQU0sR0FDdEMsS0FBSyxvQkFBb0IsSUFBSW9OLEdBQWtCLEdBQy9DLEtBQUssZUFBZSxJQUFJcEIsR0FBd0IsS0FBSyxRQUFRLEtBQUssU0FBUyxLQUFLLGVBQWU7QUFBQSxNQUM3RixlQUFlLEtBQUs7QUFBQSxNQUNwQixhQUFhLEtBQUs7QUFBQSxNQUNsQixnQkFBZ0IsS0FBSztBQUFBLElBQ3ZCLENBQUMsR0FDRCxPQUFPLGlCQUFpQixXQUFXLEtBQUssYUFBYSxjQUFjLEtBQUssS0FBSyxZQUFZLENBQUMsR0FDMUYsS0FBSyxjQUFjO0FBQUEsRUFDckI7QUFBQSxFQWlCQSxJQUFJLHNCQUFzQjtBQUN4QixXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBY0Y7QUEvQkl1QyxFQUFLLFdBQVduRCxHQUdoQm1ELEVBQUssb0JBQW9CLENBQUMyQixNQUFTO0FBQ2pDLE1BQUkzQixFQUFZLFlBQVk7QUFDMUIsVUFBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBRWxGLFNBQU8sTUFBUzJCO0FBQ2xCLEdBR0EzQixFQUFLLGNBQWMsTUFDVixPQUFPLE9BQVUsTUFPMUJBLEVBQUssc0JBQXNCLENBQUN2TyxHQUFRbVEsR0FBa0JDLEdBQWtCQyxPQUMvRDtBQUFBLEVBQ0wscUJBQXFCclEsRUFBTztBQUFBLEVBQzVCLFNBQVMsSUFBSSxJQUFJQSxFQUFPLFdBQVdzUSxFQUFjLEVBQUU7QUFBQSxFQUNuRCxTQUFBRDtBQUFBLEVBQ0EsbUJBQW1CRixFQUFpQjtBQUFBLEVBQ3BDLHdCQUF3QkEsRUFBaUI7QUFBQSxFQUN6QyxrQkFBQUM7QUFBQSxFQUNBLGtCQUFrQnBRLEVBQU8sb0JBQW9CLENBQUM7QUFDaEQ7QUEzU04sSUFBTXVRLEtBQU5oQzsiLAogICJuYW1lcyI6IFsieiIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJjaGFsayIsICJGUkFNRV9CQVNFX1VSTCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UiLCAiWm9kRmllbGRFcnJvciIsICJab2RGaWVsZEVycm9ycyIsICJNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFIiwgImdldEh1bWFuRnJpZW5kbHlNZXNzYWdlIiwgIm9nRXJyb3JNZXNzYWdlIiwgImtleSIsICJpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCIsICJzdHIiLCAiY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJyZXNwb25zZSIsICJlcnIiLCAiY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyIsICJlcnJvcnMiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgImUiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJTdWJtaXRNZXRob2QiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJyZXN1bHRTdGF0dXMiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJpbnB1dCIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCIsICJwaW5nIiwgInJlc3VsdCIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic3VtIiwgImFyciIsICJhIiwgImIiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIkNkZUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJnZXRQcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAicGF5bG9hZCIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yM2RzU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJjb25uZWN0aW9uT2JqIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiZXJyb3JNZXNzYWdlIiwgImFzc2VydE5ldmVyIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAicGFyYW1zIiwgImZsb3dSZXN1bHQiLCAiZXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImxvZ19fJGciLCAiZXJyX18kZyIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgImZpZWxkcyIsICJwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwIiwgImxvZ19fMiIsICJwcmVmaWxsIiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgImNoZWNrb3V0UmVxdWVzdCIsICJsb2dfXyRmIiwgImVycl9fJGYiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJPSlNfU1RSSVBFX0xJTktfQlROX0lEIiwgImxvZ19fJGUiLCAiZXJyX18kZSIsICJTdHJpcGVMaW5rQ3BtIiwgIlN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVMaW5rRmxvdyIsICJjb250ZXh0IiwgImZvcm1DYWxsYmFja3MiLCAiaW5pdFBhcmFtcyIsICJzdHJpcGVMaW5rQ3BtIiwgImFueUNkZUNvbm5lY3Rpb24iLCAiaW5pdGlhbFByZXZpZXciLCAiZWxlbWVudHMiLCAiZXhwcmVzc0NoZWNrb3V0RWxlbWVudCIsICJtb3VudEJ1dHRvbiIsICJkaXNtb3VudEJ1dHRvbiIsICJldmVudCIsICJPanNGbG93cyIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImZvcm1JbnB1dHMiLCAiX2UiLCAiaW5wdXRzIiwgInBheWVyRmlyc3ROYW1lIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJwYXllckxhc3ROYW1lIiwgImlkIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAic3RhcnRQb2xsaW5nIiwgIm9uU3VjY2VzcyIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAiaGFuZGxlRXZlbnRzIiwgImhhbmRsZUNhbmNlbCIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJiYXNlVXJsIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCIsICJvcGVuUG9wdXBXaW5kb3ciLCAicG9wdXBOYW1lIiwgInBvcHVwV2luZG93IiwgInN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QiLCAiZXhwZWN0ZWRWZXJpZnlUb2tlbiIsICJwb2xsaW5nIiwgInZlcmlmeVJlc3VsdCIsICJsb2dfXyRkIiwgImVycl9fJGQiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMiIsICJlcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3VsdCIsICJmcmllbmRseUVyciIsICJkZXZFcnIiLCAicGFyc2VWYXVsdElkRnJvbTNkc0hyZWYiLCAiaHJlZiIsICJ2YXVsdElkIiwgImVyck1zZyIsICJwYXJzZUFyZ0Zyb21IcmVmIiwgImFyZ05hbWUiLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAiaGVhZGVycyIsICJsb2dfXyRjIiwgImVycl9fJGMiLCAiQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImludGVudElkIiwgInJ1bkFpcndhbGxleDNkc0Zsb3ciLCAiaW5pdGlhbEludGVudElkIiwgIkFwcGxlUGF5Q3BtJDEiLCAiR29vZ2xlUGF5Q3BtJDEiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJBZHllbkxvY2FsZSIsICJsb2dfXyRiIiwgImVycl9fJGIiLCAiQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAiZGVjb2RlQWR5ZW5BY3Rpb24iLCAiYWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgImNsZWFudXAiLCAib25DYW5jZWwiLCAib25QYXltZW50RmFpbGVkIiwgInN0YXRlIiwgIm9uRXJyb3IiLCAib25BZGRpdGlvbmFsRGV0YWlscyIsICJhZHllbkNoZWNrb3V0IiwgImNoZWNrb3V0IiwgImRldGVybWluZUxvY2FsZSIsICJwcmVmaWxsTG9jYWxlIiwgImJyb3dzZXJMb2NhbGUiLCAiY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMiLCAicnVuQWR5ZW4zZHNGbG93IiwgImxvZ19fJGEiLCAiZXJyX18kYSIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgInN0YXJ0UGZSZXN1bHQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJzdHJpcGVDQzNEU0Zsb3ciLCAiY29tbW9uQ0MzRFNGbG93IiwgImNjUG1JZCIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVBY3Rpb24iLCAiY29tbW9uM0RTQWN0aW9uVHlwZXMiLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9nX18kOSIsICJlcnJfXyQ5IiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93MiIsICJwcm92aWRlciIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgImFtb3VudCIsICJpc1BlbmRpbmciLCAic3RyaXBlQXBwbGVQYXkiLCAibG9nX18kOCIsICJlcnJfXyQ4IiwgIlBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgIm5ld0N1c3RvbWVyRmllbGRzIiwgImZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3ciLCAiaXNQYXlGaXJzdEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd1JlcXVlc3QiLCAicHJlQWN0aW9uVXJsIiwgImVuY29kZWRSZXF1ZXN0IiwgInNlYXJjaFBhcmFtcyIsICJyZWRpcmVjdFVybCIsICJwYXlwYWxGbG93UmVzdWx0IiwgImNoZWNrb3V0QXR0ZW1wdElkIiwgImdldFBheW1lbnREYXRhUmVxdWVzdCIsICJnYXRld2F5IiwgImdhdGV3YXlNZXJjaGFudElkIiwgIm1lcmNoYW50TmFtZSIsICJtZXJjaGFudElkIiwgIm92ZXJyaWRlUGF5bWVudFJlcXVlc3QiLCAidG90YWxQcmljZSIsICJjdXJyZW5jeUNvZGUiLCAiYmFzZVJlcXVlc3QiLCAibG9hZEdvb2dsZVBheVNjcmlwdCIsICJzY3JpcHQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAicGF5bWVudERhdGFSZXF1ZXN0IiwgImVudmlyb25tZW50IiwgInBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgInBheW1lbnREYXRhIiwgImZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgImxhc3ROYW1lIiwgImxvZ19fJDciLCAiZXJyX18kNyIsICJpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJnb29nbGVQYXlDcG0iLCAicHJvY2Vzc29yQWNjb3VudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJfZiIsICJfZyIsICJjbGllbnQiLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgIm91clBtSWQiLCAibG9hZEFwcGxlUGF5U2NyaXB0IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkiLCAiYXBwbGVQYXlQYXltZW50IiwgInBtQmlsbGluZ0NvbnRhY3QiLCAiYmlsbGluZ0NvbnRhY3QiLCAic2hpcHBpbmdDb250YWN0IiwgImNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0IiwgInRvdGFsIiwgImxpbmVJdGVtIiwgImNyZWF0ZUFwcGxlUGF5VG90YWwiLCAiZGVmYXVsdExhYmVsIiwgImxvZ19fJDYiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlM0RTIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEiLCAiY29uc2VudElkIiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgImFwcGxlUGF5Q3BtIiwgIm9uQXBwbGVQYXlTdGFydEZsb3ciLCAicnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAidXBkYXRlIiwgIkxPT1BfQ1JZUFRPX01JTl9VU0RfQ0hBUkdFX0FNT1VOVF9BVE9NIiwgIkxvb3BDcnlwdG9DcG0iLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgImluaXRMb29wRmxvdyIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAic3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJjdXN0b21lclJlZklkIiwgIndpZGdldFByb3BzIiwgImluaXRMb29wQ29ubmVjdFByb3BzIiwgInJ1bkxvb3BGbG93IiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImxvZ19fJDMiLCAiZXJyX18kNCIsICJpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyIsICJydW5BdXRobmV0QXBwbGVQYXlGbG93IiwgImxvZ19fJDIiLCAiZXJyX18kMyIsICJpbml0QXV0aG5ldEdvb2dsZVBheUZsb3ciLCAicnVuQXV0aG5ldEdvb2dsZVBheUZsb3ciLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgIm1hdGNoZXNQcm9jZXNzb3IiLCAibWF0Y2hlc1Byb3ZpZGVyIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAibG9nX18kMSIsICJlcnJfXyQyIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJpbml0UGFyYW1zIiwgImluaXRSZXN1bHQiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImNvbnRleHQiLCAiZm9ybUNhbGxiYWNrcyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiT2pzRmxvd3MiLCAiZXJyX18kMSIsICJPcHRpb25hbEZuIiwgInoiLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImJhc2VVcmwiLCAiaW50ZXJuYWxDYWxsYmFja3MiLCAiZXZlbnQiLCAiZ2V0Q2xlYW5PcmlnaW4iLCAiZXZlbnREYXRhIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImVsZW1lbnRJZCIsICJwYXlsb2FkIiwgImV2ZW50VHlwZSIsICJ1cmwiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJjb25uZWN0VG9DaGlsZCIsICJpc1ZhbGlkT2JqZWN0IiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAiaXNSZXN1bHRWYWxpZCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJjb25uZWN0aW9uIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAicmVzdWx0IiwgImNhbkFwcGxlUGF5IiwgImNhbkdvb2dsZVBheSIsICJmaW5hbFN0YXR1cyIsICJ1c2VyUGFyYW1zIiwgInJ1blN0cmlwZVByRmxvdyIsICJwcm92aWRlciIsICJwYXJhbXMiLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJlcnJfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlTG9hZGVkIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlcnJvck1lc3NhZ2UiLCAiaGVpZ2h0IiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgIm9wdGlvbnMiLCAidHlwZSIsICJFbGVtZW50VHlwZSIsICJmcmFtZSIsICJxdWVyeVN0cmluZyIsICJzZWxlY3RvciIsICJFbGVtZW50VHlwZUVudW0iLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAiY29ubiIsICJpbml0Rmxvd05hbWVNYXAiLCAiU3VibWl0TWV0aG9kcyIsICJtZXRob2QiLCAic2V0dGluZ3MiLCAiYWlyd2FsbGV4R29vZ2xlUGF5IiwgImFpcndhbGxleEFwcGxlUGF5IiwgImF1dGhvcml6ZU5ldEdvb2dsZVBheSIsICJhdXRob3JpemVOZXRBcHBsZVBheSIsICJuZXdDYWxsYmFja3MiLCAidjQiLCAiZm9ybSIsICJjZGVMb2FkZWRQYXlsb2FkIiwgImFueUNkZUNvbm5lY3Rpb24iLCAiZm9ybURpdiIsICJGUkFNRV9CQVNFX1VSTCIsICJPcGVuUGF5Rm9ybSJdCn0K