@getopenpay/openpay-js 0.5.11 → 0.5.12
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/{Resource-CmF5dReO.js → Resource-BuOHZplj.js} +2 -2
- package/dist/{SimpleSpanProcessor-BlC7aMwS.js → SimpleSpanProcessor-CKDfef5-.js} +6 -6
- package/dist/{detect-resources-CBHP7pG-.js → detect-resources-Urwgta9U.js} +6 -6
- package/dist/{diag-api-Cz-UtaIj.js → diag-api-BuzSOOAx.js} +1 -1
- package/dist/{index-BI9Xklch.js → index-BqrzDvwu.js} +5 -5
- package/dist/{index-C-WuK9bQ.js → index-CThdiqXg.js} +1 -1
- package/dist/{index-gtGqMlZy.js → index-Cmhheoif.js} +1 -1
- package/dist/{index-p9mUX5yE.js → index-CtJ_6odH.js} +1 -1
- package/dist/{index-otf1fn1r.js → index-Cy4-6zU_.js} +5 -5
- package/dist/{index-yNlNQGj0.js → index-DJFwqrzf.js} +4 -4
- package/dist/{index-CsYu7T8Y.js → index-DT5HAS-D.js} +56 -52
- package/dist/{index-BFSwJdRN.js → index-G1_XDLLH.js} +4 -4
- package/dist/{index-BqLe60DN.js → index-itSBKTvN.js} +4 -4
- package/dist/{index-Boe_4WiD.js → index-uEbBPgmd.js} +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.es.js +1 -1
- package/dist/index.umd.js +3 -3
- package/dist/{metrics-api-CBTuIHlh.js → metrics-api-BykyaVIX.js} +1 -1
- package/dist/{sdk-info-CqjfNdA7.js → sdk-info-B2Z1fEhT.js} +1 -1
- package/dist/{url-Bg17qvHA.js → url-WXqZ-_PR.js} +1 -1
- package/dist/{utils-DUkJ-8r_.js → utils-BZK1_jBh.js} +3 -3
- package/dist/{utils-DBqZC8JN.js → utils-CkxL0WCq.js} +1 -1
- package/package.json +1 -1
|
@@ -42,7 +42,7 @@ var vo = /* @__PURE__ */ function() {
|
|
|
42
42
|
}
|
|
43
43
|
return t;
|
|
44
44
|
}(Error);
|
|
45
|
-
const A = i.string().trim().min(1, { message: "Please fill in this field" }), E = i.string().trim().optional(),
|
|
45
|
+
const A = i.string().trim().min(1, { message: "Please fill in this field" }), E = i.string().trim().optional(), D = (e) => i.nullable(e.optional());
|
|
46
46
|
var p = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.PHONE = "phone", e.EMAIL = "email", e.LINE1 = "line1", e.LINE2 = "line2", e.LINE3 = "line3", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ZIP_CODE = "zipCode", e.SHIPPING_LINE1 = "shippingAddressLine1", e.SHIPPING_LINE2 = "shippingAddressLine2", e.SHIPPING_LINE3 = "shippingAddressLine3", e.SHIPPING_CITY = "shippingAddressCity", e.SHIPPING_STATE = "shippingAddressState", e.SHIPPING_COUNTRY = "shippingAddressCountry", e.SHIPPING_ZIP_CODE = "shippingAddressZipCode", e.IS_SHIPPING_SAME_AS_BILLING = "isShippingSameAsBilling", e.PROMOTION_CODE = "promotionCode", e))(p || {});
|
|
47
47
|
const Wr = i.nativeEnum(p);
|
|
48
48
|
var Zr = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(Zr || {});
|
|
@@ -50,8 +50,8 @@ const Kr = i.nativeEnum(Zr), Qr = i.union([Wr, Kr]);
|
|
|
50
50
|
var ge = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e.CDE_BRIDGE = "cde-bridge", e))(ge || {});
|
|
51
51
|
const Eo = i.enum(["card", "card-number", "card-expiry", "card-cvc", "cde-bridge"]), Rt = i.object({
|
|
52
52
|
provider: i.string(),
|
|
53
|
-
processor_name:
|
|
54
|
-
metadata:
|
|
53
|
+
processor_name: D(i.string()),
|
|
54
|
+
metadata: D(i.record(i.string(), i.any()))
|
|
55
55
|
}), Po = i.object({
|
|
56
56
|
id: i.string()
|
|
57
57
|
}), Nt = i.object({
|
|
@@ -225,7 +225,8 @@ const Oo = ce.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Uo = i.ob
|
|
|
225
225
|
type: i.literal(ce.enum.CHECKOUT_SUCCESS),
|
|
226
226
|
invoiceUrls: i.array(i.string()),
|
|
227
227
|
subscriptionIds: i.array(i.string()),
|
|
228
|
-
customerId: i.string()
|
|
228
|
+
customerId: i.string(),
|
|
229
|
+
paymentMethodId: E
|
|
229
230
|
}), Go = i.discriminatedUnion("type", [
|
|
230
231
|
Co,
|
|
231
232
|
Ao,
|
|
@@ -258,16 +259,17 @@ i.object({
|
|
|
258
259
|
});
|
|
259
260
|
i.object({
|
|
260
261
|
secure_token: i.string(),
|
|
261
|
-
existing_cc_pm_id:
|
|
262
|
-
their_pm_id:
|
|
263
|
-
checkout_attempt_id:
|
|
264
|
-
processor_specific_metadata:
|
|
262
|
+
existing_cc_pm_id: D(i.string()),
|
|
263
|
+
their_pm_id: D(i.string()),
|
|
264
|
+
checkout_attempt_id: D(i.string()),
|
|
265
|
+
processor_specific_metadata: D(i.record(i.string(), i.any()))
|
|
265
266
|
});
|
|
266
267
|
const it = i.object({
|
|
267
268
|
invoice_urls: i.array(i.string()),
|
|
268
269
|
subscription_ids: i.array(i.string()),
|
|
269
270
|
customer_id: i.string(),
|
|
270
|
-
|
|
271
|
+
payment_method_id: D(i.string()),
|
|
272
|
+
processors_used: D(i.array(i.string()))
|
|
271
273
|
}), qo = i.object({
|
|
272
274
|
elementType: i.string(),
|
|
273
275
|
errors: i.array(i.string())
|
|
@@ -288,18 +290,18 @@ i.object({
|
|
|
288
290
|
checkout_payment_method: Rt,
|
|
289
291
|
non_cde_form_fields: $e,
|
|
290
292
|
do_not_use_legacy_cc_flow: i.boolean().optional(),
|
|
291
|
-
existing_cc_pm_id:
|
|
293
|
+
existing_cc_pm_id: D(i.string()),
|
|
292
294
|
extra_metadata: i.record(i.string(), i.any()),
|
|
293
|
-
payment_route_id:
|
|
294
|
-
customer_language:
|
|
295
|
+
payment_route_id: D(i.string()),
|
|
296
|
+
customer_language: D(i.string())
|
|
295
297
|
});
|
|
296
298
|
i.object({
|
|
297
299
|
session_id: i.string(),
|
|
298
300
|
checkout_payment_method: Rt,
|
|
299
301
|
non_cde_form_fields: $e,
|
|
300
302
|
extra_metadata: i.record(i.string(), i.any()).optional(),
|
|
301
|
-
payment_route_id:
|
|
302
|
-
customer_language:
|
|
303
|
+
payment_route_id: D(i.string()),
|
|
304
|
+
customer_language: D(i.string())
|
|
303
305
|
});
|
|
304
306
|
var T = /* @__PURE__ */ ((e) => (e.SUCCESS = "success", e.FAILURE = "failure", e.CANCELLED = "cancelled", e))(T || {});
|
|
305
307
|
const Xr = i.object({
|
|
@@ -328,21 +330,21 @@ const Bo = i.object({
|
|
|
328
330
|
})
|
|
329
331
|
}), en = i.object({
|
|
330
332
|
type: i.string(),
|
|
331
|
-
redirect_url:
|
|
332
|
-
initial_intent_id:
|
|
333
|
-
consent_id:
|
|
334
|
-
their_pm_id:
|
|
335
|
-
payment_session:
|
|
336
|
-
available_banks:
|
|
333
|
+
redirect_url: D(i.string()),
|
|
334
|
+
initial_intent_id: D(i.string()),
|
|
335
|
+
consent_id: D(i.string()),
|
|
336
|
+
their_pm_id: D(i.string()),
|
|
337
|
+
payment_session: D(i.record(i.string(), i.any())),
|
|
338
|
+
available_banks: D(i.array(Yo))
|
|
337
339
|
}), Jo = i.discriminatedUnion("present", [
|
|
338
340
|
i.object({ present: i.literal(!0), href: i.string() }),
|
|
339
341
|
i.object({ present: i.literal(!1) })
|
|
340
342
|
]), Wo = i.object({
|
|
341
343
|
payment_methods: i.array(Po),
|
|
342
|
-
pay_first_success_response:
|
|
343
|
-
required_user_actions:
|
|
344
|
-
post_checkout_redirect_to:
|
|
345
|
-
checkout_success_response:
|
|
344
|
+
pay_first_success_response: D(it),
|
|
345
|
+
required_user_actions: D(i.array(en)),
|
|
346
|
+
post_checkout_redirect_to: D(i.string()),
|
|
347
|
+
checkout_success_response: D(it)
|
|
346
348
|
}), Zo = i.object({
|
|
347
349
|
institutionNumber: i.string(),
|
|
348
350
|
transitNumber: i.string(),
|
|
@@ -453,7 +455,8 @@ const tn = i.object({
|
|
|
453
455
|
}), vr = i.object({
|
|
454
456
|
created: i.array(ca),
|
|
455
457
|
invoices: i.array(da),
|
|
456
|
-
processors_used: P(i.array(i.string()))
|
|
458
|
+
processors_used: P(i.array(i.string())),
|
|
459
|
+
payment_method_id: P(i.string())
|
|
457
460
|
}), on = i.object({
|
|
458
461
|
preview: vr,
|
|
459
462
|
preview_post_trial: P(vr),
|
|
@@ -725,7 +728,8 @@ ${e.message}`), e.message);
|
|
|
725
728
|
o.result.invoice_urls,
|
|
726
729
|
o.result.subscription_ids,
|
|
727
730
|
o.result.customer_id,
|
|
728
|
-
o.result.processors_used ?? []
|
|
731
|
+
o.result.processors_used ?? [],
|
|
732
|
+
o.result.payment_method_id ?? ""
|
|
729
733
|
);
|
|
730
734
|
else
|
|
731
735
|
throw new Error(`Unhandled mode: ${o}`);
|
|
@@ -3376,7 +3380,7 @@ const mr = async (e) => await wn(e) === "prod" ? "PRODUCTION" : "TEST", Ye = asy
|
|
|
3376
3380
|
formCallbacks: n,
|
|
3377
3381
|
customParams: a
|
|
3378
3382
|
}) => {
|
|
3379
|
-
var C,
|
|
3383
|
+
var C, x;
|
|
3380
3384
|
const o = q(r, n.get.onValidationError), s = e.anyCdeConnection, l = await M(s), c = a.verificationMethod ?? "truelayer";
|
|
3381
3385
|
let u = null;
|
|
3382
3386
|
if (c === "micro_deposit") {
|
|
@@ -3427,7 +3431,7 @@ const mr = async (e) => await wn(e) === "prod" ? "PRODUCTION" : "TEST", Ye = asy
|
|
|
3427
3431
|
sort_code: u == null ? void 0 : u.sort_code,
|
|
3428
3432
|
address: { ...h, town: h.city, postcode: h.zip_code }
|
|
3429
3433
|
}
|
|
3430
|
-
}, w = (
|
|
3434
|
+
}, w = (x = (C = (await O(s, {
|
|
3431
3435
|
secure_token: l.token,
|
|
3432
3436
|
processor_specific_metadata: {
|
|
3433
3437
|
payment_provider: t.provider,
|
|
@@ -3437,7 +3441,7 @@ const mr = async (e) => await wn(e) === "prod" ? "PRODUCTION" : "TEST", Ye = asy
|
|
|
3437
3441
|
}
|
|
3438
3442
|
})).required_user_actions) == null ? void 0 : C.find(
|
|
3439
3443
|
(k) => k.type === "airwallex_payment_consent"
|
|
3440
|
-
)) == null ? void 0 :
|
|
3444
|
+
)) == null ? void 0 : x.redirect_url;
|
|
3441
3445
|
if (w) {
|
|
3442
3446
|
Pe("BACS verification required, starting verification...");
|
|
3443
3447
|
const { status: k } = await Ee({
|
|
@@ -4202,7 +4206,7 @@ const { log__: et, err__: eo } = I("adyen-apple-pay"), Tc = ve(
|
|
|
4202
4206
|
formCallbacks: n,
|
|
4203
4207
|
customParams: a
|
|
4204
4208
|
}) => {
|
|
4205
|
-
var f, y, h, v, S, w, b, C,
|
|
4209
|
+
var f, y, h, v, S, w, b, C, x;
|
|
4206
4210
|
se("Starting Google Pay flow...");
|
|
4207
4211
|
const o = z(e.checkoutPaymentMethods, Xn), { initialPreview: s, overridePaymentRequest: l } = a, c = o.metadata;
|
|
4208
4212
|
if (!c.processor_account_id)
|
|
@@ -4274,7 +4278,7 @@ const { log__: et, err__: eo } = I("adyen-apple-pay"), Tc = ve(
|
|
|
4274
4278
|
processor_specific_metadata: {
|
|
4275
4279
|
payment_provider: t.provider
|
|
4276
4280
|
}
|
|
4277
|
-
}), se("[2nd] Confirm payment flow response after 3DS", W), he = (
|
|
4281
|
+
}), se("[2nd] Confirm payment flow response after 3DS", W), he = (x = (C = W.payment_methods) == null ? void 0 : C[0]) == null ? void 0 : x.id), !he)
|
|
4278
4282
|
throw new Error("No payment method ID found");
|
|
4279
4283
|
return ue({
|
|
4280
4284
|
logPrefix: "adyen-googlepay",
|
|
@@ -4688,8 +4692,8 @@ const { log__: tt, err__: to } = I("awx-apple-pay"), Uc = ve(
|
|
|
4688
4692
|
try {
|
|
4689
4693
|
const C = await _.loadPaymentData(m);
|
|
4690
4694
|
ne("Google Pay Payment data", C);
|
|
4691
|
-
const
|
|
4692
|
-
|
|
4695
|
+
const x = fr(r, C), k = q(
|
|
4696
|
+
x,
|
|
4693
4697
|
n.get.onValidationError,
|
|
4694
4698
|
a == null ? void 0 : a.defaultFieldValues
|
|
4695
4699
|
);
|
|
@@ -5052,7 +5056,7 @@ const { log__: Et, err__: oo } = I("authnet-applepay"), zc = ve(
|
|
|
5052
5056
|
const C = (y = (f = S.paymentMethodData) == null ? void 0 : f.tokenizationData) == null ? void 0 : y.token;
|
|
5053
5057
|
if (!C)
|
|
5054
5058
|
throw new Error("No payment token received from Google Pay");
|
|
5055
|
-
const
|
|
5059
|
+
const x = await oe(u, {
|
|
5056
5060
|
payment_provider: r.provider,
|
|
5057
5061
|
checkout_payment_method: r,
|
|
5058
5062
|
new_customer_email: b[p.EMAIL],
|
|
@@ -5062,7 +5066,7 @@ const { log__: Et, err__: oo } = I("authnet-applepay"), zc = ve(
|
|
|
5062
5066
|
new_customer_shipping_address: Q(b, d.checkout_settings),
|
|
5063
5067
|
customer_language: le()
|
|
5064
5068
|
});
|
|
5065
|
-
Re("Start payment flow response",
|
|
5069
|
+
Re("Start payment flow response", x);
|
|
5066
5070
|
const k = await O(u, {
|
|
5067
5071
|
secure_token: d.token,
|
|
5068
5072
|
processor_specific_metadata: {
|
|
@@ -5158,8 +5162,8 @@ Error: ${ee(t)}`), new Error(r);
|
|
|
5158
5162
|
}, { log__: je, err__: so } = I("cybs"), co = i.object({
|
|
5159
5163
|
step_up_url: i.string(),
|
|
5160
5164
|
access_token: i.string(),
|
|
5161
|
-
dd_url:
|
|
5162
|
-
dd_token:
|
|
5165
|
+
dd_url: D(i.string()),
|
|
5166
|
+
dd_token: D(i.string()),
|
|
5163
5167
|
merchant_data: i.string()
|
|
5164
5168
|
}), nl = "Unable to process your credit card. Please contact support for assistance.", ol = (e) => {
|
|
5165
5169
|
const t = co.safeParse(e);
|
|
@@ -5476,12 +5480,12 @@ const fl = B(
|
|
|
5476
5480
|
}
|
|
5477
5481
|
const C = await Tn(o, _);
|
|
5478
5482
|
F("├ Start payment flow result:", C);
|
|
5479
|
-
const
|
|
5483
|
+
const x = C.required_user_actions.find(
|
|
5480
5484
|
(L) => L.type === "cybersource_payer_auth"
|
|
5481
5485
|
);
|
|
5482
|
-
if (
|
|
5486
|
+
if (x) {
|
|
5483
5487
|
F("├ Cybersource 3DS case detected. Going through Cybersource 3DS flow.");
|
|
5484
|
-
const L = co.parse(
|
|
5488
|
+
const L = co.parse(x), te = await lo({
|
|
5485
5489
|
...L,
|
|
5486
5490
|
_unified_cc_action_name: "",
|
|
5487
5491
|
_unified_cc_pccs_id: ""
|
|
@@ -5489,7 +5493,7 @@ const fl = B(
|
|
|
5489
5493
|
_.extra_metadata.cybersource = te;
|
|
5490
5494
|
}
|
|
5491
5495
|
const k = ((y = h.response.headers) == null ? void 0 : y["op-should-use-new-flow"]) !== "true";
|
|
5492
|
-
!S && !
|
|
5496
|
+
!S && !x ? k ? (F("├ Using stripe 3DS flow"), await uo(yl(C))) : (F("├ Using common 3DS flow"), await mo(C, e.baseUrl)) : F("├ Pre-start 3DS is successful, other 3DS flows will be skipped.");
|
|
5493
5497
|
const J = C.cc_pm_id;
|
|
5494
5498
|
if (s.mode === "setup") {
|
|
5495
5499
|
F(`├ Confirming payment flow [cc_pm_id: ${J}]`);
|
|
@@ -5712,10 +5716,10 @@ const fl = B(
|
|
|
5712
5716
|
w
|
|
5713
5717
|
);
|
|
5714
5718
|
Ie("Paypal flow result", b);
|
|
5715
|
-
const C = Xt(b.href, "catt"),
|
|
5719
|
+
const C = Xt(b.href, "catt"), x = Xt(b.href, "approval_session_id"), k = await O(o, {
|
|
5716
5720
|
secure_token: s.token,
|
|
5717
5721
|
checkout_attempt_id: f ? C : void 0,
|
|
5718
|
-
their_pm_id: f ?
|
|
5722
|
+
their_pm_id: f ? x : void 0
|
|
5719
5723
|
});
|
|
5720
5724
|
return Ie("Confirm payment flow result", k), ue({
|
|
5721
5725
|
logPrefix: "paypal",
|
|
@@ -5807,23 +5811,23 @@ const Cl = async ({ context: e, formCallbacks: t }) => {
|
|
|
5807
5811
|
if (!C)
|
|
5808
5812
|
throw Ur("Checkout attempt ID not found in redirect URL:", w.href), new Error("Checkout attempt ID not found in redirect URL");
|
|
5809
5813
|
pe(`Confirming payment flow using vault ID ${b}`);
|
|
5810
|
-
const
|
|
5814
|
+
const x = await O(o, {
|
|
5811
5815
|
secure_token: s.token,
|
|
5812
5816
|
their_pm_id: b,
|
|
5813
5817
|
checkout_attempt_id: _ ? C : void 0
|
|
5814
5818
|
});
|
|
5815
|
-
if (pe("Confirm payment flow result",
|
|
5819
|
+
if (pe("Confirm payment flow result", x), s.mode === "setup")
|
|
5816
5820
|
return {
|
|
5817
5821
|
mode: "setup",
|
|
5818
5822
|
result: {
|
|
5819
|
-
payment_method_id:
|
|
5823
|
+
payment_method_id: x.payment_methods[0].id
|
|
5820
5824
|
}
|
|
5821
5825
|
};
|
|
5822
|
-
if (!
|
|
5823
|
-
throw Ur("Checkout failed, no pay-first success response:",
|
|
5826
|
+
if (!x.pay_first_success_response)
|
|
5827
|
+
throw Ur("Checkout failed, no pay-first success response:", x), new Error("Checkout failed, please try again with another payment method.");
|
|
5824
5828
|
return {
|
|
5825
5829
|
mode: "checkout",
|
|
5826
|
-
result:
|
|
5830
|
+
result: x.pay_first_success_response
|
|
5827
5831
|
};
|
|
5828
5832
|
}
|
|
5829
5833
|
), jr = "ojs-stripe-link-btn", { log__: G, err__: Al } = I("stripe-link"), Il = i.object({
|
|
@@ -6408,7 +6412,7 @@ let qr;
|
|
|
6408
6412
|
const eu = async (e, t) => {
|
|
6409
6413
|
if (typeof window > "u")
|
|
6410
6414
|
return;
|
|
6411
|
-
const r = await import("./index-
|
|
6415
|
+
const r = await import("./index-itSBKTvN.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: o } = r, s = await import("./index-Cy4-6zU_.js"), { FetchInstrumentation: l } = s, c = await import("./index-CtJ_6odH.js"), { ZoneContextManager: u } = c, d = await import("./index-BqrzDvwu.js"), { registerInstrumentations: m } = d, _ = await import("./index-DJFwqrzf.js"), { Resource: f } = _, y = await import("./detect-resources-Urwgta9U.js").then((Ae) => Ae.d), { detectResourcesSync: h } = y, v = await import("./index-Cmhheoif.js"), { OTLPTraceExporter: S } = v, w = await import("./index-CThdiqXg.js"), { B3Propagator: b, B3InjectEncoding: C } = w, x = await import("./index-uEbBPgmd.js"), { BatchSpanProcessor: k } = x;
|
|
6412
6416
|
Yt(`Initializing tracer with version ${e} and baseUrl ${t}`);
|
|
6413
6417
|
const J = tu(t);
|
|
6414
6418
|
Yt(`Using collector URL ${J}`);
|
|
@@ -6981,7 +6985,7 @@ const au = (e, t, r) => {
|
|
|
6981
6985
|
(o = $()) == null || o.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), xi(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
|
|
6982
6986
|
}, this.updateCallbacks = (o) => {
|
|
6983
6987
|
this.formCallbacks.setCallbacks(o);
|
|
6984
|
-
}, ye.assignAsSingleton(this), this.ojsVersion = "0.5.
|
|
6988
|
+
}, ye.assignAsSingleton(this), this.ojsVersion = "0.5.12", this.ojsReleaseVersion = "0.5.12", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = er.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${ze()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ou(), this.deviceToken = On(), Di();
|
|
6985
6989
|
const { framework: r, version: n } = Jl();
|
|
6986
6990
|
wn(this.baseUrl).then((o) => {
|
|
6987
6991
|
if (!Kt.current.isSuccess) {
|
|
@@ -7071,4 +7075,4 @@ export {
|
|
|
7071
7075
|
Ve as t,
|
|
7072
7076
|
ar as u
|
|
7073
7077
|
};
|
|
7074
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA2fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IF9FbGVtZW50VHlwZUVudW1ab2QgPSB6LmVudW0oW1wiY2FyZFwiLCBcImNhcmQtbnVtYmVyXCIsIFwiY2FyZC1leHBpcnlcIiwgXCJjYXJkLWN2Y1wiLCBcImNkZS1icmlkZ2VcIl0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQmFzZUVsZW1lbnRzU3R5bGUgPSB6Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXJTdHlsZTogei5vYmplY3Qoe1xuICAgIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5vYmplY3Qoe1xuICAgIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gICAgY3ZjOiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBUaGUgY2FyZCBpY29uIGF0IHRoZSBzdGFydCBvZiB0aGUgY2FyZCBudW1iZXIgaW5wdXQgZmllbGRcbiAgICogSXQgd29uJ3QgYWZmZWN0IGFmdGVyIHRoZSBpY29uIGNoYW5nZWQgdG8gY2FyZCBicmFuZCBhZnRlciB0aGUgdXNlciBpbnB1dCB0aGUgY2FyZCBudW1iZXJcbiAgICovXG4gIGljb246IHoub2JqZWN0KHtcbiAgICBjb2xvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogei5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6LnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHoub2JqZWN0KHsgZXJyb3I6IHouc3RyaW5nKCkgfSlcbiAgXSkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgaXNMb2FkaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZCQ0KG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkkNCh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkkNChfX3NwcmVhZEFycmF5JDQoW10sIF9fcmVhZCQ0KGVycm9ycykpLCBfX3JlYWQkNChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBlbnZDYWNoZSA9IHt9O1xuY29uc3QgZ2V0Q3VycmVudEVudiA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gIGlmIChlbnZDYWNoZVtiYXNlVXJsXSkge1xuICAgIHJldHVybiBlbnZDYWNoZVtiYXNlVXJsXTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgY29uc3QgZW52ID0gT2pzRW52aXJvbm1lbnQucGFyc2UocmVzcG9uc2UuZW52aXJvbm1lbnQpO1xuICAgIGVudkNhY2hlW2Jhc2VVcmxdID0gZW52O1xuICAgIHJldHVybiBlbnY7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJHUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fJHUoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKSxcbiAgICAgICAga2VlcGFsaXZlOiB0cnVlXG4gICAgICAgIC8vIFRvIHNlbmQgZXZlbnRzIGV2ZW4gaWYgdGhlIHBhZ2UgaXMgdW5sb2FkZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kdShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5jb25zdCB0cmFjayA9IChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpID0+IHtcbiAgbWV0cmljc1F1ZXVlLmFkZEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcyk7XG59O1xuY29uc3QgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlID0gKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59O1xuY29uc3Qgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQucmVhc29uKTtcbiAgdHJhY2soXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQucmVhc29uXG4gIH0pO1xufTtcbmNvbnN0IG9uVW5jYXVnaHRFcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IpO1xuICB0cmFjayhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQuZXJyb3I/Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IGV2ZW50LmVycm9yPy5zdGFjayxcbiAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBldmVudC5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZXZlbnQuY29sbm9cbiAgfSk7XG59O1xubGV0IHBhZ2VMaWZlY3ljbGUgPSBudWxsO1xuY29uc3QgbG9hZFBhZ2VMaWZlY3ljbGUgPSBhc3luYyAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWdlTGlmZWN5Y2xlTW9kdWxlID0gYXdhaXQgaW1wb3J0KCcuL2xpZmVjeWNsZS0hfnswMDN9fi5qcycpO1xuICAgIHBhZ2VMaWZlY3ljbGUgPSBwYWdlTGlmZWN5Y2xlTW9kdWxlLmRlZmF1bHQ7XG4gICAgcmV0dXJuIHBhZ2VMaWZlY3ljbGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbmNvbnN0IHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgdHJhY2soXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZXZlbnQub2xkU3RhdGUsXG4gICAgbmV3X3N0YXRlOiBldmVudC5uZXdTdGF0ZVxuICB9KTtcbiAgaWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGV2ZW50Lm5ld1N0YXRlID09PSBcInBhc3NpdmVcIikge1xuICAgIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbiAgfVxufTtcbmNvbnN0IGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzID0gYXN5bmMgKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG4gIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGxvYWRQYWdlTGlmZWN5Y2xlKCk7XG4gIGlmIChsaWZlY3ljbGUpIHtcbiAgICBsaWZlY3ljbGUuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICB9XG59O1xuY29uc3QgZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgaWYgKGdldFdpbmRvd1NhZmUoKSAmJiBwYWdlTGlmZWN5Y2xlKSB7XG4gICAgcGFnZUxpZmVjeWNsZS5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9jb3JlIHRvby5cbi8qKlxuICogLSBnbG9iYWxUaGlzIChOZXcgc3RhbmRhcmQpXG4gKiAtIHNlbGYgKFdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHdpbmRvdyBpbnN0YW5jZSBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzKVxuICogLSB3aW5kb3cgKGZhbGxiYWNrIGZvciBvbGRlciBicm93c2VyIGltcGxlbWVudGF0aW9ucylcbiAqIC0gZ2xvYmFsIChOb2RlSlMgaW1wbGVtZW50YXRpb24pXG4gKiAtIDxvYmplY3Q+IChXaGVuIGFsbCBlbHNlIGZhaWxzKVxuICovXG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucywgbm8tdW5kZWZcbnZhciBfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgID8gZ2xvYmFsVGhpc1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xudmFyIFZFUlNJT04gPSAnMS45LjAnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHJlID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byB0ZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3ZpZGVkIG93blZlcnNpb24uXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNlbWFudGljczpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gb3duVmVyc2lvbiB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2sob3duVmVyc2lvbikge1xuICAgIHZhciBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIHZhciByZWplY3RlZFZlcnNpb25zID0gbmV3IFNldCgpO1xuICAgIHZhciBteVZlcnNpb25NYXRjaCA9IG93blZlcnNpb24ubWF0Y2gocmUpO1xuICAgIGlmICghbXlWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyByZXR1cm4gbm9vcFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgfVxuICAgIHZhciBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25NYXRjaCA9IGdsb2JhbFZlcnNpb24ubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWdsb2JhbFZlcnNpb25NYXRjaCkge1xuICAgICAgICAgICAgLy8gY2Fubm90IHBhcnNlIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgbm9vcFxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgICAgICBtYWpvcjogK2dsb2JhbFZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgICAgIG1pbm9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICAgICAgcGF0Y2g6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBnbG9iYWxWZXJzaW9uTWF0Y2hbNF0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIGdsb2JhbFZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAoZ2xvYmFsVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2hcbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgIT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWFqb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yID09PSAwKSB7XG4gICAgICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA9PT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vciAmJlxuICAgICAgICAgICAgICAgIG93blZlcnNpb25QYXJzZWQucGF0Y2ggPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5wYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vcikge1xuICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgfTtcbn1cbi8qKlxuICogVGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgQVBJLlxuICpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiB2ZXJzaW9uIG9mIHRoZSBBUEkgcmVxdWVzdGluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2xvYmFsIEFQSVxuICovXG52YXIgaXNDb21wYXRpYmxlID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2soVkVSU0lPTik7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbWFqb3IgPSBWRVJTSU9OLnNwbGl0KCcuJylbMF07XG52YXIgR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIG1ham9yKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoYWxsb3dPdmVycmlkZSA9PT0gdm9pZCAwKSB7IGFsbG93T3ZlcnJpZGUgPSBmYWxzZTsgfVxuICAgIHZhciBhcGkgPSAoX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyB0eXBlKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gVkVSU0lPTikge1xuICAgICAgICAvLyBBbGwgcmVnaXN0ZXJlZCBBUElzIG11c3QgYmUgb2YgdGhlIHNhbWUgdmVyc2lvbiBleGFjdGx5XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGFwaS52ZXJzaW9uICsgXCIgZm9yIFwiICsgdHlwZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgVkVSU0lPTik7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBnbG9iYWxWZXJzaW9uID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb247XG4gICAgaWYgKCFnbG9iYWxWZXJzaW9uIHx8ICFpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKF9iID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3R5cGVdO1xufVxuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICB2YXIgYXBpID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXTtcbiAgICBpZiAoYXBpKSB7XG4gICAgICAgIGRlbGV0ZSBhcGlbdHlwZV07XG4gICAgfVxufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xudmFyIERpYWdDb21wb25lbnRMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlhZ0NvbXBvbmVudExvZ2dlcihwcm9wcykge1xuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2UgfHwgJ0RpYWdDb21wb25lbnRMb2dnZXInO1xuICAgIH1cbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZXJyb3InLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2luZm8nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3ZlcmJvc2UnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdDb21wb25lbnRMb2dnZXI7XG59KCkpO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KG5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDMoW10sIF9fcmVhZCQzKGFyZ3MpLCBmYWxzZSkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBhdmFpbGFibGUgaW50ZXJuYWwgbG9nZ2luZyBsZXZlbHMgZm9yIHRoZSBkaWFnbm9zdGljIGxvZ2dlciwgdGhlIG51bWVyaWMgdmFsdWVzXG4gKiBvZiB0aGUgbGV2ZWxzIGFyZSBkZWZpbmVkIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgaW5pdGlhbCBMb2dMZXZlbCB0byBhdm9pZFxuICogY29tcGF0aWJpbGl0eS9taWdyYXRpb24gaXNzdWVzIGZvciBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBhc3N1bWUgdGhlIG51bWVyaWMgb3JkZXJpbmcuXG4gKi9cbnZhciBEaWFnTG9nTGV2ZWw7XG4oZnVuY3Rpb24gKERpYWdMb2dMZXZlbCkge1xuICAgIC8qKiBEaWFnbm9zdGljIExvZ2dpbmcgbGV2ZWwgc2V0dGluZyB0byBkaXNhYmxlIGFsbCBsb2dnaW5nIChleGNlcHQgYW5kIGZvcmNlZCBsb2dzKSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvciBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IDMwXSA9IFwiRVJST1JcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhIHdhcm5pbmcgc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiV0FSTlwiXSA9IDUwXSA9IFwiV0FSTlwiO1xuICAgIC8qKiBHZW5lcmFsIGluZm9ybWF0aW9uYWwgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiSU5GT1wiXSA9IDYwXSA9IFwiSU5GT1wiO1xuICAgIC8qKiBHZW5lcmFsIGRlYnVnIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkRFQlVHXCJdID0gNzBdID0gXCJERUJVR1wiO1xuICAgIC8qKlxuICAgICAqIERldGFpbGVkIHRyYWNlIGxldmVsIGxvZ2dpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQsIHNob3VsZCBvbmx5IGJlIHNldFxuICAgICAqIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIlZFUkJPU0VcIl0gPSA4MF0gPSBcIlZFUkJPU0VcIjtcbiAgICAvKiogVXNlZCB0byBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgdG8gaW5jbHVkZSBhbGwgbG9nZ2luZyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJBTExcIl0gPSA5OTk5XSA9IFwiQUxMXCI7XG59KShEaWFnTG9nTGV2ZWwgfHwgKERpYWdMb2dMZXZlbCA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIobWF4TGV2ZWwsIGxvZ2dlcikge1xuICAgIGlmIChtYXhMZXZlbCA8IERpYWdMb2dMZXZlbC5OT05FKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gRGlhZ0xvZ0xldmVsLkFMTCkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5BTEw7XG4gICAgfVxuICAgIC8vIEluIGNhc2UgdGhlIGxvZ2dlciBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGxvZ2dlciA9IGxvZ2dlciB8fCB7fTtcbiAgICBmdW5jdGlvbiBfZmlsdGVyRnVuYyhmdW5jTmFtZSwgdGhlTGV2ZWwpIHtcbiAgICAgICAgdmFyIHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgRGlhZ0xvZ0xldmVsLkVSUk9SKSxcbiAgICAgICAgd2FybjogX2ZpbHRlckZ1bmMoJ3dhcm4nLCBEaWFnTG9nTGV2ZWwuV0FSTiksXG4gICAgICAgIGluZm86IF9maWx0ZXJGdW5jKCdpbmZvJywgRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgRGlhZ0xvZ0xldmVsLkRFQlVHKSxcbiAgICAgICAgdmVyYm9zZTogX2ZpbHRlckZ1bmMoJ3ZlcmJvc2UnLCBEaWFnTG9nTGV2ZWwuVkVSQk9TRSksXG4gICAgfTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQyID0gJ2RpYWcnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IGludGVybmFsXG4gKiBkaWFnbm9zdGljIEFQSVxuICovXG52YXIgRGlhZ0FQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIGludGVybmFsIGNvbnN0cnVjdG9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEaWFnQVBJKCkge1xuICAgICAgICBmdW5jdGlvbiBfbG9nUHJveHkoZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDIoW10sIF9fcmVhZCQyKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2luZyBzZWxmIGxvY2FsIHZhcmlhYmxlIGZvciBtaW5pZmljYXRpb24gcHVycG9zZXMgYXMgJ3RoaXMnIGNhbm5vdCBiZSBtaW5pZmllZFxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIERpYWdBUEkgc3BlY2lmaWMgZnVuY3Rpb25zXG4gICAgICAgIHZhciBzZXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAob3B0aW9uc09yTG9nTGV2ZWwgPT09IHZvaWQgMCkgeyBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IERpYWdMb2dMZXZlbC5JTkZPIH07IH1cbiAgICAgICAgICAgIGlmIChsb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIExvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgbWlnaHQgYnJlYWsgdGhlIHVzZXIgYXBwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvZyB0byBzZWxmLiBJZiBhIGxvZ2dlciB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbG9nLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZExvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgdmFyIG5ld0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcigoX2IgPSBvcHRpb25zT3JMb2dMZXZlbC5sb2dMZXZlbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IChfYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPic7XG4gICAgICAgICAgICAgICAgb2xkTG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQyLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgRGlhZ0FQSS5pbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRGlhZ0FQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbnZhciBCYXNlQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29udGV4dCB3aGljaCBpbmhlcml0cyB2YWx1ZXMgZnJvbSBhbiBvcHRpb25hbCBwYXJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDb250ZXh0IGEgY29udGV4dCBmcm9tIHdoaWNoIHRvIGluaGVyaXQgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFzZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgICAvLyBmb3IgbWluaWZpY2F0aW9uXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpOyB9O1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEJhc2VDb250ZXh0O1xufSgpKTtcbi8qKiBUaGUgcm9vdCBjb250ZXh0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29udGV4dCAqL1xudmFyIFJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIE5vb3BDb250ZXh0TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUk9PVF9DT05URVhUO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKF9jb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheSQxKFt0aGlzQXJnXSwgX19yZWFkJDEoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBOb29wQ29udGV4dE1hbmFnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMSA9ICdjb250ZXh0JztcbnZhciBOT09QX0NPTlRFWFRfTUFOQUdFUiA9IG5ldyBOb29wQ29udGV4dE1hbmFnZXIoKTtcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBDb250ZXh0IEFQSVxuICovXG52YXIgQ29udGV4dEFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHRBUEkoKSB7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBDb250ZXh0QVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBDb250ZXh0QVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgbWFuYWdlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgbWFuYWdlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uIChjb250ZXh0TWFuYWdlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgY29udGV4dE1hbmFnZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtjb250ZXh0LCBmbiwgdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBjb250ZXh0IHRvIGEgdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmluZCB0byB0aGUgZXZlbnQgZW1pdHRlciBvciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlciB0byBiaW5kXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChjb250ZXh0LCB0YXJnZXQpO1xuICAgIH07XG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FJDEpIHx8IE5PT1BfQ09OVEVYVF9NQU5BR0VSO1xuICAgIH07XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dEFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhY2VGbGFncztcbihmdW5jdGlvbiAoVHJhY2VGbGFncykge1xuICAgIC8qKiBSZXByZXNlbnRzIG5vIGZsYWcgc2V0LiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBCaXQgdG8gcmVwcmVzZW50IHdoZXRoZXIgdHJhY2UgaXMgc2FtcGxlZCBpbiB0cmFjZSBmbGFncy4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJTQU1QTEVEXCJdID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFRyYWNlRmxhZ3MgfHwgKFRyYWNlRmxhZ3MgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIElOVkFMSURfU1BBTklEID0gJzAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfVFJBQ0VJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogSU5WQUxJRF9UUkFDRUlELFxuICAgIHNwYW5JZDogSU5WQUxJRF9TUEFOSUQsXG4gICAgdHJhY2VGbGFnczogVHJhY2VGbGFncy5OT05FLFxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIE5vblJlY29yZGluZ1NwYW4gaXMgdGhlIGRlZmF1bHQge0BsaW5rIFNwYW59IHRoYXQgaXMgdXNlZCB3aGVuIG5vIFNwYW5cbiAqIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS4gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wIGluY2x1ZGluZyBjb250ZXh0XG4gKiBwcm9wYWdhdGlvbi5cbiAqL1xudmFyIE5vblJlY29yZGluZ1NwYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9uUmVjb3JkaW5nU3Bhbihfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKF9zcGFuQ29udGV4dCA9PT0gdm9pZCAwKSB7IF9zcGFuQ29udGV4dCA9IElOVkFMSURfU1BBTl9DT05URVhUOyB9XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBSZXR1cm5zIGEgU3BhbkNvbnRleHQuXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKF9rZXksIF92YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbiAoX25hbWUsIF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uIChfbGluaykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24gKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24gKF9zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbiAoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChfZW5kVGltZSkgeyB9O1xuICAgIC8vIGlzUmVjb3JkaW5nIGFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBOb25SZWNvcmRpbmdTcGFuLlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfdGltZSkgeyB9O1xuICAgIHJldHVybiBOb25SZWNvcmRpbmdTcGFuO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogc3BhbiBrZXlcbiAqL1xudmFyIFNQQU5fS0VZID0gY3JlYXRlQ29udGV4dEtleSgnT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOJyk7XG4vKipcbiAqIFJldHVybiB0aGUgc3BhbiBpZiBvbmUgZXhpc3RzXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNQQU5fS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEdldHMgdGhlIHNwYW4gZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBvbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICAgIHJldHVybiBnZXRTcGFuKENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG4vKipcbiAqIFNldCB0aGUgc3BhbiBvbiBhIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHVzZSBhcyBwYXJlbnRcbiAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gc2V0IGFjdGl2ZVxuICovXG5mdW5jdGlvbiBzZXRTcGFuKGNvbnRleHQsIHNwYW4pIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTUEFOX0tFWSwgc3Bhbik7XG59XG4vKipcbiAqIFJlbW92ZSBjdXJyZW50IHNwYW4gc3RvcmVkIGluIHRoZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBkZWxldGUgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNQQU5fS0VZKTtcbn1cbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpKTtcbn1cbi8qKlxuICogR2V0IHRoZSBzcGFuIGNvbnRleHQgb2YgdGhlIHNwYW4gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGdldFNwYW4oY29udGV4dCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGFuQ29udGV4dCgpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1RSQUNFSURfUkVHRVggPSAvXihbMC05YS1mXXszMn0pJC9pO1xudmFyIFZBTElEX1NQQU5JRF9SRUdFWCA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaXNWYWxpZFRyYWNlSWQodHJhY2VJZCkge1xuICAgIHJldHVybiBWQUxJRF9UUkFDRUlEX1JFR0VYLnRlc3QodHJhY2VJZCkgJiYgdHJhY2VJZCAhPT0gSU5WQUxJRF9UUkFDRUlEO1xufVxuZnVuY3Rpb24gaXNWYWxpZFNwYW5JZChzcGFuSWQpIHtcbiAgICByZXR1cm4gVkFMSURfU1BBTklEX1JFR0VYLnRlc3Qoc3BhbklkKSAmJiBzcGFuSWQgIT09IElOVkFMSURfU1BBTklEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICogQHJldHVybiB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIChpc1ZhbGlkVHJhY2VJZChzcGFuQ29udGV4dC50cmFjZUlkKSAmJiBpc1ZhbGlkU3BhbklkKHNwYW5Db250ZXh0LnNwYW5JZCkpO1xufVxuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgY29udGV4dEFwaSA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcbi8qKlxuICogTm8tb3AgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBUcmFjZXJ9LlxuICovXG52YXIgTm9vcFRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyKCkge1xuICAgIH1cbiAgICAvLyBzdGFydFNwYW4gc3RhcnRzIGEgbm9vcCBzcGFuLlxuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHsgY29udGV4dCA9IGNvbnRleHRBcGkuYWN0aXZlKCk7IH1cbiAgICAgICAgdmFyIHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudEZyb21Db250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHBhcmVudEZyb21Db250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAobmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICB2YXIgb3B0cztcbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBjdHggIT09IG51bGwgJiYgY3R4ICE9PSB2b2lkIDAgPyBjdHggOiBjb250ZXh0QXBpLmFjdGl2ZSgpO1xuICAgICAgICB2YXIgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICB2YXIgY29udGV4dFdpdGhTcGFuU2V0ID0gc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRBcGkud2l0aChjb250ZXh0V2l0aFNwYW5TZXQsIGZuLCB1bmRlZmluZWQsIHNwYW4pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXI7XG59KCkpO1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAodHlwZW9mIHNwYW5Db250ZXh0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3NwYW5JZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUZsYWdzJ10gPT09ICdudW1iZXInKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyKCk7XG4vKipcbiAqIFByb3h5IHRyYWNlciBwcm92aWRlZCBieSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyXG4gKi9cbnZhciBQcm94eVRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChfbmFtZSwgX29wdGlvbnMsIF9jb250ZXh0LCBfZm4pIHtcbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcnkgdG8gZ2V0IGEgdHJhY2VyIGZyb20gdGhlIHByb3h5IHRyYWNlciBwcm92aWRlci5cbiAgICAgKiBJZiB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyIGhhcyBubyBkZWxlZ2F0ZSwgcmV0dXJuIGEgbm9vcCB0cmFjZXIuXG4gICAgICovXG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBUcmFjZXJQcm92aWRlcn0gd2hpY2ggcmV0dXJucyBhbiBpbXBvdGVudFxuICogVHJhY2VyIGZvciBhbGwgY2FsbHMgdG8gYGdldFRyYWNlcmAuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wLlxuICovXG52YXIgTm9vcFRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgTm9vcFRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BUcmFjZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSX1BST1ZJREVSID0gbmV3IE5vb3BUcmFjZXJQcm92aWRlcigpO1xuLyoqXG4gKiBUcmFjZXIgcHJvdmlkZXIgd2hpY2ggcHJvdmlkZXMge0BsaW5rIFByb3h5VHJhY2VyfXMuXG4gKlxuICogQmVmb3JlIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXJzIHByb3ZpZGVkIGFyZSBOb09wLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXMgYXJlIHByb3ZpZGVkIGZyb20gdGhlIGRlbGVnYXRlLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0IGFmdGVyIHRyYWNlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQsXG4gKiAgIGFsbCB0cmFjZXJzIGFscmVhZHkgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGRlbGVnYXRlIGltcGxlbWVudGF0aW9uLlxuICovXG52YXIgUHJveHlUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgUHJveHlUcmFjZXJ9XG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfVFJBQ0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSB0cmFjZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZS4gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gaXMgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiSU5URVJOQUxcIl0gPSAwXSA9IFwiSU5URVJOQUxcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgc2VydmVyLXNpZGUgaGFuZGxpbmcgb2YgYW4gUlBDIG9yIG90aGVyXG4gICAgICogcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJTRVJWRVJcIl0gPSAxXSA9IFwiU0VSVkVSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHRoZSBjbGllbnQtc2lkZSB3cmFwcGVyIGFyb3VuZCBhbiBSUEMgb3JcbiAgICAgKiBvdGhlciByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNMSUVOVFwiXSA9IDJdID0gXCJDTElFTlRcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgcHJvZHVjZXIgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiUFJPRFVDRVJcIl0gPSAzXSA9IFwiUFJPRFVDRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgY29uc3VtZXIgcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCB8fCAoU3BhbktpbmQgPSB7fSkpO1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xudmFyIFNwYW5TdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChTcGFuU3RhdHVzQ29kZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN0YXR1cy5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIlVOU0VUXCJdID0gMF0gPSBcIlVOU0VUXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yXG4gICAgICogT3BlcmF0b3IgdG8gaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiT0tcIl0gPSAxXSA9IFwiT0tcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiRVJST1JcIl0gPSAyXSA9IFwiRVJST1JcIjtcbn0pKFNwYW5TdGF0dXNDb2RlIHx8IChTcGFuU3RhdHVzQ29kZSA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbnZhciBjb250ZXh0ID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG52YXIgVHJhY2VBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBUcmFjZUFQSSgpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGlzU3BhbkNvbnRleHRWYWxpZDtcbiAgICAgICAgdGhpcy5kZWxldGVTcGFuID0gZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gZ2V0U3BhbjtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBzZXRTcGFuO1xuICAgICAgICB0aGlzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgVHJhY2UgQVBJICovXG4gICAgVHJhY2VBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGdsb2JhbCB0cmFjZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0cmFjZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRyYWNlciBmcm9tIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVHJhY2VBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIHRyYWNlIEFQSSAqL1xudmFyIHRyYWNlID0gVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKTtcblxuY29uc3QgY3JlYXRlQ0RFU3BhbiA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBjZGUuJHtkYXRhLnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgLi4uY2RlQ29ubi50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KGRhdGEucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjcmVhdGVUcmFja2luZ1NwYW4gPSBhc3luYyAob3B0aW9ucywgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke29wdGlvbnMuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogb3B0aW9ucy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBvcHRpb25zLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogb3B0aW9ucy5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogb3B0aW9ucy5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBvcHRpb25zLnJlZmVycmVyLFxuICAgICAgICAuLi5vcHRpb25zLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IG9wdGlvbnMucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bhbi5lbmQoKTtcbiAgfVxufTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUNERVNwYW4oY2RlQ29ubiwgZGF0YSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICAgIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gICAgICB0cmFjayhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yX21lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2VfdHlwZTogZGF0YS50eXBlLFxuICAgICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgICAgIGhhc19mb2N1czogZG9jdW1lbnQuaGFzRm9jdXMoKSxcbiAgICAgICAgaHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgIGRvY3VtZW50X3Zpc2liaWxpdHlfc3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgY29ubmVjdGlvbl9kb3dubGluazogY29ubmVjdGlvbj8uZG93bmxpbmssXG4gICAgICAgIGNvbm5lY3Rpb25fZWZmZWN0aXZlX3R5cGU6IGNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb25fcnR0OiBjb25uZWN0aW9uPy5ydHQsXG4gICAgICAgIGNvbm5lY3Rpb25fc2F2ZV9kYXRhOiBjb25uZWN0aW9uPy5zYXZlRGF0YVxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICAgIH1cbiAgICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5yZXNwb25zZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSk7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnBheWxvYWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4ucmVzdWx0XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3QgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LFxuICAgIFNldHVwQ2hlY2tvdXRSZXNwb25zZSxcbiAgICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiAgKTtcbn07XG5jb25zdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UsXG4gICAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFwcm9tb0NvZGUpIHtcbiAgICAgIHByb21vQ29kZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLFxuICAgIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4gICk7XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UsIFwic2V0dXBfY2hlY2tvdXRcIik7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLCBcInBlcmZvcm1fY2hlY2tvdXRcIik7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZSB9LCByZXNwb25zZU1vZGVsKTtcbiAgY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IHByZXBhcmVQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3Qgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlID0gYXN5bmMgKGNkZUNvbm4sIGVycm9yTWVzc2FnZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7IG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9O1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcXVlcnlDREUoXG4gICAgICBjZGVDb25uLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkIH0sXG4gICAgICBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICByZXR1cm4gXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn07XG5jb25zdCBzZXRVc2VyRGV2aWNlVG9rZW4gPSBhc3luYyAoY2RlQ29ubiwgZGV2aWNlVG9rZW4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogZGV2aWNlVG9rZW4gfSB9LFxuICAgIFNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlXG4gICk7XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6YCwgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBGUkFNRV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcblxuLy8gVGhlc2UgdmFsdWVzIHNob3VsZCBORVZFUiBjaGFuZ2UuIFRoZSB2YWx1ZXMgYXJlIHByZWNpc2VseSBmb3Jcbi8vIGdlbmVyYXRpbmcgVUxJRHMuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIjsgLy8gQ3JvY2tmb3JkJ3MgQmFzZTMyXG5jb25zdCBFTkNPRElOR19MRU4gPSAzMjsgLy8gZnJvbSBFTkNPRElORy5sZW5ndGg7XG5jb25zdCBSQU5ET01fTEVOID0gMTY7XG5jb25zdCBUSU1FX0xFTiA9IDEwO1xuY29uc3QgVElNRV9NQVggPSAyODE0NzQ5NzY3MTA2NTU7IC8vIGZyb20gTWF0aC5wb3coMiwgNDgpIC0gMTtcblxudmFyIFVMSURFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFVMSURFcnJvckNvZGUpIHtcbiAgICBVTElERXJyb3JDb2RlW1wiQmFzZTMySW5jb3JyZWN0RW5jb2RpbmdcIl0gPSBcIkIzMl9FTkNfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlclwiXSA9IFwiREVDX1RJTUVfQ0hBUlwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lTmVnYXRpdmVcIl0gPSBcIkVOQ19USU1FX05FR1wiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkXCJdID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJQUk5HRGV0ZWN0RmFpbHVyZVwiXSA9IFwiUFJOR19ERVRFQ1RcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVUxJREludmFsaWRcIl0gPSBcIlVMSURfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVbmV4cGVjdGVkXCJdID0gXCJVTkVYUEVDVEVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVVSURJbnZhbGlkXCJdID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFVMSURFcnJvckNvZGUgfHwgKFVMSURFcnJvckNvZGUgPSB7fSkpO1xuY2xhc3MgVUxJREVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihgJHttZXNzYWdlfSAoJHtlcnJvckNvZGV9KWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiO1xuICAgICAgICB0aGlzLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByYW5kb21DaGFyKHBybmcpIHtcbiAgICBsZXQgcmFuZCA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKTtcbiAgICBpZiAocmFuZCA9PT0gRU5DT0RJTkdfTEVOKSB7XG4gICAgICAgIHJhbmQgPSBFTkNPRElOR19MRU4gLSAxO1xuICAgIH1cbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmQpO1xufVxuLyoqXG4gKiBEZXRlY3QgdGhlIGJlc3QgUFJORyAocHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKVxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgdG8gY2hlY2sgZnJvbSAoZ2xvYmFsL3dpbmRvdylcbiAqIEByZXR1cm5zIFRoZSBQUk5HIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBSTkcocm9vdCkge1xuICAgIGNvbnN0IHJvb3RMb29rdXAgPSBkZXRlY3RSb290KCk7XG4gICAgY29uc3QgZ2xvYmFsQ3J5cHRvID0gKHJvb3RMb29rdXAgJiYgKHJvb3RMb29rdXAuY3J5cHRvIHx8IHJvb3RMb29rdXAubXNDcnlwdG8pKSB8fFxuICAgICAgICAobnVsbCk7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LmdldFJhbmRvbVZhbHVlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgICAgIGdsb2JhbENyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJbMF0gLyAweGZmO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5yYW5kb21CeXRlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBnbG9iYWxDcnlwdG8ucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAweGZmO1xuICAgIH1cbiAgICBlbHNlIDtcbiAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZGV0ZWN0Um9vdCgpIHtcbiAgICBpZiAoaW5XZWJXb3JrZXIoKSlcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGVuY29kZVJhbmRvbShsZW4sIHBybmcpIHtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHtcbiAgICAgICAgc3RyID0gcmFuZG9tQ2hhcihwcm5nKSArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogRW5jb2RlIHRoZSB0aW1lIHBvcnRpb24gb2YgYSBVTElEXG4gKiBAcGFyYW0gbm93IFRoZSBjdXJyZW50IHRpbWVzdGFtcFxuICogQHBhcmFtIGxlbiBMZW5ndGggdG8gZ2VuZXJhdGVcbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIHRpbWVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlVGltZShub3csIGxlbiA9IFRJTUVfTEVOKSB7XG4gICAgaWYgKGlzTmFOKG5vdykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA+IFRJTUVfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtUSU1FX01BWH06ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5vdykgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGxldCBtb2QsIHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgY3VycmVudExlbiA9IGxlbjsgY3VycmVudExlbiA+IDA7IGN1cnJlbnRMZW4tLSkge1xuICAgICAgICBtb2QgPSBub3cgJSBFTkNPRElOR19MRU47XG4gICAgICAgIHN0ciA9IEVOQ09ESU5HLmNoYXJBdChtb2QpICsgc3RyO1xuICAgICAgICBub3cgPSAobm93IC0gbW9kKSAvIEVOQ09ESU5HX0xFTjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIGluV2ViV29ya2VyKCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBVTElEXG4gKiBAcGFyYW0gc2VlZFRpbWUgT3B0aW9uYWwgdGltZSBzZWVkXG4gKiBAcGFyYW0gcHJuZyBPcHRpb25hbCBQUk5HIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBBIFVMSUQgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogIHVsaWQoKTsgLy8gXCIwMUhOWlhEMDdNNUNFTjVYQTY2RU1aU1JaV1wiXG4gKi9cbmZ1bmN0aW9uIHVsaWQoc2VlZFRpbWUsIHBybmcpIHtcbiAgICBjb25zdCBjdXJyZW50UFJORyA9IGRldGVjdFBSTkcoKTtcbiAgICBjb25zdCBzZWVkID0gRGF0ZS5ub3coKSA7XG4gICAgcmV0dXJuIGVuY29kZVRpbWUoc2VlZCwgVElNRV9MRU4pICsgZW5jb2RlUmFuZG9tKFJBTkRPTV9MRU4sIGN1cnJlbnRQUk5HKTtcbn1cblxuY29uc3QgQ09PS0lFX05BTUUgPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIjtcbmNvbnN0IGdldERldmljZVRva2VuID0gKCkgPT4ge1xuICBjb25zdCBleGlzdGluZ0Nvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgoY29va2llKSA9PiBjb29raWUuaW5jbHVkZXMoQ09PS0lFX05BTUUpKTtcbiAgaWYgKGV4aXN0aW5nQ29va2llKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ29va2llLnNwbGl0KFwiPVwiKVsxXTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IHVsaWQoKTtcbiAgc2V0RGV2aWNlVG9rZW4odG9rZW4pO1xuICByZXR1cm4gdG9rZW47XG59O1xuY29uc3Qgc2V0RGV2aWNlVG9rZW4gPSAodG9rZW4pID0+IHtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgb25lWWVhckZyb21Ob3cuc2V0RnVsbFllYXIob25lWWVhckZyb21Ob3cuZ2V0RnVsbFllYXIoKSArIDEpO1xuICBkb2N1bWVudC5jb29raWUgPSBgJHtDT09LSUVfTkFNRX09JHt0b2tlbn07IHBhdGg9LzsgZXhwaXJlcz0ke29uZVllYXJGcm9tTm93LnRvVVRDU3RyaW5nKCl9YDtcbn07XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnR5cGUgPT09IFwiY2hlY2tib3hcIiA/IGlucHV0LmNoZWNrZWQgOiBpbnB1dC52YWx1ZTtcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBnZW5lcmF0ZUFub255bW91c1ZhbHVlcyA9ICgpID0+IHtcbiAgY29uc3QgaWQgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgZW1haWw6IGB4eF8ke2lkfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2lkfWAsXG4gICAgY291bnRyeTogYFVTYFxuICB9O1xufTtcbmNvbnN0IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLkxJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgaWYgKCFjaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykgcmV0dXJuO1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2V0RnVsbE5hbWUgPSAoZmlyc3ROYW1lLCBsYXN0TmFtZSkgPT4ge1xuICByZXR1cm4gW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBiYW5rU2VsZWN0b3JTdHlsZXMgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7aGVpZ2h0ID8/IFwiNjAwcHhcIn0gLSA0OHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5iYW5rLXNlbGVjdG9yLWhlYWRlciB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5iYW5rLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG4uYmFuay1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYm9yZGVyOiAycHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4uYmFuay1pdGVtOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstaXRlbTphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG4uYmFuay1sb2dvIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XG59XG4uYmFuay1sb2dvLXBsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBjb2xvcjogIzZjNzU3ZDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5iYW5rLWluZm8ge1xuICBmbGV4OiAxO1xufVxuLmJhbmstZGlzcGxheS1uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzFhMWExYTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuLmJhbmstbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNmM3NTdkO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgaWQsIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBuYW1lIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwiJHtpZCA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHt0aXRsZSA/PyBcIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIn1cIiBhbGxvdz1cInBheW1lbnRcIiBuYW1lPVwiJHtuYW1lID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG59O1xuY29uc3QgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciA9IChiYW5rcywgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlIH0gPSBvcHRpb25zID8/IHt9O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgIGNvbnN0IGJhbmtMaXN0SHRtbCA9IGJhbmtzLm1hcCgoYmFuaywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGxvZ29IdG1sID0gYmFuay5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke2JhbmsucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7YmFuay5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7YmFuay5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2luZGV4fVwiPlxuICAgICAgICAgICR7bG9nb0h0bWx9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaW5mb1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstZGlzcGxheS1uYW1lXCI+JHtiYW5rLmRpc3BsYXlfbmFtZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLW5hbWVcIj4ke2JhbmsuYmFua19uYW1lfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7YmFua1NlbGVjdG9yU3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke3RpdGxlID8/IFwiU2VsZWN0IHlvdXIgYmFua1wifTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbGlzdFwiPlxuICAgICAgICAgICAgICAke2JhbmtMaXN0SHRtbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gICAgY29uc3QgYmFua0l0ZW1zID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbmstaXRlbVwiKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChob3N0KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSk7XG4gICAgYmFua0l0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShiYW5rc1tpbmRleF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgfSk7XG59O1xuY29uc3QgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0gPSAocGF5bWVudE1ldGhvZFR5cGUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBiYXNlVXJsIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhcHAvZGlyZWN0X2RlYml0L21pY3JvX2RlcG9zaXQvP3R5cGU9JHtwYXltZW50TWV0aG9kVHlwZX1gLCBiYXNlVXJsKS50b1N0cmluZygpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aCwgaGVpZ2h0LCB0aXRsZTogXCJNaWNybyBEZXBvc2l0IEZvcm1cIiB9KTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgJiYgcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICBpZiAoXCJlcnJvclwiIGluIHJlc3BvbnNlLnBheWxvYWQpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHJlc3BvbnNlLnBheWxvYWQuZXJyb3IpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGZhaWxlZFwiKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKFxuICAgICAgZWxlbWVudHMuaWZyYW1lLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4sXG4gICAgICBcIm1pY3JvLWRlcG9zaXQtc3RhdHVzXCIsXG4gICAgICBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZVxuICAgICk7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxIYW5kbGVDYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgY29uc3Qgd3JhcHBlZEhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycygpO1xuICAgICAgb3JpZ2luYWxIYW5kbGVDYW5jZWwoKTtcbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHdyYXBwZWRIYW5kbGVDYW5jZWwpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvclN0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luLCB0eXBlLCByZXNwb25zZU1vZGVsKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsLCBiYXNlVXJsLCBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgZnJhbWVUaXRsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwsIHsgd2lkdGg6IGZyYW1lV2lkdGgsIGhlaWdodDogZnJhbWVIZWlnaHQsIHRpdGxlOiBmcmFtZVRpdGxlIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyk7XG4gICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKFxuICAgICAgZWxlbWVudHMuaWZyYW1lLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4sXG4gICAgICBcInBpbmctM2RzLXN0YXR1c1wiLFxuICAgICAgUGluZzNEU1N0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcyk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaHJlZjogcmVzdWx0LmhyZWZcbiAgfTtcbn07XG5jb25zdCBvcGVuUG9wdXBXaW5kb3cgPSAocG9wdXBOYW1lLCB1cmwpID0+IHtcbiAgY29uc3QgcG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgfVxuICByZXR1cm4gcG9wdXBXaW5kb3c7XG59O1xuY29uc3Qgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwb3B1cE5hbWUsIGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4sIHVybCkgPT4ge1xuICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwb3B1cFdpbmRvdyA9IG9wZW5Qb3B1cFdpbmRvdyhwb3B1cE5hbWUsIHVybCk7XG4gICAgY29uc3QgcG9sbGluZyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkKGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4pO1xuICAgICAgICBpZiAodmVyaWZ5UmVzdWx0LnByZXNlbnQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICAgIHBvcHVwV2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGhyZWY6IHZlcmlmeVJlc3VsdC5ocmVmIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcHVwV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICByZWplY3QoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59O1xuXG5jb25zdCBkZXRlY3RMYW5ndWFnZSA9ICgpID0+IHtcbiAgY29uc3QgbGFuZ3VhZ2VzID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IGxhbmd1YWdlID0gbGFuZ3VhZ2VzPy5bMF07XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpWzBdO1xuICB9XG4gIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHQsIGVycl9fOiBlcnJfXyRzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IGNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gIHBheW1lbnRfbWV0aG9kXG59KSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbmFsRmllbGRzID0ge307XG4gIGlmIChwYXltZW50X21ldGhvZCA9PT0gXCJhY2hcIikge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyR0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kcyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRzLCBlcnJfXzogZXJyX18kciB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcztcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kcihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kcyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRyLCBlcnJfXzogZXJyX18kcSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyRxKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuY29uc3QgY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSA9IChmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBmaWVsZHMuZW1haWwsXG4gICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZmllbGRzLmxhc3ROYW1lLFxuICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBmaWVsZHMuZmlyc3ROYW1lLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMpLFxuICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncylcbiAgfTtcbn07XG5jb25zdCBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogbG9nX18yIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhhcmdzLmxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbik7XG4gIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBsb2dfXzIoYFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5gKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGF3YWl0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFyZ3MudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBsb2dfXzIoYFVzaW5nIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBpZiAoIWFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyRxKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgYXJncy5jb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzKSxcbiAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmAsIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICB9XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0gei5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuY29uc3QgbG9hZFNjcmlwdCA9ICh7XG4gIHNjcmlwdElkLFxuICBzcmMsXG4gIGNoZWNrTG9hZGVkRm5cbn0pID0+IHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpO1xuICAgIGlmIChjaGVja0xvYWRlZEZuKCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nU2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBleGlzdGluZ1NjcmlwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdChiYXNlUmVxdWVzdCkgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZ2V0Q3VycmVudEVudihiYXNlVXJsKTtcbiAgcmV0dXJuIGVudiA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gYXN5bmMgKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTJdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTNdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSA9IGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdIHx8IGJpbGxpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgaWYgKHNoaXBwaW5nQWRkcmVzcykge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMyB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldIHx8IHNoaXBwaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gfHwgc2hpcHBpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldIHx8IHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHEsIGVycl9fOiBlcnJfXyRwIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1iYWNzXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QkFDU0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kcShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHEoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyRxKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRxKGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRxKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgZGlyZWN0RGViaXREYXRhID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiBtaWNyb0RlcG9zaXREYXRhPy5zb3J0X2NvZGUsXG4gICAgICAgIGFkZHJlc3M6IHsgLi4uYmlsbGluZ0FkZHJlc3MsIHRvd246IGJpbGxpbmdBZGRyZXNzLmNpdHksIHBvc3Rjb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZSB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRxKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkJBQ1MgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kcShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWJhY3NcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kcChcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRwLCBlcnJfXzogZXJyX18kbyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZWZ0XCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4RUZURmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHAoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHAoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcChcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBpbnN0aXR1dGlvbl9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LnRyYW5zaXRfbnVtYmVyLFxuICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXJcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiBkaXJlY3REZWJpdERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kcChcIkVGVCB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRwKGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG8oXCJFRlQgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRvLCBlcnJfXzogZXJyX18kbiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtc2VwYVwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleFNFUEFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJG8oXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRvKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJG8oXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgYXZhaWxhYmxlQmFua3MgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBzZWxlY3RlZEJhbms7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiBhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kbyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiBtaWNyb0RlcG9zaXREYXRhPy5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJG8oXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiU0VQQSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRvKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtc2VwYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRtIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJG0oZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kbShlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRtKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQyID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/PyB2b2lkIDAsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbFxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgaW5pdGlhbFByZXZpZXcsXG4gICAgcHJlZmlsbCxcbiAgICBkZWZhdWx0TGFiZWxcbiAgfSk7XG4gIGxldCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXG4gICAgICBcImVtYWlsXCIsXG4gICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzID8gW1wicG9zdGFsQWRkcmVzc1wiXSA6IFtdXG4gICAgXSxcbiAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgXSxcbiAgICB0b3RhbCxcbiAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgdG90YWwsXG4gICAgICBwcmVmaWxsXG4gICAgfSlcbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIC4uLnBheW1lbnRSZXF1ZXN0LFxuICAgICAgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHBheW1lbnRSZXF1ZXN0KVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcGF5bWVudFJlcXVlc3QgPSB7IC4uLnBheW1lbnRSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfTtcbiAgfVxuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbmNvbnN0IEFkeWVuTG9jYWxlID0gei5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xuY29uc3QgeyBsb2dfXzogbG9nX18kbSwgZXJyX186IGVycl9fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tY2NcIik7XG5jb25zdCBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQyID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kbChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBkZWNvZGVBZHllbkFjdGlvbiA9IChhY3Rpb24pID0+IHtcbiAgY29uc3QgZGVzZXJpYWxpemVkID0gSlNPTi5wYXJzZShhY3Rpb24pO1xuICByZXR1cm4gZGVzZXJpYWxpemVkO1xufTtcbmNvbnN0IGlzQWR5ZW5BdmFpbGFibGUgPSAoKSA9PiB7XG4gIHJldHVybiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvd1tcIkFkeWVuV2ViXCJdO1xufTtcbmNvbnN0IGdldEFkeWVuQ2hlY2tvdXQgPSBhc3luYyAoKSA9PiB7XG4gIGxvZ19fJG0oXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgZXJyX18kbChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgbG9nX18kbShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICByZXR1cm4gd2luZG93W1wiQWR5ZW5XZWJcIl1bXCJBZHllbkNoZWNrb3V0XCJdO1xufTtcbmNvbnN0IGhhbmRsZUFkeWVuM2RzID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IGhlYWRlcnMsIGxvY2FsZSwgY291bnRyeUNvZGUsIGNvbXBvbmVudCwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFjdGlvbiA9IGRlY29kZUFkeWVuQWN0aW9uKGhlYWRlcnNbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICBsb2dfXyRtKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX1gKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJG0oXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uUGF5bWVudEZhaWxlZCA9IChzdGF0ZSkgPT4ge1xuICAgICAgZXJyX18kbChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBzdGF0ZSk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBlcnJfXyRsKFwiQWR5ZW4gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBvbkFkZGl0aW9uYWxEZXRhaWxzID0gKHN0YXRlLCBfLCBfXykgPT4ge1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IHN0YXRlLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgZ2V0QWR5ZW5DaGVja291dCgpLnRoZW4oXG4gICAgICAoYWR5ZW5DaGVja291dCkgPT4gYWR5ZW5DaGVja291dCh7XG4gICAgICAgIGNsaWVudEtleTogaGVhZGVyc1tcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBoZWFkZXJzW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgY291bnRyeUNvZGUsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHMsXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZCxcbiAgICAgICAgb25FcnJvclxuICAgICAgfSlcbiAgICApLnRoZW4oKGNoZWNrb3V0KSA9PiB7XG4gICAgICBjaGVja291dC5jcmVhdGVGcm9tQWN0aW9uKGFjdGlvbiwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoY29tcG9uZW50KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZGV0ZXJtaW5lTG9jYWxlID0gKHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgYnJvd3NlckxvY2FsZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlO1xuICBjb25zdCBsb2NhbGUgPSBwcmVmaWxsTG9jYWxlID8/IGJyb3dzZXJMb2NhbGU7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW5Mb2NhbGUuc2FmZVBhcnNlKGxvY2FsZSk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGwoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke2xvY2FsZX0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCk7XG4gICAgcmV0dXJuIFwiZW4tVVNcIjtcbiAgfVxuICBsb2dfXyRtKGBSZXNvbHZlZCBsb2NhbGU6ICR7cGFyc2VSZXN1bHQuZGF0YX1gKTtcbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1hZHllbi1hY3Rpb25cIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5BZHllbjNkc0Zsb3cgPSBhc3luYyAoY291bnRyeUNvZGUsIGVycm9yUmVzcG9uc2VIZWFkZXJzLCBwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQyKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29tcG9uZW50LmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBpZnJhbWUucmVwbGFjZVdpdGgoY29tcG9uZW50KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQWR5ZW4zZHMoe1xuICAgIGhlYWRlcnMsXG4gICAgbG9jYWxlOiBkZXRlcm1pbmVMb2NhbGUocHJlZmlsbExvY2FsZSksXG4gICAgY291bnRyeUNvZGUsXG4gICAgY29tcG9uZW50LFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBpZiAoIXJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIH1cbiAgICBsb2dfXyRtKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuY29uc3QgQXBwbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoXG4gICAgICAgIG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kbChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGssIGVycl9fOiBlcnJfXyRrIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBZHllbkFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRrKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGsoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRrKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5BcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGsoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ucGF5bWVudFJlcXVlc3QudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGsoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRqLCBlcnJfXzogZXJyX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRqKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kaihcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGooXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaihcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5hZHllbkdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaihcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kaihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGooXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogZ2V0RnJhdWRNZXRhZGF0YSgpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kaihcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGooXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IG1ldGhvZCBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRqKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRpLCBlcnJfXzogZXJyX18kaSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYWNoXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QUNIRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJGkoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiYWNoX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGkoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kaShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRpKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kaShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRpKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRoKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRoKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRoKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCByZXF1aXJlZFVzZXJBY3Rpb25zID0gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXTtcbiAgICBjb25zdCBjb25zZW50SWQgPSByZXF1aXJlZFVzZXJBY3Rpb25zLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJGgoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhPy5yZWRpcmVjdF91cmwgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkKSB7XG4gICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCk7XG4gICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgfVxuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGcoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGcoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGcoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnBheW1lbnRSZXF1ZXN0LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGgoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRmLCBlcnJfXzogZXJyX18kZyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRnKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGcoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRmKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZyhcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGcoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRmKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGYoXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGYoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGYoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGYoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGYoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRmKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGUsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtYXBwbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsLFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHBheW1lbnRSZXF1ZXN0LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kZihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGQsIGVycl9fOiBlcnJfXyRlIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kZChcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kZChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYywgZXJyX186IGVycl9fJGQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kZChkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kYyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dmF1bHRJZH1dYCk7XG4gICAgcmV0dXJuIHZhdWx0SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGQoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBwYXJzZUFyZ0Zyb21IcmVmID0gKGhyZWYsIGFyZ05hbWUpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KGFyZ05hbWUpO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdmF1bHRJZCxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjeWJzLWZyYW1lXCIpO1xuY29uc3QgYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciA9IChwb3N0VXJsLCBhY2Nlc3NUb2tlbikgPT4ge1xuICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICBpZnJhbWUubmFtZSA9IFwiY2FyZGluYWxfY29sbGVjdGlvbl9pZnJhbWVcIjtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgaWZyYW1lLnN0eWxlLndpZHRoID0gXCIxMHB4XCI7XG4gIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHBvc3RVcmw7XG4gIGZvcm0ubWV0aG9kID0gXCJQT1NUXCI7XG4gIGZvcm0udGFyZ2V0ID0gaWZyYW1lLm5hbWU7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgaW5wdXQubmFtZSA9IFwiSldUXCI7XG4gIGlucHV0LnZhbHVlID0gYWNjZXNzVG9rZW47XG4gIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIGNvbnN0IGRldGFjaCA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChmb3JtKTtcbiAgfTtcbiAgcmV0dXJuIHsgZm9ybSwgZGV0YWNoIH07XG59O1xuY29uc3QgcnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24gPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgeyBwb3N0VXJsLCBhY2Nlc3NUb2tlbiB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChwb3N0VXJsKS5vcmlnaW47XG4gICAgY29uc3QgeyBmb3JtLCBkZXRhY2ggfSA9IGF0dGFjaERldmljZURhdGFDb2xsZWN0b3IocG9zdFVybCwgYWNjZXNzVG9rZW4pO1xuICAgIGxvZ19fJGIoXCJBdHRhY2hlZCBkZXZpY2UgZGF0YSBjb2xsZWN0b3JcIik7XG4gICAgY29uc3QgaGFuZGxlQ29sbGVjdGlvbkV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSBleHBlY3RlZE9yaWdpbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgIGxvZ19fJGIoXCJSZWNlaXZlZCBldmVudCBmcm9tIGRldmljZSBkYXRhIGNvbGxlY3RvcjpcIiwgZGF0YSk7XG4gICAgICBpZiAoZGF0YVtcIk1lc3NhZ2VUeXBlXCJdID09PSBcInByb2ZpbGUuY29tcGxldGVkXCIpIHtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZGV0YWNoKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlQ29sbGVjdGlvbkV2ZW50KTtcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlQ29sbGVjdGlvbkV2ZW50KTtcbiAgICAgIGxvZ19fJGIoXCJBdHRhY2hlZCBsaXN0ZW5lciB0byB3aW5kb3dcIik7XG4gICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgbG9nX18kYihcIlN1Ym1pdHRlZCBmb3JtXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJfXyRjKFwiRXJyb3Igc3VibWl0dGluZyBmb3JtOlwiLCBlcnJvcik7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuUGF5ZXJBdXRoID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybCwgYWNjZXNzVG9rZW4sIG1lcmNoYW50RGF0YSwgaWZyYW1lLCBob3N0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgZm9ybS5hY3Rpb24gPSBzdGVwVXBVcmw7XG4gIGZvcm0ubWV0aG9kID0gXCJQT1NUXCI7XG4gIGZvcm0udGFyZ2V0ID0gaWZyYW1lLm5hbWU7XG4gIGNvbnN0IHRva2VuSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIHRva2VuSW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIHRva2VuSW5wdXQubmFtZSA9IFwiSldUXCI7XG4gIHRva2VuSW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgY29uc3QgbWRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgbWRJbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgbWRJbnB1dC5uYW1lID0gXCJNRFwiO1xuICBtZElucHV0LnZhbHVlID0gbWVyY2hhbnREYXRhO1xuICBmb3JtLmFwcGVuZENoaWxkKHRva2VuSW5wdXQpO1xuICBmb3JtLmFwcGVuZENoaWxkKG1kSW5wdXQpO1xuICBob3N0LmFwcGVuZENoaWxkKGZvcm0pO1xuICByZXR1cm4gZm9ybTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGEsIGVycl9fOiBlcnJfXyRiIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnNcIik7XG5jb25zdCBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6LnN0cmluZygpLFxuICBhY2Nlc3NfdG9rZW46IHouc3RyaW5nKCksXG4gIGRkX3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBkZF90b2tlbjogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXJjaGFudF9kYXRhOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEZSSUVORExZX0VSUiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQuc2FmZVBhcnNlKHVzZXJBY3Rpb24pO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRiKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihGUklFTkRMWV9FUlIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgcmV0dXJuIHVzZXJBY3Rpb25bXCJ0eXBlXCJdID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIjtcbn07XG5jb25zdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChzdGVwVXBVcmwpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGEoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgbG9nX18kYShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGxvZ19fJGEoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBzdGF0dXMpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIGNsZWFudXBQb2xsaW5nKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGV4cGVjdGVkT3JpZ2luLCBcInBpbmctM2RzLXN0YXR1c1wiLCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIGNvbnN0IGNsZWFudXBQb2xsaW5nID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIHJlc29sdmUoeyBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsIGNsZWFudXAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgY29uc3QgZm9ybSA9IHJ1blBheWVyQXV0aCh7XG4gICAgICBzdGVwVXBVcmwsXG4gICAgICBhY2Nlc3NUb2tlbixcbiAgICAgIG1lcmNoYW50RGF0YSxcbiAgICAgIGlmcmFtZSxcbiAgICAgIGhvc3RcbiAgICB9KTtcbiAgICBmb3JtLnN1Ym1pdCgpO1xuICB9KTtcbn07XG5jb25zdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3cgPSBhc3luYyAodXNlckFjdGlvbikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXNwb25zZUhlYWRlcnModXNlckFjdGlvbik7XG4gIGNvbnN0IHsgc3RlcF91cF91cmwsIGFjY2Vzc190b2tlbiwgZGRfdXJsLCBkZF90b2tlbiwgbWVyY2hhbnRfZGF0YSB9ID0gcGF5bG9hZDtcbiAgaWYgKGRkX3VybCAmJiBkZF90b2tlbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbih7XG4gICAgICBwb3N0VXJsOiBkZF91cmwsXG4gICAgICBhY2Nlc3NUb2tlbjogZGRfdG9rZW5cbiAgICB9KTtcbiAgICBsb2dfXyRhKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGNvbGxlY3Rpb25SZXN1bHQuU3RhdHVzKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJfXyRiKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIH1cbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBsb2dfXyRhKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ3liZXJzb3VyY2UzZHMoe1xuICAgIHN0ZXBVcFVybDogc3RlcF91cF91cmwsXG4gICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICBtZXJjaGFudERhdGE6IG1lcmNoYW50X2RhdGEsXG4gICAgaWZyYW1lLFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBsb2dfXyRhKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBzdHJpcGVMb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtY2NcIik7XG5jb25zdCBTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHN0cmlwZUNDM0RTRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgdHJhY2soXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgdHJhY2soXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5jb25zdCBwYXJzZVVzZXJGRVBheWxvYWQgPSAocGF5bG9hZCkgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQuc2FmZVBhcnNlKHBheWxvYWQpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShwYXJzZWQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogcGFyc2VkLmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHBhcnNlZC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiBwYXJzZWQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn07XG5cbmNvbnN0IE1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyA9IDQ7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ5LCBlcnJfXzogZXJyX18kYSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJ1bmlmaWVkLWNjXCIpO1xuY29uc3QgdW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93ID0gYXN5bmMgKHtcbiAgY29udGV4dCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBub25DZGVGb3JtSW5wdXRzLFxuICBmb3JtQ2FsbGJhY2tzLFxuICBjdXN0b21QYXJhbXNcbn0pID0+IHtcbiAgbG9nX18kOShg4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICBsb2dfXyQ5KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBnZXREZXZpY2VUb2tlbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiB0cnVlLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudFJvdXRlSWRcbiAgfTtcbiAgZXJyX18kYShjdXN0b21QYXJhbXMsIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kOShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB0b2tlbml6ZUNhcmRSZXN1bHRzID0gYXdhaXQgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyhjdXN0b21QYXJhbXMuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzKHRva2VuaXplQ2FyZFJlc3VsdHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gIGxvZ19fJDkoYOKUnCBzdGFydFBmIHJlc3VsdGAsIHN0YXJ0UGZSZXN1bHQpO1xuICBpZiAoc3RhcnRQZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJldHVyblN1Y2Nlc3NSZXN1bHQocHJlZmlsbC5tb2RlLCBzdGFydFBmUmVzdWx0KTtcbiAgfVxuICBpZiAoIXN0YXJ0UGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIH1cbiAgcmV0dXJuIHJ1bkNvbmZpcm1Mb29wKHtcbiAgICBjb250ZXh0LFxuICAgIHByZWZpbGwsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjb21tb25DaGVja291dFBhcmFtcyxcbiAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgIHN0YXJ0UGZSZXN1bHQsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IHN0YXJ0UGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZFxuICB9KTtcbn07XG5jb25zdCBydW5Db25maXJtTG9vcCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZFxuICB9ID0gcGFyYW1zO1xuICBsZXQgcGZSZXN1bHQgPSBzdGFydFBmUmVzdWx0O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUzsgaSsrKSB7XG4gICAgbG9nX18kOShg4pScIFJ1bm5pbmcgY29uZmlybSBsb29wIGl0ZXJhdGlvbiAke2l9YCk7XG4gICAgdHJhY2soXCJ1bmlmaWVkX2NjX2NvbmZpcm1fbG9vcF9pdGVyYXRpb25cIiwgeyBpdGVyYXRpb246IGkgfSk7XG4gICAgY29uc3QgeyB1c2VyQWN0aW9uIH0gPSB2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbihwZlJlc3VsdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJBY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5SZXF1aXJlZFVzZXJBY3Rpb24oY29udGV4dC5iYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YSxcbiAgICAgICAgLi4udXNlckFjdGlvblJlc3VsdC5tZXRhZGF0YUZvckNvbmZpcm1TdGVwXG4gICAgICB9O1xuICAgICAgbG9nX18kOShg4pScIE5ldyBleHRyYSBtZXRhZGF0YWAsIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGVycl9fJGEoYOKUnCBFcnJvciBpbiBydW5uaW5nIHVzZXIgYWN0aW9uIGluIGl0ZXJhdGlvbiAke2l9LiBDb250aW51aW5nIHRvIGNvbmZpcm0gc3RlcC4uLmAsIGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsIGl0ZXJhdGlvbjogaSB9KTtcbiAgICB9XG4gICAgcGZSZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogY2hlY2tvdXRBdHRlbXB0SWQsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhXG4gICAgfSk7XG4gICAgbG9nX18kOShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke2l9KWAsIHBmUmVzdWx0KTtcbiAgICBpZiAocGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJldHVyblN1Y2Nlc3NSZXN1bHQocHJlZmlsbC5tb2RlLCBwZlJlc3VsdCk7XG4gICAgfVxuICB9XG4gIHRyYWNrKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHBmUmVzdWx0LmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgY29uZmlybVBGUmVzdWx0OiBwZlJlc3VsdFxuICB9KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn07XG5jb25zdCBydW5SZXF1aXJlZFVzZXJBY3Rpb24gPSBhc3luYyAoYmFzZVVybCwgdXNlckFjdGlvbiwgcHJlZmlsbCwgbm9uQ2RlRm9ybUlucHV0cykgPT4ge1xuICBpZiAodXNlckFjdGlvbi5fdW5pZmllZF9jY19hY3Rpb25fbmFtZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgIGlmICh1c2VyQWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKSB7XG4gICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VVc2VyRkVQYXlsb2FkKHVzZXJBY3Rpb24pKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGJhc2VVcmwsIHVzZXJBY3Rpb24pO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHModXNlckFjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHVzZXJBY3Rpb24sXG4gICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhZHllbjogYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IH0gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzKHVzZXJBY3Rpb24pKSB7XG4gICAgICBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3codXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZkxlZ2FjeTNEU1BhdGgodXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyh7IHJlcXVpcmVkX3VzZXJfYWN0aW9uczogW3VzZXJBY3Rpb25dIH0sIGJhc2VVcmwpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgM0RTIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgfVxufTtcbmNvbnN0IGNoZWNrSWZMZWdhY3kzRFNQYXRoID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgdHJ5IHtcbiAgICBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShbdXNlckFjdGlvbl0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uID0gKHBmUmVzdWx0KSA9PiB7XG4gIGlmICghcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgaWYgKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgdXNlckFjdGlvbiA9IFVzZXJBY3Rpb25GRVBheWxvYWQuc2FmZVBhcnNlKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gIGlmICghdXNlckFjdGlvbi5zdWNjZXNzKSB7XG4gICAgZXJyX18kYShcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gICAgZXJyX18kYShcIlBhcnNpbmcgZXJyb3JcIiwgdXNlckFjdGlvbi5lcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5kYXRhXG4gIH07XG59O1xuY29uc3QgcmV0dXJuU3VjY2Vzc1Jlc3VsdCA9IChwcmVmaWxsTW9kZSwgcGZSZXN1bHQpID0+IHtcbiAgaWYgKHByZWZpbGxNb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBjb25zdCBwYXltZW50TWV0aG9kSWQgPSBwZlJlc3VsdC5jY19wbV9pZCA/PyBwZlJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXS5pZDtcbiAgICBpZiAoIXBheW1lbnRNZXRob2RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBwYXltZW50X21ldGhvZF9pZDogcGF5bWVudE1ldGhvZElkXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGDilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJhY2soXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgICBjb25zdCB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gPSBwcmVmaWxsLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncz8uW1widW5pZmllZF9jY1wiXSA/PyAwO1xuICAgIGxvZ19fJDgoYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZCh1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gKiAxMDApfSVgKTtcbiAgICBjb25zdCByb2xsID0gTWF0aC5yYW5kb20oKTtcbiAgICBjb25zdCB1c2VVbmlmaWVkQ0NGbG93ID0gcm9sbCA8IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbztcbiAgICBjb25zdCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSA9IHtcbiAgICAgIHJvbGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8sXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93XG4gICAgfTtcbiAgICBpZiAodXNlVW5pZmllZENDRmxvdykge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7cm9sbH0gdnMgJHt1bmlmaWVkQ0NSb2xsb3V0UmF0aW99KWApO1xuICAgICAgdHJhY2soXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICAgIHJldHVybiB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3coe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtcyxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSk7XG4gICAgfVxuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiBmYWxzZSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kOChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQ4KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDgoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyQ4KGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kOChcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kOChg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kOChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kOChg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kOChg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJDkoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kOShlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kOChg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kOChg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDgoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ3LCBlcnJfXzogZXJyX18kOCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJDcoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kNyhgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kNyhgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNyhgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyQ3KFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyQ3KFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kNyhcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kNyhcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kNyhcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNyhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyQ3KGBDb25maXJtIHJlc3VsdDogJHtjb25maXJtUmVzdWx0fWApO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNyhgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgbG9nX18kNyhg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICBsb2dfXyQ3KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDcoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kOChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNiwgZXJyX186IGVycl9fJDcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicGF5cGFsXCIpO1xuY29uc3QgUGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3QoeyBjbGllbnRfaWQ6IHouc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuY29uc3QgaW5pdFBheXBhbEZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3QgcGF5cGFsQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBheXBhbENwbSk7XG4gIGlmICghcGF5cGFsQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5QYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJDYoYFJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IHsgaXNBbm9ueW1vdXMsIHVzZVJlZGlyZWN0RmxvdyB9ID0gY3VzdG9tUGFyYW1zLnNldHRpbmdzID8/IHt9O1xuICAgICAgbG9nX18kNihgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgICAgY29uc3QgY3BtID0gUGF5cGFsQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgICBsb2dfXyQ2KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uaXNBbm9ueW1vdXMgPyBnZW5lcmF0ZUFub255bW91c1ZhbHVlcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGxvZ19fJDYoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICAgIGNvbnN0IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3cgPSB2NCgpO1xuICAgICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjcG0ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IHVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgICB9LFxuICAgICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKHVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgICBsb2dfXyQ2KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICAgIHJlZGlyZWN0VXJsXG4gICAgICApO1xuICAgICAgbG9nX18kNihcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICAgIGNvbnN0IGFwcHJvdmFsU2Vzc2lvbklkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBpc1BheUZpcnN0RmxvdyA/IGFwcHJvdmFsU2Vzc2lvbklkIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDYoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjcG0sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBpc1BheUZpcnN0Rmxvd1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LXBheXBhbFwiKTtcbmNvbnN0IFBvY2t5dFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRQb2NreXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBvY2t5dFBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQb2NreXRQYXlwYWxDcG0pO1xuICBpZiAoIXBvY2t5dFBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwb2NreXRQYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgc2V0dGluZ3M/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgfSxcbiAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgfTtcbiAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICBsb2dfXyQ1KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ1KFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgIGxvZ19fJDUoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgcmVkaXJlY3RVcmxcbiAgICApO1xuICAgIGxvZ19fJDUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICAgIGVycl9fJDYoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgfVxuICAgIGxvZ19fJDUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kNihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kNChgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ0KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kNChgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDMoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQzKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNChgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDMoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICBjb25zdCBydW5TdHJpcGVQckZsb3cyID0gKHByb3ZpZGVyLCBwYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICAgIHByLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5IH0sXG4gICAgICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3ckMSA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMyhgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHIgPSBpbml0UmVzdWx0LnByO1xuICAgIGlmIChjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBsb2dfXyQzKGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgY29uc3QgYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9IHR5cGVvZiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIgPyBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgYXBwbGVQYXlQYXltZW50UmVxdWVzdCwgb3ZlcnJpZGUubGFiZWwpO1xuICAgIH1cbiAgICBsb2dfXyQzKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kMyhgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDMoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvclBSKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBsb2dfXyQzKGBDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uYCk7XG4gICAgYXdhaXQgY29uZmlybVN0cmlwZVByUE0obmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kMyhgQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQzKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQucGF5bWVudE1ldGhvZD8uYmlsbGluZ19kZXRhaWxzPy5hZGRyZXNzO1xuICBjb25zdCBzaGlwcGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IHNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IHNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kMyhgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nLCBzdHJpcGVBcHBsZVBheSwgbGFiZWwpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBsYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIHRyYWNrKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgICAgcHJvdmlkZXI6IHdpdGhQcm92aWRlcixcbiAgICAgIHByb2Nlc3Nvcjogd2l0aFByb2Nlc3NvcixcbiAgICAgIGNwbXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBvY2t5dFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBheXBhbEZsb3dcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QUNIOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBQ0hGbG93XG4gIH0sXG4gIGFpcndhbGxleEVGVDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4RUZURmxvd1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhCQUNTRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhTRVBBRmxvd1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBpbml0TG9vcEZsb3csXG4gICAgcnVuOiBydW5Mb29wRmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBZHllbkdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5BcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBZHllbkFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuQXBwbGVQYXlGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIgPSAoZmxvd05hbWUsIGluaXRGbG93KSA9PiB7XG4gIGNvbnN0IHB1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChpbml0UGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgaW5pdEZsb3coaW5pdFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKclCAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGluaXRSZXN1bHQpO1xuICAgICAgICBwdWJsaXNoZXIuc2V0KGluaXRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMyhg8J2ZrSAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgXCJEZXRhaWxzOlwiLCBlcnJvcik7XG4gICAgICAgIHB1Ymxpc2hlci50aHJvdyhlcnJvciwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWxsSW5pdEZsb3dzID0gYXN5bmMgKGZsb3dzLCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZmxvd3MpLm1hcCgoZmxvdykgPT4gZmxvdy5pbml0aWFsaXplKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSkpO1xufTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAgIC8vIFN0cmlwZSBQUlxuICAgIHN0cmlwZVBSOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KSxcbiAgICAvLyBTdHJpcGUgTGlua1xuICAgIHN0cmlwZUxpbms6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIExpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gUGF5UGFsXG4gICAgcGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBheVBhbFwiLCBPanNGbG93cy5wYXlwYWwuaW5pdCksXG4gICAgLy8gUG9ja3l0IFBheVBhbFxuICAgIHBvY2t5dFBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQb2NreXQgUGF5UGFsXCIsIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgQXBwbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gICAgYWR5ZW5Hb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEFwcGxlUGF5XG4gICAgYWR5ZW5BcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBBcHBsZVBheVwiLCBPanNGbG93cy5hZHllbkFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQyKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG5leHRXaW5kb3c/Lm5leHQgfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibmV4dGpzXCIgLyogTmV4dEpTICovO1xuICAgIH1cbiAgICBjb25zdCBudXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChudXh0V2luZG93Py5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibnV4dFwiIC8qIE51eHQgKi87XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBuZXh0V2luZG93Py5uZXh0Py52ZXJzaW9uIHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18/LmJ1aWxkSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCIgLyogTnV4dCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ2dWVcIiAvKiBWdWUgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi86IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQyID0gZ2V0V2luZG93U2FmZSgpPy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgbmdWZXJzaW9uRWwgPSBkb2N1bWVudDI/LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBuZ1ZlcnNpb25FbCA/IG5nVmVyc2lvbkVsLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtJbmZvKCkge1xuICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlY3RGcmFtZXdvcmsoKTtcbiAgY29uc3QgdmVyc2lvbiA9IGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH07XG59XG5cbmNvbnN0IGdldEZyYXVkTWV0YWRhdGEgPSAoKSA9PiB7XG4gIGNvbnN0IHNjcmVlbl9oZWlnaHQgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbDtcbiAgY29uc3Qgc2NyZWVuX3dpZHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbDtcbiAgY29uc3QgY29sb3JfZGVwdGggPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGw7XG4gIGNvbnN0IGphdmFfZW5hYmxlZCA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogZmFsc2U7XG4gIGNvbnN0IHVzZXJfYWdlbnQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbDtcbiAgY29uc3QgYWNjZXB0X2hlYWRlciA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgbGFuZ3VhZ2UgPSBudWxsO1xuICBpZiAod2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICBsYW5ndWFnZSA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2U7XG4gIH1cbiAgY29uc3QgdGltZV96b25lX29mZnNldCA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcl9kZXB0aCxcbiAgICBqYXZhX2VuYWJsZWQsXG4gICAgamF2YXNjcmlwdF9lbmFibGVkOiB0cnVlLFxuICAgIGxhbmd1YWdlLFxuICAgIHNjcmVlbl9oZWlnaHQsXG4gICAgc2NyZWVuX3dpZHRoLFxuICAgIHRpbWVfem9uZV9vZmZzZXQsXG4gICAgdXNlcl9hZ2VudCxcbiAgICBhY2NlcHRfaGVhZGVyXG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiY2FyZFwiXSA9IFwiY2FyZFwiO1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xudmFyIFBheW1lbnRQcm92aWRlclR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXltZW50UHJvdmlkZXJUeXBlMikgPT4ge1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFDSFwiXSA9IFwiYWNoXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiRUZUXCJdID0gXCJlZnRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJCQUNTXCJdID0gXCJiYWNzXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU0VQQVwiXSA9IFwic2VwYVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFQUExFX1BBWVwiXSA9IFwiYXBwbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JFRElUX0NBUkRcIl0gPSBcImNyZWRpdF9jYXJkXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiR09PR0xFX1BBWVwiXSA9IFwiZ29vZ2xlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNUUklQRV9MSU5LXCJdID0gXCJzdHJpcGVfbGlua1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSWVBUT1wiXSA9IFwiY3J5cHRvXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiUEFZUEFMXCJdID0gXCJwYXlwYWxcIjtcbiAgcmV0dXJuIFBheW1lbnRQcm92aWRlclR5cGUyO1xufSkoUGF5bWVudFByb3ZpZGVyVHlwZSB8fCB7fSk7XG5cbmNvbnN0IGdldEFwcGxlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYXBwbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXksIGluaXRGbG93cy5hZHllbkFwcGxlUGF5XTtcbiAgY29uc3QgYXBwbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBhcHBsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNBcHBsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgaWYgKGlzQXBwbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhcHBsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYXBwbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBcHBsZVBheUZsb3coYXBwbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXksIGluaXRGbG93cy5hZHllbkdvb2dsZVBheV07XG4gIGNvbnN0IGdvb2dsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGdvb2dsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzR29vZ2xlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgaWYgKGlzR29vZ2xlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGdvb2dsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEdvb2dsZVBheUZsb3coZ29vZ2xlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QXBwbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IHN0YXJ0R29vZ2xlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInRyYWNlclwiKTtcbmNvbnN0IGluaXRUcmFjZXJTYWZlID0gKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBpbml0VHJhY2VyVW5zYWZlKHZlcnNpb24sIGJhc2VVcmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycl9fJDEoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7ZXJyb3J9YCk7XG4gIH1cbn07XG5sZXQgZ2xvYmFsVHJhY2VyO1xuY29uc3QgaW5pdFRyYWNlclVuc2FmZSA9IGFzeW5jICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBzZGtUcmFjZVdlYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDd9fi5qcycpO1xuICBjb25zdCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFdlYlRyYWNlclByb3ZpZGVyIH0gPSBzZGtUcmFjZVdlYjtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uRmV0Y2ggPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBmfX4uanMnKTtcbiAgY29uc3QgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9ID0gaW5zdHJ1bWVudGF0aW9uRmV0Y2g7XG4gIGNvbnN0IGNvbnRleHRab25lID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZX1+LmpzJyk7XG4gIGNvbnN0IHsgWm9uZUNvbnRleHRNYW5hZ2VyIH0gPSBjb250ZXh0Wm9uZTtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwaX1+LmpzJyk7XG4gIGNvbnN0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gPSBpbnN0cnVtZW50YXRpb247XG4gIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGt9fi5qcycpO1xuICBjb25zdCB7IFJlc291cmNlIH0gPSByZXNvdXJjZXM7XG4gIGNvbnN0IGRldGVjdFJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLSF+ezAwbX1+LmpzJykudGhlbihuID0+IG4uZCk7XG4gIGNvbnN0IHsgZGV0ZWN0UmVzb3VyY2VzU3luYyB9ID0gZGV0ZWN0UmVzb3VyY2VzO1xuICBjb25zdCBleHBvcnRlclRyYWNlT3RscCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMG59fi5qcycpO1xuICBjb25zdCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gPSBleHBvcnRlclRyYWNlT3RscDtcbiAgY29uc3QgcHJvcGFnYXRvckIzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwan1+LmpzJyk7XG4gIGNvbnN0IHsgQjNQcm9wYWdhdG9yLCBCM0luamVjdEVuY29kaW5nIH0gPSBwcm9wYWdhdG9yQjM7XG4gIGNvbnN0IHNka1RyYWNlQmFzZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDF9fi5qcycpO1xuICBjb25zdCB7IEJhdGNoU3BhblByb2Nlc3NvciB9ID0gc2RrVHJhY2VCYXNlO1xuICBsb2dfXyQxKGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke3ZlcnNpb259IGFuZCBiYXNlVXJsICR7YmFzZVVybH1gKTtcbiAgY29uc3QgY29sbGVjdG9yVXJsID0gZ2V0Q29sbGVjdG9yVXJsKGJhc2VVcmwpO1xuICBsb2dfXyQxKGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Y29sbGVjdG9yVXJsfWApO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogY29sbGVjdG9yVXJsIH0pO1xuICBjb25zdCBiYXNlQXR0cnMgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogdmVyc2lvbixcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYlRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZTogbmV3IFJlc291cmNlKGJhc2VBdHRycykubWVyZ2UoZGV0ZWN0UmVzb3VyY2VzU3luYygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IobmV3IENvbnNvbGVTcGFuRXhwb3J0ZXIoKSksXG4gICAgICBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgcHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgWm9uZUNvbnRleHRNYW5hZ2VyKCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUiB9KVxuICB9KTtcbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgRmV0Y2hJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBnbG9iYWxUcmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBsb2dfXyQxKGBUcmFjZXIgaW5pdGlhbGl6ZWRgKTtcbiAgcmV0dXJuIGdsb2JhbFRyYWNlcjtcbn07XG5jb25zdCBnZXRDb2xsZWN0b3JVcmwgPSAoZnJvbUJhc2VVcmwpID0+IHtcbiAgY29uc3QgYmFzZUhvc3RuYW1lID0gbmV3IFVSTChmcm9tQmFzZVVybCkuaG9zdG5hbWU7XG4gIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIjtcbiAgfSBlbHNlIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCI7XG4gIH1cbiAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHBheWxvYWQub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2RlQnJpZGdlSWZyYW1lID0gdGhpcy5jcmVhdGVFbGVtZW50KEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCI7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY2RlQnJpZGdlSWZyYW1lLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5tb3VudChcImJvZHlcIik7XG4gICAgICAgICAgbG9nX18oXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUNvbm5TcGFuID0gdHJhY2VyPy5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIGNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUNvbm5TcGFuPy5lbmQoKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgICAgYXdhaXQgc2V0VXNlckRldmljZVRva2VuKGFueUNkZUNvbm4sIHRoaXMuZGV2aWNlVG9rZW4pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjZGVMb2FkZWQsXG4gICAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICAgIGxvZ19fKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzcGFuPy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyTXNnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRUeXBlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIik7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IF9FbGVtZW50VHlwZUVudW1ab2QucGFyc2UoZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnQgPSB0aGlzLnJlZ2lzdGVySWZyYW1lKHR5cGUsIGZyYW1lKTtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkRWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAodHlwZSwgZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKTtcbiAgICAgICAgICB0cmFjayhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbm9kZTogZWxlbWVudC5ub2RlIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpO1xuICAgICAgICAgIGNvbm4udHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkge1xuICAgICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwic3VibWl0X2NhcmRcIiwgeyAuLi5wYXJhbXMgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlIH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGUgfSA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsQXZhaWxhYmxlID0gcGF5cGFsRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgcG9ja3l0UGF5cGFsQXZhaWxhYmxlID0gY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgICAgKG1ldGhvZCkgPT4gbWV0aG9kLnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIG1ldGhvZC5wcm92aWRlciA9PT0gXCJwYXlwYWxcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbG9vcEZsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBsb29wQ3J5cHRvQXZhaWxhYmxlID0gbG9vcEZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuY2FyZCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaW5pdEZsb3dOYW1lTWFwID0ge1xuICAgICAgICAgICAgcGF5cGFsOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICAgIGFkeWVuR29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5LFxuICAgICAgICAgICAgYWR5ZW5BcHBsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzX29sZCA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbG93UmVzdWx0ID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5pdEZsb3dOYW1lTWFwW2tleV0gPz8ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gWy4uLm1ldGhvZHNfb2xkLCAuLi5tZXRob2RzXTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kLCBzZXR0aW5ncyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5jYXJkOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdENhcmQoc2V0dGluZ3MpO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG86IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhHb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFpcndhbGxleEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWlyd2FsbGV4QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5Hb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZHllbkdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5BcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWR5ZW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuQXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnROZXZlcihtZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdFdpdGggPSB0aGlzLmdlbmVyYWxTdWJtaXQ7XG4gICAgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQ7XG4gICAgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIik7XG4gICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICAgIGRlbGV0ZSB3aW5kb3dbXCJvanNcIl07XG4gICAgICB0cmFjayhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobmV3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKG5ld0NhbGxiYWNrcyk7XG4gICAgfTtcbiAgICBPcGVuUGF5Rm9ybS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKTtcbiAgICB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuNS4xMVwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuNS4xMVwiO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfTtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3QoY29uZmlnKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gO1xuICAgIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9O1xuICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmRldmljZVRva2VuID0gZ2V0RGV2aWNlVG9rZW4oKTtcbiAgICBhdHRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycygpO1xuICAgIGNvbnN0IHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH0gPSBnZXRGcmFtZXdvcmtJbmZvKCk7XG4gICAgZ2V0Q3VycmVudEVudih0aGlzLmJhc2VVcmwpLnRoZW4oKGVudmlyb25tZW50KSA9PiB7XG4gICAgICBpZiAoIW1ldHJpY3NQdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbnRleHQgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICBmcmFtZXdvcmssXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIG1ldHJpY3NQdWJsaXNoZXIuc2V0KG1ldHJpY3NDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cmFjayhcImZvcm1faW5pdFwiKTtcbiAgICBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbik7XG4gICAgaWYgKGNvbmZpZy5hbGxvd1RyYWNpbmcgPT09IHRydWUpIHtcbiAgICAgIGluaXRUcmFjZXJTYWZlKHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKTtcbiAgICB9XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMub2pzRmxvd3MgPSBPanNGbG93cztcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYXNzaWduQXNTaW5nbGV0b24gPSAoZm9ybSkgPT4ge1xuICAgICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgICB9XG4gICAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpbmRvd1tcIm9qc1wiXSA/PyBudWxsO1xuICAgIH07XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAoY29uZmlnLCBjZGVMb2FkZWRQYXlsb2FkLCBhbnlDZGVDb25uZWN0aW9uLCBmb3JtRGl2KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiBjb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgYmFzZVVybDogbmV3IFVSTChjb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgICBmb3JtRGl2LFxuICAgICAgICBlbGVtZW50c1Nlc3Npb25JZDogY2RlTG9hZGVkUGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGNkZUxvYWRlZFBheWxvYWQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY3VzdG9tSW5pdFBhcmFtczogY29uZmlnLmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gICAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogY29uZmlnLnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoY2FsbGVyID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCBjdXJyZW50SW5zdGFuY2UgPSBPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlYnVnSW5mbyA9IHtcbiAgICAgIGNhbGxlcixcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogY3VycmVudEluc3RhbmNlPy5mb3JtSWQgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHtjYWxsZXJ9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke2RlYnVnSW5mby50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke2RlYnVnSW5mby5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7ZGVidWdJbmZvLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtkZWJ1Z0luZm8uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50SW5zdGFuY2UgfHwgY3VycmVudEluc3RhbmNlLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBDb250ZXh0QVBJIGFzIEMsIERpYWdBUEkgYXMgRCwgRWxlbWVudFR5cGVFbnVtIGFzIEUsIEZpZWxkTmFtZSBhcyBGLCBJTlZBTElEX1NQQU5fQ09OVEVYVCBhcyBJLCBPcGVuUGF5Rm9ybSBhcyBPLCBQcm94eVRyYWNlciBhcyBQLCBST09UX0NPTlRFWFQgYXMgUiwgU3BhbktpbmQgYXMgUywgVHJhY2VGbGFncyBhcyBULCBEaWFnTG9nTGV2ZWwgYXMgYSwgY3JlYXRlQ29udGV4dEtleSBhcyBiLCBjb250ZXh0IGFzIGMsIGlzVmFsaWRUcmFjZUlkIGFzIGQsIGlzVmFsaWRTcGFuSWQgYXMgZSwgU3BhblN0YXR1c0NvZGUgYXMgZiwgZ2V0R2xvYmFsIGFzIGcsIElOVkFMSURfU1BBTklEIGFzIGgsIGlzU3BhbkNvbnRleHRWYWxpZCBhcyBpLCBJTlZBTElEX1RSQUNFSUQgYXMgaiwgUHJveHlUcmFjZXJQcm92aWRlciBhcyBrLCBTdWJtaXRNZXRob2RzIGFzIGwsIHJlZ2lzdGVyR2xvYmFsIGFzIHIsIHRyYWNlIGFzIHQsIHVucmVnaXN0ZXJHbG9iYWwgYXMgdSB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsa0JBQUFBLFVBQXNCO0FBQy9CLFNBQVMsS0FBQUMsU0FBUztBQUNsQixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUVuQixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFPO0FBR2QsTUFBSUssSUFBb0IsTUFBTTtBQUM5QixFQUFBQSxLQUFxQkEsRUFBa0JMLEdBQVFJLENBQUU7QUFDbkQ7QUFFQSxJQUFJRSxLQUFjLDJCQUFZO0FBQzVCLE1BQUlDLElBQWlCLFNBQXVCQyxHQUFHQyxHQUFHO0FBQ2hELFdBQUFGLElBQWlCLE9BQU8sa0JBQWtCO0FBQUEsTUFDeEMsV0FBVyxDQUFDO0FBQUEsSUFDZCxhQUFhLFNB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBTVBvM0IsQ0FBTTtBQUFBLDBCQUNFRSxFQUFVLFVBQVU7QUFBQSxrQ0FDWkEsRUFBVSxhQUFhO0FBQUEsd0JBQ2pDQSxFQUFVLFdBQVc7QUFBQSwwQkFDbkJBLEVBQVUsYUFBYTtBQUFBO0FBRTdDLFdBQUksS0FBSyxlQUNQOWhCLEdBQU14VixDQUFZLEdBQ2xCSCxFQUFNLDBCQUEwQixFQUFFLE9BQU9HLEVBQWEsQ0FBQyxHQUNoRCxNQUVMLENBQUNxM0IsS0FBbUJBLEVBQWdCLFdBQVcsS0FBSyxVQUN0RDdoQixHQUFNeFYsQ0FBWSxHQUNsQkgsRUFBTSwwQkFBMEIsRUFBRSxPQUFPRyxFQUFhLENBQUMsR0FDaEQsTUFFRjtBQUFBLEVBQ1Q7QUFDRjtBQWpFSWkxQixHQUFLLFdBQVd6VSxHQUdoQnlVLEdBQUssb0JBQW9CLENBQUN6USxNQUFTO0FBQ2pDLE1BQUl5USxHQUFZLFlBQVk7QUFDMUIsVUFBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBRWxGLFNBQU8sTUFBU3pRO0FBQ2xCLEdBR0F5USxHQUFLLGNBQWMsTUFDVixPQUFPLE9BQVUsTUFPMUJBLEdBQUssc0JBQXNCLENBQUM1aEMsR0FBUWtrQyxHQUFrQnJjLEdBQWtCdEosT0FDL0Q7QUFBQSxFQUNMLHFCQUFxQnZlLEVBQU87QUFBQSxFQUM1QixTQUFTLElBQUksSUFBSUEsRUFBTyxXQUFXOGIsRUFBYyxFQUFFO0FBQUEsRUFDbkQsU0FBQXlDO0FBQUEsRUFDQSxtQkFBbUIybEIsRUFBaUI7QUFBQSxFQUNwQyx3QkFBd0JBLEVBQWlCO0FBQUEsRUFDekMsa0JBQUFyYztBQUFBLEVBQ0Esa0JBQWtCN25CLEVBQU8sb0JBQW9CLENBQUM7QUFBQSxFQUM5QyxtQ0FBbUNBLEVBQU87QUFDNUM7QUEzbUJOLElBQU1ta0MsS0FBTnZDOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkJhc2VFbGVtZW50c1N0eWxlIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkFXWEJhbmsiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAic3VtIiwgImFyciIsICJhIiwgImJlZm9yZVVubG9hZEhhbmRsZXIiLCAiZXZlbnQiLCAicHJldmVudE5hdmlnYXRpb24iLCAic3RvcFByZXZlbnROYXZpZ2F0aW9uIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAiaXNTdWJtaXR0aW5nIiwgInBhcmFtcyIsICJfYSIsICJfYiIsICJ0cmFjayIsICJmbG93UmVzdWx0IiwgImZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSIsICJlcnJvck1lc3NhZ2UiLCAiZXJyb3JDb2RlIiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkJDQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDQiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJpIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJfX3JlYWQkNCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJPanNFbnZpcm9ubWVudCIsICJ6IiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZW52Q2FjaGUiLCAiZ2V0Q3VycmVudEVudiIsICJiYXNlVXJsIiwgInJlc3BvbnNlIiwgInJlcyIsICJleGNsdWRlUHJvcHMiLCAicHJvcHMiLCAia2V5IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyR1IiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAidHJhY2siLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgIm9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IiLCAiZXJyb3JNZXNzYWdlIiwgImdldEVycm9yTWVzc2FnZSIsICJvblVuY2F1Z2h0RXJyb3IiLCAicGFnZUxpZmVjeWNsZSIsICJsb2FkUGFnZUxpZmVjeWNsZSIsICJwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyIiwgImF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgImxpZmVjeWNsZSIsICJkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJyZXN1bHRTdGF0dXMiLCAiX2dsb2JhbFRoaXMiLCAiVkVSU0lPTiIsICJyZSIsICJfbWFrZUNvbXBhdGliaWxpdHlDaGVjayIsICJvd25WZXJzaW9uIiwgImFjY2VwdGVkVmVyc2lvbnMiLCAicmVqZWN0ZWRWZXJzaW9ucyIsICJteVZlcnNpb25NYXRjaCIsICJvd25WZXJzaW9uUGFyc2VkIiwgImdsb2JhbFZlcnNpb24iLCAiX3JlamVjdCIsICJ2IiwgIl9hY2NlcHQiLCAiZ2xvYmFsVmVyc2lvbk1hdGNoIiwgImdsb2JhbFZlcnNpb25QYXJzZWQiLCAiaXNDb21wYXRpYmxlIiwgIm1ham9yIiwgIkdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkiLCAiX2dsb2JhbCIsICJyZWdpc3Rlckdsb2JhbCIsICJ0eXBlIiwgImRpYWciLCAiYWxsb3dPdmVycmlkZSIsICJhcGkiLCAiZ2V0R2xvYmFsIiwgInVucmVnaXN0ZXJHbG9iYWwiLCAiX19yZWFkJDMiLCAibyIsICJuIiwgIm0iLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDMiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiRGlhZ0NvbXBvbmVudExvZ2dlciIsICJsb2dQcm94eSIsICJmdW5jTmFtZSIsICJuYW1lc3BhY2UiLCAibG9nZ2VyIiwgIkRpYWdMb2dMZXZlbCIsICJjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIiLCAibWF4TGV2ZWwiLCAiX2ZpbHRlckZ1bmMiLCAidGhlTGV2ZWwiLCAidGhlRnVuYyIsICJfX3JlYWQkMiIsICJfX3NwcmVhZEFycmF5JDIiLCAiQVBJX05BTUUkMiIsICJEaWFnQVBJIiwgIl9sb2dQcm94eSIsICJzZWxmIiwgInNldExvZ2dlciIsICJvcHRpb25zT3JMb2dMZXZlbCIsICJvbGRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgInN0YWNrIiwgIm9wdGlvbnMiLCAiY3JlYXRlQ29udGV4dEtleSIsICJkZXNjcmlwdGlvbiIsICJCYXNlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgIlJPT1RfQ09OVEVYVCIsICJfX3JlYWQkMSIsICJfX3NwcmVhZEFycmF5JDEiLCAiTm9vcENvbnRleHRNYW5hZ2VyIiwgIl9jb250ZXh0IiwgInRhcmdldCIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJBUElfTkFNRSQxIiwgIk5PT1BfQ09OVEVYVF9NQU5BR0VSIiwgIkNvbnRleHRBUEkiLCAiY29udGV4dE1hbmFnZXIiLCAiVHJhY2VGbGFncyIsICJJTlZBTElEX1NQQU5JRCIsICJJTlZBTElEX1RSQUNFSUQiLCAiSU5WQUxJRF9TUEFOX0NPTlRFWFQiLCAiTm9uUmVjb3JkaW5nU3BhbiIsICJfc3BhbkNvbnRleHQiLCAiX2tleSIsICJfYXR0cmlidXRlcyIsICJfbmFtZSIsICJfbGluayIsICJfbGlua3MiLCAiX3N0YXR1cyIsICJfZW5kVGltZSIsICJfZXhjZXB0aW9uIiwgIl90aW1lIiwgIlNQQU5fS0VZIiwgImdldFNwYW4iLCAiZ2V0QWN0aXZlU3BhbiIsICJzZXRTcGFuIiwgInNwYW4iLCAiZGVsZXRlU3BhbiIsICJzZXRTcGFuQ29udGV4dCIsICJzcGFuQ29udGV4dCIsICJnZXRTcGFuQ29udGV4dCIsICJWQUxJRF9UUkFDRUlEX1JFR0VYIiwgIlZBTElEX1NQQU5JRF9SRUdFWCIsICJpc1ZhbGlkVHJhY2VJZCIsICJ0cmFjZUlkIiwgImlzVmFsaWRTcGFuSWQiLCAic3BhbklkIiwgImlzU3BhbkNvbnRleHRWYWxpZCIsICJ3cmFwU3BhbkNvbnRleHQiLCAiY29udGV4dEFwaSIsICJOb29wVHJhY2VyIiwgIm5hbWUiLCAicm9vdCIsICJwYXJlbnRGcm9tQ29udGV4dCIsICJpc1NwYW5Db250ZXh0IiwgImFyZzIiLCAiYXJnMyIsICJhcmc0IiwgIm9wdHMiLCAiY3R4IiwgImNvbnRleHRXaXRoU3BhblNldCIsICJOT09QX1RSQUNFUiIsICJQcm94eVRyYWNlciIsICJfcHJvdmlkZXIiLCAidmVyc2lvbiIsICJfb3B0aW9ucyIsICJfZm4iLCAidHJhY2VyIiwgIk5vb3BUcmFjZXJQcm92aWRlciIsICJfdmVyc2lvbiIsICJOT09QX1RSQUNFUl9QUk9WSURFUiIsICJQcm94eVRyYWNlclByb3ZpZGVyIiwgIlNwYW5LaW5kIiwgIlNwYW5TdGF0dXNDb2RlIiwgIkFQSV9OQU1FIiwgIlRyYWNlQVBJIiwgInByb3ZpZGVyIiwgInN1Y2Nlc3MiLCAidHJhY2UiLCAiY3JlYXRlQ0RFU3BhbiIsICJjZGVDb25uIiwgImRhdGEiLCAib3BlcmF0aW9uIiwgInJlc3VsdCIsICJjcmVhdGVUcmFja2luZ1NwYW4iLCAiQ2RlRXJyb3IiLCAiQ3VzdG9tRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgInJlc3BvbnNlU2NoZW1hIiwgInRyYWNraW5nS2V5IiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjb25uZWN0aW9uIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJDREVSZXNwb25zZUVycm9yIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgImdldFByZWZpbGwiLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAicGF5bG9hZCIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgImNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAic3VtIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3JTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgInJlc3BvbnNlTW9kZWwiLCAiY29ubmVjdGlvbk9iaiIsICJjb25uZWN0VG9DaGlsZCIsICJwcmVwYXJlUGF5bWVudEZsb3ciLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgInNldFVzZXJEZXZpY2VUb2tlbiIsICJkZXZpY2VUb2tlbiIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIkZSQU1FX0JBU0VfVVJMIiwgIkVOQ09ESU5HIiwgIkVOQ09ESU5HX0xFTiIsICJSQU5ET01fTEVOIiwgIlRJTUVfTEVOIiwgIlRJTUVfTUFYIiwgIlVMSURFcnJvckNvZGUiLCAiVUxJREVycm9yIiwgImVycm9yQ29kZSIsICJtZXNzYWdlIiwgInJhbmRvbUNoYXIiLCAicHJuZyIsICJyYW5kIiwgImRldGVjdFBSTkciLCAicm9vdExvb2t1cCIsICJkZXRlY3RSb290IiwgImdsb2JhbENyeXB0byIsICJidWZmZXIiLCAiaW5XZWJXb3JrZXIiLCAiZW5jb2RlUmFuZG9tIiwgImxlbiIsICJzdHIiLCAiZW5jb2RlVGltZSIsICJtb2QiLCAiY3VycmVudExlbiIsICJ1bGlkIiwgInNlZWRUaW1lIiwgImN1cnJlbnRQUk5HIiwgInNlZWQiLCAiQ09PS0lFX05BTUUiLCAiZ2V0RGV2aWNlVG9rZW4iLCAiZXhpc3RpbmdDb29raWUiLCAiY29va2llIiwgInRva2VuIiwgInNldERldmljZVRva2VuIiwgIm9uZVllYXJGcm9tTm93IiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgIkVsZW1lbnRFdmVudCIsICJnZW5lcmF0ZUFub255bW91c1ZhbHVlcyIsICJnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJmaWVsZHMiLCAiRmllbGROYW1lIiwgImdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJjaGVja291dF9zZXR0aW5ncyIsICJnZXRGdWxsTmFtZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAic3R5bGVzIiwgIndpZHRoIiwgImhlaWdodCIsICJiYW5rU2VsZWN0b3JTdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0aXRsZSIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgImNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IiLCAiYmFua3MiLCAiYmFua0xpc3RIdG1sIiwgImJhbmsiLCAibG9nb0h0bWwiLCAiYmFua0l0ZW1zIiwgImNsZWFudXAiLCAiY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0iLCAicGF5bWVudE1ldGhvZFR5cGUiLCAiZWxlbWVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgIm9uU3VjY2VzcyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAic3RhcnRQb2xsaW5nIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJvcmlnaW5hbEhhbmRsZUNhbmNlbCIsICJ3cmFwcGVkSGFuZGxlQ2FuY2VsIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgImhhbmRsZUV2ZW50cyIsICJUaHJlZURTU3RhdHVzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgInBhcmFtcyIsICJmcmFtZVdpZHRoIiwgImZyYW1lSGVpZ2h0IiwgImZyYW1lVGl0bGUiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgImVycl9fIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImRldGVjdExhbmd1YWdlIiwgImxhbmd1YWdlcyIsICJsYW5ndWFnZSIsICJsb2dfXyR0IiwgImVycl9fJHMiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJsb2dfXyRzIiwgImVycl9fJHIiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiQWxsRmllbGROYW1lcyIsICJsb2dfXyRyIiwgImVycl9fJHEiLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAiY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSIsICJwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwIiwgImxvZ19fMiIsICJwcmVmaWxsIiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgImNoZWNrb3V0UmVxdWVzdCIsICJQYXltZW50UHJvY2Vzc29yIiwgImxvYWRTY3JpcHQiLCAic2NyaXB0SWQiLCAic3JjIiwgImNoZWNrTG9hZGVkRm4iLCAiZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIiLCAic2NyaXB0IiwgImV4aXN0aW5nU2NyaXB0IiwgImdldFBheW1lbnREYXRhUmVxdWVzdCIsICJnYXRld2F5IiwgImdhdGV3YXlNZXJjaGFudElkIiwgIm1lcmNoYW50TmFtZSIsICJtZXJjaGFudElkIiwgImluaXRpYWxQcmV2aWV3IiwgIm92ZXJyaWRlUGF5bWVudFJlcXVlc3QiLCAidG90YWxQcmljZSIsICJjdXJyZW5jeUNvZGUiLCAiYmFzZVJlcXVlc3QiLCAibG9hZEdvb2dsZVBheVNjcmlwdCIsICJwYXltZW50c0NsaWVudCIsICJnZXRHb29nbGVQYXlFbnZpcm9ubWVudCIsICJnZXRHb29nbGVQYXltZW50c0NsaWVudCIsICJwYXltZW50RGF0YVJlcXVlc3QiLCAiZW52aXJvbm1lbnQiLCAicGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiY29tbW9uQWN0aW9uIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSIsICJmb3JtSW5wdXRzIiwgInBheW1lbnREYXRhIiwgImlucHV0cyIsICJiaWxsaW5nQWRkcmVzcyIsICJzaGlwcGluZ0FkZHJlc3MiLCAicGF5ZXJGaXJzdE5hbWUiLCAibGFzdE5hbWVQYXJ0cyIsICJwYXllckxhc3ROYW1lIiwgImxvZ19fJHEiLCAiZXJyX18kcCIsICJydW5BaXJ3YWxsZXhCQUNTRmxvdyIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJjaGVja291dFBheW1lbnRNZXRob2QiLCAiZm9ybUNhbGxiYWNrcyIsICJjdXN0b21QYXJhbXMiLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJhbnlDZGVDb25uZWN0aW9uIiwgInZlcmlmaWNhdGlvbk1ldGhvZCIsICJtaWNyb0RlcG9zaXREYXRhIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydEZsb3dOZXh0QWN0aW9ucyIsICJjb25zZW50SWQiLCAiYXZhaWxhYmxlQmFua3MiLCAic2VsZWN0ZWRCYW5rIiwgImRpcmVjdERlYml0RGF0YSIsICJyZWRpcmVjdFVybCIsICJuZXdDb25maXJtUmVzdWx0IiwgImxvZ19fJHAiLCAiZXJyX18kbyIsICJydW5BaXJ3YWxsZXhFRlRGbG93IiwgImxvZ19fJG8iLCAiZXJyX18kbiIsICJydW5BaXJ3YWxsZXhTRVBBRmxvdyIsICJsb2dfXyRuIiwgImVycl9fJG0iLCAiQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMyIsICJlcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3VsdCIsICJmcmllbmRseUVyciIsICJkZXZFcnIiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJocmVmIiwgImludGVudElkIiwgInJ1bkFpcndhbGxleDNkc0Zsb3ciLCAiaGVhZGVycyIsICJpbml0aWFsSW50ZW50SWQiLCAiQXBwbGVQYXlDcG0kMiIsICJHb29nbGVQYXlDcG0kMiIsICJsb2FkQXBwbGVQYXlTY3JpcHQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSIsICJhcHBsZVBheVBheW1lbnQiLCAicG1CaWxsaW5nQ29udGFjdCIsICJiaWxsaW5nQ29udGFjdCIsICJzaGlwcGluZ0NvbnRhY3QiLCAiY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QiLCAidG90YWwiLCAibGluZUl0ZW0iLCAiY3JlYXRlQXBwbGVQYXlUb3RhbCIsICJkZWZhdWx0TGFiZWwiLCAiYW1vdW50IiwgImdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJBZHllbkxvY2FsZSIsICJsb2dfXyRtIiwgImVycl9fJGwiLCAiQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMiIsICJkZWNvZGVBZHllbkFjdGlvbiIsICJpc0FkeWVuQXZhaWxhYmxlIiwgImdldEFkeWVuQ2hlY2tvdXQiLCAiaGFuZGxlQWR5ZW4zZHMiLCAibG9jYWxlIiwgImNvdW50cnlDb2RlIiwgImNvbXBvbmVudCIsICJvbkNhbmNlbCIsICJvblBheW1lbnRGYWlsZWQiLCAib25BZGRpdGlvbmFsRGV0YWlscyIsICJfIiwgIl9fIiwgImFkeWVuQ2hlY2tvdXQiLCAiY2hlY2tvdXQiLCAiZGV0ZXJtaW5lTG9jYWxlIiwgInByZWZpbGxMb2NhbGUiLCAiYnJvd3NlckxvY2FsZSIsICJjaGVja0lmUmVxdWlyZXNBZHllbjNkcyIsICJydW5BZHllbjNkc0Zsb3ciLCAiQXBwbGVQYXlDcG0kMSIsICJHb29nbGVQYXlDcG0kMSIsICJsb2dfXyRsIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMiIsICJwYXltZW50U2Vzc2lvblJlc3BvbnNlIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIiLCAiZ2V0RnJhdWRNZXRhZGF0YSIsICJsb2dfXyRrIiwgImVycl9fJGsiLCAiaW5pdEFkeWVuQXBwbGVQYXlGbG93IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAidW5hdmFpbGFibGVSZXN1bHQiLCAiYXBwbGVQYXlDcG0iLCAib25BcHBsZVBheVN0YXJ0RmxvdyIsICJPanNGbG93cyIsICJydW5BZHllbkFwcGxlUGF5RmxvdyIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgInVwZGF0ZSIsICJsb2dfXyRqIiwgImVycl9fJGoiLCAiaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyIsICJnb29nbGVQYXlDcG0iLCAicHJvY2Vzc29yQWNjb3VudCIsICJjbGllbnQiLCAiaXNSZWFkeVRvUGF5IiwgIm9uR29vZ2xlUGF5U3RhcnRGbG93IiwgInJ1bkFkeWVuR29vZ2xlUGF5RmxvdyIsICJfZSIsICJfZiIsICJfZyIsICJfaCIsICJtZXJnZWRJbnB1dHMiLCAib3VyUG1JZCIsICJsb2dfXyRpIiwgImVycl9fJGkiLCAicnVuQWlyd2FsbGV4QUNIRmxvdyIsICJsb2dfXyRoIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMSIsICJoYW5kbGUzRFMiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMSIsICJsb2dfXyRnIiwgImVycl9fJGgiLCAiaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3ciLCAibG9nX18kZiIsICJlcnJfXyRnIiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgIkFwcGxlUGF5Q3BtIiwgIkdvb2dsZVBheUNwbSIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgIm1vYmlsZVdhbGxldFBheW1lbnREYXRhIiwgImxvZ19fJGUiLCAiZXJyX18kZiIsICJpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyIsICJydW5BdXRobmV0QXBwbGVQYXlGbG93IiwgImxvZ19fJGQiLCAiZXJyX18kZSIsICJpbml0QXV0aG5ldEdvb2dsZVBheUZsb3ciLCAicnVuQXV0aG5ldEdvb2dsZVBheUZsb3ciLCAibG9nX18kYyIsICJlcnJfXyRkIiwgIlBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAicGFyc2VWYXVsdElkRnJvbTNkc0hyZWYiLCAidmF1bHRJZCIsICJwYXJzZUFyZ0Zyb21IcmVmIiwgImFyZ05hbWUiLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAibG9nX18kYiIsICJlcnJfXyRjIiwgImF0dGFjaERldmljZURhdGFDb2xsZWN0b3IiLCAicG9zdFVybCIsICJhY2Nlc3NUb2tlbiIsICJmb3JtIiwgInJ1bkRldmljZURhdGFDb2xsZWN0aW9uIiwgImV4cGVjdGVkT3JpZ2luIiwgImRldGFjaCIsICJoYW5kbGVDb2xsZWN0aW9uRXZlbnQiLCAicnVuUGF5ZXJBdXRoIiwgInN0ZXBVcFVybCIsICJtZXJjaGFudERhdGEiLCAidG9rZW5JbnB1dCIsICJtZElucHV0IiwgImxvZ19fJGEiLCAiZXJyX18kYiIsICJDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQiLCAibnVsbE9yVW5kZWZPciQxIiwgIkZSSUVORExZX0VSUiIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyIsICJ1c2VyQWN0aW9uIiwgImNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzIiwgImhhbmRsZUN5YmVyc291cmNlM2RzIiwgImNsZWFudXBQb2xsaW5nIiwgInJ1bkN5YmVyc291cmNlM2RzRmxvdyIsICJzdGVwX3VwX3VybCIsICJhY2Nlc3NfdG9rZW4iLCAiZGRfdXJsIiwgImRkX3Rva2VuIiwgIm1lcmNoYW50X2RhdGEiLCAiY29sbGVjdGlvblJlc3VsdCIsICJzdHJpcGVMb2dfXyIsICJTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQiLCAic3RyaXBlQ0MzRFNGbG93IiwgInBhcnNlVXNlckZFUGF5bG9hZCIsICJNQVhfQ09ORklSTV9MT09QX0lURVJBVElPTlMiLCAibG9nX18kOSIsICJlcnJfXyRhIiwgInVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyIsICJjb21tb25DaGVja291dFBhcmFtcyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgInN0YXJ0UGZSZXN1bHQiLCAicmV0dXJuU3VjY2Vzc1Jlc3VsdCIsICJydW5Db25maXJtTG9vcCIsICJjaGVja291dEF0dGVtcHRJZCIsICJwZlJlc3VsdCIsICJ2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbiIsICJ1c2VyQWN0aW9uUmVzdWx0IiwgInJ1blJlcXVpcmVkVXNlckFjdGlvbiIsICJjaGVja0lmTGVnYWN5M0RTUGF0aCIsICJjb21tb25DQzNEU0Zsb3ciLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJwcmVmaWxsTW9kZSIsICJwYXltZW50TWV0aG9kSWQiLCAibG9nX18kOCIsICJlcnJfXyQ5IiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ1bmlmaWVkQ0NSb2xsb3V0UmF0aW8iLCAicm9sbCIsICJ1c2VVbmlmaWVkQ0NGbG93IiwgInVjY1JvbGxUcmFja2luZ01ldGFkYXRhIiwgImVyckhlYWRlcnMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFkeWVuTWV0YWRhdGFGb3JDaGVja291dCIsICJjeWJlcnNvdXJjZUFjdGlvbiIsICJjeWJlcnNvdXJjZUFjdGlvblBheWxvYWQiLCAiY3liZXJzb3VyY2VNZXRhZGF0YUZvckNoZWNrb3V0IiwgInNob3VsZFVzZVN0cmlwZUZsb3ciLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY2NQbUlkIiwgInN0cmlwZUFjdGlvbiIsICJjb21tb24zRFNBY3Rpb25UeXBlcyIsICJyZXF1aXJlZF91c2VyX2FjdGlvbnMiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkxvb3BDcnlwdG9DcG0iLCAibG9nX18kNyIsICJlcnJfXyQ4IiwgImluaXRMb29wRmxvdyIsICJwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIiwgInBheW1lbnRTZXR1cEluZm8iLCAic3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50IiwgImFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGgiLCAiY2hhcmdlQW1vdW50VXNkQXRvbSIsICJwYXltZW50VXNkQW1vdW50IiwgImN1c3RvbWVyUmVmSWQiLCAid2lkZ2V0UHJvcHMiLCAiaW5pdExvb3BDb25uZWN0UHJvcHMiLCAicnVuTG9vcEZsb3ciLCAiaXNDaGVja291dE1vZGUiLCAiY3VzdG9tZXJGaWVsZHMiLCAibG9nX18kNiIsICJlcnJfXyQ3IiwgIlBheXBhbENwbSIsICJpbml0UGF5cGFsRmxvdyIsICJwYXlwYWxDcG0iLCAicnVuUGF5cGFsRmxvdyIsICJpc0Fub255bW91cyIsICJ1c2VSZWRpcmVjdEZsb3ciLCAibmV3Q3VzdG9tZXJGaWVsZHMiLCAiZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyIsICJpc1BheUZpcnN0RmxvdyIsICJzdGFydFBheW1lbnRGbG93UmVxdWVzdCIsICJwcmVBY3Rpb25VcmwiLCAiZW5jb2RlZFJlcXVlc3QiLCAic2VhcmNoUGFyYW1zIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiYXBwcm92YWxTZXNzaW9uSWQiLCAibG9nX18kNSIsICJlcnJfXyQ2IiwgIlBvY2t5dFBheXBhbENwbSIsICJpbml0UG9ja3l0UGF5cGFsRmxvdyIsICJwb2NreXRQYXlwYWxDcG0iLCAicnVuUG9ja3l0UGF5cGFsRmxvdyIsICJzZXR0aW5ncyIsICJPSlNfU1RSSVBFX0xJTktfQlROX0lEIiwgImxvZ19fJDQiLCAiZXJyX18kNSIsICJTdHJpcGVMaW5rQ3BtIiwgIlN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVMaW5rRmxvdyIsICJpbml0UGFyYW1zIiwgInN0cmlwZUxpbmtDcG0iLCAiZXhwcmVzc0NoZWNrb3V0RWxlbWVudCIsICJtb3VudEJ1dHRvbiIsICJkaXNtb3VudEJ1dHRvbiIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAib3VyRXhpc3RpbmdQbUlkIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAibG9nX18kMyIsICJlcnJfXyQ0IiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93MiIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAiYXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbUV2dCIsICJpc1BlbmRpbmciLCAic3RyaXBlQXBwbGVQYXkiLCAibGFiZWwiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgIm1hdGNoZXNQcm9jZXNzb3IiLCAibWF0Y2hlc1Byb3ZpZGVyIiwgImxvZ19fJDIiLCAiZXJyX18kMyIsICJjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJwdWJsaXNoZXIiLCAic3RhcnRBbGxJbml0Rmxvd3MiLCAiZmxvd3MiLCAiZmxvdyIsICJjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzIiwgImVycl9fJDIiLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgImRldGVjdEZyYW1ld29yayIsICJ3aW5kb3ciLCAibmV4dFdpbmRvdyIsICJudXh0V2luZG93IiwgIm5vZGUiLCAidnVlV2luZG93IiwgImdldEZyYW1ld29ya1ZlcnNpb24iLCAiZnJhbWV3b3JrIiwgImRvY3VtZW50MiIsICJuZ1ZlcnNpb25FbCIsICJnZXRGcmFtZXdvcmtJbmZvIiwgInNjcmVlbl9oZWlnaHQiLCAic2NyZWVuX3dpZHRoIiwgImNvbG9yX2RlcHRoIiwgImphdmFfZW5hYmxlZCIsICJ1c2VyX2FnZW50IiwgImFjY2VwdF9oZWFkZXIiLCAidGltZV96b25lX29mZnNldCIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlBheW1lbnRQcm92aWRlclR5cGUiLCAiUGF5bWVudFByb3ZpZGVyVHlwZTIiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAibG9nX18kMSIsICJlcnJfXyQxIiwgImluaXRUcmFjZXJTYWZlIiwgImluaXRUcmFjZXJVbnNhZmUiLCAiZ2xvYmFsVHJhY2VyIiwgInNka1RyYWNlV2ViIiwgIkNvbnNvbGVTcGFuRXhwb3J0ZXIiLCAiU2ltcGxlU3BhblByb2Nlc3NvciIsICJXZWJUcmFjZXJQcm92aWRlciIsICJpbnN0cnVtZW50YXRpb25GZXRjaCIsICJGZXRjaEluc3RydW1lbnRhdGlvbiIsICJjb250ZXh0Wm9uZSIsICJab25lQ29udGV4dE1hbmFnZXIiLCAiaW5zdHJ1bWVudGF0aW9uIiwgInJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyIsICJyZXNvdXJjZXMiLCAiUmVzb3VyY2UiLCAiZGV0ZWN0UmVzb3VyY2VzIiwgImRldGVjdFJlc291cmNlc1N5bmMiLCAiZXhwb3J0ZXJUcmFjZU90bHAiLCAiT1RMUFRyYWNlRXhwb3J0ZXIiLCAicHJvcGFnYXRvckIzIiwgIkIzUHJvcGFnYXRvciIsICJCM0luamVjdEVuY29kaW5nIiwgInNka1RyYWNlQmFzZSIsICJCYXRjaFNwYW5Qcm9jZXNzb3IiLCAiY29sbGVjdG9yVXJsIiwgImdldENvbGxlY3RvclVybCIsICJleHBvcnRlciIsICJiYXNlQXR0cnMiLCAiZnJvbUJhc2VVcmwiLCAiYmFzZUhvc3RuYW1lIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJpbnRlcm5hbENhbGxiYWNrcyIsICJnZXRDbGVhbk9yaWdpbiIsICJlbGVtZW50SWQiLCAiZXZlbnRUeXBlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgImNhbkFwcGxlUGF5IiwgImNhbkdvb2dsZVBheSIsICJmaW5hbFN0YXR1cyIsICJ1c2VyUGFyYW1zIiwgInJ1blN0cmlwZVByRmxvdyIsICJHRU5FUklDX0NPTk5fRVJSIiwgImxvZ19fIiwgIl9PcGVuUGF5Rm9ybSIsICJjZGVCcmlkZ2VJZnJhbWUiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNkZUxvYWRlZCIsICJjZGVDb25uU3BhbiIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZWxlbWVudFR5cGUiLCAiX0VsZW1lbnRUeXBlRW51bVpvZCIsICJmcmFtZSIsICJxdWVyeVN0cmluZyIsICJzZWxlY3RvciIsICJjb25uIiwgImNvbnRleHQyIiwgImFwcGxlUGF5UHJvY2Vzc29ycyIsICJpc0FwcGxlUGF5QXZhaWxhYmxlIiwgImdvb2dsZVBheVByb2Nlc3NvcnMiLCAiaXNHb29nbGVQYXlBdmFpbGFibGUiLCAicGF5cGFsQXZhaWxhYmxlIiwgInBvY2t5dFBheXBhbEF2YWlsYWJsZSIsICJtZXRob2QiLCAibG9vcEZsb3dSZXN1bHQiLCAibG9vcENyeXB0b0F2YWlsYWJsZSIsICJtZXRob2RzIiwgImluaXRGbG93TmFtZU1hcCIsICJmbG93UmVzdWx0IiwgInN0YXJ0RmxvdyIsICJhaXJ3YWxsZXhHb29nbGVQYXkiLCAiYWlyd2FsbGV4QXBwbGVQYXkiLCAiYXV0aG9yaXplTmV0R29vZ2xlUGF5IiwgImF1dGhvcml6ZU5ldEFwcGxlUGF5IiwgImFkeWVuR29vZ2xlUGF5IiwgImFkeWVuQXBwbGVQYXkiLCAibmV3Q2FsbGJhY2tzIiwgIm1ldHJpY3NDb250ZXh0IiwgImNhbGxlciIsICJjdXJyZW50SW5zdGFuY2UiLCAiZGVidWdJbmZvIiwgImNkZUxvYWRlZFBheWxvYWQiLCAiT3BlblBheUZvcm0iXQp9Cg==
|
|
7078
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA2fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IF9FbGVtZW50VHlwZUVudW1ab2QgPSB6LmVudW0oW1wiY2FyZFwiLCBcImNhcmQtbnVtYmVyXCIsIFwiY2FyZC1leHBpcnlcIiwgXCJjYXJkLWN2Y1wiLCBcImNkZS1icmlkZ2VcIl0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQmFzZUVsZW1lbnRzU3R5bGUgPSB6Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXJTdHlsZTogei5vYmplY3Qoe1xuICAgIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5vYmplY3Qoe1xuICAgIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gICAgY3ZjOiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBUaGUgY2FyZCBpY29uIGF0IHRoZSBzdGFydCBvZiB0aGUgY2FyZCBudW1iZXIgaW5wdXQgZmllbGRcbiAgICogSXQgd29uJ3QgYWZmZWN0IGFmdGVyIHRoZSBpY29uIGNoYW5nZWQgdG8gY2FyZCBicmFuZCBhZnRlciB0aGUgdXNlciBpbnB1dCB0aGUgY2FyZCBudW1iZXJcbiAgICovXG4gIGljb246IHoub2JqZWN0KHtcbiAgICBjb2xvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogei5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6LnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHoub2JqZWN0KHsgZXJyb3I6IHouc3RyaW5nKCkgfSlcbiAgXSkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UgPSB6Lm9iamVjdCh7fSk7XG5jb25zdCBVc2VyQWN0aW9uRkVQYXlsb2FkID0gei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IHouc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHBhdGg6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogYENvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpbmBcbn07XG5jb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICBjb25zdCBrZXkgPSBvZ0Vycm9yTWVzc2FnZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIE1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0Vba2V5XSA/PyBvZ0Vycm9yTWVzc2FnZTtcbn07XG5jb25zdCBpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCA9IChzdHIpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UocmVzcG9uc2VbMF0ubXNnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBidWxsZXRlZCA9IHJlc3BvbnNlLm1hcCgoZXJyKSA9PiBg4oCiICR7Z2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZXJyLm1zZyl9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYCR7YFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6YH1cbiR7YnVsbGV0ZWR9YDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG4gIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7bGlzdE9mRXJyb3JzfWA7XG59O1xuY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmIChpc1N0cmluZ2lmaWVkSnNvbk9iamVjdChlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICBpZiAoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZS5zYWZlUGFyc2Uob2JqKS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yKG9iaik7XG4gICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMob2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoIChlMikge1xuICAgICAgcmV0dXJuIGUyICsgXCJcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGUgKyBcIlwiO1xuICB9XG59O1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG59O1xuXG5jb25zdCBiZWZvcmVVbmxvYWRIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnJldHVyblZhbHVlID0gdHJ1ZTtcbn07XG5jb25zdCBwcmV2ZW50TmF2aWdhdGlvbiA9ICgpID0+IHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgYmVmb3JlVW5sb2FkSGFuZGxlcik7XG59O1xuY29uc3Qgc3RvcFByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5cbmNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgbGV0IGlzU3VibWl0dGluZyA9IGZhbHNlO1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIGlmIChpc1N1Ym1pdHRpbmcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgICAgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmZsb3dSZXN1bHRcbiAgICAgIH0pO1xuICAgICAgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlKCk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW10sXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQgPz8gXCJcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgaXNMb2FkaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZCQ0KG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkkNCh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkkNChfX3NwcmVhZEFycmF5JDQoW10sIF9fcmVhZCQ0KGVycm9ycykpLCBfX3JlYWQkNChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBlbnZDYWNoZSA9IHt9O1xuY29uc3QgZ2V0Q3VycmVudEVudiA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gIGlmIChlbnZDYWNoZVtiYXNlVXJsXSkge1xuICAgIHJldHVybiBlbnZDYWNoZVtiYXNlVXJsXTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgY29uc3QgZW52ID0gT2pzRW52aXJvbm1lbnQucGFyc2UocmVzcG9uc2UuZW52aXJvbm1lbnQpO1xuICAgIGVudkNhY2hlW2Jhc2VVcmxdID0gZW52O1xuICAgIHJldHVybiBlbnY7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJHUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fJHUoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKSxcbiAgICAgICAga2VlcGFsaXZlOiB0cnVlXG4gICAgICAgIC8vIFRvIHNlbmQgZXZlbnRzIGV2ZW4gaWYgdGhlIHBhZ2UgaXMgdW5sb2FkZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kdShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5jb25zdCB0cmFjayA9IChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpID0+IHtcbiAgbWV0cmljc1F1ZXVlLmFkZEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcyk7XG59O1xuY29uc3QgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlID0gKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59O1xuY29uc3Qgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQucmVhc29uKTtcbiAgdHJhY2soXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQucmVhc29uXG4gIH0pO1xufTtcbmNvbnN0IG9uVW5jYXVnaHRFcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IpO1xuICB0cmFjayhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQuZXJyb3I/Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IGV2ZW50LmVycm9yPy5zdGFjayxcbiAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBldmVudC5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZXZlbnQuY29sbm9cbiAgfSk7XG59O1xubGV0IHBhZ2VMaWZlY3ljbGUgPSBudWxsO1xuY29uc3QgbG9hZFBhZ2VMaWZlY3ljbGUgPSBhc3luYyAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWdlTGlmZWN5Y2xlTW9kdWxlID0gYXdhaXQgaW1wb3J0KCcuL2xpZmVjeWNsZS0hfnswMDN9fi5qcycpO1xuICAgIHBhZ2VMaWZlY3ljbGUgPSBwYWdlTGlmZWN5Y2xlTW9kdWxlLmRlZmF1bHQ7XG4gICAgcmV0dXJuIHBhZ2VMaWZlY3ljbGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbmNvbnN0IHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgdHJhY2soXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZXZlbnQub2xkU3RhdGUsXG4gICAgbmV3X3N0YXRlOiBldmVudC5uZXdTdGF0ZVxuICB9KTtcbiAgaWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGV2ZW50Lm5ld1N0YXRlID09PSBcInBhc3NpdmVcIikge1xuICAgIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbiAgfVxufTtcbmNvbnN0IGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzID0gYXN5bmMgKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG4gIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGxvYWRQYWdlTGlmZWN5Y2xlKCk7XG4gIGlmIChsaWZlY3ljbGUpIHtcbiAgICBsaWZlY3ljbGUuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICB9XG59O1xuY29uc3QgZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgaWYgKGdldFdpbmRvd1NhZmUoKSAmJiBwYWdlTGlmZWN5Y2xlKSB7XG4gICAgcGFnZUxpZmVjeWNsZS5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9jb3JlIHRvby5cbi8qKlxuICogLSBnbG9iYWxUaGlzIChOZXcgc3RhbmRhcmQpXG4gKiAtIHNlbGYgKFdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHdpbmRvdyBpbnN0YW5jZSBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzKVxuICogLSB3aW5kb3cgKGZhbGxiYWNrIGZvciBvbGRlciBicm93c2VyIGltcGxlbWVudGF0aW9ucylcbiAqIC0gZ2xvYmFsIChOb2RlSlMgaW1wbGVtZW50YXRpb24pXG4gKiAtIDxvYmplY3Q+IChXaGVuIGFsbCBlbHNlIGZhaWxzKVxuICovXG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucywgbm8tdW5kZWZcbnZhciBfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgID8gZ2xvYmFsVGhpc1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xudmFyIFZFUlNJT04gPSAnMS45LjAnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHJlID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byB0ZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3ZpZGVkIG93blZlcnNpb24uXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNlbWFudGljczpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gb3duVmVyc2lvbiB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2sob3duVmVyc2lvbikge1xuICAgIHZhciBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIHZhciByZWplY3RlZFZlcnNpb25zID0gbmV3IFNldCgpO1xuICAgIHZhciBteVZlcnNpb25NYXRjaCA9IG93blZlcnNpb24ubWF0Y2gocmUpO1xuICAgIGlmICghbXlWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyByZXR1cm4gbm9vcFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgfVxuICAgIHZhciBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25NYXRjaCA9IGdsb2JhbFZlcnNpb24ubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWdsb2JhbFZlcnNpb25NYXRjaCkge1xuICAgICAgICAgICAgLy8gY2Fubm90IHBhcnNlIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgbm9vcFxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgICAgICBtYWpvcjogK2dsb2JhbFZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgICAgIG1pbm9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICAgICAgcGF0Y2g6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBnbG9iYWxWZXJzaW9uTWF0Y2hbNF0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIGdsb2JhbFZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAoZ2xvYmFsVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2hcbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgIT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWFqb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yID09PSAwKSB7XG4gICAgICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA9PT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vciAmJlxuICAgICAgICAgICAgICAgIG93blZlcnNpb25QYXJzZWQucGF0Y2ggPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5wYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vcikge1xuICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgfTtcbn1cbi8qKlxuICogVGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgQVBJLlxuICpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiB2ZXJzaW9uIG9mIHRoZSBBUEkgcmVxdWVzdGluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2xvYmFsIEFQSVxuICovXG52YXIgaXNDb21wYXRpYmxlID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2soVkVSU0lPTik7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbWFqb3IgPSBWRVJTSU9OLnNwbGl0KCcuJylbMF07XG52YXIgR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIG1ham9yKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoYWxsb3dPdmVycmlkZSA9PT0gdm9pZCAwKSB7IGFsbG93T3ZlcnJpZGUgPSBmYWxzZTsgfVxuICAgIHZhciBhcGkgPSAoX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyB0eXBlKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gVkVSU0lPTikge1xuICAgICAgICAvLyBBbGwgcmVnaXN0ZXJlZCBBUElzIG11c3QgYmUgb2YgdGhlIHNhbWUgdmVyc2lvbiBleGFjdGx5XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGFwaS52ZXJzaW9uICsgXCIgZm9yIFwiICsgdHlwZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgVkVSU0lPTik7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBnbG9iYWxWZXJzaW9uID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb247XG4gICAgaWYgKCFnbG9iYWxWZXJzaW9uIHx8ICFpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKF9iID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3R5cGVdO1xufVxuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICB2YXIgYXBpID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXTtcbiAgICBpZiAoYXBpKSB7XG4gICAgICAgIGRlbGV0ZSBhcGlbdHlwZV07XG4gICAgfVxufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xudmFyIERpYWdDb21wb25lbnRMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlhZ0NvbXBvbmVudExvZ2dlcihwcm9wcykge1xuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2UgfHwgJ0RpYWdDb21wb25lbnRMb2dnZXInO1xuICAgIH1cbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZXJyb3InLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2luZm8nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3ZlcmJvc2UnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdDb21wb25lbnRMb2dnZXI7XG59KCkpO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KG5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDMoW10sIF9fcmVhZCQzKGFyZ3MpLCBmYWxzZSkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBhdmFpbGFibGUgaW50ZXJuYWwgbG9nZ2luZyBsZXZlbHMgZm9yIHRoZSBkaWFnbm9zdGljIGxvZ2dlciwgdGhlIG51bWVyaWMgdmFsdWVzXG4gKiBvZiB0aGUgbGV2ZWxzIGFyZSBkZWZpbmVkIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgaW5pdGlhbCBMb2dMZXZlbCB0byBhdm9pZFxuICogY29tcGF0aWJpbGl0eS9taWdyYXRpb24gaXNzdWVzIGZvciBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBhc3N1bWUgdGhlIG51bWVyaWMgb3JkZXJpbmcuXG4gKi9cbnZhciBEaWFnTG9nTGV2ZWw7XG4oZnVuY3Rpb24gKERpYWdMb2dMZXZlbCkge1xuICAgIC8qKiBEaWFnbm9zdGljIExvZ2dpbmcgbGV2ZWwgc2V0dGluZyB0byBkaXNhYmxlIGFsbCBsb2dnaW5nIChleGNlcHQgYW5kIGZvcmNlZCBsb2dzKSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvciBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IDMwXSA9IFwiRVJST1JcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhIHdhcm5pbmcgc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiV0FSTlwiXSA9IDUwXSA9IFwiV0FSTlwiO1xuICAgIC8qKiBHZW5lcmFsIGluZm9ybWF0aW9uYWwgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiSU5GT1wiXSA9IDYwXSA9IFwiSU5GT1wiO1xuICAgIC8qKiBHZW5lcmFsIGRlYnVnIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkRFQlVHXCJdID0gNzBdID0gXCJERUJVR1wiO1xuICAgIC8qKlxuICAgICAqIERldGFpbGVkIHRyYWNlIGxldmVsIGxvZ2dpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQsIHNob3VsZCBvbmx5IGJlIHNldFxuICAgICAqIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIlZFUkJPU0VcIl0gPSA4MF0gPSBcIlZFUkJPU0VcIjtcbiAgICAvKiogVXNlZCB0byBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgdG8gaW5jbHVkZSBhbGwgbG9nZ2luZyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJBTExcIl0gPSA5OTk5XSA9IFwiQUxMXCI7XG59KShEaWFnTG9nTGV2ZWwgfHwgKERpYWdMb2dMZXZlbCA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIobWF4TGV2ZWwsIGxvZ2dlcikge1xuICAgIGlmIChtYXhMZXZlbCA8IERpYWdMb2dMZXZlbC5OT05FKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gRGlhZ0xvZ0xldmVsLkFMTCkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5BTEw7XG4gICAgfVxuICAgIC8vIEluIGNhc2UgdGhlIGxvZ2dlciBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGxvZ2dlciA9IGxvZ2dlciB8fCB7fTtcbiAgICBmdW5jdGlvbiBfZmlsdGVyRnVuYyhmdW5jTmFtZSwgdGhlTGV2ZWwpIHtcbiAgICAgICAgdmFyIHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgRGlhZ0xvZ0xldmVsLkVSUk9SKSxcbiAgICAgICAgd2FybjogX2ZpbHRlckZ1bmMoJ3dhcm4nLCBEaWFnTG9nTGV2ZWwuV0FSTiksXG4gICAgICAgIGluZm86IF9maWx0ZXJGdW5jKCdpbmZvJywgRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgRGlhZ0xvZ0xldmVsLkRFQlVHKSxcbiAgICAgICAgdmVyYm9zZTogX2ZpbHRlckZ1bmMoJ3ZlcmJvc2UnLCBEaWFnTG9nTGV2ZWwuVkVSQk9TRSksXG4gICAgfTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQyID0gJ2RpYWcnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IGludGVybmFsXG4gKiBkaWFnbm9zdGljIEFQSVxuICovXG52YXIgRGlhZ0FQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIGludGVybmFsIGNvbnN0cnVjdG9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEaWFnQVBJKCkge1xuICAgICAgICBmdW5jdGlvbiBfbG9nUHJveHkoZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDIoW10sIF9fcmVhZCQyKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2luZyBzZWxmIGxvY2FsIHZhcmlhYmxlIGZvciBtaW5pZmljYXRpb24gcHVycG9zZXMgYXMgJ3RoaXMnIGNhbm5vdCBiZSBtaW5pZmllZFxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIERpYWdBUEkgc3BlY2lmaWMgZnVuY3Rpb25zXG4gICAgICAgIHZhciBzZXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAob3B0aW9uc09yTG9nTGV2ZWwgPT09IHZvaWQgMCkgeyBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IERpYWdMb2dMZXZlbC5JTkZPIH07IH1cbiAgICAgICAgICAgIGlmIChsb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIExvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgbWlnaHQgYnJlYWsgdGhlIHVzZXIgYXBwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvZyB0byBzZWxmLiBJZiBhIGxvZ2dlciB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbG9nLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZExvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgdmFyIG5ld0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcigoX2IgPSBvcHRpb25zT3JMb2dMZXZlbC5sb2dMZXZlbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IChfYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPic7XG4gICAgICAgICAgICAgICAgb2xkTG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQyLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgRGlhZ0FQSS5pbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRGlhZ0FQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbnZhciBCYXNlQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29udGV4dCB3aGljaCBpbmhlcml0cyB2YWx1ZXMgZnJvbSBhbiBvcHRpb25hbCBwYXJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDb250ZXh0IGEgY29udGV4dCBmcm9tIHdoaWNoIHRvIGluaGVyaXQgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFzZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgICAvLyBmb3IgbWluaWZpY2F0aW9uXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpOyB9O1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEJhc2VDb250ZXh0O1xufSgpKTtcbi8qKiBUaGUgcm9vdCBjb250ZXh0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29udGV4dCAqL1xudmFyIFJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIE5vb3BDb250ZXh0TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUk9PVF9DT05URVhUO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKF9jb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheSQxKFt0aGlzQXJnXSwgX19yZWFkJDEoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBOb29wQ29udGV4dE1hbmFnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMSA9ICdjb250ZXh0JztcbnZhciBOT09QX0NPTlRFWFRfTUFOQUdFUiA9IG5ldyBOb29wQ29udGV4dE1hbmFnZXIoKTtcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBDb250ZXh0IEFQSVxuICovXG52YXIgQ29udGV4dEFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHRBUEkoKSB7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBDb250ZXh0QVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBDb250ZXh0QVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgbWFuYWdlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgbWFuYWdlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uIChjb250ZXh0TWFuYWdlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgY29udGV4dE1hbmFnZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtjb250ZXh0LCBmbiwgdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBjb250ZXh0IHRvIGEgdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmluZCB0byB0aGUgZXZlbnQgZW1pdHRlciBvciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlciB0byBiaW5kXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChjb250ZXh0LCB0YXJnZXQpO1xuICAgIH07XG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FJDEpIHx8IE5PT1BfQ09OVEVYVF9NQU5BR0VSO1xuICAgIH07XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dEFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhY2VGbGFncztcbihmdW5jdGlvbiAoVHJhY2VGbGFncykge1xuICAgIC8qKiBSZXByZXNlbnRzIG5vIGZsYWcgc2V0LiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBCaXQgdG8gcmVwcmVzZW50IHdoZXRoZXIgdHJhY2UgaXMgc2FtcGxlZCBpbiB0cmFjZSBmbGFncy4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJTQU1QTEVEXCJdID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFRyYWNlRmxhZ3MgfHwgKFRyYWNlRmxhZ3MgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIElOVkFMSURfU1BBTklEID0gJzAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfVFJBQ0VJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogSU5WQUxJRF9UUkFDRUlELFxuICAgIHNwYW5JZDogSU5WQUxJRF9TUEFOSUQsXG4gICAgdHJhY2VGbGFnczogVHJhY2VGbGFncy5OT05FLFxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIE5vblJlY29yZGluZ1NwYW4gaXMgdGhlIGRlZmF1bHQge0BsaW5rIFNwYW59IHRoYXQgaXMgdXNlZCB3aGVuIG5vIFNwYW5cbiAqIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS4gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wIGluY2x1ZGluZyBjb250ZXh0XG4gKiBwcm9wYWdhdGlvbi5cbiAqL1xudmFyIE5vblJlY29yZGluZ1NwYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9uUmVjb3JkaW5nU3Bhbihfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKF9zcGFuQ29udGV4dCA9PT0gdm9pZCAwKSB7IF9zcGFuQ29udGV4dCA9IElOVkFMSURfU1BBTl9DT05URVhUOyB9XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBSZXR1cm5zIGEgU3BhbkNvbnRleHQuXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKF9rZXksIF92YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbiAoX25hbWUsIF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uIChfbGluaykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24gKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24gKF9zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbiAoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChfZW5kVGltZSkgeyB9O1xuICAgIC8vIGlzUmVjb3JkaW5nIGFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBOb25SZWNvcmRpbmdTcGFuLlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfdGltZSkgeyB9O1xuICAgIHJldHVybiBOb25SZWNvcmRpbmdTcGFuO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogc3BhbiBrZXlcbiAqL1xudmFyIFNQQU5fS0VZID0gY3JlYXRlQ29udGV4dEtleSgnT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOJyk7XG4vKipcbiAqIFJldHVybiB0aGUgc3BhbiBpZiBvbmUgZXhpc3RzXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNQQU5fS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEdldHMgdGhlIHNwYW4gZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBvbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICAgIHJldHVybiBnZXRTcGFuKENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG4vKipcbiAqIFNldCB0aGUgc3BhbiBvbiBhIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHVzZSBhcyBwYXJlbnRcbiAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gc2V0IGFjdGl2ZVxuICovXG5mdW5jdGlvbiBzZXRTcGFuKGNvbnRleHQsIHNwYW4pIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTUEFOX0tFWSwgc3Bhbik7XG59XG4vKipcbiAqIFJlbW92ZSBjdXJyZW50IHNwYW4gc3RvcmVkIGluIHRoZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBkZWxldGUgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNQQU5fS0VZKTtcbn1cbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpKTtcbn1cbi8qKlxuICogR2V0IHRoZSBzcGFuIGNvbnRleHQgb2YgdGhlIHNwYW4gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGdldFNwYW4oY29udGV4dCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGFuQ29udGV4dCgpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1RSQUNFSURfUkVHRVggPSAvXihbMC05YS1mXXszMn0pJC9pO1xudmFyIFZBTElEX1NQQU5JRF9SRUdFWCA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaXNWYWxpZFRyYWNlSWQodHJhY2VJZCkge1xuICAgIHJldHVybiBWQUxJRF9UUkFDRUlEX1JFR0VYLnRlc3QodHJhY2VJZCkgJiYgdHJhY2VJZCAhPT0gSU5WQUxJRF9UUkFDRUlEO1xufVxuZnVuY3Rpb24gaXNWYWxpZFNwYW5JZChzcGFuSWQpIHtcbiAgICByZXR1cm4gVkFMSURfU1BBTklEX1JFR0VYLnRlc3Qoc3BhbklkKSAmJiBzcGFuSWQgIT09IElOVkFMSURfU1BBTklEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICogQHJldHVybiB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIChpc1ZhbGlkVHJhY2VJZChzcGFuQ29udGV4dC50cmFjZUlkKSAmJiBpc1ZhbGlkU3BhbklkKHNwYW5Db250ZXh0LnNwYW5JZCkpO1xufVxuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgY29udGV4dEFwaSA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcbi8qKlxuICogTm8tb3AgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBUcmFjZXJ9LlxuICovXG52YXIgTm9vcFRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyKCkge1xuICAgIH1cbiAgICAvLyBzdGFydFNwYW4gc3RhcnRzIGEgbm9vcCBzcGFuLlxuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHsgY29udGV4dCA9IGNvbnRleHRBcGkuYWN0aXZlKCk7IH1cbiAgICAgICAgdmFyIHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudEZyb21Db250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHBhcmVudEZyb21Db250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAobmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICB2YXIgb3B0cztcbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBjdHggIT09IG51bGwgJiYgY3R4ICE9PSB2b2lkIDAgPyBjdHggOiBjb250ZXh0QXBpLmFjdGl2ZSgpO1xuICAgICAgICB2YXIgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICB2YXIgY29udGV4dFdpdGhTcGFuU2V0ID0gc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRBcGkud2l0aChjb250ZXh0V2l0aFNwYW5TZXQsIGZuLCB1bmRlZmluZWQsIHNwYW4pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXI7XG59KCkpO1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAodHlwZW9mIHNwYW5Db250ZXh0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3NwYW5JZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUZsYWdzJ10gPT09ICdudW1iZXInKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyKCk7XG4vKipcbiAqIFByb3h5IHRyYWNlciBwcm92aWRlZCBieSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyXG4gKi9cbnZhciBQcm94eVRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChfbmFtZSwgX29wdGlvbnMsIF9jb250ZXh0LCBfZm4pIHtcbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcnkgdG8gZ2V0IGEgdHJhY2VyIGZyb20gdGhlIHByb3h5IHRyYWNlciBwcm92aWRlci5cbiAgICAgKiBJZiB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyIGhhcyBubyBkZWxlZ2F0ZSwgcmV0dXJuIGEgbm9vcCB0cmFjZXIuXG4gICAgICovXG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBUcmFjZXJQcm92aWRlcn0gd2hpY2ggcmV0dXJucyBhbiBpbXBvdGVudFxuICogVHJhY2VyIGZvciBhbGwgY2FsbHMgdG8gYGdldFRyYWNlcmAuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wLlxuICovXG52YXIgTm9vcFRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgTm9vcFRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BUcmFjZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSX1BST1ZJREVSID0gbmV3IE5vb3BUcmFjZXJQcm92aWRlcigpO1xuLyoqXG4gKiBUcmFjZXIgcHJvdmlkZXIgd2hpY2ggcHJvdmlkZXMge0BsaW5rIFByb3h5VHJhY2VyfXMuXG4gKlxuICogQmVmb3JlIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXJzIHByb3ZpZGVkIGFyZSBOb09wLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXMgYXJlIHByb3ZpZGVkIGZyb20gdGhlIGRlbGVnYXRlLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0IGFmdGVyIHRyYWNlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQsXG4gKiAgIGFsbCB0cmFjZXJzIGFscmVhZHkgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGRlbGVnYXRlIGltcGxlbWVudGF0aW9uLlxuICovXG52YXIgUHJveHlUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgUHJveHlUcmFjZXJ9XG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfVFJBQ0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSB0cmFjZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZS4gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gaXMgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiSU5URVJOQUxcIl0gPSAwXSA9IFwiSU5URVJOQUxcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgc2VydmVyLXNpZGUgaGFuZGxpbmcgb2YgYW4gUlBDIG9yIG90aGVyXG4gICAgICogcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJTRVJWRVJcIl0gPSAxXSA9IFwiU0VSVkVSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHRoZSBjbGllbnQtc2lkZSB3cmFwcGVyIGFyb3VuZCBhbiBSUEMgb3JcbiAgICAgKiBvdGhlciByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNMSUVOVFwiXSA9IDJdID0gXCJDTElFTlRcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgcHJvZHVjZXIgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiUFJPRFVDRVJcIl0gPSAzXSA9IFwiUFJPRFVDRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgY29uc3VtZXIgcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCB8fCAoU3BhbktpbmQgPSB7fSkpO1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xudmFyIFNwYW5TdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChTcGFuU3RhdHVzQ29kZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN0YXR1cy5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIlVOU0VUXCJdID0gMF0gPSBcIlVOU0VUXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yXG4gICAgICogT3BlcmF0b3IgdG8gaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiT0tcIl0gPSAxXSA9IFwiT0tcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiRVJST1JcIl0gPSAyXSA9IFwiRVJST1JcIjtcbn0pKFNwYW5TdGF0dXNDb2RlIHx8IChTcGFuU3RhdHVzQ29kZSA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbnZhciBjb250ZXh0ID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG52YXIgVHJhY2VBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBUcmFjZUFQSSgpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGlzU3BhbkNvbnRleHRWYWxpZDtcbiAgICAgICAgdGhpcy5kZWxldGVTcGFuID0gZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gZ2V0U3BhbjtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBzZXRTcGFuO1xuICAgICAgICB0aGlzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgVHJhY2UgQVBJICovXG4gICAgVHJhY2VBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGdsb2JhbCB0cmFjZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0cmFjZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRyYWNlciBmcm9tIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVHJhY2VBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIHRyYWNlIEFQSSAqL1xudmFyIHRyYWNlID0gVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKTtcblxuY29uc3QgY3JlYXRlQ0RFU3BhbiA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBjZGUuJHtkYXRhLnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgLi4uY2RlQ29ubi50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KGRhdGEucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjcmVhdGVUcmFja2luZ1NwYW4gPSBhc3luYyAob3B0aW9ucywgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke29wdGlvbnMuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogb3B0aW9ucy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBvcHRpb25zLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogb3B0aW9ucy5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogb3B0aW9ucy5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBvcHRpb25zLnJlZmVycmVyLFxuICAgICAgICAuLi5vcHRpb25zLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IG9wdGlvbnMucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bhbi5lbmQoKTtcbiAgfVxufTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUNERVNwYW4oY2RlQ29ubiwgZGF0YSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICAgIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gICAgICB0cmFjayhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yX21lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2VfdHlwZTogZGF0YS50eXBlLFxuICAgICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgICAgIGhhc19mb2N1czogZG9jdW1lbnQuaGFzRm9jdXMoKSxcbiAgICAgICAgaHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgIGRvY3VtZW50X3Zpc2liaWxpdHlfc3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgY29ubmVjdGlvbl9kb3dubGluazogY29ubmVjdGlvbj8uZG93bmxpbmssXG4gICAgICAgIGNvbm5lY3Rpb25fZWZmZWN0aXZlX3R5cGU6IGNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb25fcnR0OiBjb25uZWN0aW9uPy5ydHQsXG4gICAgICAgIGNvbm5lY3Rpb25fc2F2ZV9kYXRhOiBjb25uZWN0aW9uPy5zYXZlRGF0YVxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICAgIH1cbiAgICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5yZXNwb25zZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSk7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnBheWxvYWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4ucmVzdWx0XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3QgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LFxuICAgIFNldHVwQ2hlY2tvdXRSZXNwb25zZSxcbiAgICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiAgKTtcbn07XG5jb25zdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UsXG4gICAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFwcm9tb0NvZGUpIHtcbiAgICAgIHByb21vQ29kZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLFxuICAgIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4gICk7XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UsIFwic2V0dXBfY2hlY2tvdXRcIik7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLCBcInBlcmZvcm1fY2hlY2tvdXRcIik7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZSB9LCByZXNwb25zZU1vZGVsKTtcbiAgY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IHByZXBhcmVQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3Qgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlID0gYXN5bmMgKGNkZUNvbm4sIGVycm9yTWVzc2FnZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7IG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9O1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcXVlcnlDREUoXG4gICAgICBjZGVDb25uLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkIH0sXG4gICAgICBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICByZXR1cm4gXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn07XG5jb25zdCBzZXRVc2VyRGV2aWNlVG9rZW4gPSBhc3luYyAoY2RlQ29ubiwgZGV2aWNlVG9rZW4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogZGV2aWNlVG9rZW4gfSB9LFxuICAgIFNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlXG4gICk7XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6YCwgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBGUkFNRV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcblxuLy8gVGhlc2UgdmFsdWVzIHNob3VsZCBORVZFUiBjaGFuZ2UuIFRoZSB2YWx1ZXMgYXJlIHByZWNpc2VseSBmb3Jcbi8vIGdlbmVyYXRpbmcgVUxJRHMuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIjsgLy8gQ3JvY2tmb3JkJ3MgQmFzZTMyXG5jb25zdCBFTkNPRElOR19MRU4gPSAzMjsgLy8gZnJvbSBFTkNPRElORy5sZW5ndGg7XG5jb25zdCBSQU5ET01fTEVOID0gMTY7XG5jb25zdCBUSU1FX0xFTiA9IDEwO1xuY29uc3QgVElNRV9NQVggPSAyODE0NzQ5NzY3MTA2NTU7IC8vIGZyb20gTWF0aC5wb3coMiwgNDgpIC0gMTtcblxudmFyIFVMSURFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFVMSURFcnJvckNvZGUpIHtcbiAgICBVTElERXJyb3JDb2RlW1wiQmFzZTMySW5jb3JyZWN0RW5jb2RpbmdcIl0gPSBcIkIzMl9FTkNfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlclwiXSA9IFwiREVDX1RJTUVfQ0hBUlwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lTmVnYXRpdmVcIl0gPSBcIkVOQ19USU1FX05FR1wiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkXCJdID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJQUk5HRGV0ZWN0RmFpbHVyZVwiXSA9IFwiUFJOR19ERVRFQ1RcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVUxJREludmFsaWRcIl0gPSBcIlVMSURfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVbmV4cGVjdGVkXCJdID0gXCJVTkVYUEVDVEVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVVSURJbnZhbGlkXCJdID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFVMSURFcnJvckNvZGUgfHwgKFVMSURFcnJvckNvZGUgPSB7fSkpO1xuY2xhc3MgVUxJREVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihgJHttZXNzYWdlfSAoJHtlcnJvckNvZGV9KWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiO1xuICAgICAgICB0aGlzLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByYW5kb21DaGFyKHBybmcpIHtcbiAgICBsZXQgcmFuZCA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKTtcbiAgICBpZiAocmFuZCA9PT0gRU5DT0RJTkdfTEVOKSB7XG4gICAgICAgIHJhbmQgPSBFTkNPRElOR19MRU4gLSAxO1xuICAgIH1cbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmQpO1xufVxuLyoqXG4gKiBEZXRlY3QgdGhlIGJlc3QgUFJORyAocHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKVxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgdG8gY2hlY2sgZnJvbSAoZ2xvYmFsL3dpbmRvdylcbiAqIEByZXR1cm5zIFRoZSBQUk5HIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBSTkcocm9vdCkge1xuICAgIGNvbnN0IHJvb3RMb29rdXAgPSBkZXRlY3RSb290KCk7XG4gICAgY29uc3QgZ2xvYmFsQ3J5cHRvID0gKHJvb3RMb29rdXAgJiYgKHJvb3RMb29rdXAuY3J5cHRvIHx8IHJvb3RMb29rdXAubXNDcnlwdG8pKSB8fFxuICAgICAgICAobnVsbCk7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LmdldFJhbmRvbVZhbHVlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgICAgIGdsb2JhbENyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJbMF0gLyAweGZmO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5yYW5kb21CeXRlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBnbG9iYWxDcnlwdG8ucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAweGZmO1xuICAgIH1cbiAgICBlbHNlIDtcbiAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZGV0ZWN0Um9vdCgpIHtcbiAgICBpZiAoaW5XZWJXb3JrZXIoKSlcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGVuY29kZVJhbmRvbShsZW4sIHBybmcpIHtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHtcbiAgICAgICAgc3RyID0gcmFuZG9tQ2hhcihwcm5nKSArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogRW5jb2RlIHRoZSB0aW1lIHBvcnRpb24gb2YgYSBVTElEXG4gKiBAcGFyYW0gbm93IFRoZSBjdXJyZW50IHRpbWVzdGFtcFxuICogQHBhcmFtIGxlbiBMZW5ndGggdG8gZ2VuZXJhdGVcbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIHRpbWVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlVGltZShub3csIGxlbiA9IFRJTUVfTEVOKSB7XG4gICAgaWYgKGlzTmFOKG5vdykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA+IFRJTUVfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtUSU1FX01BWH06ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5vdykgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGxldCBtb2QsIHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgY3VycmVudExlbiA9IGxlbjsgY3VycmVudExlbiA+IDA7IGN1cnJlbnRMZW4tLSkge1xuICAgICAgICBtb2QgPSBub3cgJSBFTkNPRElOR19MRU47XG4gICAgICAgIHN0ciA9IEVOQ09ESU5HLmNoYXJBdChtb2QpICsgc3RyO1xuICAgICAgICBub3cgPSAobm93IC0gbW9kKSAvIEVOQ09ESU5HX0xFTjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIGluV2ViV29ya2VyKCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBVTElEXG4gKiBAcGFyYW0gc2VlZFRpbWUgT3B0aW9uYWwgdGltZSBzZWVkXG4gKiBAcGFyYW0gcHJuZyBPcHRpb25hbCBQUk5HIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBBIFVMSUQgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogIHVsaWQoKTsgLy8gXCIwMUhOWlhEMDdNNUNFTjVYQTY2RU1aU1JaV1wiXG4gKi9cbmZ1bmN0aW9uIHVsaWQoc2VlZFRpbWUsIHBybmcpIHtcbiAgICBjb25zdCBjdXJyZW50UFJORyA9IGRldGVjdFBSTkcoKTtcbiAgICBjb25zdCBzZWVkID0gRGF0ZS5ub3coKSA7XG4gICAgcmV0dXJuIGVuY29kZVRpbWUoc2VlZCwgVElNRV9MRU4pICsgZW5jb2RlUmFuZG9tKFJBTkRPTV9MRU4sIGN1cnJlbnRQUk5HKTtcbn1cblxuY29uc3QgQ09PS0lFX05BTUUgPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIjtcbmNvbnN0IGdldERldmljZVRva2VuID0gKCkgPT4ge1xuICBjb25zdCBleGlzdGluZ0Nvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgoY29va2llKSA9PiBjb29raWUuaW5jbHVkZXMoQ09PS0lFX05BTUUpKTtcbiAgaWYgKGV4aXN0aW5nQ29va2llKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ29va2llLnNwbGl0KFwiPVwiKVsxXTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IHVsaWQoKTtcbiAgc2V0RGV2aWNlVG9rZW4odG9rZW4pO1xuICByZXR1cm4gdG9rZW47XG59O1xuY29uc3Qgc2V0RGV2aWNlVG9rZW4gPSAodG9rZW4pID0+IHtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgb25lWWVhckZyb21Ob3cuc2V0RnVsbFllYXIob25lWWVhckZyb21Ob3cuZ2V0RnVsbFllYXIoKSArIDEpO1xuICBkb2N1bWVudC5jb29raWUgPSBgJHtDT09LSUVfTkFNRX09JHt0b2tlbn07IHBhdGg9LzsgZXhwaXJlcz0ke29uZVllYXJGcm9tTm93LnRvVVRDU3RyaW5nKCl9YDtcbn07XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnR5cGUgPT09IFwiY2hlY2tib3hcIiA/IGlucHV0LmNoZWNrZWQgOiBpbnB1dC52YWx1ZTtcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBnZW5lcmF0ZUFub255bW91c1ZhbHVlcyA9ICgpID0+IHtcbiAgY29uc3QgaWQgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgZW1haWw6IGB4eF8ke2lkfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2lkfWAsXG4gICAgY291bnRyeTogYFVTYFxuICB9O1xufTtcbmNvbnN0IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLkxJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgaWYgKCFjaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykgcmV0dXJuO1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2V0RnVsbE5hbWUgPSAoZmlyc3ROYW1lLCBsYXN0TmFtZSkgPT4ge1xuICByZXR1cm4gW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBiYW5rU2VsZWN0b3JTdHlsZXMgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7aGVpZ2h0ID8/IFwiNjAwcHhcIn0gLSA0OHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5iYW5rLXNlbGVjdG9yLWhlYWRlciB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5iYW5rLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG4uYmFuay1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYm9yZGVyOiAycHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4uYmFuay1pdGVtOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstaXRlbTphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG4uYmFuay1sb2dvIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XG59XG4uYmFuay1sb2dvLXBsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBjb2xvcjogIzZjNzU3ZDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5iYW5rLWluZm8ge1xuICBmbGV4OiAxO1xufVxuLmJhbmstZGlzcGxheS1uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzFhMWExYTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuLmJhbmstbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNmM3NTdkO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgaWQsIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBuYW1lIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwiJHtpZCA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHt0aXRsZSA/PyBcIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIn1cIiBhbGxvdz1cInBheW1lbnRcIiBuYW1lPVwiJHtuYW1lID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG59O1xuY29uc3QgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciA9IChiYW5rcywgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlIH0gPSBvcHRpb25zID8/IHt9O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgIGNvbnN0IGJhbmtMaXN0SHRtbCA9IGJhbmtzLm1hcCgoYmFuaywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGxvZ29IdG1sID0gYmFuay5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke2JhbmsucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7YmFuay5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7YmFuay5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2luZGV4fVwiPlxuICAgICAgICAgICR7bG9nb0h0bWx9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaW5mb1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstZGlzcGxheS1uYW1lXCI+JHtiYW5rLmRpc3BsYXlfbmFtZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLW5hbWVcIj4ke2JhbmsuYmFua19uYW1lfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7YmFua1NlbGVjdG9yU3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke3RpdGxlID8/IFwiU2VsZWN0IHlvdXIgYmFua1wifTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbGlzdFwiPlxuICAgICAgICAgICAgICAke2JhbmtMaXN0SHRtbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gICAgY29uc3QgYmFua0l0ZW1zID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbmstaXRlbVwiKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChob3N0KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSk7XG4gICAgYmFua0l0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShiYW5rc1tpbmRleF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgfSk7XG59O1xuY29uc3QgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0gPSAocGF5bWVudE1ldGhvZFR5cGUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBiYXNlVXJsIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhcHAvZGlyZWN0X2RlYml0L21pY3JvX2RlcG9zaXQvP3R5cGU9JHtwYXltZW50TWV0aG9kVHlwZX1gLCBiYXNlVXJsKS50b1N0cmluZygpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aCwgaGVpZ2h0LCB0aXRsZTogXCJNaWNybyBEZXBvc2l0IEZvcm1cIiB9KTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgJiYgcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICBpZiAoXCJlcnJvclwiIGluIHJlc3BvbnNlLnBheWxvYWQpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHJlc3BvbnNlLnBheWxvYWQuZXJyb3IpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGZhaWxlZFwiKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKFxuICAgICAgZWxlbWVudHMuaWZyYW1lLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4sXG4gICAgICBcIm1pY3JvLWRlcG9zaXQtc3RhdHVzXCIsXG4gICAgICBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZVxuICAgICk7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxIYW5kbGVDYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgY29uc3Qgd3JhcHBlZEhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycygpO1xuICAgICAgb3JpZ2luYWxIYW5kbGVDYW5jZWwoKTtcbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHdyYXBwZWRIYW5kbGVDYW5jZWwpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvclN0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luLCB0eXBlLCByZXNwb25zZU1vZGVsKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsLCBiYXNlVXJsLCBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgZnJhbWVUaXRsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwsIHsgd2lkdGg6IGZyYW1lV2lkdGgsIGhlaWdodDogZnJhbWVIZWlnaHQsIHRpdGxlOiBmcmFtZVRpdGxlIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyk7XG4gICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKFxuICAgICAgZWxlbWVudHMuaWZyYW1lLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4sXG4gICAgICBcInBpbmctM2RzLXN0YXR1c1wiLFxuICAgICAgUGluZzNEU1N0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcyk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaHJlZjogcmVzdWx0LmhyZWZcbiAgfTtcbn07XG5jb25zdCBvcGVuUG9wdXBXaW5kb3cgPSAocG9wdXBOYW1lLCB1cmwpID0+IHtcbiAgY29uc3QgcG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgfVxuICByZXR1cm4gcG9wdXBXaW5kb3c7XG59O1xuY29uc3Qgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwb3B1cE5hbWUsIGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4sIHVybCkgPT4ge1xuICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwb3B1cFdpbmRvdyA9IG9wZW5Qb3B1cFdpbmRvdyhwb3B1cE5hbWUsIHVybCk7XG4gICAgY29uc3QgcG9sbGluZyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkKGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4pO1xuICAgICAgICBpZiAodmVyaWZ5UmVzdWx0LnByZXNlbnQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICAgIHBvcHVwV2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGhyZWY6IHZlcmlmeVJlc3VsdC5ocmVmIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcHVwV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICByZWplY3QoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59O1xuXG5jb25zdCBkZXRlY3RMYW5ndWFnZSA9ICgpID0+IHtcbiAgY29uc3QgbGFuZ3VhZ2VzID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IGxhbmd1YWdlID0gbGFuZ3VhZ2VzPy5bMF07XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpWzBdO1xuICB9XG4gIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHQsIGVycl9fOiBlcnJfXyRzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IGNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gIHBheW1lbnRfbWV0aG9kXG59KSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbmFsRmllbGRzID0ge307XG4gIGlmIChwYXltZW50X21ldGhvZCA9PT0gXCJhY2hcIikge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyR0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kcyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRzLCBlcnJfXzogZXJyX18kciB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcztcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kcihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kcyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRyLCBlcnJfXzogZXJyX18kcSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyRxKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuY29uc3QgY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSA9IChmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBmaWVsZHMuZW1haWwsXG4gICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZmllbGRzLmxhc3ROYW1lLFxuICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBmaWVsZHMuZmlyc3ROYW1lLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMpLFxuICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncylcbiAgfTtcbn07XG5jb25zdCBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogbG9nX18yIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhhcmdzLmxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbik7XG4gIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBsb2dfXzIoYFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5gKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGF3YWl0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFyZ3MudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBsb2dfXzIoYFVzaW5nIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBpZiAoIWFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyRxKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgYXJncy5jb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzKSxcbiAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmAsIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICB9XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0gei5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuY29uc3QgbG9hZFNjcmlwdCA9ICh7XG4gIHNjcmlwdElkLFxuICBzcmMsXG4gIGNoZWNrTG9hZGVkRm5cbn0pID0+IHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpO1xuICAgIGlmIChjaGVja0xvYWRlZEZuKCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nU2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBleGlzdGluZ1NjcmlwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdChiYXNlUmVxdWVzdCkgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZ2V0Q3VycmVudEVudihiYXNlVXJsKTtcbiAgcmV0dXJuIGVudiA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gYXN5bmMgKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTJdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTNdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSA9IGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdIHx8IGJpbGxpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgaWYgKHNoaXBwaW5nQWRkcmVzcykge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMyB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldIHx8IHNoaXBwaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gfHwgc2hpcHBpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldIHx8IHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHEsIGVycl9fOiBlcnJfXyRwIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1iYWNzXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QkFDU0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kcShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHEoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyRxKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRxKGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRxKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgZGlyZWN0RGViaXREYXRhID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiBtaWNyb0RlcG9zaXREYXRhPy5zb3J0X2NvZGUsXG4gICAgICAgIGFkZHJlc3M6IHsgLi4uYmlsbGluZ0FkZHJlc3MsIHRvd246IGJpbGxpbmdBZGRyZXNzLmNpdHksIHBvc3Rjb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZSB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRxKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkJBQ1MgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kcShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWJhY3NcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kcChcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRwLCBlcnJfXzogZXJyX18kbyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZWZ0XCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4RUZURmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHAoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHAoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcChcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBpbnN0aXR1dGlvbl9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LnRyYW5zaXRfbnVtYmVyLFxuICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXJcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiBkaXJlY3REZWJpdERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kcChcIkVGVCB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRwKGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG8oXCJFRlQgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRvLCBlcnJfXzogZXJyX18kbiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtc2VwYVwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleFNFUEFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJG8oXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRvKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJG8oXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgYXZhaWxhYmxlQmFua3MgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBzZWxlY3RlZEJhbms7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiBhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kbyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiBtaWNyb0RlcG9zaXREYXRhPy5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJG8oXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiU0VQQSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRvKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtc2VwYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRtIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJG0oZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kbShlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRtKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQyID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/PyB2b2lkIDAsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbFxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgaW5pdGlhbFByZXZpZXcsXG4gICAgcHJlZmlsbCxcbiAgICBkZWZhdWx0TGFiZWxcbiAgfSk7XG4gIGxldCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXG4gICAgICBcImVtYWlsXCIsXG4gICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzID8gW1wicG9zdGFsQWRkcmVzc1wiXSA6IFtdXG4gICAgXSxcbiAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgXSxcbiAgICB0b3RhbCxcbiAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgdG90YWwsXG4gICAgICBwcmVmaWxsXG4gICAgfSlcbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIC4uLnBheW1lbnRSZXF1ZXN0LFxuICAgICAgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHBheW1lbnRSZXF1ZXN0KVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcGF5bWVudFJlcXVlc3QgPSB7IC4uLnBheW1lbnRSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfTtcbiAgfVxuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbmNvbnN0IEFkeWVuTG9jYWxlID0gei5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xuY29uc3QgeyBsb2dfXzogbG9nX18kbSwgZXJyX186IGVycl9fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tY2NcIik7XG5jb25zdCBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQyID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kbChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBkZWNvZGVBZHllbkFjdGlvbiA9IChhY3Rpb24pID0+IHtcbiAgY29uc3QgZGVzZXJpYWxpemVkID0gSlNPTi5wYXJzZShhY3Rpb24pO1xuICByZXR1cm4gZGVzZXJpYWxpemVkO1xufTtcbmNvbnN0IGlzQWR5ZW5BdmFpbGFibGUgPSAoKSA9PiB7XG4gIHJldHVybiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvd1tcIkFkeWVuV2ViXCJdO1xufTtcbmNvbnN0IGdldEFkeWVuQ2hlY2tvdXQgPSBhc3luYyAoKSA9PiB7XG4gIGxvZ19fJG0oXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgZXJyX18kbChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgbG9nX18kbShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICByZXR1cm4gd2luZG93W1wiQWR5ZW5XZWJcIl1bXCJBZHllbkNoZWNrb3V0XCJdO1xufTtcbmNvbnN0IGhhbmRsZUFkeWVuM2RzID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IGhlYWRlcnMsIGxvY2FsZSwgY291bnRyeUNvZGUsIGNvbXBvbmVudCwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFjdGlvbiA9IGRlY29kZUFkeWVuQWN0aW9uKGhlYWRlcnNbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICBsb2dfXyRtKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX1gKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJG0oXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uUGF5bWVudEZhaWxlZCA9IChzdGF0ZSkgPT4ge1xuICAgICAgZXJyX18kbChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBzdGF0ZSk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBlcnJfXyRsKFwiQWR5ZW4gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBvbkFkZGl0aW9uYWxEZXRhaWxzID0gKHN0YXRlLCBfLCBfXykgPT4ge1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IHN0YXRlLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgZ2V0QWR5ZW5DaGVja291dCgpLnRoZW4oXG4gICAgICAoYWR5ZW5DaGVja291dCkgPT4gYWR5ZW5DaGVja291dCh7XG4gICAgICAgIGNsaWVudEtleTogaGVhZGVyc1tcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBoZWFkZXJzW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgY291bnRyeUNvZGUsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHMsXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZCxcbiAgICAgICAgb25FcnJvclxuICAgICAgfSlcbiAgICApLnRoZW4oKGNoZWNrb3V0KSA9PiB7XG4gICAgICBjaGVja291dC5jcmVhdGVGcm9tQWN0aW9uKGFjdGlvbiwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoY29tcG9uZW50KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZGV0ZXJtaW5lTG9jYWxlID0gKHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgYnJvd3NlckxvY2FsZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlO1xuICBjb25zdCBsb2NhbGUgPSBwcmVmaWxsTG9jYWxlID8/IGJyb3dzZXJMb2NhbGU7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW5Mb2NhbGUuc2FmZVBhcnNlKGxvY2FsZSk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGwoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke2xvY2FsZX0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCk7XG4gICAgcmV0dXJuIFwiZW4tVVNcIjtcbiAgfVxuICBsb2dfXyRtKGBSZXNvbHZlZCBsb2NhbGU6ICR7cGFyc2VSZXN1bHQuZGF0YX1gKTtcbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1hZHllbi1hY3Rpb25cIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5BZHllbjNkc0Zsb3cgPSBhc3luYyAoY291bnRyeUNvZGUsIGVycm9yUmVzcG9uc2VIZWFkZXJzLCBwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQyKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29tcG9uZW50LmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBpZnJhbWUucmVwbGFjZVdpdGgoY29tcG9uZW50KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQWR5ZW4zZHMoe1xuICAgIGhlYWRlcnMsXG4gICAgbG9jYWxlOiBkZXRlcm1pbmVMb2NhbGUocHJlZmlsbExvY2FsZSksXG4gICAgY291bnRyeUNvZGUsXG4gICAgY29tcG9uZW50LFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBpZiAoIXJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIH1cbiAgICBsb2dfXyRtKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuY29uc3QgQXBwbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoXG4gICAgICAgIG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kbChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGssIGVycl9fOiBlcnJfXyRrIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBZHllbkFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRrKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGsoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRrKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5BcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGsoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ucGF5bWVudFJlcXVlc3QudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGsoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRqLCBlcnJfXzogZXJyX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRqKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kaihcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGooXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaihcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5hZHllbkdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaihcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kaihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGooXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogZ2V0RnJhdWRNZXRhZGF0YSgpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kaihcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGooXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IG1ldGhvZCBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRqKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRpLCBlcnJfXzogZXJyX18kaSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYWNoXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QUNIRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJGkoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiYWNoX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGkoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kaShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRpKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kaShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRpKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRoKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRoKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRoKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCByZXF1aXJlZFVzZXJBY3Rpb25zID0gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXTtcbiAgICBjb25zdCBjb25zZW50SWQgPSByZXF1aXJlZFVzZXJBY3Rpb25zLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJGgoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhPy5yZWRpcmVjdF91cmwgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkKSB7XG4gICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCk7XG4gICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgfVxuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGcoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGcoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGcoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnBheW1lbnRSZXF1ZXN0LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGgoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRmLCBlcnJfXzogZXJyX18kZyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRnKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGcoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRmKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZyhcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGcoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRmKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGYoXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGYoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGYoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGYoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGYoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRmKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGUsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtYXBwbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsLFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHBheW1lbnRSZXF1ZXN0LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kZihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGQsIGVycl9fOiBlcnJfXyRlIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kZChcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kZChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYywgZXJyX186IGVycl9fJGQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kZChkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kYyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dmF1bHRJZH1dYCk7XG4gICAgcmV0dXJuIHZhdWx0SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGQoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBwYXJzZUFyZ0Zyb21IcmVmID0gKGhyZWYsIGFyZ05hbWUpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KGFyZ05hbWUpO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdmF1bHRJZCxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjeWJzLWZyYW1lXCIpO1xuY29uc3QgYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciA9IChwb3N0VXJsLCBhY2Nlc3NUb2tlbikgPT4ge1xuICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICBpZnJhbWUubmFtZSA9IFwiY2FyZGluYWxfY29sbGVjdGlvbl9pZnJhbWVcIjtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgaWZyYW1lLnN0eWxlLndpZHRoID0gXCIxMHB4XCI7XG4gIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHBvc3RVcmw7XG4gIGZvcm0ubWV0aG9kID0gXCJQT1NUXCI7XG4gIGZvcm0udGFyZ2V0ID0gaWZyYW1lLm5hbWU7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgaW5wdXQubmFtZSA9IFwiSldUXCI7XG4gIGlucHV0LnZhbHVlID0gYWNjZXNzVG9rZW47XG4gIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIGNvbnN0IGRldGFjaCA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChmb3JtKTtcbiAgfTtcbiAgcmV0dXJuIHsgZm9ybSwgZGV0YWNoIH07XG59O1xuY29uc3QgcnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24gPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgeyBwb3N0VXJsLCBhY2Nlc3NUb2tlbiB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChwb3N0VXJsKS5vcmlnaW47XG4gICAgY29uc3QgeyBmb3JtLCBkZXRhY2ggfSA9IGF0dGFjaERldmljZURhdGFDb2xsZWN0b3IocG9zdFVybCwgYWNjZXNzVG9rZW4pO1xuICAgIGxvZ19fJGIoXCJBdHRhY2hlZCBkZXZpY2UgZGF0YSBjb2xsZWN0b3JcIik7XG4gICAgY29uc3QgaGFuZGxlQ29sbGVjdGlvbkV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSBleHBlY3RlZE9yaWdpbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgIGxvZ19fJGIoXCJSZWNlaXZlZCBldmVudCBmcm9tIGRldmljZSBkYXRhIGNvbGxlY3RvcjpcIiwgZGF0YSk7XG4gICAgICBpZiAoZGF0YVtcIk1lc3NhZ2VUeXBlXCJdID09PSBcInByb2ZpbGUuY29tcGxldGVkXCIpIHtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZGV0YWNoKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlQ29sbGVjdGlvbkV2ZW50KTtcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlQ29sbGVjdGlvbkV2ZW50KTtcbiAgICAgIGxvZ19fJGIoXCJBdHRhY2hlZCBsaXN0ZW5lciB0byB3aW5kb3dcIik7XG4gICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgbG9nX18kYihcIlN1Ym1pdHRlZCBmb3JtXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJfXyRjKFwiRXJyb3Igc3VibWl0dGluZyBmb3JtOlwiLCBlcnJvcik7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuUGF5ZXJBdXRoID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybCwgYWNjZXNzVG9rZW4sIG1lcmNoYW50RGF0YSwgaWZyYW1lLCBob3N0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgZm9ybS5hY3Rpb24gPSBzdGVwVXBVcmw7XG4gIGZvcm0ubWV0aG9kID0gXCJQT1NUXCI7XG4gIGZvcm0udGFyZ2V0ID0gaWZyYW1lLm5hbWU7XG4gIGNvbnN0IHRva2VuSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIHRva2VuSW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIHRva2VuSW5wdXQubmFtZSA9IFwiSldUXCI7XG4gIHRva2VuSW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgY29uc3QgbWRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgbWRJbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgbWRJbnB1dC5uYW1lID0gXCJNRFwiO1xuICBtZElucHV0LnZhbHVlID0gbWVyY2hhbnREYXRhO1xuICBmb3JtLmFwcGVuZENoaWxkKHRva2VuSW5wdXQpO1xuICBmb3JtLmFwcGVuZENoaWxkKG1kSW5wdXQpO1xuICBob3N0LmFwcGVuZENoaWxkKGZvcm0pO1xuICByZXR1cm4gZm9ybTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGEsIGVycl9fOiBlcnJfXyRiIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnNcIik7XG5jb25zdCBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6LnN0cmluZygpLFxuICBhY2Nlc3NfdG9rZW46IHouc3RyaW5nKCksXG4gIGRkX3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBkZF90b2tlbjogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXJjaGFudF9kYXRhOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEZSSUVORExZX0VSUiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQuc2FmZVBhcnNlKHVzZXJBY3Rpb24pO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRiKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihGUklFTkRMWV9FUlIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgcmV0dXJuIHVzZXJBY3Rpb25bXCJ0eXBlXCJdID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIjtcbn07XG5jb25zdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChzdGVwVXBVcmwpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGEoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgbG9nX18kYShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGxvZ19fJGEoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBzdGF0dXMpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIGNsZWFudXBQb2xsaW5nKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGV4cGVjdGVkT3JpZ2luLCBcInBpbmctM2RzLXN0YXR1c1wiLCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIGNvbnN0IGNsZWFudXBQb2xsaW5nID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIHJlc29sdmUoeyBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsIGNsZWFudXAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgY29uc3QgZm9ybSA9IHJ1blBheWVyQXV0aCh7XG4gICAgICBzdGVwVXBVcmwsXG4gICAgICBhY2Nlc3NUb2tlbixcbiAgICAgIG1lcmNoYW50RGF0YSxcbiAgICAgIGlmcmFtZSxcbiAgICAgIGhvc3RcbiAgICB9KTtcbiAgICBmb3JtLnN1Ym1pdCgpO1xuICB9KTtcbn07XG5jb25zdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3cgPSBhc3luYyAodXNlckFjdGlvbikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXNwb25zZUhlYWRlcnModXNlckFjdGlvbik7XG4gIGNvbnN0IHsgc3RlcF91cF91cmwsIGFjY2Vzc190b2tlbiwgZGRfdXJsLCBkZF90b2tlbiwgbWVyY2hhbnRfZGF0YSB9ID0gcGF5bG9hZDtcbiAgaWYgKGRkX3VybCAmJiBkZF90b2tlbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbih7XG4gICAgICBwb3N0VXJsOiBkZF91cmwsXG4gICAgICBhY2Nlc3NUb2tlbjogZGRfdG9rZW5cbiAgICB9KTtcbiAgICBsb2dfXyRhKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGNvbGxlY3Rpb25SZXN1bHQuU3RhdHVzKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJfXyRiKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIH1cbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBsb2dfXyRhKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ3liZXJzb3VyY2UzZHMoe1xuICAgIHN0ZXBVcFVybDogc3RlcF91cF91cmwsXG4gICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICBtZXJjaGFudERhdGE6IG1lcmNoYW50X2RhdGEsXG4gICAgaWZyYW1lLFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBsb2dfXyRhKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBzdHJpcGVMb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtY2NcIik7XG5jb25zdCBTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHN0cmlwZUNDM0RTRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgdHJhY2soXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgdHJhY2soXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5jb25zdCBwYXJzZVVzZXJGRVBheWxvYWQgPSAocGF5bG9hZCkgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQuc2FmZVBhcnNlKHBheWxvYWQpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShwYXJzZWQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogcGFyc2VkLmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHBhcnNlZC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiBwYXJzZWQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn07XG5cbmNvbnN0IE1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyA9IDQ7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ5LCBlcnJfXzogZXJyX18kYSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJ1bmlmaWVkLWNjXCIpO1xuY29uc3QgdW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93ID0gYXN5bmMgKHtcbiAgY29udGV4dCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBub25DZGVGb3JtSW5wdXRzLFxuICBmb3JtQ2FsbGJhY2tzLFxuICBjdXN0b21QYXJhbXNcbn0pID0+IHtcbiAgbG9nX18kOShg4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICBsb2dfXyQ5KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBnZXREZXZpY2VUb2tlbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiB0cnVlLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudFJvdXRlSWRcbiAgfTtcbiAgZXJyX18kYShjdXN0b21QYXJhbXMsIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kOShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB0b2tlbml6ZUNhcmRSZXN1bHRzID0gYXdhaXQgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyhjdXN0b21QYXJhbXMuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzKHRva2VuaXplQ2FyZFJlc3VsdHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gIGxvZ19fJDkoYOKUnCBzdGFydFBmIHJlc3VsdGAsIHN0YXJ0UGZSZXN1bHQpO1xuICBpZiAoc3RhcnRQZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJldHVyblN1Y2Nlc3NSZXN1bHQocHJlZmlsbC5tb2RlLCBzdGFydFBmUmVzdWx0KTtcbiAgfVxuICBpZiAoIXN0YXJ0UGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIH1cbiAgcmV0dXJuIHJ1bkNvbmZpcm1Mb29wKHtcbiAgICBjb250ZXh0LFxuICAgIHByZWZpbGwsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjb21tb25DaGVja291dFBhcmFtcyxcbiAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgIHN0YXJ0UGZSZXN1bHQsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IHN0YXJ0UGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZFxuICB9KTtcbn07XG5jb25zdCBydW5Db25maXJtTG9vcCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZFxuICB9ID0gcGFyYW1zO1xuICBsZXQgcGZSZXN1bHQgPSBzdGFydFBmUmVzdWx0O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUzsgaSsrKSB7XG4gICAgbG9nX18kOShg4pScIFJ1bm5pbmcgY29uZmlybSBsb29wIGl0ZXJhdGlvbiAke2l9YCk7XG4gICAgdHJhY2soXCJ1bmlmaWVkX2NjX2NvbmZpcm1fbG9vcF9pdGVyYXRpb25cIiwgeyBpdGVyYXRpb246IGkgfSk7XG4gICAgY29uc3QgeyB1c2VyQWN0aW9uIH0gPSB2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbihwZlJlc3VsdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJBY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5SZXF1aXJlZFVzZXJBY3Rpb24oY29udGV4dC5iYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YSxcbiAgICAgICAgLi4udXNlckFjdGlvblJlc3VsdC5tZXRhZGF0YUZvckNvbmZpcm1TdGVwXG4gICAgICB9O1xuICAgICAgbG9nX18kOShg4pScIE5ldyBleHRyYSBtZXRhZGF0YWAsIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGVycl9fJGEoYOKUnCBFcnJvciBpbiBydW5uaW5nIHVzZXIgYWN0aW9uIGluIGl0ZXJhdGlvbiAke2l9LiBDb250aW51aW5nIHRvIGNvbmZpcm0gc3RlcC4uLmAsIGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsIGl0ZXJhdGlvbjogaSB9KTtcbiAgICB9XG4gICAgcGZSZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogY2hlY2tvdXRBdHRlbXB0SWQsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhXG4gICAgfSk7XG4gICAgbG9nX18kOShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke2l9KWAsIHBmUmVzdWx0KTtcbiAgICBpZiAocGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJldHVyblN1Y2Nlc3NSZXN1bHQocHJlZmlsbC5tb2RlLCBwZlJlc3VsdCk7XG4gICAgfVxuICB9XG4gIHRyYWNrKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHBmUmVzdWx0LmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgY29uZmlybVBGUmVzdWx0OiBwZlJlc3VsdFxuICB9KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn07XG5jb25zdCBydW5SZXF1aXJlZFVzZXJBY3Rpb24gPSBhc3luYyAoYmFzZVVybCwgdXNlckFjdGlvbiwgcHJlZmlsbCwgbm9uQ2RlRm9ybUlucHV0cykgPT4ge1xuICBpZiAodXNlckFjdGlvbi5fdW5pZmllZF9jY19hY3Rpb25fbmFtZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgIGlmICh1c2VyQWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKSB7XG4gICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VVc2VyRkVQYXlsb2FkKHVzZXJBY3Rpb24pKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGJhc2VVcmwsIHVzZXJBY3Rpb24pO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHModXNlckFjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHVzZXJBY3Rpb24sXG4gICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhZHllbjogYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IH0gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzKHVzZXJBY3Rpb24pKSB7XG4gICAgICBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3codXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZkxlZ2FjeTNEU1BhdGgodXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyh7IHJlcXVpcmVkX3VzZXJfYWN0aW9uczogW3VzZXJBY3Rpb25dIH0sIGJhc2VVcmwpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgM0RTIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgfVxufTtcbmNvbnN0IGNoZWNrSWZMZWdhY3kzRFNQYXRoID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgdHJ5IHtcbiAgICBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShbdXNlckFjdGlvbl0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uID0gKHBmUmVzdWx0KSA9PiB7XG4gIGlmICghcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgaWYgKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgdXNlckFjdGlvbiA9IFVzZXJBY3Rpb25GRVBheWxvYWQuc2FmZVBhcnNlKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gIGlmICghdXNlckFjdGlvbi5zdWNjZXNzKSB7XG4gICAgZXJyX18kYShcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gICAgZXJyX18kYShcIlBhcnNpbmcgZXJyb3JcIiwgdXNlckFjdGlvbi5lcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5kYXRhXG4gIH07XG59O1xuY29uc3QgcmV0dXJuU3VjY2Vzc1Jlc3VsdCA9IChwcmVmaWxsTW9kZSwgcGZSZXN1bHQpID0+IHtcbiAgaWYgKHByZWZpbGxNb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBjb25zdCBwYXltZW50TWV0aG9kSWQgPSBwZlJlc3VsdC5jY19wbV9pZCA/PyBwZlJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXS5pZDtcbiAgICBpZiAoIXBheW1lbnRNZXRob2RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBwYXltZW50X21ldGhvZF9pZDogcGF5bWVudE1ldGhvZElkXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGDilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJhY2soXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgICBjb25zdCB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gPSBwcmVmaWxsLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncz8uW1widW5pZmllZF9jY1wiXSA/PyAwO1xuICAgIGxvZ19fJDgoYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZCh1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gKiAxMDApfSVgKTtcbiAgICBjb25zdCByb2xsID0gTWF0aC5yYW5kb20oKTtcbiAgICBjb25zdCB1c2VVbmlmaWVkQ0NGbG93ID0gcm9sbCA8IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbztcbiAgICBjb25zdCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSA9IHtcbiAgICAgIHJvbGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8sXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93XG4gICAgfTtcbiAgICBpZiAodXNlVW5pZmllZENDRmxvdykge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7cm9sbH0gdnMgJHt1bmlmaWVkQ0NSb2xsb3V0UmF0aW99KWApO1xuICAgICAgdHJhY2soXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICAgIHJldHVybiB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3coe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtcyxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSk7XG4gICAgfVxuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiBmYWxzZSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kOChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQ4KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDgoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyQ4KGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kOChcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kOChg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kOChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kOChg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kOChg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJDkoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kOShlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kOChg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kOChg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDgoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ3LCBlcnJfXzogZXJyX18kOCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJDcoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kNyhgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kNyhgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNyhgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyQ3KFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyQ3KFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kNyhcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kNyhcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kNyhcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNyhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyQ3KGBDb25maXJtIHJlc3VsdDogJHtjb25maXJtUmVzdWx0fWApO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNyhgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgbG9nX18kNyhg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICBsb2dfXyQ3KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDcoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kOChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNiwgZXJyX186IGVycl9fJDcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicGF5cGFsXCIpO1xuY29uc3QgUGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3QoeyBjbGllbnRfaWQ6IHouc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuY29uc3QgaW5pdFBheXBhbEZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3QgcGF5cGFsQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBheXBhbENwbSk7XG4gIGlmICghcGF5cGFsQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5QYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJDYoYFJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IHsgaXNBbm9ueW1vdXMsIHVzZVJlZGlyZWN0RmxvdyB9ID0gY3VzdG9tUGFyYW1zLnNldHRpbmdzID8/IHt9O1xuICAgICAgbG9nX18kNihgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgICAgY29uc3QgY3BtID0gUGF5cGFsQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgICBsb2dfXyQ2KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uaXNBbm9ueW1vdXMgPyBnZW5lcmF0ZUFub255bW91c1ZhbHVlcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGxvZ19fJDYoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICAgIGNvbnN0IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3cgPSB2NCgpO1xuICAgICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjcG0ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IHVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgICB9LFxuICAgICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKHVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgICBsb2dfXyQ2KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICAgIHJlZGlyZWN0VXJsXG4gICAgICApO1xuICAgICAgbG9nX18kNihcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICAgIGNvbnN0IGFwcHJvdmFsU2Vzc2lvbklkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBpc1BheUZpcnN0RmxvdyA/IGFwcHJvdmFsU2Vzc2lvbklkIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDYoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjcG0sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBpc1BheUZpcnN0Rmxvd1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LXBheXBhbFwiKTtcbmNvbnN0IFBvY2t5dFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRQb2NreXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBvY2t5dFBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQb2NreXRQYXlwYWxDcG0pO1xuICBpZiAoIXBvY2t5dFBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwb2NreXRQYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgc2V0dGluZ3M/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgfSxcbiAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgfTtcbiAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICBsb2dfXyQ1KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ1KFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgIGxvZ19fJDUoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgcmVkaXJlY3RVcmxcbiAgICApO1xuICAgIGxvZ19fJDUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICAgIGVycl9fJDYoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgfVxuICAgIGxvZ19fJDUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kNihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kNChgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ0KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kNChgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDMoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQzKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNChgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDMoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICBjb25zdCBydW5TdHJpcGVQckZsb3cyID0gKHByb3ZpZGVyLCBwYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICAgIHByLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5IH0sXG4gICAgICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3ckMSA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMyhgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHIgPSBpbml0UmVzdWx0LnByO1xuICAgIGlmIChjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBsb2dfXyQzKGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgY29uc3QgYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9IHR5cGVvZiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIgPyBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgYXBwbGVQYXlQYXltZW50UmVxdWVzdCwgb3ZlcnJpZGUubGFiZWwpO1xuICAgIH1cbiAgICBsb2dfXyQzKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kMyhgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDMoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvclBSKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBsb2dfXyQzKGBDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uYCk7XG4gICAgYXdhaXQgY29uZmlybVN0cmlwZVByUE0obmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kMyhgQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQzKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQucGF5bWVudE1ldGhvZD8uYmlsbGluZ19kZXRhaWxzPy5hZGRyZXNzO1xuICBjb25zdCBzaGlwcGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IHNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IHNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kMyhgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nLCBzdHJpcGVBcHBsZVBheSwgbGFiZWwpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBsYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIHRyYWNrKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgICAgcHJvdmlkZXI6IHdpdGhQcm92aWRlcixcbiAgICAgIHByb2Nlc3Nvcjogd2l0aFByb2Nlc3NvcixcbiAgICAgIGNwbXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBvY2t5dFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBheXBhbEZsb3dcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QUNIOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBQ0hGbG93XG4gIH0sXG4gIGFpcndhbGxleEVGVDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4RUZURmxvd1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhCQUNTRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhTRVBBRmxvd1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBpbml0TG9vcEZsb3csXG4gICAgcnVuOiBydW5Mb29wRmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBZHllbkdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5BcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBZHllbkFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuQXBwbGVQYXlGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIgPSAoZmxvd05hbWUsIGluaXRGbG93KSA9PiB7XG4gIGNvbnN0IHB1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChpbml0UGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgaW5pdEZsb3coaW5pdFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKclCAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGluaXRSZXN1bHQpO1xuICAgICAgICBwdWJsaXNoZXIuc2V0KGluaXRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMyhg8J2ZrSAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgXCJEZXRhaWxzOlwiLCBlcnJvcik7XG4gICAgICAgIHB1Ymxpc2hlci50aHJvdyhlcnJvciwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWxsSW5pdEZsb3dzID0gYXN5bmMgKGZsb3dzLCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZmxvd3MpLm1hcCgoZmxvdykgPT4gZmxvdy5pbml0aWFsaXplKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSkpO1xufTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAgIC8vIFN0cmlwZSBQUlxuICAgIHN0cmlwZVBSOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KSxcbiAgICAvLyBTdHJpcGUgTGlua1xuICAgIHN0cmlwZUxpbms6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIExpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gUGF5UGFsXG4gICAgcGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBheVBhbFwiLCBPanNGbG93cy5wYXlwYWwuaW5pdCksXG4gICAgLy8gUG9ja3l0IFBheVBhbFxuICAgIHBvY2t5dFBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQb2NreXQgUGF5UGFsXCIsIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgQXBwbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gICAgYWR5ZW5Hb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEFwcGxlUGF5XG4gICAgYWR5ZW5BcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBBcHBsZVBheVwiLCBPanNGbG93cy5hZHllbkFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQyKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG5leHRXaW5kb3c/Lm5leHQgfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibmV4dGpzXCIgLyogTmV4dEpTICovO1xuICAgIH1cbiAgICBjb25zdCBudXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChudXh0V2luZG93Py5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibnV4dFwiIC8qIE51eHQgKi87XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBuZXh0V2luZG93Py5uZXh0Py52ZXJzaW9uIHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18/LmJ1aWxkSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCIgLyogTnV4dCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ2dWVcIiAvKiBWdWUgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi86IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQyID0gZ2V0V2luZG93U2FmZSgpPy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgbmdWZXJzaW9uRWwgPSBkb2N1bWVudDI/LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBuZ1ZlcnNpb25FbCA/IG5nVmVyc2lvbkVsLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtJbmZvKCkge1xuICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlY3RGcmFtZXdvcmsoKTtcbiAgY29uc3QgdmVyc2lvbiA9IGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH07XG59XG5cbmNvbnN0IGdldEZyYXVkTWV0YWRhdGEgPSAoKSA9PiB7XG4gIGNvbnN0IHNjcmVlbl9oZWlnaHQgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbDtcbiAgY29uc3Qgc2NyZWVuX3dpZHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbDtcbiAgY29uc3QgY29sb3JfZGVwdGggPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGw7XG4gIGNvbnN0IGphdmFfZW5hYmxlZCA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogZmFsc2U7XG4gIGNvbnN0IHVzZXJfYWdlbnQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbDtcbiAgY29uc3QgYWNjZXB0X2hlYWRlciA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgbGFuZ3VhZ2UgPSBudWxsO1xuICBpZiAod2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICBsYW5ndWFnZSA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2U7XG4gIH1cbiAgY29uc3QgdGltZV96b25lX29mZnNldCA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcl9kZXB0aCxcbiAgICBqYXZhX2VuYWJsZWQsXG4gICAgamF2YXNjcmlwdF9lbmFibGVkOiB0cnVlLFxuICAgIGxhbmd1YWdlLFxuICAgIHNjcmVlbl9oZWlnaHQsXG4gICAgc2NyZWVuX3dpZHRoLFxuICAgIHRpbWVfem9uZV9vZmZzZXQsXG4gICAgdXNlcl9hZ2VudCxcbiAgICBhY2NlcHRfaGVhZGVyXG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiY2FyZFwiXSA9IFwiY2FyZFwiO1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xudmFyIFBheW1lbnRQcm92aWRlclR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXltZW50UHJvdmlkZXJUeXBlMikgPT4ge1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFDSFwiXSA9IFwiYWNoXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiRUZUXCJdID0gXCJlZnRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJCQUNTXCJdID0gXCJiYWNzXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU0VQQVwiXSA9IFwic2VwYVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFQUExFX1BBWVwiXSA9IFwiYXBwbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JFRElUX0NBUkRcIl0gPSBcImNyZWRpdF9jYXJkXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiR09PR0xFX1BBWVwiXSA9IFwiZ29vZ2xlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNUUklQRV9MSU5LXCJdID0gXCJzdHJpcGVfbGlua1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSWVBUT1wiXSA9IFwiY3J5cHRvXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiUEFZUEFMXCJdID0gXCJwYXlwYWxcIjtcbiAgcmV0dXJuIFBheW1lbnRQcm92aWRlclR5cGUyO1xufSkoUGF5bWVudFByb3ZpZGVyVHlwZSB8fCB7fSk7XG5cbmNvbnN0IGdldEFwcGxlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYXBwbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXksIGluaXRGbG93cy5hZHllbkFwcGxlUGF5XTtcbiAgY29uc3QgYXBwbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBhcHBsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNBcHBsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgaWYgKGlzQXBwbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhcHBsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYXBwbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBcHBsZVBheUZsb3coYXBwbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXksIGluaXRGbG93cy5hZHllbkdvb2dsZVBheV07XG4gIGNvbnN0IGdvb2dsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGdvb2dsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzR29vZ2xlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgaWYgKGlzR29vZ2xlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGdvb2dsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEdvb2dsZVBheUZsb3coZ29vZ2xlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QXBwbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IHN0YXJ0R29vZ2xlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInRyYWNlclwiKTtcbmNvbnN0IGluaXRUcmFjZXJTYWZlID0gKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBpbml0VHJhY2VyVW5zYWZlKHZlcnNpb24sIGJhc2VVcmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycl9fJDEoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7ZXJyb3J9YCk7XG4gIH1cbn07XG5sZXQgZ2xvYmFsVHJhY2VyO1xuY29uc3QgaW5pdFRyYWNlclVuc2FmZSA9IGFzeW5jICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBzZGtUcmFjZVdlYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDd9fi5qcycpO1xuICBjb25zdCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFdlYlRyYWNlclByb3ZpZGVyIH0gPSBzZGtUcmFjZVdlYjtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uRmV0Y2ggPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBmfX4uanMnKTtcbiAgY29uc3QgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9ID0gaW5zdHJ1bWVudGF0aW9uRmV0Y2g7XG4gIGNvbnN0IGNvbnRleHRab25lID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZX1+LmpzJyk7XG4gIGNvbnN0IHsgWm9uZUNvbnRleHRNYW5hZ2VyIH0gPSBjb250ZXh0Wm9uZTtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwaX1+LmpzJyk7XG4gIGNvbnN0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gPSBpbnN0cnVtZW50YXRpb247XG4gIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGt9fi5qcycpO1xuICBjb25zdCB7IFJlc291cmNlIH0gPSByZXNvdXJjZXM7XG4gIGNvbnN0IGRldGVjdFJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLSF+ezAwbX1+LmpzJykudGhlbihuID0+IG4uZCk7XG4gIGNvbnN0IHsgZGV0ZWN0UmVzb3VyY2VzU3luYyB9ID0gZGV0ZWN0UmVzb3VyY2VzO1xuICBjb25zdCBleHBvcnRlclRyYWNlT3RscCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMG59fi5qcycpO1xuICBjb25zdCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gPSBleHBvcnRlclRyYWNlT3RscDtcbiAgY29uc3QgcHJvcGFnYXRvckIzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwan1+LmpzJyk7XG4gIGNvbnN0IHsgQjNQcm9wYWdhdG9yLCBCM0luamVjdEVuY29kaW5nIH0gPSBwcm9wYWdhdG9yQjM7XG4gIGNvbnN0IHNka1RyYWNlQmFzZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDF9fi5qcycpO1xuICBjb25zdCB7IEJhdGNoU3BhblByb2Nlc3NvciB9ID0gc2RrVHJhY2VCYXNlO1xuICBsb2dfXyQxKGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke3ZlcnNpb259IGFuZCBiYXNlVXJsICR7YmFzZVVybH1gKTtcbiAgY29uc3QgY29sbGVjdG9yVXJsID0gZ2V0Q29sbGVjdG9yVXJsKGJhc2VVcmwpO1xuICBsb2dfXyQxKGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Y29sbGVjdG9yVXJsfWApO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogY29sbGVjdG9yVXJsIH0pO1xuICBjb25zdCBiYXNlQXR0cnMgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogdmVyc2lvbixcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYlRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZTogbmV3IFJlc291cmNlKGJhc2VBdHRycykubWVyZ2UoZGV0ZWN0UmVzb3VyY2VzU3luYygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IobmV3IENvbnNvbGVTcGFuRXhwb3J0ZXIoKSksXG4gICAgICBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgcHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgWm9uZUNvbnRleHRNYW5hZ2VyKCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUiB9KVxuICB9KTtcbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgRmV0Y2hJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBnbG9iYWxUcmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBsb2dfXyQxKGBUcmFjZXIgaW5pdGlhbGl6ZWRgKTtcbiAgcmV0dXJuIGdsb2JhbFRyYWNlcjtcbn07XG5jb25zdCBnZXRDb2xsZWN0b3JVcmwgPSAoZnJvbUJhc2VVcmwpID0+IHtcbiAgY29uc3QgYmFzZUhvc3RuYW1lID0gbmV3IFVSTChmcm9tQmFzZVVybCkuaG9zdG5hbWU7XG4gIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIjtcbiAgfSBlbHNlIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCI7XG4gIH1cbiAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHBheWxvYWQub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2RlQnJpZGdlSWZyYW1lID0gdGhpcy5jcmVhdGVFbGVtZW50KEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCI7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY2RlQnJpZGdlSWZyYW1lLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5tb3VudChcImJvZHlcIik7XG4gICAgICAgICAgbG9nX18oXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUNvbm5TcGFuID0gdHJhY2VyPy5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIGNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUNvbm5TcGFuPy5lbmQoKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgICAgYXdhaXQgc2V0VXNlckRldmljZVRva2VuKGFueUNkZUNvbm4sIHRoaXMuZGV2aWNlVG9rZW4pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjZGVMb2FkZWQsXG4gICAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICAgIGxvZ19fKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzcGFuPy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyTXNnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRUeXBlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIik7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IF9FbGVtZW50VHlwZUVudW1ab2QucGFyc2UoZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnQgPSB0aGlzLnJlZ2lzdGVySWZyYW1lKHR5cGUsIGZyYW1lKTtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkRWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAodHlwZSwgZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKTtcbiAgICAgICAgICB0cmFjayhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbm9kZTogZWxlbWVudC5ub2RlIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpO1xuICAgICAgICAgIGNvbm4udHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkge1xuICAgICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwic3VibWl0X2NhcmRcIiwgeyAuLi5wYXJhbXMgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlIH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGUgfSA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsQXZhaWxhYmxlID0gcGF5cGFsRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgcG9ja3l0UGF5cGFsQXZhaWxhYmxlID0gY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgICAgKG1ldGhvZCkgPT4gbWV0aG9kLnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIG1ldGhvZC5wcm92aWRlciA9PT0gXCJwYXlwYWxcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbG9vcEZsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBsb29wQ3J5cHRvQXZhaWxhYmxlID0gbG9vcEZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuY2FyZCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaW5pdEZsb3dOYW1lTWFwID0ge1xuICAgICAgICAgICAgcGF5cGFsOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICAgIGFkeWVuR29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5LFxuICAgICAgICAgICAgYWR5ZW5BcHBsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzX29sZCA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbG93UmVzdWx0ID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5pdEZsb3dOYW1lTWFwW2tleV0gPz8ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gWy4uLm1ldGhvZHNfb2xkLCAuLi5tZXRob2RzXTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kLCBzZXR0aW5ncyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5jYXJkOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdENhcmQoc2V0dGluZ3MpO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG86IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhHb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFpcndhbGxleEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWlyd2FsbGV4QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5Hb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZHllbkdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5BcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWR5ZW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuQXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnROZXZlcihtZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdFdpdGggPSB0aGlzLmdlbmVyYWxTdWJtaXQ7XG4gICAgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQ7XG4gICAgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIik7XG4gICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICAgIGRlbGV0ZSB3aW5kb3dbXCJvanNcIl07XG4gICAgICB0cmFjayhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobmV3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKG5ld0NhbGxiYWNrcyk7XG4gICAgfTtcbiAgICBPcGVuUGF5Rm9ybS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKTtcbiAgICB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuNS4xMlwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuNS4xMlwiO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfTtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3QoY29uZmlnKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gO1xuICAgIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9O1xuICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmRldmljZVRva2VuID0gZ2V0RGV2aWNlVG9rZW4oKTtcbiAgICBhdHRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycygpO1xuICAgIGNvbnN0IHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH0gPSBnZXRGcmFtZXdvcmtJbmZvKCk7XG4gICAgZ2V0Q3VycmVudEVudih0aGlzLmJhc2VVcmwpLnRoZW4oKGVudmlyb25tZW50KSA9PiB7XG4gICAgICBpZiAoIW1ldHJpY3NQdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbnRleHQgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICBmcmFtZXdvcmssXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIG1ldHJpY3NQdWJsaXNoZXIuc2V0KG1ldHJpY3NDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cmFjayhcImZvcm1faW5pdFwiKTtcbiAgICBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbik7XG4gICAgaWYgKGNvbmZpZy5hbGxvd1RyYWNpbmcgPT09IHRydWUpIHtcbiAgICAgIGluaXRUcmFjZXJTYWZlKHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKTtcbiAgICB9XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMub2pzRmxvd3MgPSBPanNGbG93cztcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYXNzaWduQXNTaW5nbGV0b24gPSAoZm9ybSkgPT4ge1xuICAgICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgICB9XG4gICAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpbmRvd1tcIm9qc1wiXSA/PyBudWxsO1xuICAgIH07XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAoY29uZmlnLCBjZGVMb2FkZWRQYXlsb2FkLCBhbnlDZGVDb25uZWN0aW9uLCBmb3JtRGl2KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiBjb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgYmFzZVVybDogbmV3IFVSTChjb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgICBmb3JtRGl2LFxuICAgICAgICBlbGVtZW50c1Nlc3Npb25JZDogY2RlTG9hZGVkUGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGNkZUxvYWRlZFBheWxvYWQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY3VzdG9tSW5pdFBhcmFtczogY29uZmlnLmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gICAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogY29uZmlnLnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoY2FsbGVyID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCBjdXJyZW50SW5zdGFuY2UgPSBPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlYnVnSW5mbyA9IHtcbiAgICAgIGNhbGxlcixcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogY3VycmVudEluc3RhbmNlPy5mb3JtSWQgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHtjYWxsZXJ9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke2RlYnVnSW5mby50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke2RlYnVnSW5mby5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7ZGVidWdJbmZvLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtkZWJ1Z0luZm8uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50SW5zdGFuY2UgfHwgY3VycmVudEluc3RhbmNlLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBDb250ZXh0QVBJIGFzIEMsIERpYWdBUEkgYXMgRCwgRWxlbWVudFR5cGVFbnVtIGFzIEUsIEZpZWxkTmFtZSBhcyBGLCBJTlZBTElEX1NQQU5fQ09OVEVYVCBhcyBJLCBPcGVuUGF5Rm9ybSBhcyBPLCBQcm94eVRyYWNlciBhcyBQLCBST09UX0NPTlRFWFQgYXMgUiwgU3BhbktpbmQgYXMgUywgVHJhY2VGbGFncyBhcyBULCBEaWFnTG9nTGV2ZWwgYXMgYSwgY3JlYXRlQ29udGV4dEtleSBhcyBiLCBjb250ZXh0IGFzIGMsIGlzVmFsaWRUcmFjZUlkIGFzIGQsIGlzVmFsaWRTcGFuSWQgYXMgZSwgU3BhblN0YXR1c0NvZGUgYXMgZiwgZ2V0R2xvYmFsIGFzIGcsIElOVkFMSURfU1BBTklEIGFzIGgsIGlzU3BhbkNvbnRleHRWYWxpZCBhcyBpLCBJTlZBTElEX1RSQUNFSUQgYXMgaiwgUHJveHlUcmFjZXJQcm92aWRlciBhcyBrLCBTdWJtaXRNZXRob2RzIGFzIGwsIHJlZ2lzdGVyR2xvYmFsIGFzIHIsIHRyYWNlIGFzIHQsIHVucmVnaXN0ZXJHbG9iYWwgYXMgdSB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsa0JBQUFBLFVBQXNCO0FBQy9CLFNBQVMsS0FBQUMsU0FBUztBQUNsQixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUVuQixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFP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QXFCdmUsRUFBTztBQUFBLEVBQzVCLFNBQVMsSUFBSSxJQUFJQSxFQUFPLFdBQVc4YixFQUFjLEVBQUU7QUFBQSxFQUNuRCxTQUFBeUM7QUFBQSxFQUNBLG1CQUFtQjJsQixFQUFpQjtBQUFBLEVBQ3BDLHdCQUF3QkEsRUFBaUI7QUFBQSxFQUN6QyxrQkFBQXJjO0FBQUEsRUFDQSxrQkFBa0I3bkIsRUFBTyxvQkFBb0IsQ0FBQztBQUFBLEVBQzlDLG1DQUFtQ0EsRUFBTztBQUM1QztBQTNtQk4sSUFBTW1rQyxLQUFOdkM7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInoiLCAiY2hhbGsiLCAidjQiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIl9FbGVtZW50VHlwZUVudW1ab2QiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiQmFzZUVsZW1lbnRzU3R5bGUiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJpc1N1Ym1pdHRpbmciLCAicGFyYW1zIiwgIl9hIiwgIl9iIiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgIk9qc0Vudmlyb25tZW50IiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJlbnZDYWNoZSIsICJnZXRDdXJyZW50RW52IiwgImJhc2VVcmwiLCAicmVzcG9uc2UiLCAicmVzIiwgImV4Y2x1ZGVQcm9wcyIsICJwcm9wcyIsICJrZXkiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJHUiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJ0cmFjayIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAib25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciIsICJlcnJvck1lc3NhZ2UiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIm9uVW5jYXVnaHRFcnJvciIsICJwYWdlTGlmZWN5Y2xlIiwgImxvYWRQYWdlTGlmZWN5Y2xlIiwgInBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIiLCAiYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMiLCAibGlmZWN5Y2xlIiwgImRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgInJlc3VsdFN0YXR1cyIsICJfZ2xvYmFsVGhpcyIsICJWRVJTSU9OIiwgInJlIiwgIl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrIiwgIm93blZlcnNpb24iLCAiYWNjZXB0ZWRWZXJzaW9ucyIsICJyZWplY3RlZFZlcnNpb25zIiwgIm15VmVyc2lvbk1hdGNoIiwgIm93blZlcnNpb25QYXJzZWQiLCAiZ2xvYmFsVmVyc2lvbiIsICJfcmVqZWN0IiwgInYiLCAiX2FjY2VwdCIsICJnbG9iYWxWZXJzaW9uTWF0Y2giLCAiZ2xvYmFsVmVyc2lvblBhcnNlZCIsICJpc0NvbXBhdGlibGUiLCAibWFqb3IiLCAiR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSIsICJfZ2xvYmFsIiwgInJlZ2lzdGVyR2xvYmFsIiwgInR5cGUiLCAiZGlhZyIsICJhbGxvd092ZXJyaWRlIiwgImFwaSIsICJnZXRHbG9iYWwiLCAidW5yZWdpc3Rlckdsb2JhbCIsICJfX3JlYWQkMyIsICJvIiwgIm4iLCAibSIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkMyIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJEaWFnQ29tcG9uZW50TG9nZ2VyIiwgImxvZ1Byb3h5IiwgImZ1bmNOYW1lIiwgIm5hbWVzcGFjZSIsICJsb2dnZXIiLCAiRGlhZ0xvZ0xldmVsIiwgImNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlciIsICJtYXhMZXZlbCIsICJfZmlsdGVyRnVuYyIsICJ0aGVMZXZlbCIsICJ0aGVGdW5jIiwgIl9fcmVhZCQyIiwgIl9fc3ByZWFkQXJyYXkkMiIsICJBUElfTkFNRSQyIiwgIkRpYWdBUEkiLCAiX2xvZ1Byb3h5IiwgInNlbGYiLCAic2V0TG9nZ2VyIiwgIm9wdGlvbnNPckxvZ0xldmVsIiwgIm9sZExvZ2dlciIsICJuZXdMb2dnZXIiLCAic3RhY2siLCAib3B0aW9ucyIsICJjcmVhdGVDb250ZXh0S2V5IiwgImRlc2NyaXB0aW9uIiwgIkJhc2VDb250ZXh0IiwgInBhcmVudENvbnRleHQiLCAiUk9PVF9DT05URVhUIiwgIl9fcmVhZCQxIiwgIl9fc3ByZWFkQXJyYXkkMSIsICJOb29wQ29udGV4dE1hbmFnZXIiLCAiX2NvbnRleHQiLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNvbm5lY3Rpb24iLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiZ2V0UHJlZmlsbCIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJzdW0iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvclN0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAicmVzcG9uc2VNb2RlbCIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAic2V0VXNlckRldmljZVRva2VuIiwgImRldmljZVRva2VuIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAiRlJBTUVfQkFTRV9VUkwiLCAiRU5DT0RJTkciLCAiRU5DT0RJTkdfTEVOIiwgIlJBTkRPTV9MRU4iLCAiVElNRV9MRU4iLCAiVElNRV9NQVgiLCAiVUxJREVycm9yQ29kZSIsICJVTElERXJyb3IiLCAiZXJyb3JDb2RlIiwgIm1lc3NhZ2UiLCAicmFuZG9tQ2hhciIsICJwcm5nIiwgInJhbmQiLCAiZGV0ZWN0UFJORyIsICJyb290TG9va3VwIiwgImRldGVjdFJvb3QiLCAiZ2xvYmFsQ3J5cHRvIiwgImJ1ZmZlciIsICJpbldlYldvcmtlciIsICJlbmNvZGVSYW5kb20iLCAibGVuIiwgInN0ciIsICJlbmNvZGVUaW1lIiwgIm1vZCIsICJjdXJyZW50TGVuIiwgInVsaWQiLCAic2VlZFRpbWUiLCAiY3VycmVudFBSTkciLCAic2VlZCIsICJDT09LSUVfTkFNRSIsICJnZXREZXZpY2VUb2tlbiIsICJleGlzdGluZ0Nvb2tpZSIsICJjb29raWUiLCAidG9rZW4iLCAic2V0RGV2aWNlVG9rZW4iLCAib25lWWVhckZyb21Ob3ciLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiRWxlbWVudEV2ZW50IiwgImdlbmVyYXRlQW5vbnltb3VzVmFsdWVzIiwgImdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImZpZWxkcyIsICJGaWVsZE5hbWUiLCAiZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImNoZWNrb3V0X3NldHRpbmdzIiwgImdldEZ1bGxOYW1lIiwgImZpcnN0TmFtZSIsICJsYXN0TmFtZSIsICJzdHlsZXMiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImJhbmtTZWxlY3RvclN0eWxlcyIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRpdGxlIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAiY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciIsICJiYW5rcyIsICJiYW5rTGlzdEh0bWwiLCAiYmFuayIsICJsb2dvSHRtbCIsICJiYW5rSXRlbXMiLCAiY2xlYW51cCIsICJjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSIsICJwYXltZW50TWV0aG9kVHlwZSIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAib25TdWNjZXNzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJzdGFydFBvbGxpbmciLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgIm9yaWdpbmFsSGFuZGxlQ2FuY2VsIiwgIndyYXBwZWRIYW5kbGVDYW5jZWwiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAiaGFuZGxlRXZlbnRzIiwgIlRocmVlRFNTdGF0dXMiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAicGFyYW1zIiwgImZyYW1lV2lkdGgiLCAiZnJhbWVIZWlnaHQiLCAiZnJhbWVUaXRsZSIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAiZXJyX18iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAiZGV0ZWN0TGFuZ3VhZ2UiLCAibGFuZ3VhZ2VzIiwgImxhbmd1YWdlIiwgImxvZ19fJHQiLCAiZXJyX18kcyIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgImxvZ19fJHMiLCAiZXJyX18kciIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJBbGxGaWVsZE5hbWVzIiwgImxvZ19fJHIiLCAiZXJyX18kcSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9hZFNjcmlwdCIsICJzY3JpcHRJZCIsICJzcmMiLCAiY2hlY2tMb2FkZWRGbiIsICJldmVudExpc3RlbmVyQ29udHJvbGxlciIsICJzY3JpcHQiLCAiZXhpc3RpbmdTY3JpcHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiaW5pdGlhbFByZXZpZXciLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJjb21tb25BY3Rpb24iLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgImZvcm1JbnB1dHMiLCAicGF5bWVudERhdGEiLCAiaW5wdXRzIiwgImJpbGxpbmdBZGRyZXNzIiwgInNoaXBwaW5nQWRkcmVzcyIsICJwYXllckZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgInJ1bkFpcndhbGxleEJBQ1NGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmb3JtQ2FsbGJhY2tzIiwgImN1c3RvbVBhcmFtcyIsICJub25DZGVGb3JtRmllbGRzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAidmVyaWZpY2F0aW9uTWV0aG9kIiwgIm1pY3JvRGVwb3NpdERhdGEiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgImNvbnNlbnRJZCIsICJhdmFpbGFibGVCYW5rcyIsICJzZWxlY3RlZEJhbmsiLCAiZGlyZWN0RGViaXREYXRhIiwgInJlZGlyZWN0VXJsIiwgIm5ld0NvbmZpcm1SZXN1bHQiLCAibG9nX18kcCIsICJlcnJfXyRvIiwgInJ1bkFpcndhbGxleEVGVEZsb3ciLCAibG9nX18kbyIsICJlcnJfXyRuIiwgInJ1bkFpcndhbGxleFNFUEFGbG93IiwgImxvZ19fJG4iLCAiZXJyX18kbSIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQzIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJoZWFkZXJzIiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQyIiwgIkdvb2dsZVBheUNwbSQyIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJhbW91bnQiLCAiZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJG0iLCAiZXJyX18kbCIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgIm9uQ2FuY2VsIiwgIm9uUGF5bWVudEZhaWxlZCIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgIl8iLCAiX18iLCAiYWR5ZW5DaGVja291dCIsICJjaGVja291dCIsICJkZXRlcm1pbmVMb2NhbGUiLCAicHJlZmlsbExvY2FsZSIsICJicm93c2VyTG9jYWxlIiwgImNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzIiwgInJ1bkFkeWVuM2RzRmxvdyIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgImxvZ19fJGwiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMiIsICJnZXRGcmF1ZE1ldGFkYXRhIiwgImxvZ19fJGsiLCAiZXJyX18kayIsICJpbml0QWR5ZW5BcHBsZVBheUZsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgIk9qc0Zsb3dzIiwgInJ1bkFkeWVuQXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAidXBkYXRlIiwgImxvZ19fJGoiLCAiZXJyX18kaiIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIl9lIiwgIl9mIiwgIl9nIiwgIl9oIiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJGkiLCAiZXJyX18kaSIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGgiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGciLCAiZXJyX18kaCIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRmIiwgImVycl9fJGciLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAibG9nX18kZSIsICJlcnJfXyRmIiwgImluaXRBdXRobmV0QXBwbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRBcHBsZVBheUZsb3ciLCAibG9nX18kZCIsICJlcnJfXyRlIiwgImluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyIsICJydW5BdXRobmV0R29vZ2xlUGF5RmxvdyIsICJsb2dfXyRjIiwgImVycl9fJGQiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJ2YXVsdElkIiwgInBhcnNlQXJnRnJvbUhyZWYiLCAiYXJnTmFtZSIsICJjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMiLCAicnVuUG9ja3l0M2RzRmxvdyIsICJsb2dfXyRiIiwgImVycl9fJGMiLCAiYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciIsICJwb3N0VXJsIiwgImFjY2Vzc1Rva2VuIiwgImZvcm0iLCAicnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24iLCAiZXhwZWN0ZWRPcmlnaW4iLCAiZGV0YWNoIiwgImhhbmRsZUNvbGxlY3Rpb25FdmVudCIsICJydW5QYXllckF1dGgiLCAic3RlcFVwVXJsIiwgIm1lcmNoYW50RGF0YSIsICJ0b2tlbklucHV0IiwgIm1kSW5wdXQiLCAibG9nX18kYSIsICJlcnJfXyRiIiwgIkN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRlJJRU5ETFlfRVJSIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgInVzZXJBY3Rpb24iLCAiY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMiLCAiaGFuZGxlQ3liZXJzb3VyY2UzZHMiLCAiY2xlYW51cFBvbGxpbmciLCAicnVuQ3liZXJzb3VyY2UzZHNGbG93IiwgInN0ZXBfdXBfdXJsIiwgImFjY2Vzc190b2tlbiIsICJkZF91cmwiLCAiZGRfdG9rZW4iLCAibWVyY2hhbnRfZGF0YSIsICJjb2xsZWN0aW9uUmVzdWx0IiwgInN0cmlwZUxvZ19fIiwgIlN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCIsICJzdHJpcGVDQzNEU0Zsb3ciLCAicGFyc2VVc2VyRkVQYXlsb2FkIiwgIk1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyIsICJsb2dfXyQ5IiwgImVycl9fJGEiLCAidW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAic3RhcnRQZlJlc3VsdCIsICJyZXR1cm5TdWNjZXNzUmVzdWx0IiwgInJ1bkNvbmZpcm1Mb29wIiwgImNoZWNrb3V0QXR0ZW1wdElkIiwgInBmUmVzdWx0IiwgInZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uIiwgInVzZXJBY3Rpb25SZXN1bHQiLCAicnVuUmVxdWlyZWRVc2VyQWN0aW9uIiwgImNoZWNrSWZMZWdhY3kzRFNQYXRoIiwgImNvbW1vbkNDM0RTRmxvdyIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJVc2VyQWN0aW9uRkVQYXlsb2FkIiwgInByZWZpbGxNb2RlIiwgInBheW1lbnRNZXRob2RJZCIsICJsb2dfXyQ4IiwgImVycl9fJDkiLCAicnVuQ29tbW9uQ2NGbG93IiwgInVuaWZpZWRDQ1JvbGxvdXRSYXRpbyIsICJyb2xsIiwgInVzZVVuaWZpZWRDQ0Zsb3ciLCAidWNjUm9sbFRyYWNraW5nTWV0YWRhdGEiLCAiZXJySGVhZGVycyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgImN5YmVyc291cmNlQWN0aW9uIiwgImN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjY1BtSWQiLCAic3RyaXBlQWN0aW9uIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInJlcXVpcmVkX3VzZXJfYWN0aW9ucyIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiTG9vcENyeXB0b0NwbSIsICJsb2dfXyQ3IiwgImVycl9fJDgiLCAiaW5pdExvb3BGbG93IiwgInByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEiLCAicGF5bWVudFNldHVwSW5mbyIsICJzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50IiwgIm1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJpc0NoZWNrb3V0TW9kZSIsICJjdXN0b21lckZpZWxkcyIsICJsb2dfXyQ2IiwgImVycl9fJDciLCAiUGF5cGFsQ3BtIiwgImluaXRQYXlwYWxGbG93IiwgInBheXBhbENwbSIsICJydW5QYXlwYWxGbG93IiwgImlzQW5vbnltb3VzIiwgInVzZVJlZGlyZWN0RmxvdyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93IiwgImlzUGF5Rmlyc3RGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0IiwgInByZUFjdGlvblVybCIsICJlbmNvZGVkUmVxdWVzdCIsICJzZWFyY2hQYXJhbXMiLCAicGF5cGFsRmxvd1Jlc3VsdCIsICJhcHByb3ZhbFNlc3Npb25JZCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgImluaXRQb2NreXRQYXlwYWxGbG93IiwgInBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJvdXJFeGlzdGluZ1BtSWQiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJhcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAibWF0Y2hlc1Byb2Nlc3NvciIsICJtYXRjaGVzUHJvdmlkZXIiLCAibG9nX18kMiIsICJlcnJfXyQzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiZXJyX18kMiIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIndpbmRvdyIsICJuZXh0V2luZG93IiwgIm51eHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAiZG9jdW1lbnQyIiwgIm5nVmVyc2lvbkVsIiwgImdldEZyYW1ld29ya0luZm8iLCAic2NyZWVuX2hlaWdodCIsICJzY3JlZW5fd2lkdGgiLCAiY29sb3JfZGVwdGgiLCAiamF2YV9lbmFibGVkIiwgInVzZXJfYWdlbnQiLCAiYWNjZXB0X2hlYWRlciIsICJ0aW1lX3pvbmVfb2Zmc2V0IiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUGF5bWVudFByb3ZpZGVyVHlwZSIsICJQYXltZW50UHJvdmlkZXJUeXBlMiIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgImZpbmFsU3RhdHVzIiwgInVzZXJQYXJhbXMiLCAicnVuU3RyaXBlUHJGbG93IiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUJyaWRnZUlmcmFtZSIsICJFbGVtZW50VHlwZUVudW0iLCAiY2RlTG9hZGVkIiwgImNkZUNvbm5TcGFuIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlbGVtZW50VHlwZSIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY29udGV4dDIiLCAiYXBwbGVQYXlQcm9jZXNzb3JzIiwgImlzQXBwbGVQYXlBdmFpbGFibGUiLCAiZ29vZ2xlUGF5UHJvY2Vzc29ycyIsICJpc0dvb2dsZVBheUF2YWlsYWJsZSIsICJwYXlwYWxBdmFpbGFibGUiLCAicG9ja3l0UGF5cGFsQXZhaWxhYmxlIiwgIm1ldGhvZCIsICJsb29wRmxvd1Jlc3VsdCIsICJsb29wQ3J5cHRvQXZhaWxhYmxlIiwgIm1ldGhvZHMiLCAiaW5pdEZsb3dOYW1lTWFwIiwgImZsb3dSZXN1bHQiLCAic3RhcnRGbG93IiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAiYWR5ZW5Hb29nbGVQYXkiLCAiYWR5ZW5BcHBsZVBheSIsICJuZXdDYWxsYmFja3MiLCAibWV0cmljc0NvbnRleHQiLCAiY2FsbGVyIiwgImN1cnJlbnRJbnN0YW5jZSIsICJkZWJ1Z0luZm8iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJPcGVuUGF5Rm9ybSJdCn0K
|