@getopenpay/openpay-js-react 0.2.9 → 0.2.10
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/.tsbuildinfo +1 -1
- package/dist/index.js +614 -614
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createContext as
|
|
2
|
-
import { jsx as
|
|
1
|
+
import { createContext as Cn, useContext as Sn, useState as se, useCallback as Pn, useEffect as Je, useRef as kn, useMemo as Ke } from "react";
|
|
2
|
+
import { jsx as q, Fragment as He } from "react/jsx-runtime";
|
|
3
3
|
import { z as e } from "zod";
|
|
4
|
-
import { v4 as
|
|
4
|
+
import { v4 as Nt } from "uuid";
|
|
5
5
|
import { connectToChild as Dt } from "penpal";
|
|
6
|
-
import
|
|
7
|
-
const
|
|
6
|
+
import te from "chalk";
|
|
7
|
+
const Lt = Cn({
|
|
8
8
|
formId: "",
|
|
9
9
|
formHeight: "",
|
|
10
10
|
referrer: void 0,
|
|
@@ -13,11 +13,11 @@ const Nt = En({
|
|
|
13
13
|
},
|
|
14
14
|
baseUrl: ""
|
|
15
15
|
}), An = () => {
|
|
16
|
-
const t =
|
|
16
|
+
const t = Sn(Lt);
|
|
17
17
|
if (!t)
|
|
18
18
|
throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
|
|
19
19
|
return t;
|
|
20
|
-
},
|
|
20
|
+
}, Ut = "https://cde.getopenpay.com", On = e.object({
|
|
21
21
|
type: e.string(),
|
|
22
22
|
loc: e.array(e.string()),
|
|
23
23
|
msg: e.string(),
|
|
@@ -26,29 +26,29 @@ const Nt = En({
|
|
|
26
26
|
code: e.string(),
|
|
27
27
|
message: e.string(),
|
|
28
28
|
path: e.array(e.string())
|
|
29
|
-
}),
|
|
29
|
+
}), Rn = e.array(jn), Tn = {
|
|
30
30
|
"failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
|
|
31
|
-
},
|
|
31
|
+
}, We = (t) => {
|
|
32
32
|
const r = t.toLowerCase().trim();
|
|
33
|
-
return
|
|
33
|
+
return Tn[r] ?? t;
|
|
34
34
|
}, xn = (t) => {
|
|
35
35
|
try {
|
|
36
36
|
return typeof JSON.parse(t) == "object";
|
|
37
37
|
} catch {
|
|
38
38
|
return !1;
|
|
39
39
|
}
|
|
40
|
-
}, Mn = (t) => t.length === 1 ?
|
|
41
|
-
${t.map((r) => `• ${
|
|
42
|
-
`)}`,
|
|
40
|
+
}, Mn = (t) => t.length === 1 ? We(t[0].msg) : `Please fix the following errors:
|
|
41
|
+
${t.map((r) => `• ${We(r.msg)}`).join(`
|
|
42
|
+
`)}`, Nn = (t) => `Encountered the following errors:
|
|
43
43
|
${t.map((r) => `- ${r.path.join("/")}: ${r.message}`).join(`
|
|
44
44
|
`)}`, X = (t) => {
|
|
45
45
|
if (t instanceof Error)
|
|
46
46
|
if (xn(t.message)) {
|
|
47
47
|
const r = JSON.parse(t.message);
|
|
48
|
-
return In.safeParse(r).success ? Mn(r) :
|
|
48
|
+
return In.safeParse(r).success ? Mn(r) : Rn.safeParse(r).success ? Nn(r) : (console.warn(`Encountered unknown stringified JSON object:
|
|
49
49
|
${t.message}`), t.message);
|
|
50
50
|
} else
|
|
51
|
-
return
|
|
51
|
+
return We(t.message);
|
|
52
52
|
if (typeof t == "object")
|
|
53
53
|
try {
|
|
54
54
|
return JSON.stringify(t);
|
|
@@ -57,7 +57,7 @@ ${t.message}`), t.message);
|
|
|
57
57
|
}
|
|
58
58
|
else
|
|
59
59
|
return t + "";
|
|
60
|
-
},
|
|
60
|
+
}, Dn = (t, r, n) => (...o) => {
|
|
61
61
|
try {
|
|
62
62
|
return r(...o);
|
|
63
63
|
} catch (i) {
|
|
@@ -66,11 +66,11 @@ ${t.message}`), t.message);
|
|
|
66
66
|
}
|
|
67
67
|
}, j = e.string().trim().min(1, { message: "Cannot be blank" }), C = e.string().trim().optional(), M = (t) => e.nullable(t.optional());
|
|
68
68
|
var p = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(p || {});
|
|
69
|
-
const
|
|
70
|
-
var
|
|
71
|
-
const
|
|
72
|
-
var
|
|
73
|
-
const Ln = e.nativeEnum(
|
|
69
|
+
const Ft = e.nativeEnum(p);
|
|
70
|
+
var $t = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))($t || {});
|
|
71
|
+
const qt = e.nativeEnum($t), Vt = e.union([Ft, qt]);
|
|
72
|
+
var pe = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(pe || {});
|
|
73
|
+
const Ln = e.nativeEnum(pe), Ne = e.object({
|
|
74
74
|
provider: e.string(),
|
|
75
75
|
processor_name: M(e.string()),
|
|
76
76
|
metadata: M(e.record(e.string(), e.any()))
|
|
@@ -94,7 +94,7 @@ e.object({
|
|
|
94
94
|
lineHeight: C,
|
|
95
95
|
hideIcon: C
|
|
96
96
|
});
|
|
97
|
-
const
|
|
97
|
+
const Y = e.enum([
|
|
98
98
|
// Element -> Form
|
|
99
99
|
"LAYOUT",
|
|
100
100
|
"LOADED",
|
|
@@ -115,34 +115,34 @@ const H = e.enum([
|
|
|
115
115
|
"TOKENIZE",
|
|
116
116
|
"CHECKOUT",
|
|
117
117
|
"START_PAYMENT_FLOW"
|
|
118
|
-
]), Fn =
|
|
118
|
+
]), Fn = Y.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), $n = e.object({ type: Fn }), qn = Y.extract(["BLUR", "FOCUS", "CHANGE"]), Vn = e.object({
|
|
119
119
|
type: qn,
|
|
120
|
-
elementType:
|
|
120
|
+
elementType: qt,
|
|
121
121
|
errors: e.array(e.string()).optional()
|
|
122
|
-
}), zn =
|
|
122
|
+
}), zn = Y.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Yn = e.object({
|
|
123
123
|
type: zn,
|
|
124
124
|
message: j,
|
|
125
125
|
headers: e.record(e.string(), e.string()).optional()
|
|
126
|
-
}),
|
|
127
|
-
type:
|
|
128
|
-
elementType:
|
|
126
|
+
}), Kn = Y.extract(["VALIDATION_ERROR"]), Hn = e.object({
|
|
127
|
+
type: Kn,
|
|
128
|
+
elementType: Vt,
|
|
129
129
|
errors: e.array(e.string())
|
|
130
130
|
}), Gn = e.object({
|
|
131
|
-
type: e.literal(
|
|
131
|
+
type: e.literal(Y.enum.LAYOUT),
|
|
132
132
|
height: j
|
|
133
133
|
}), Zn = e.object({
|
|
134
|
-
type: e.literal(
|
|
134
|
+
type: e.literal(Y.enum.LOADED),
|
|
135
135
|
sessionId: j,
|
|
136
136
|
totalAmountAtoms: e.number(),
|
|
137
137
|
currency: C,
|
|
138
|
-
checkoutPaymentMethods: e.array(
|
|
138
|
+
checkoutPaymentMethods: e.array(Ne)
|
|
139
139
|
}), Bn = e.object({
|
|
140
|
-
type: e.literal(
|
|
140
|
+
type: e.literal(Y.enum.PAYMENT_FLOW_STARTED),
|
|
141
141
|
nextActionMetadata: e.record(e.string(), e.any()),
|
|
142
142
|
paymentFlowMetadata: e.any().optional(),
|
|
143
143
|
startPFMetadata: e.optional(e.record(e.string(), e.any()))
|
|
144
144
|
}), Jn = e.object({
|
|
145
|
-
type: e.literal(
|
|
145
|
+
type: e.literal(Y.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
146
146
|
paymentMethodId: e.string()
|
|
147
147
|
}), ve = e.object({
|
|
148
148
|
firstName: j,
|
|
@@ -161,18 +161,18 @@ const H = e.enum([
|
|
|
161
161
|
address: C,
|
|
162
162
|
city: C,
|
|
163
163
|
state: C
|
|
164
|
-
}), Xn =
|
|
164
|
+
}), Xn = Y.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Qn = e.object({
|
|
165
165
|
type: Xn,
|
|
166
166
|
sessionId: j,
|
|
167
|
-
checkoutPaymentMethod:
|
|
167
|
+
checkoutPaymentMethod: Ne,
|
|
168
168
|
paymentFlowMetadata: e.any().optional(),
|
|
169
169
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
170
170
|
existingCCPMId: C
|
|
171
171
|
}).extend(ve.shape), er = e.object({
|
|
172
|
-
type: e.literal(
|
|
172
|
+
type: e.literal(Y.enum.TOKENIZE_SUCCESS),
|
|
173
173
|
isReadyForCheckout: e.boolean()
|
|
174
174
|
}), tr = e.object({
|
|
175
|
-
type: e.literal(
|
|
175
|
+
type: e.literal(Y.enum.CHECKOUT_SUCCESS),
|
|
176
176
|
invoiceUrls: e.array(e.string()),
|
|
177
177
|
subscriptionIds: e.array(e.string()),
|
|
178
178
|
customerId: e.string()
|
|
@@ -180,7 +180,7 @@ const H = e.enum([
|
|
|
180
180
|
$n,
|
|
181
181
|
Vn,
|
|
182
182
|
Yn,
|
|
183
|
-
|
|
183
|
+
Hn,
|
|
184
184
|
Gn,
|
|
185
185
|
Zn,
|
|
186
186
|
Qn,
|
|
@@ -213,7 +213,7 @@ e.object({
|
|
|
213
213
|
checkout_attempt_id: M(e.string()),
|
|
214
214
|
processor_specific_metadata: M(e.record(e.string(), e.any()))
|
|
215
215
|
});
|
|
216
|
-
const
|
|
216
|
+
const ot = e.object({
|
|
217
217
|
invoice_urls: e.array(e.string()),
|
|
218
218
|
subscription_ids: e.array(e.string()),
|
|
219
219
|
customer_id: e.string()
|
|
@@ -234,18 +234,18 @@ const ir = e.object({
|
|
|
234
234
|
]);
|
|
235
235
|
e.object({
|
|
236
236
|
session_id: e.string(),
|
|
237
|
-
checkout_payment_method:
|
|
237
|
+
checkout_payment_method: Ne,
|
|
238
238
|
non_cde_form_fields: ve,
|
|
239
239
|
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
240
240
|
existing_cc_pm_id: M(e.string())
|
|
241
241
|
});
|
|
242
242
|
e.object({
|
|
243
243
|
session_id: e.string(),
|
|
244
|
-
checkout_payment_method:
|
|
244
|
+
checkout_payment_method: Ne,
|
|
245
245
|
non_cde_form_fields: ve,
|
|
246
246
|
extra_metadata: e.record(e.string(), e.any()).optional()
|
|
247
247
|
});
|
|
248
|
-
var
|
|
248
|
+
var z = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(z || {});
|
|
249
249
|
const sr = e.object({
|
|
250
250
|
status: e.enum([
|
|
251
251
|
"success",
|
|
@@ -264,7 +264,7 @@ const cr = e.object({
|
|
|
264
264
|
initial_intent_id: e.string(),
|
|
265
265
|
consent_id: e.string(),
|
|
266
266
|
their_pm_id: e.string().optional()
|
|
267
|
-
}),
|
|
267
|
+
}), zt = e.object({
|
|
268
268
|
type: e.string(),
|
|
269
269
|
redirect_url: M(e.string()),
|
|
270
270
|
initial_intent_id: M(e.string()),
|
|
@@ -276,13 +276,13 @@ const cr = e.object({
|
|
|
276
276
|
e.object({ present: e.literal(!1) })
|
|
277
277
|
]), ur = e.object({
|
|
278
278
|
payment_methods: e.array(Un),
|
|
279
|
-
pay_first_success_response: M(
|
|
280
|
-
required_user_actions: M(e.array(
|
|
279
|
+
pay_first_success_response: M(ot),
|
|
280
|
+
required_user_actions: M(e.array(zt))
|
|
281
281
|
}), dr = (t) => {
|
|
282
282
|
const r = {};
|
|
283
283
|
return Object.entries(t).forEach(([n, o]) => {
|
|
284
284
|
try {
|
|
285
|
-
const i =
|
|
285
|
+
const i = Ft.parse(n);
|
|
286
286
|
Array.isArray(o) ? r[i] = o : Array.isArray(o._errors) && (r[i] = o._errors);
|
|
287
287
|
} catch {
|
|
288
288
|
return;
|
|
@@ -299,20 +299,20 @@ const cr = e.object({
|
|
|
299
299
|
}), _r = {
|
|
300
300
|
usd: "usd",
|
|
301
301
|
brl: "brl"
|
|
302
|
-
},
|
|
302
|
+
}, De = async (t) => {
|
|
303
303
|
for (let r = 0; r < 10; r++)
|
|
304
|
-
dt() || await
|
|
304
|
+
dt() || await Yt(500);
|
|
305
305
|
if (!dt())
|
|
306
306
|
throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
|
|
307
307
|
return new Stripe(t);
|
|
308
308
|
}, yr = async (t, r) => {
|
|
309
|
-
const n = await
|
|
309
|
+
const n = await De(t);
|
|
310
310
|
return {
|
|
311
311
|
elements: n.elements(r),
|
|
312
312
|
stripe: n
|
|
313
313
|
};
|
|
314
|
-
},
|
|
315
|
-
const a = await
|
|
314
|
+
}, fr = async (t, r, n, o, i) => {
|
|
315
|
+
const a = await De(t), s = _r[n.toLowerCase().trim()];
|
|
316
316
|
return a.paymentRequest({
|
|
317
317
|
// TODO: replace this with stripe account country as soon as we support it
|
|
318
318
|
country: "US",
|
|
@@ -327,9 +327,9 @@ const cr = e.object({
|
|
|
327
327
|
requestPayerEmail: !0,
|
|
328
328
|
disableWallets: []
|
|
329
329
|
});
|
|
330
|
-
},
|
|
330
|
+
}, Yt = (t) => new Promise((r) => {
|
|
331
331
|
setTimeout(r, t);
|
|
332
|
-
}), dt = () => "Stripe" in window,
|
|
332
|
+
}), dt = () => "Stripe" in window, hr = async (t) => new Promise((r, n) => {
|
|
333
333
|
try {
|
|
334
334
|
t.on("paymentmethod", async (o) => {
|
|
335
335
|
console.log("paymentmethod EVT:: ", o), r(o);
|
|
@@ -344,7 +344,7 @@ const cr = e.object({
|
|
|
344
344
|
}), gr = async (t, r) => {
|
|
345
345
|
if (!t.stripe_pk || !t.client_secret)
|
|
346
346
|
throw new Error(`Invalid next action metadata format: ${JSON.stringify(t)}`);
|
|
347
|
-
const n = await (await
|
|
347
|
+
const n = await (await De(t.stripe_pk)).confirmCardSetup(t.client_secret, {
|
|
348
348
|
payment_method: r.paymentMethod.id
|
|
349
349
|
});
|
|
350
350
|
if (n.error)
|
|
@@ -352,7 +352,7 @@ const cr = e.object({
|
|
|
352
352
|
return r.complete("success"), n;
|
|
353
353
|
}, br = async (t) => {
|
|
354
354
|
var r, n, o, i;
|
|
355
|
-
const a = await (await
|
|
355
|
+
const a = await (await De(t.stripe_pk)).confirmCardSetup(t.client_secret, {
|
|
356
356
|
payment_method: t.stripe_pm_id
|
|
357
357
|
}), s = (r = a.setupIntent) == null ? void 0 : r.status;
|
|
358
358
|
if (s === "succeeded")
|
|
@@ -360,7 +360,7 @@ const cr = e.object({
|
|
|
360
360
|
else throw s === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
|
|
361
361
|
`${((n = a.error) == null ? void 0 : n.message) ?? ((i = (o = a.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : i.message) ?? "Payment failed, please click submit again to pay."}`
|
|
362
362
|
);
|
|
363
|
-
}, wr = (t) => JSON.stringify(t),
|
|
363
|
+
}, wr = (t) => JSON.stringify(t), _e = (t, r) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((n, o) => {
|
|
364
364
|
const i = o.getAttribute("data-opid");
|
|
365
365
|
return i ? { ...n, [i]: o.value } : n;
|
|
366
366
|
}, {}), vr = (t) => {
|
|
@@ -379,7 +379,7 @@ const cr = e.object({
|
|
|
379
379
|
} catch (r) {
|
|
380
380
|
return console.error("Invalid CDE connection check:", r), !1;
|
|
381
381
|
}
|
|
382
|
-
}, Cr = (t, r) => !!t && r,
|
|
382
|
+
}, Cr = (t, r) => !!t && r, h = (t) => e.nullable(t.optional());
|
|
383
383
|
e.string().trim().min(1, { message: "Cannot be blank" });
|
|
384
384
|
const Sr = e.object({
|
|
385
385
|
cde_response_type: e.literal("error"),
|
|
@@ -387,76 +387,76 @@ const Sr = e.object({
|
|
|
387
387
|
headers: e.record(e.string(), e.string()).optional()
|
|
388
388
|
});
|
|
389
389
|
e.enum(["usd", "brl"]);
|
|
390
|
-
const
|
|
390
|
+
const Kt = e.object({
|
|
391
391
|
name: e.string(),
|
|
392
|
-
amount_atom_off:
|
|
393
|
-
percent_off:
|
|
394
|
-
currency:
|
|
392
|
+
amount_atom_off: h(e.number()),
|
|
393
|
+
percent_off: h(e.number()),
|
|
394
|
+
currency: h(e.string()),
|
|
395
395
|
duration: e.string(),
|
|
396
|
-
duration_in_months:
|
|
396
|
+
duration_in_months: h(e.number())
|
|
397
397
|
}), Ht = e.object({
|
|
398
398
|
amount_subtotal_atom: e.number().int(),
|
|
399
399
|
amount_total_atom: e.number().int(),
|
|
400
400
|
currency: e.string(),
|
|
401
|
-
description:
|
|
401
|
+
description: h(e.string()),
|
|
402
402
|
price_id: e.string(),
|
|
403
|
-
billing_interval:
|
|
404
|
-
billing_interval_count:
|
|
403
|
+
billing_interval: h(e.string()),
|
|
404
|
+
billing_interval_count: h(e.number().int()),
|
|
405
405
|
quantity: e.number().int()
|
|
406
406
|
}), Pr = e.record(e.string(), e.any()), kr = e.object({
|
|
407
407
|
name: e.string(),
|
|
408
|
-
settings:
|
|
408
|
+
settings: h(Pr)
|
|
409
409
|
}), Ee = e.object({
|
|
410
410
|
provider: e.string(),
|
|
411
|
-
processor_name:
|
|
412
|
-
metadata:
|
|
411
|
+
processor_name: h(e.string()),
|
|
412
|
+
metadata: h(e.record(e.string(), e.any()))
|
|
413
413
|
}), Ar = e.object({
|
|
414
414
|
quantity: e.number()
|
|
415
415
|
}), Or = e.object({
|
|
416
|
-
id:
|
|
417
|
-
billing_interval:
|
|
418
|
-
billing_interval_count:
|
|
416
|
+
id: h(e.string()),
|
|
417
|
+
billing_interval: h(e.string()),
|
|
418
|
+
billing_interval_count: h(e.number().int()),
|
|
419
419
|
subscription_items: e.array(Ar),
|
|
420
|
-
trial_start:
|
|
421
|
-
trial_end:
|
|
422
|
-
}),
|
|
420
|
+
trial_start: h(e.string()),
|
|
421
|
+
trial_end: h(e.string())
|
|
422
|
+
}), Gt = e.object({
|
|
423
423
|
amount_atom: e.number()
|
|
424
424
|
}), Ir = e.object({
|
|
425
425
|
amount_atom: e.number(),
|
|
426
426
|
amount_atom_considering_discount_applied: e.number(),
|
|
427
427
|
currency: e.string(),
|
|
428
|
-
discount_amount_atoms: e.array(
|
|
428
|
+
discount_amount_atoms: e.array(Gt),
|
|
429
429
|
subscription_item_id: e.string()
|
|
430
430
|
}), jr = e.object({
|
|
431
|
-
coupon:
|
|
432
|
-
}),
|
|
431
|
+
coupon: Kt
|
|
432
|
+
}), Rr = e.object({
|
|
433
433
|
currency: e.string(),
|
|
434
434
|
discounts: e.array(jr),
|
|
435
|
-
hosted_invoice_url:
|
|
435
|
+
hosted_invoice_url: h(e.string()),
|
|
436
436
|
lines: e.array(Ir),
|
|
437
437
|
remaining_amount_atom: e.number(),
|
|
438
438
|
tax_amount_atom: e.number(),
|
|
439
439
|
total_amount_atom: e.number(),
|
|
440
|
-
total_discount_amount_atoms: e.array(
|
|
440
|
+
total_discount_amount_atoms: e.array(Gt)
|
|
441
441
|
}), pt = e.object({
|
|
442
442
|
created: e.array(Or),
|
|
443
|
-
invoices: e.array(
|
|
444
|
-
}),
|
|
443
|
+
invoices: e.array(Rr)
|
|
444
|
+
}), Zt = e.object({
|
|
445
445
|
preview: pt,
|
|
446
|
-
preview_post_trial:
|
|
447
|
-
coupons: e.array(
|
|
446
|
+
preview_post_trial: h(pt),
|
|
447
|
+
coupons: e.array(Kt)
|
|
448
448
|
}), mt = e.object({
|
|
449
449
|
status: e.literal("open"),
|
|
450
450
|
token: e.string(),
|
|
451
|
-
email:
|
|
451
|
+
email: h(e.string()),
|
|
452
452
|
line_items: e.array(Ht),
|
|
453
453
|
amount_subtotal_atom: e.number().int(),
|
|
454
454
|
amount_total_atom: e.number().int(),
|
|
455
455
|
brand: kr,
|
|
456
|
-
subs_preview:
|
|
456
|
+
subs_preview: h(Zt),
|
|
457
457
|
// Null in setup mode
|
|
458
458
|
methods_available: e.array(Ee)
|
|
459
|
-
}),
|
|
459
|
+
}), Bt = e.discriminatedUnion("mode", [
|
|
460
460
|
e.object({
|
|
461
461
|
mode: e.literal("setup"),
|
|
462
462
|
currency: e.nullable(e.undefined())
|
|
@@ -465,12 +465,12 @@ const Yt = e.object({
|
|
|
465
465
|
mode: e.enum(["payment", "subscription"]),
|
|
466
466
|
currency: e.string()
|
|
467
467
|
}).extend(mt.shape)
|
|
468
|
-
]),
|
|
468
|
+
]), Tr = e.object({
|
|
469
469
|
status: e.literal("complete")
|
|
470
470
|
}), xr = e.object({
|
|
471
471
|
status: e.literal("expired")
|
|
472
472
|
});
|
|
473
|
-
e.union([
|
|
473
|
+
e.union([Bt, Tr, xr]);
|
|
474
474
|
e.object({
|
|
475
475
|
logo: e.string(),
|
|
476
476
|
icon: e.string(),
|
|
@@ -496,7 +496,7 @@ e.object({
|
|
|
496
496
|
checkout_payment_method: Ee,
|
|
497
497
|
promotion_code: e.string().optional(),
|
|
498
498
|
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
499
|
-
use_confirmed_pm_id:
|
|
499
|
+
use_confirmed_pm_id: h(e.string())
|
|
500
500
|
});
|
|
501
501
|
const Mr = e.object({
|
|
502
502
|
payment_method_id: e.string()
|
|
@@ -505,14 +505,14 @@ e.object({
|
|
|
505
505
|
id: e.string(),
|
|
506
506
|
return_url: e.string()
|
|
507
507
|
});
|
|
508
|
-
const
|
|
508
|
+
const Nr = e.object({
|
|
509
509
|
type: e.string(),
|
|
510
510
|
loc: e.array(e.string()),
|
|
511
511
|
msg: e.string(),
|
|
512
512
|
url: e.string()
|
|
513
513
|
});
|
|
514
|
-
e.array(
|
|
515
|
-
const
|
|
514
|
+
e.array(Nr);
|
|
515
|
+
const Dr = e.object({
|
|
516
516
|
new_customer_email: e.string().optional(),
|
|
517
517
|
new_customer_address: e.record(e.string(), e.any()).optional(),
|
|
518
518
|
new_customer_first_name: e.string().optional(),
|
|
@@ -525,7 +525,7 @@ const Nr = e.object({
|
|
|
525
525
|
promotion_code: e.string().optional(),
|
|
526
526
|
displayed_total_amount_atom: e.number().int()
|
|
527
527
|
}), Fr = e.object({
|
|
528
|
-
processor_specific_metadata:
|
|
528
|
+
processor_specific_metadata: h(e.record(e.string(), e.any()))
|
|
529
529
|
});
|
|
530
530
|
e.object({
|
|
531
531
|
payment_provider: e.string(),
|
|
@@ -534,10 +534,10 @@ e.object({
|
|
|
534
534
|
their_existing_pm_id: e.string().optional(),
|
|
535
535
|
use_pay_first_flow: e.boolean().optional(),
|
|
536
536
|
pay_first_flow_cart_info: Ur.optional()
|
|
537
|
-
}).extend(
|
|
538
|
-
const
|
|
537
|
+
}).extend(Dr.shape).extend(Fr.shape);
|
|
538
|
+
const Jt = e.object({
|
|
539
539
|
required_user_actions: e.array(e.record(e.string(), e.any())),
|
|
540
|
-
checkout_attempt_id:
|
|
540
|
+
checkout_attempt_id: h(e.string())
|
|
541
541
|
});
|
|
542
542
|
e.object({
|
|
543
543
|
fields: Wn,
|
|
@@ -556,28 +556,28 @@ const $r = e.object({
|
|
|
556
556
|
});
|
|
557
557
|
e.record(e.any());
|
|
558
558
|
e.object({
|
|
559
|
-
first_name:
|
|
560
|
-
last_name:
|
|
561
|
-
line1:
|
|
562
|
-
line2:
|
|
563
|
-
line3:
|
|
564
|
-
city:
|
|
565
|
-
state:
|
|
566
|
-
country:
|
|
567
|
-
zip_code:
|
|
568
|
-
email:
|
|
569
|
-
billing_email:
|
|
570
|
-
phone_number:
|
|
571
|
-
update_processor_customer:
|
|
559
|
+
first_name: h(e.string()),
|
|
560
|
+
last_name: h(e.string()),
|
|
561
|
+
line1: h(e.string()),
|
|
562
|
+
line2: h(e.string()),
|
|
563
|
+
line3: h(e.string()),
|
|
564
|
+
city: h(e.string()),
|
|
565
|
+
state: h(e.string()),
|
|
566
|
+
country: h(e.string()),
|
|
567
|
+
zip_code: h(e.string()),
|
|
568
|
+
email: h(e.string()),
|
|
569
|
+
billing_email: h(e.string()),
|
|
570
|
+
phone_number: h(e.string()),
|
|
571
|
+
update_processor_customer: h(e.boolean())
|
|
572
572
|
});
|
|
573
573
|
const qr = e.object({
|
|
574
574
|
id: e.string(),
|
|
575
|
-
email:
|
|
576
|
-
first_name:
|
|
577
|
-
last_name:
|
|
578
|
-
phone_number:
|
|
579
|
-
billing_email:
|
|
580
|
-
address:
|
|
575
|
+
email: h(e.string()),
|
|
576
|
+
first_name: h(e.string()),
|
|
577
|
+
last_name: h(e.string()),
|
|
578
|
+
phone_number: h(e.string()),
|
|
579
|
+
billing_email: h(e.string()),
|
|
580
|
+
address: h(e.record(e.string(), e.any()))
|
|
581
581
|
}), Vr = (t) => t.reduce((r, n) => r + n, 0);
|
|
582
582
|
function zr(t, r) {
|
|
583
583
|
var n = Object.setPrototypeOf;
|
|
@@ -588,7 +588,7 @@ function Yr(t, r) {
|
|
|
588
588
|
var n = Error.captureStackTrace;
|
|
589
589
|
n && n(t, r);
|
|
590
590
|
}
|
|
591
|
-
var
|
|
591
|
+
var Kr = /* @__PURE__ */ function() {
|
|
592
592
|
var t = function(r, n) {
|
|
593
593
|
return t = Object.setPrototypeOf || {
|
|
594
594
|
__proto__: []
|
|
@@ -607,8 +607,8 @@ var Hr = /* @__PURE__ */ function() {
|
|
|
607
607
|
}
|
|
608
608
|
r.prototype = n === null ? Object.create(n) : (o.prototype = n.prototype, new o());
|
|
609
609
|
};
|
|
610
|
-
}(),
|
|
611
|
-
|
|
610
|
+
}(), Hr = function(t) {
|
|
611
|
+
Kr(r, t);
|
|
612
612
|
function r(n, o) {
|
|
613
613
|
var i = this.constructor, a = t.call(this, n, o) || this;
|
|
614
614
|
return Object.defineProperty(a, "name", {
|
|
@@ -619,7 +619,7 @@ var Hr = /* @__PURE__ */ function() {
|
|
|
619
619
|
}
|
|
620
620
|
return r;
|
|
621
621
|
}(Error);
|
|
622
|
-
class
|
|
622
|
+
class Wt extends Hr {
|
|
623
623
|
constructor(r) {
|
|
624
624
|
const n = `${r.message}`;
|
|
625
625
|
super(n), this.response = r;
|
|
@@ -628,16 +628,16 @@ class Jt extends Kr {
|
|
|
628
628
|
return this.response.message;
|
|
629
629
|
}
|
|
630
630
|
}
|
|
631
|
-
const
|
|
631
|
+
const D = async (t, r, n) => {
|
|
632
632
|
const o = await t.send(r);
|
|
633
633
|
if (Zr(o))
|
|
634
|
-
throw new
|
|
634
|
+
throw new Wt(o);
|
|
635
635
|
if (!Gr(o, n)) {
|
|
636
636
|
const i = n.safeParse(o);
|
|
637
637
|
throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", n, "Actual:", o), i.error);
|
|
638
638
|
}
|
|
639
639
|
return o;
|
|
640
|
-
}, Gr = (t, r) => r.safeParse(t).success, Zr = (t) => Sr.safeParse(t).success, Br = async (t, r) => await
|
|
640
|
+
}, Gr = (t, r) => r.safeParse(t).success, Zr = (t) => Sr.safeParse(t).success, Br = async (t, r) => await D(t, { type: "get_checkout_preview", payload: r }, Zt), re = async (t) => await D(t, { type: "get_prefill", payload: {} }, Bt), it = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, Jt), Jr = async (t, r) => await D(t, { type: "start_payment_flow_for_cc", payload: r }, $r), Wr = async (t, r) => await D(t, { type: "start_payment_flow_for_pr", payload: r }, Jt), ne = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, ur), Xr = async (t, r) => await D(
|
|
641
641
|
t,
|
|
642
642
|
{ type: "check_if_popup_window_verified", payload: r },
|
|
643
643
|
lr
|
|
@@ -653,7 +653,7 @@ const N = async (t, r, n) => {
|
|
|
653
653
|
currency: a,
|
|
654
654
|
amountAtom: s
|
|
655
655
|
};
|
|
656
|
-
},
|
|
656
|
+
}, Le = async (t, r, n, o) => {
|
|
657
657
|
if (n)
|
|
658
658
|
return { amountAtom: 0, currency: "usd" };
|
|
659
659
|
{
|
|
@@ -666,30 +666,30 @@ const N = async (t, r, n) => {
|
|
|
666
666
|
throw new Error("No CDE connections found");
|
|
667
667
|
return await Promise.all(
|
|
668
668
|
Array.from(t.values()).map(
|
|
669
|
-
(n) =>
|
|
669
|
+
(n) => D(n, { type: "tokenize_card", payload: r }, ar)
|
|
670
670
|
)
|
|
671
671
|
);
|
|
672
672
|
}, _t = async (t, r) => {
|
|
673
673
|
try {
|
|
674
|
-
return await
|
|
674
|
+
return await D(t, { type: "checkout_card_elements", payload: r }, ot);
|
|
675
675
|
} catch (n) {
|
|
676
676
|
throw console.error("[cde-client] Error during checkoutCardElements:", n, JSON.stringify(n)), n;
|
|
677
677
|
}
|
|
678
|
-
}, to = async (t, r) => await
|
|
678
|
+
}, to = async (t, r) => await D(t, { type: "setup_payment_method", payload: r }, Mr), Ue = async (t, r) => await D(t, { type: "checkout", payload: r }, ot), Xt = 1e3, no = async (t, r) => {
|
|
679
679
|
console.log(r);
|
|
680
680
|
const n = await Dt({
|
|
681
681
|
iframe: t,
|
|
682
682
|
debug: !0,
|
|
683
|
-
timeout:
|
|
683
|
+
timeout: Xt,
|
|
684
684
|
childOrigin: "*"
|
|
685
685
|
// TODO: use with proper childOrigin
|
|
686
|
-
}).promise, o = await
|
|
686
|
+
}).promise, o = await D(n, { type: "ping-3ds-status" }, sr);
|
|
687
687
|
return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
|
|
688
|
-
}, ro = async (t, r) => await
|
|
688
|
+
}, ro = async (t, r) => await D(t, { type: "update_checkout_customer", payload: r }, qr);
|
|
689
689
|
function at(t) {
|
|
690
690
|
throw new Error(`Unhandled case: ${t}`);
|
|
691
691
|
}
|
|
692
|
-
const
|
|
692
|
+
const fe = (t) => async (r) => {
|
|
693
693
|
var n, o;
|
|
694
694
|
try {
|
|
695
695
|
(o = (n = r.formCallbacks.get).onCheckoutStarted) == null || o.call(n);
|
|
@@ -707,7 +707,7 @@ const ye = (t) => async (r) => {
|
|
|
707
707
|
} catch (i) {
|
|
708
708
|
r.formCallbacks.get.onCheckoutError(X(i));
|
|
709
709
|
}
|
|
710
|
-
},
|
|
710
|
+
}, Fe = (t) => async (r) => {
|
|
711
711
|
try {
|
|
712
712
|
return await t(r);
|
|
713
713
|
} catch (n) {
|
|
@@ -716,9 +716,9 @@ const ye = (t) => async (r) => {
|
|
|
716
716
|
}
|
|
717
717
|
}, I = (t) => {
|
|
718
718
|
const r = (...o) => {
|
|
719
|
-
window.console.log(`${
|
|
719
|
+
window.console.log(`${te.green.bold("ojs/")}${te.bold.gray(`${t}`)} `, ...o);
|
|
720
720
|
}, n = (...o) => {
|
|
721
|
-
window.console.warn(`${
|
|
721
|
+
window.console.warn(`${te.red.bold("ojs/")}${te.bold.gray(`${t}`)} `, ...o);
|
|
722
722
|
};
|
|
723
723
|
return {
|
|
724
724
|
log: r,
|
|
@@ -726,7 +726,7 @@ const ye = (t) => async (r) => {
|
|
|
726
726
|
log__: r,
|
|
727
727
|
err__: n
|
|
728
728
|
};
|
|
729
|
-
}, { log__:
|
|
729
|
+
}, { log__: hs, err__: oo } = I("common"), st = (t) => {
|
|
730
730
|
if (t.payment_methods.length !== 1)
|
|
731
731
|
throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
|
|
732
732
|
return { payment_method_id: t.payment_methods[0].id };
|
|
@@ -743,9 +743,9 @@ const ye = (t) => async (r) => {
|
|
|
743
743
|
},
|
|
744
744
|
new_customer_first_name: t.firstName,
|
|
745
745
|
new_customer_last_name: t.lastName
|
|
746
|
-
}), { log__:
|
|
746
|
+
}), { log__: Qt, err__: en } = I("common-cc"), ge = (t, r, n) => {
|
|
747
747
|
if (n) {
|
|
748
|
-
|
|
748
|
+
Qt(`Received default field values: ${JSON.stringify(n)}`);
|
|
749
749
|
for (const [i, a] of Object.entries(n))
|
|
750
750
|
t[i] || (t[i] = a);
|
|
751
751
|
}
|
|
@@ -754,21 +754,21 @@ const ye = (t) => async (r) => {
|
|
|
754
754
|
const i = o.error.format(), a = dr(i);
|
|
755
755
|
for (const [s, c] of Object.entries(a))
|
|
756
756
|
r(s, c, s);
|
|
757
|
-
throw
|
|
757
|
+
throw en("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
|
|
758
758
|
}
|
|
759
759
|
return o.data;
|
|
760
760
|
}, ao = (t, r) => {
|
|
761
761
|
for (const n of t)
|
|
762
762
|
if (n.success === !1)
|
|
763
763
|
throw n.errors.forEach((o) => {
|
|
764
|
-
const i =
|
|
764
|
+
const i = Vt.safeParse(o.elementType);
|
|
765
765
|
if (!i.success)
|
|
766
|
-
|
|
766
|
+
en(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
|
|
767
767
|
else {
|
|
768
768
|
const a = i.data;
|
|
769
769
|
r(a, o.errors);
|
|
770
770
|
}
|
|
771
|
-
}),
|
|
771
|
+
}), Qt(`Error tokenizing card: got validation errors: ${JSON.stringify(n.errors)}`), new Error("Got validation errors while tokenizing card");
|
|
772
772
|
}, yt = "ojs-stripe-link-btn", { log__: A, err__: so } = I("stripe-link"), co = e.object({
|
|
773
773
|
provider: e.literal("stripe_link"),
|
|
774
774
|
processor_name: e.literal("stripe"),
|
|
@@ -779,15 +779,15 @@ const ye = (t) => async (r) => {
|
|
|
779
779
|
e.object({
|
|
780
780
|
our_existing_pm_id: e.string()
|
|
781
781
|
})
|
|
782
|
-
).length(1), uo =
|
|
782
|
+
).length(1), uo = Fe(
|
|
783
783
|
async ({ context: t, formCallbacks: r }) => {
|
|
784
784
|
const n = t.customInitParams.stripeLink;
|
|
785
785
|
A("Checking if there are any CPMs for Stripe Link...");
|
|
786
786
|
const o = he(t.checkoutPaymentMethods, co);
|
|
787
787
|
A("Starting stripe link flow...");
|
|
788
|
-
const i = t.anyCdeConnection, a = await
|
|
788
|
+
const i = t.anyCdeConnection, a = await re(i), s = a.mode === "setup";
|
|
789
789
|
A("Creating stripe elements...");
|
|
790
|
-
const c = await
|
|
790
|
+
const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = await yr(o.metadata.stripe_pk, {
|
|
791
791
|
mode: "setup",
|
|
792
792
|
currency: c.currency,
|
|
793
793
|
setup_future_usage: "off_session",
|
|
@@ -821,10 +821,10 @@ const ye = (t) => async (r) => {
|
|
|
821
821
|
billing_details: m.billingDetails
|
|
822
822
|
}
|
|
823
823
|
});
|
|
824
|
-
y.error ? (so("error", y.error), r.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (A("paymentMethod", y.paymentMethod),
|
|
824
|
+
y.error ? (so("error", y.error), r.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (A("paymentMethod", y.paymentMethod), V.stripeLink.run({
|
|
825
825
|
context: t,
|
|
826
826
|
checkoutPaymentMethod: o,
|
|
827
|
-
nonCdeFormInputs:
|
|
827
|
+
nonCdeFormInputs: _e(t.formDiv),
|
|
828
828
|
formCallbacks: r,
|
|
829
829
|
customParams: { stripePM: y.paymentMethod },
|
|
830
830
|
initResult: { isAvailable: !0 }
|
|
@@ -838,7 +838,7 @@ const ye = (t) => async (r) => {
|
|
|
838
838
|
}
|
|
839
839
|
};
|
|
840
840
|
}
|
|
841
|
-
), po =
|
|
841
|
+
), po = fe(
|
|
842
842
|
async ({
|
|
843
843
|
context: t,
|
|
844
844
|
checkoutPaymentMethod: r,
|
|
@@ -849,9 +849,9 @@ const ye = (t) => async (r) => {
|
|
|
849
849
|
A("Running Stripe Link flow...");
|
|
850
850
|
const a = t.anyCdeConnection;
|
|
851
851
|
A("Merging PM fields with form fields...");
|
|
852
|
-
const s = mo(n, i.stripePM), c =
|
|
852
|
+
const s = mo(n, i.stripePM), c = ge(s, o.get.onValidationError);
|
|
853
853
|
A("Starting payment flow...");
|
|
854
|
-
const l = await
|
|
854
|
+
const l = await it(a, {
|
|
855
855
|
payment_provider: r.provider,
|
|
856
856
|
checkout_payment_method: r,
|
|
857
857
|
their_existing_pm_id: i.stripePM.id,
|
|
@@ -864,10 +864,10 @@ const ye = (t) => async (r) => {
|
|
|
864
864
|
}
|
|
865
865
|
});
|
|
866
866
|
A("Start payment flow response", l);
|
|
867
|
-
const u = lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await
|
|
867
|
+
const u = lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await re(a);
|
|
868
868
|
if (d.mode === "setup") {
|
|
869
869
|
A("Doing payment setup...");
|
|
870
|
-
const _ = await
|
|
870
|
+
const _ = await ne(a, {
|
|
871
871
|
secure_token: d.token,
|
|
872
872
|
existing_cc_pm_id: u
|
|
873
873
|
});
|
|
@@ -888,7 +888,7 @@ const ye = (t) => async (r) => {
|
|
|
888
888
|
cancel_at_end: !1,
|
|
889
889
|
checkout_payment_method: r
|
|
890
890
|
};
|
|
891
|
-
return { mode: "checkout", result: await
|
|
891
|
+
return { mode: "checkout", result: await Ue(a, _) };
|
|
892
892
|
}
|
|
893
893
|
}
|
|
894
894
|
), mo = (t, r) => {
|
|
@@ -902,7 +902,7 @@ const ye = (t) => async (r) => {
|
|
|
902
902
|
o ? r(o) : requestAnimationFrame(n);
|
|
903
903
|
};
|
|
904
904
|
n();
|
|
905
|
-
}), yo = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}",
|
|
905
|
+
}), yo = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", fo = (t) => {
|
|
906
906
|
const r = document.createElement("template");
|
|
907
907
|
r.innerHTML = `
|
|
908
908
|
<style>
|
|
@@ -920,7 +920,7 @@ const ye = (t) => async (r) => {
|
|
|
920
920
|
const i = o.querySelector("#three-ds-iframe"), a = o.querySelector(".cancel-button");
|
|
921
921
|
return document.body.appendChild(n), { host: n, iframe: i, cancelButton: a };
|
|
922
922
|
};
|
|
923
|
-
function
|
|
923
|
+
function ho(t, r, n) {
|
|
924
924
|
const o = async () => {
|
|
925
925
|
try {
|
|
926
926
|
const a = await no(t, n);
|
|
@@ -929,7 +929,7 @@ function fo(t, r, n) {
|
|
|
929
929
|
}
|
|
930
930
|
};
|
|
931
931
|
o();
|
|
932
|
-
const i = setInterval(o,
|
|
932
|
+
const i = setInterval(o, Xt);
|
|
933
933
|
return i;
|
|
934
934
|
}
|
|
935
935
|
function go({
|
|
@@ -938,33 +938,33 @@ function go({
|
|
|
938
938
|
resolve: n
|
|
939
939
|
}) {
|
|
940
940
|
const o = () => {
|
|
941
|
-
clearInterval(r), t.host.remove(), n({ status:
|
|
941
|
+
clearInterval(r), t.host.remove(), n({ status: z.CANCELLED });
|
|
942
942
|
};
|
|
943
943
|
return t.cancelButton.addEventListener("click", o), () => {
|
|
944
944
|
t.cancelButton.removeEventListener("click", o);
|
|
945
945
|
};
|
|
946
946
|
}
|
|
947
|
-
async function
|
|
948
|
-
const { url: r, baseUrl: n } = t, o =
|
|
947
|
+
async function $e(t) {
|
|
948
|
+
const { url: r, baseUrl: n } = t, o = fo(r);
|
|
949
949
|
return new Promise((i) => {
|
|
950
950
|
const a = (l) => {
|
|
951
951
|
setTimeout(() => {
|
|
952
952
|
o.host.remove();
|
|
953
953
|
}, 1e3), i(l), c == null || c();
|
|
954
|
-
}, s =
|
|
954
|
+
}, s = ho(o.iframe, a, new URL(n).origin), c = go({
|
|
955
955
|
elements: o,
|
|
956
956
|
pollingInterval: s,
|
|
957
957
|
resolve: i
|
|
958
958
|
});
|
|
959
959
|
});
|
|
960
960
|
}
|
|
961
|
-
const
|
|
962
|
-
const r = await
|
|
963
|
-
if (r.status ===
|
|
961
|
+
const tn = async (t) => {
|
|
962
|
+
const r = await $e(t);
|
|
963
|
+
if (r.status === z.CANCELLED)
|
|
964
964
|
throw new Error("3DS verification cancelled");
|
|
965
|
-
if (r.status ===
|
|
965
|
+
if (r.status === z.FAILURE)
|
|
966
966
|
throw new Error("3DS verification failed");
|
|
967
|
-
return r.status !==
|
|
967
|
+
return r.status !== z.SUCCESS && at(r.status), {
|
|
968
968
|
href: r.href
|
|
969
969
|
};
|
|
970
970
|
}, bo = (t, r) => {
|
|
@@ -987,7 +987,7 @@ const en = async (t) => {
|
|
|
987
987
|
}
|
|
988
988
|
}, 1e3);
|
|
989
989
|
});
|
|
990
|
-
}, { log__: vo, err__:
|
|
990
|
+
}, { log__: vo, err__: nn } = I("pockyt-cc"), Eo = e.object({
|
|
991
991
|
"op-pockyt-3ds-url": e.string(),
|
|
992
992
|
"op-pockyt-txn-no": e.string(),
|
|
993
993
|
"op-pockyt-ref-no": e.string()
|
|
@@ -995,10 +995,10 @@ const en = async (t) => {
|
|
|
995
995
|
const r = Eo.safeParse(t);
|
|
996
996
|
if (!r.success) {
|
|
997
997
|
const n = "Unable to process your credit card. Please contact support for assistance.", o = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
|
|
998
|
-
throw
|
|
998
|
+
throw nn(o), new Error(n);
|
|
999
999
|
}
|
|
1000
1000
|
return r.data;
|
|
1001
|
-
},
|
|
1001
|
+
}, rn = (t) => {
|
|
1002
1002
|
try {
|
|
1003
1003
|
const r = new URL(t ?? "").searchParams.get("vaultId");
|
|
1004
1004
|
if (!r)
|
|
@@ -1006,42 +1006,42 @@ const en = async (t) => {
|
|
|
1006
1006
|
return vo(`3DS verification success. [Vault ID: ${r}]`), r;
|
|
1007
1007
|
} catch (r) {
|
|
1008
1008
|
const n = "Error verifying 3DS verification result.";
|
|
1009
|
-
throw
|
|
1009
|
+
throw nn(n, `Resulting URL: ${t}.
|
|
1010
1010
|
Error: ${X(r)}`), new Error(n);
|
|
1011
1011
|
}
|
|
1012
|
-
}, So = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0,
|
|
1013
|
-
const n = Co(r), o = await
|
|
1012
|
+
}, So = (t, r) => new URL(t).searchParams.get(r), Po = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, ko = async (t, r) => {
|
|
1013
|
+
const n = Co(r), o = await tn({ url: n["op-pockyt-3ds-url"], baseUrl: t });
|
|
1014
1014
|
return {
|
|
1015
1015
|
existing_cc: {
|
|
1016
|
-
vault_id:
|
|
1016
|
+
vault_id: rn(o.href ?? ""),
|
|
1017
1017
|
transaction_no: n["op-pockyt-txn-no"],
|
|
1018
1018
|
reference_no: n["op-pockyt-ref-no"]
|
|
1019
1019
|
}
|
|
1020
1020
|
};
|
|
1021
|
-
}, { log__:
|
|
1021
|
+
}, { log__: Ao, err__: ct } = I("airwallex-cc"), Oo = e.object({
|
|
1022
1022
|
"op-airwallex-3ds-url": e.string(),
|
|
1023
1023
|
"op-airwallex-initial-intent-id": e.string(),
|
|
1024
1024
|
"op-airwallex-consent-id": e.string()
|
|
1025
|
-
}),
|
|
1026
|
-
const r =
|
|
1025
|
+
}), Io = (t) => {
|
|
1026
|
+
const r = Oo.safeParse(t);
|
|
1027
1027
|
if (!r.success) {
|
|
1028
1028
|
const n = "Unable to process your credit card. Please contact support for assistance.", o = `Airwallex 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
|
|
1029
1029
|
throw ct(o), new Error(n);
|
|
1030
1030
|
}
|
|
1031
1031
|
return r.data;
|
|
1032
|
-
},
|
|
1032
|
+
}, jo = (t) => (t == null ? void 0 : t["op-airwallex-3ds-url"]) !== void 0, Ro = (t) => {
|
|
1033
1033
|
try {
|
|
1034
1034
|
const r = new URL(t ?? "").searchParams.get("payment_intent_id");
|
|
1035
1035
|
if (!r)
|
|
1036
1036
|
throw new Error("No intent ID found in Airwallex 3DS verification result");
|
|
1037
|
-
return
|
|
1037
|
+
return Ao(`Airwallex 3DS verification success. [Intent ID: ${r}]`), r;
|
|
1038
1038
|
} catch (r) {
|
|
1039
1039
|
const n = "Error verifying Airwallex 3DS verification result.";
|
|
1040
1040
|
throw ct(n, `Resulting URL: ${t}.
|
|
1041
1041
|
Error: ${X(r)}`), new Error(n);
|
|
1042
1042
|
}
|
|
1043
1043
|
}, To = async (t, r) => {
|
|
1044
|
-
const n =
|
|
1044
|
+
const n = Io(r), o = await tn({ url: n["op-airwallex-3ds-url"], baseUrl: t }), i = Ro(o.href ?? ""), a = n["op-airwallex-initial-intent-id"];
|
|
1045
1045
|
if (a !== i) {
|
|
1046
1046
|
const s = "Unable to process your credit card. Please contact support for assistance.", c = `Intent ID from callback (${i}) does not match the initial intent ID (${a}).`;
|
|
1047
1047
|
throw ct(c), new Error(s);
|
|
@@ -1052,13 +1052,13 @@ Error: ${X(r)}`), new Error(n);
|
|
|
1052
1052
|
consent_id: n["op-airwallex-consent-id"]
|
|
1053
1053
|
}
|
|
1054
1054
|
};
|
|
1055
|
-
}, { log__: E, err__:
|
|
1055
|
+
}, { log__: E, err__: ft } = I("common-cc"), { log__: ht } = I("stripe-cc");
|
|
1056
1056
|
e.array(
|
|
1057
1057
|
e.object({
|
|
1058
1058
|
our_existing_pm_id: e.string()
|
|
1059
1059
|
})
|
|
1060
1060
|
).length(1);
|
|
1061
|
-
const
|
|
1061
|
+
const xo = fe(
|
|
1062
1062
|
async ({
|
|
1063
1063
|
context: t,
|
|
1064
1064
|
checkoutPaymentMethod: r,
|
|
@@ -1068,9 +1068,9 @@ const Ro = ye(
|
|
|
1068
1068
|
}) => {
|
|
1069
1069
|
var a;
|
|
1070
1070
|
E("├ Running common CC flow...", { checkoutPaymentMethod: r });
|
|
1071
|
-
const s = t.anyCdeConnection, c = await
|
|
1071
|
+
const s = t.anyCdeConnection, c = await re(s);
|
|
1072
1072
|
E(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
|
|
1073
|
-
const l =
|
|
1073
|
+
const l = ge(n, o.get.onValidationError), u = {
|
|
1074
1074
|
session_id: t.elementsSessionId,
|
|
1075
1075
|
checkout_payment_method: r,
|
|
1076
1076
|
non_cde_form_fields: l,
|
|
@@ -1091,93 +1091,93 @@ const Ro = ye(
|
|
|
1091
1091
|
return E("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
|
|
1092
1092
|
}
|
|
1093
1093
|
} catch (d) {
|
|
1094
|
-
if (d instanceof
|
|
1094
|
+
if (d instanceof Wt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
|
|
1095
1095
|
E("├ Card requires 3DS, starting non-legacy payment flow"), E("Received 3DS error response headers:", d.response.headers);
|
|
1096
|
-
const _ =
|
|
1096
|
+
const _ = Po(d.response.headers);
|
|
1097
1097
|
if (_) {
|
|
1098
1098
|
E("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
|
|
1099
|
-
const
|
|
1100
|
-
u.extra_metadata.pockyt =
|
|
1099
|
+
const f = await ko(t.baseUrl, d.response.headers);
|
|
1100
|
+
u.extra_metadata.pockyt = f;
|
|
1101
1101
|
}
|
|
1102
|
-
if (
|
|
1102
|
+
if (jo(d.response.headers)) {
|
|
1103
1103
|
E("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
|
|
1104
|
-
const
|
|
1105
|
-
u.extra_metadata.airwallex =
|
|
1104
|
+
const f = await To(t.baseUrl, d.response.headers);
|
|
1105
|
+
u.extra_metadata.airwallex = f;
|
|
1106
1106
|
}
|
|
1107
1107
|
const b = await Jr(s, u);
|
|
1108
1108
|
E("├ Payment flow result:", b);
|
|
1109
1109
|
const m = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
|
|
1110
|
-
_ ? E("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (E("├ Using stripe 3DS flow"), await
|
|
1110
|
+
_ ? E("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (E("├ Using stripe 3DS flow"), await Lo(b)) : (E("├ Using common 3DS flow"), await Do(b, t.baseUrl));
|
|
1111
1111
|
const y = b.cc_pm_id;
|
|
1112
1112
|
if (c.mode === "setup") {
|
|
1113
1113
|
E(`├ Confirming payment flow [cc_pm_id: ${y}]`);
|
|
1114
|
-
const
|
|
1114
|
+
const f = await ne(s, {
|
|
1115
1115
|
secure_token: c.token,
|
|
1116
1116
|
existing_cc_pm_id: y
|
|
1117
1117
|
});
|
|
1118
|
-
E("├ Confirm payment flow result received Result:",
|
|
1119
|
-
const w = st(
|
|
1118
|
+
E("├ Confirm payment flow result received Result:", f);
|
|
1119
|
+
const w = st(f);
|
|
1120
1120
|
return E(`╰ Setup completed successfully [PM ID: ${w.payment_method_id}]`), { mode: "setup", result: w };
|
|
1121
1121
|
} else {
|
|
1122
1122
|
E(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
|
|
1123
|
-
const
|
|
1123
|
+
const f = await _t(s, {
|
|
1124
1124
|
...u,
|
|
1125
1125
|
existing_cc_pm_id: y,
|
|
1126
1126
|
do_not_use_legacy_cc_flow: m
|
|
1127
1127
|
});
|
|
1128
|
-
return E("╰ Checkout completed successfully."), { mode: "checkout", result:
|
|
1128
|
+
return E("╰ Checkout completed successfully."), { mode: "checkout", result: f };
|
|
1129
1129
|
}
|
|
1130
1130
|
}
|
|
1131
|
-
throw
|
|
1131
|
+
throw ft("╰ Error checking out card info in CDE"), ft(d), d;
|
|
1132
1132
|
}
|
|
1133
1133
|
}
|
|
1134
|
-
),
|
|
1134
|
+
), Mo = (t) => {
|
|
1135
1135
|
const r = t.required_user_actions.find((n) => n.type === "stripe_3ds");
|
|
1136
1136
|
if (!r)
|
|
1137
1137
|
throw new Error("No stripe 3DS action found");
|
|
1138
1138
|
return pr.parse(r);
|
|
1139
|
-
},
|
|
1139
|
+
}, No = (t) => {
|
|
1140
1140
|
const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
|
|
1141
1141
|
if (!r)
|
|
1142
1142
|
throw new Error("No common 3DS action found");
|
|
1143
1143
|
return cr.parse(r);
|
|
1144
1144
|
}, Do = async (t, r) => {
|
|
1145
|
-
const n =
|
|
1145
|
+
const n = No(t);
|
|
1146
1146
|
if (n.type === "airwallex_payment_consent" && n.redirect_url === "3DS_COMPLETE") {
|
|
1147
1147
|
E("├ Airwallex 3DS flow completed successfully");
|
|
1148
1148
|
return;
|
|
1149
1149
|
}
|
|
1150
1150
|
E(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
|
|
1151
|
-
const { status: o } = await
|
|
1152
|
-
if (E(`╰ 3DS verification completed [Status: ${o}]`), o ===
|
|
1151
|
+
const { status: o } = await $e({ url: n.redirect_url, baseUrl: r });
|
|
1152
|
+
if (E(`╰ 3DS verification completed [Status: ${o}]`), o === z.CANCELLED)
|
|
1153
1153
|
throw new Error("3DS verification cancelled");
|
|
1154
|
-
if (o ===
|
|
1154
|
+
if (o === z.FAILURE)
|
|
1155
1155
|
throw new Error("3DS verification failed");
|
|
1156
|
-
},
|
|
1157
|
-
const r =
|
|
1158
|
-
|
|
1159
|
-
}, { log__:
|
|
1156
|
+
}, Lo = async (t) => {
|
|
1157
|
+
const r = Mo(t);
|
|
1158
|
+
ht(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await br(r), ht("╰ Stripe 3DS flow completed successfully");
|
|
1159
|
+
}, { log__: x, err__: Uo } = I("stripe-pr"), Fo = e.object({
|
|
1160
1160
|
provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
|
|
1161
1161
|
processor_name: e.literal("stripe"),
|
|
1162
1162
|
metadata: e.object({
|
|
1163
1163
|
stripe_pk: e.string()
|
|
1164
1164
|
})
|
|
1165
|
-
}),
|
|
1165
|
+
}), $o = Fe(
|
|
1166
1166
|
async ({ context: t }) => {
|
|
1167
|
-
|
|
1168
|
-
const r = he(t.checkoutPaymentMethods,
|
|
1169
|
-
|
|
1170
|
-
const n = t.anyCdeConnection, o = await
|
|
1171
|
-
|
|
1172
|
-
const a = await
|
|
1167
|
+
x("Checking if there are any CPMs for Stripe PR...");
|
|
1168
|
+
const r = he(t.checkoutPaymentMethods, Fo);
|
|
1169
|
+
x("Initializing Stripe PR flow...");
|
|
1170
|
+
const n = t.anyCdeConnection, o = await re(n), i = o.mode === "setup";
|
|
1171
|
+
x("Getting initial preview amount");
|
|
1172
|
+
const a = await Le(n, o.token, i, void 0), s = await fr(
|
|
1173
1173
|
r.metadata.stripe_pk,
|
|
1174
1174
|
a.amountAtom,
|
|
1175
1175
|
a.currency,
|
|
1176
1176
|
i
|
|
1177
1177
|
);
|
|
1178
|
-
|
|
1178
|
+
x("Checking if can make payment");
|
|
1179
1179
|
const c = await s.canMakePayment();
|
|
1180
|
-
return c === null ? (
|
|
1180
|
+
return c === null ? (Uo("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (x("Stripe PR flow initialized successfully. Can make payment", c), {
|
|
1181
1181
|
isAvailable: !0,
|
|
1182
1182
|
pr: s,
|
|
1183
1183
|
availableProviders: {
|
|
@@ -1186,7 +1186,7 @@ const Ro = ye(
|
|
|
1186
1186
|
}
|
|
1187
1187
|
});
|
|
1188
1188
|
}
|
|
1189
|
-
),
|
|
1189
|
+
), qo = fe(
|
|
1190
1190
|
async ({
|
|
1191
1191
|
context: t,
|
|
1192
1192
|
checkoutPaymentMethod: r,
|
|
@@ -1195,32 +1195,32 @@ const Ro = ye(
|
|
|
1195
1195
|
customParams: i,
|
|
1196
1196
|
initResult: a
|
|
1197
1197
|
}) => {
|
|
1198
|
-
if (
|
|
1198
|
+
if (x("Running Stripe PR flow..."), i.provider !== r.provider)
|
|
1199
1199
|
throw new Error(`Provider mismatch. Expected ${i.provider}, got ${r.provider}`);
|
|
1200
1200
|
const s = t.anyCdeConnection, c = a.pr;
|
|
1201
1201
|
if (i != null && i.overridePaymentRequest) {
|
|
1202
1202
|
const y = i.overridePaymentRequest;
|
|
1203
|
-
|
|
1203
|
+
x("Overriding PR amount with", y), zo(c, y.amount, y.pending, y.stripeApplePay);
|
|
1204
1204
|
}
|
|
1205
|
-
|
|
1206
|
-
const l = await
|
|
1207
|
-
|
|
1208
|
-
const u =
|
|
1209
|
-
|
|
1205
|
+
x("Showing PR dialog..."), c.show();
|
|
1206
|
+
const l = await hr(c);
|
|
1207
|
+
x("Stripe PM added event:", l), x("Merging PM fields with form fields...");
|
|
1208
|
+
const u = Vo(n, l), d = ge(u, o.get.onValidationError);
|
|
1209
|
+
x("PR dialog finished. Starting payment flow...", d);
|
|
1210
1210
|
const _ = await Wr(s, {
|
|
1211
1211
|
fields: d,
|
|
1212
1212
|
checkoutPaymentMethod: r
|
|
1213
|
-
}), b =
|
|
1214
|
-
|
|
1215
|
-
const m = await
|
|
1213
|
+
}), b = Yo(_);
|
|
1214
|
+
x("Confirming PR with Stripe..."), await gr(b, l);
|
|
1215
|
+
const m = await re(s);
|
|
1216
1216
|
if (m.mode === "setup") {
|
|
1217
|
-
|
|
1218
|
-
const y = await
|
|
1217
|
+
x("Confirming payment flow for setup...");
|
|
1218
|
+
const y = await ne(s, {
|
|
1219
1219
|
secure_token: m.token
|
|
1220
1220
|
});
|
|
1221
1221
|
return { mode: "setup", result: st(y) };
|
|
1222
1222
|
} else {
|
|
1223
|
-
|
|
1223
|
+
x("Performing checkout...");
|
|
1224
1224
|
const y = {
|
|
1225
1225
|
secure_token: m.token,
|
|
1226
1226
|
payment_input: {
|
|
@@ -1237,14 +1237,14 @@ const Ro = ye(
|
|
|
1237
1237
|
cancel_at_end: !1,
|
|
1238
1238
|
checkout_payment_method: r
|
|
1239
1239
|
};
|
|
1240
|
-
return { mode: "checkout", result: await
|
|
1240
|
+
return { mode: "checkout", result: await Ue(s, y) };
|
|
1241
1241
|
}
|
|
1242
1242
|
}
|
|
1243
|
-
),
|
|
1243
|
+
), Vo = (t, r) => {
|
|
1244
1244
|
var n, o, i, a;
|
|
1245
1245
|
const s = { ...t }, [c, ...l] = ((o = (n = r.payerName) == null ? void 0 : n.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = r.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, _ = r.shippingAddress;
|
|
1246
|
-
return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (_ == null ? void 0 : _.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (_ == null ? void 0 : _.country) || "US",
|
|
1247
|
-
},
|
|
1246
|
+
return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (_ == null ? void 0 : _.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (_ == null ? void 0 : _.country) || "US", x("Final form inputs:", s), s;
|
|
1247
|
+
}, zo = (t, r, n, o) => {
|
|
1248
1248
|
t.update({
|
|
1249
1249
|
total: {
|
|
1250
1250
|
amount: r.amountAtom,
|
|
@@ -1254,20 +1254,22 @@ const Ro = ye(
|
|
|
1254
1254
|
currency: r.currency,
|
|
1255
1255
|
applePay: o
|
|
1256
1256
|
});
|
|
1257
|
-
},
|
|
1257
|
+
}, Yo = (t) => {
|
|
1258
1258
|
if (t.required_user_actions.length !== 1)
|
|
1259
1259
|
throw new Error(`Error occurred.
|
|
1260
1260
|
Details: got ${t.required_user_actions.length} required user actions`);
|
|
1261
1261
|
return mr.parse(t.required_user_actions[0]);
|
|
1262
|
-
}, { log__:
|
|
1262
|
+
}, { log__: G, err__: gt } = I("pockyt-paypal"), Ko = e.object({
|
|
1263
1263
|
processor_name: e.literal("pockyt"),
|
|
1264
1264
|
provider: e.literal("paypal")
|
|
1265
|
-
})
|
|
1265
|
+
});
|
|
1266
|
+
e.array(
|
|
1266
1267
|
e.object({
|
|
1267
1268
|
paypal_iframe_url: e.string(),
|
|
1268
1269
|
verify_token: e.string()
|
|
1269
1270
|
})
|
|
1270
|
-
).length(1)
|
|
1271
|
+
).length(1);
|
|
1272
|
+
const Ho = fe(
|
|
1271
1273
|
async ({
|
|
1272
1274
|
context: t,
|
|
1273
1275
|
checkoutPaymentMethod: r,
|
|
@@ -1276,71 +1278,69 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1276
1278
|
customParams: i
|
|
1277
1279
|
}) => {
|
|
1278
1280
|
var a, s;
|
|
1279
|
-
|
|
1280
|
-
const c = t.anyCdeConnection, l = await
|
|
1281
|
-
|
|
1282
|
-
const u =
|
|
1283
|
-
|
|
1284
|
-
const d = i == null ? void 0 : i.settings, _ =
|
|
1281
|
+
G("Running Pockyt Paypal flow...");
|
|
1282
|
+
const c = t.anyCdeConnection, l = await re(c);
|
|
1283
|
+
G("Verifying CPM...");
|
|
1284
|
+
const u = Ko.parse(r);
|
|
1285
|
+
G("├ Validating non-CDE form fields");
|
|
1286
|
+
const d = i == null ? void 0 : i.settings, _ = ge(
|
|
1285
1287
|
n,
|
|
1286
1288
|
o.get.onValidationError,
|
|
1287
1289
|
d == null ? void 0 : d.defaultFieldValues
|
|
1288
1290
|
), b = io(_);
|
|
1289
|
-
|
|
1290
|
-
const m = l.mode !== "setup",
|
|
1291
|
+
G(`Starting payment flow... Mode: ${l.mode}`);
|
|
1292
|
+
const m = Nt(), y = l.mode !== "setup", f = {
|
|
1291
1293
|
payment_provider: u.provider,
|
|
1292
1294
|
checkout_payment_method: u,
|
|
1293
|
-
use_pay_first_flow:
|
|
1294
|
-
pay_first_flow_cart_info:
|
|
1295
|
+
use_pay_first_flow: y,
|
|
1296
|
+
pay_first_flow_cart_info: y ? {
|
|
1295
1297
|
// TODO add coupon and cart adjusted line items later
|
|
1296
1298
|
line_items: l.line_items,
|
|
1297
1299
|
displayed_total_amount_atom: l.amount_total_atom
|
|
1298
1300
|
} : void 0,
|
|
1299
1301
|
processor_specific_metadata: {
|
|
1300
|
-
use_paypal_redirect_flow: !!((a = i == null ? void 0 : i.settings) != null && a.useRedirectFlow)
|
|
1302
|
+
use_paypal_redirect_flow: !!((a = i == null ? void 0 : i.settings) != null && a.useRedirectFlow),
|
|
1303
|
+
frontend_token_for_redirect_flow: m
|
|
1301
1304
|
},
|
|
1302
1305
|
...b
|
|
1303
|
-
}
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
const
|
|
1311
|
-
if (F("Start payment flow response", h), !h.checkout_attempt_id)
|
|
1312
|
-
throw gt("Checkout attempt ID not found in response:", h), new Error("An error occurred during checkout, please try again with another payment method.");
|
|
1313
|
-
const w = Ho.parse(h.required_user_actions)[0];
|
|
1314
|
-
F("Opening paypal iframe...");
|
|
1315
|
-
const v = await wo(
|
|
1306
|
+
}, w = new URL("/app/pre-action/start/", t.baseUrl).toString(), v = btoa(JSON.stringify(f)), P = new URLSearchParams({
|
|
1307
|
+
st: l.token,
|
|
1308
|
+
r: v
|
|
1309
|
+
}), U = `${w}?${P.toString()}`;
|
|
1310
|
+
if ((s = i == null ? void 0 : i.settings) != null && s.useRedirectFlow)
|
|
1311
|
+
throw G("Starting redirect mode for PayPal..."), window.location.href = U, await Yt(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
|
|
1312
|
+
G("Starting popup mode for PayPal..."), G("Opening paypal iframe...");
|
|
1313
|
+
const k = await wo(
|
|
1316
1314
|
"PayPal",
|
|
1317
1315
|
c,
|
|
1318
|
-
|
|
1319
|
-
|
|
1316
|
+
m,
|
|
1317
|
+
U
|
|
1320
1318
|
);
|
|
1321
|
-
|
|
1322
|
-
const
|
|
1323
|
-
|
|
1324
|
-
|
|
1319
|
+
G("Paypal flow result", k);
|
|
1320
|
+
const ee = rn(k.href), ce = So(k.href, "catt");
|
|
1321
|
+
if (!ce)
|
|
1322
|
+
throw gt("Checkout attempt ID not found in redirect URL:", k.href), new Error("Checkout attempt ID not found in redirect URL");
|
|
1323
|
+
G(`Confirming payment flow using vault ID ${ee}`);
|
|
1324
|
+
const T = await ne(c, {
|
|
1325
1325
|
secure_token: l.token,
|
|
1326
|
-
their_pm_id:
|
|
1327
|
-
checkout_attempt_id:
|
|
1326
|
+
their_pm_id: ee,
|
|
1327
|
+
checkout_attempt_id: y ? ce : void 0
|
|
1328
1328
|
});
|
|
1329
|
-
if (
|
|
1329
|
+
if (G("Confirm payment flow result", T), l.mode === "setup")
|
|
1330
1330
|
return {
|
|
1331
1331
|
mode: "setup",
|
|
1332
1332
|
result: {
|
|
1333
|
-
payment_method_id:
|
|
1333
|
+
payment_method_id: T.payment_methods[0].id
|
|
1334
1334
|
}
|
|
1335
1335
|
};
|
|
1336
|
-
if (!
|
|
1337
|
-
throw gt("Checkout failed, no pay-first success response:",
|
|
1336
|
+
if (!T.pay_first_success_response)
|
|
1337
|
+
throw gt("Checkout failed, no pay-first success response:", T), new Error("Checkout failed, please try again with another payment method.");
|
|
1338
1338
|
return {
|
|
1339
1339
|
mode: "checkout",
|
|
1340
|
-
result:
|
|
1340
|
+
result: T.pay_first_success_response
|
|
1341
1341
|
};
|
|
1342
1342
|
}
|
|
1343
|
-
),
|
|
1343
|
+
), on = ({
|
|
1344
1344
|
gateway: t,
|
|
1345
1345
|
gatewayMerchantId: r,
|
|
1346
1346
|
merchantName: n,
|
|
@@ -1395,7 +1395,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1395
1395
|
n.src = "https://pay.google.com/gp/p/js/pay.js", n.async = !0, n.onload = () => t(), n.onerror = () => r(new Error("Failed to load Google Pay SDK")), document.body.appendChild(n);
|
|
1396
1396
|
}), Zo = (t) => {
|
|
1397
1397
|
const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
|
|
1398
|
-
return r ?
|
|
1398
|
+
return r ? zt.parse(r) : null;
|
|
1399
1399
|
}, Bo = (t, r) => {
|
|
1400
1400
|
var n, o, i, a;
|
|
1401
1401
|
const s = { ...t }, c = (o = (n = r.paymentMethodData) == null ? void 0 : n.info) == null ? void 0 : o.billingAddress;
|
|
@@ -1404,15 +1404,15 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1404
1404
|
s[p.EMAIL] = s[p.EMAIL] || r.email || "op_unfilled@getopenpay.com", s[p.COUNTRY] = s[p.COUNTRY] || c.countryCode || "US", s[p.ADDRESS] = s[p.ADDRESS] || c.address1 || "", s[p.CITY] = s[p.CITY] || c.locality || "", s[p.ZIP_CODE] = s[p.ZIP_CODE] || c.postalCode || "00000", s[p.STATE] = s[p.STATE] || c.administrativeArea || "", s[p.FIRST_NAME] = s[p.FIRST_NAME] || l || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || d || "_OP_UNKNOWN";
|
|
1405
1405
|
}
|
|
1406
1406
|
return s;
|
|
1407
|
-
}, { log__: L, err__:
|
|
1408
|
-
let
|
|
1409
|
-
const
|
|
1410
|
-
const n =
|
|
1411
|
-
return
|
|
1407
|
+
}, { log__: L, err__: le } = I("awx-google-pay");
|
|
1408
|
+
let Ge = null;
|
|
1409
|
+
const an = (t) => t === Ut || t === window.location.origin ? "PRODUCTION" : "TEST", sn = (t, r) => {
|
|
1410
|
+
const n = an(t);
|
|
1411
|
+
return Ge === null && (Ge = new window.google.payments.api.PaymentsClient({
|
|
1412
1412
|
environment: n,
|
|
1413
1413
|
merchantInfo: r.merchantInfo
|
|
1414
|
-
})),
|
|
1415
|
-
},
|
|
1414
|
+
})), Ge;
|
|
1415
|
+
}, cn = e.object({
|
|
1416
1416
|
provider: e.literal("google_pay"),
|
|
1417
1417
|
processor_name: e.literal("airwallex"),
|
|
1418
1418
|
metadata: e.object({
|
|
@@ -1420,40 +1420,40 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1420
1420
|
processor_account_name: e.string(),
|
|
1421
1421
|
google_pay_merchant_id: e.string().nullish()
|
|
1422
1422
|
})
|
|
1423
|
-
}), Jo =
|
|
1423
|
+
}), Jo = Fe(
|
|
1424
1424
|
async ({ context: t, formCallbacks: r }) => {
|
|
1425
1425
|
var n, o;
|
|
1426
|
-
const i = he(t.checkoutPaymentMethods,
|
|
1426
|
+
const i = he(t.checkoutPaymentMethods, cn);
|
|
1427
1427
|
if (!i)
|
|
1428
1428
|
return { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1429
1429
|
} };
|
|
1430
1430
|
L("Google Pay CPM", i);
|
|
1431
1431
|
const a = i.metadata;
|
|
1432
1432
|
if (!a.processor_account_id)
|
|
1433
|
-
return
|
|
1433
|
+
return le("No gateway merchant ID found in processor account"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1434
1434
|
} };
|
|
1435
1435
|
if (L("Loading Google Pay SDK..."), await Go(), !((o = (n = window.google) == null ? void 0 : n.payments) != null && o.api))
|
|
1436
|
-
return
|
|
1436
|
+
return le("Google Pay SDK not loaded properly"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1437
1437
|
} };
|
|
1438
|
-
if (
|
|
1439
|
-
return
|
|
1438
|
+
if (an(t.baseUrl) === "PRODUCTION" && !a.google_pay_merchant_id)
|
|
1439
|
+
return le("Google Pay merchant ID is required for production environment"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1440
1440
|
} };
|
|
1441
1441
|
L("Google Pay SDK loaded", window.google.payments);
|
|
1442
1442
|
try {
|
|
1443
|
-
const s =
|
|
1443
|
+
const s = on({
|
|
1444
1444
|
gateway: "airwallex",
|
|
1445
1445
|
gatewayMerchantId: a.processor_account_id,
|
|
1446
1446
|
merchantName: a.processor_account_name,
|
|
1447
1447
|
merchantId: a.google_pay_merchant_id ?? "",
|
|
1448
1448
|
initialPreview: void 0
|
|
1449
|
-
}), { result: c } = await
|
|
1449
|
+
}), { result: c } = await sn(t.baseUrl, s).isReadyToPay(
|
|
1450
1450
|
s
|
|
1451
1451
|
);
|
|
1452
1452
|
if (!c)
|
|
1453
1453
|
return L("Google Pay is not available for this user"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1454
1454
|
} };
|
|
1455
1455
|
} catch (s) {
|
|
1456
|
-
return
|
|
1456
|
+
return le("Error checking Google Pay availability", s), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1457
1457
|
} };
|
|
1458
1458
|
}
|
|
1459
1459
|
return {
|
|
@@ -1461,21 +1461,21 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1461
1461
|
isLoading: !1,
|
|
1462
1462
|
startFlow: async (s) => {
|
|
1463
1463
|
try {
|
|
1464
|
-
|
|
1464
|
+
V.airwallexGooglePay.run({
|
|
1465
1465
|
context: t,
|
|
1466
1466
|
checkoutPaymentMethod: i,
|
|
1467
|
-
nonCdeFormInputs:
|
|
1467
|
+
nonCdeFormInputs: _e(t.formDiv),
|
|
1468
1468
|
formCallbacks: r,
|
|
1469
1469
|
initResult: void 0,
|
|
1470
1470
|
customParams: s ?? {}
|
|
1471
1471
|
});
|
|
1472
1472
|
} catch (c) {
|
|
1473
|
-
|
|
1473
|
+
le("Google Pay payment error", c), r.get.onCheckoutError((c == null ? void 0 : c.message) ?? "Unknown error");
|
|
1474
1474
|
}
|
|
1475
1475
|
}
|
|
1476
1476
|
};
|
|
1477
1477
|
}
|
|
1478
|
-
), Wo =
|
|
1478
|
+
), Wo = fe(
|
|
1479
1479
|
async ({
|
|
1480
1480
|
context: t,
|
|
1481
1481
|
checkoutPaymentMethod: r,
|
|
@@ -1485,33 +1485,33 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1485
1485
|
}) => {
|
|
1486
1486
|
var a, s, c, l, u, d, _;
|
|
1487
1487
|
L("Starting Google Pay flow...");
|
|
1488
|
-
const b = he(t.checkoutPaymentMethods,
|
|
1489
|
-
if (!
|
|
1488
|
+
const b = he(t.checkoutPaymentMethods, cn), m = t.anyCdeConnection, y = await re(m), f = b.metadata;
|
|
1489
|
+
if (!f.processor_account_id)
|
|
1490
1490
|
throw new Error("No gateway merchant ID found in processor account");
|
|
1491
|
-
const w =
|
|
1491
|
+
const w = on({
|
|
1492
1492
|
gateway: "airwallex",
|
|
1493
|
-
gatewayMerchantId:
|
|
1494
|
-
merchantName:
|
|
1495
|
-
merchantId:
|
|
1496
|
-
initialPreview: await
|
|
1493
|
+
gatewayMerchantId: f.processor_account_id,
|
|
1494
|
+
merchantName: f.processor_account_name,
|
|
1495
|
+
merchantId: f.google_pay_merchant_id ?? "",
|
|
1496
|
+
initialPreview: await Le(
|
|
1497
1497
|
m,
|
|
1498
1498
|
y.token,
|
|
1499
1499
|
y.mode === "setup",
|
|
1500
1500
|
void 0
|
|
1501
1501
|
),
|
|
1502
1502
|
overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest
|
|
1503
|
-
}), v =
|
|
1503
|
+
}), v = sn(t.baseUrl, w);
|
|
1504
1504
|
try {
|
|
1505
1505
|
const P = await v.loadPaymentData(w);
|
|
1506
1506
|
L("Google Pay Payment data", P);
|
|
1507
|
-
const
|
|
1508
|
-
|
|
1507
|
+
const U = Bo(n, P), k = ge(
|
|
1508
|
+
U,
|
|
1509
1509
|
o.get.onValidationError,
|
|
1510
1510
|
i == null ? void 0 : i.defaultFieldValues
|
|
1511
|
-
),
|
|
1512
|
-
if (!
|
|
1511
|
+
), ee = (s = (a = P.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
|
|
1512
|
+
if (!ee)
|
|
1513
1513
|
throw new Error("No payment token received from Google Pay");
|
|
1514
|
-
const
|
|
1514
|
+
const ce = await it(m, {
|
|
1515
1515
|
payment_provider: r.provider,
|
|
1516
1516
|
checkout_payment_method: r,
|
|
1517
1517
|
new_customer_email: k[p.EMAIL],
|
|
@@ -1521,19 +1521,19 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1521
1521
|
postal_code: k[p.ZIP_CODE],
|
|
1522
1522
|
country_code: k[p.COUNTRY]
|
|
1523
1523
|
}
|
|
1524
|
-
}),
|
|
1525
|
-
L("Start flow next actions",
|
|
1526
|
-
const B = await
|
|
1524
|
+
}), T = Zo(ce);
|
|
1525
|
+
L("Start flow next actions", T);
|
|
1526
|
+
const B = await ne(m, {
|
|
1527
1527
|
secure_token: y.token,
|
|
1528
1528
|
processor_specific_metadata: {
|
|
1529
1529
|
payment_provider: r.provider,
|
|
1530
1530
|
// GooglePay's encrypted_payment_token provided to verify the consent first
|
|
1531
|
-
airwallex_consent_id:
|
|
1531
|
+
airwallex_consent_id: T == null ? void 0 : T.consent_id,
|
|
1532
1532
|
airwallex_payment_method_data: {
|
|
1533
1533
|
type: "googlepay",
|
|
1534
1534
|
googlepay: {
|
|
1535
1535
|
payment_data_type: "encrypted_payment_token",
|
|
1536
|
-
encrypted_payment_token:
|
|
1536
|
+
encrypted_payment_token: ee
|
|
1537
1537
|
}
|
|
1538
1538
|
}
|
|
1539
1539
|
}
|
|
@@ -1541,21 +1541,21 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1541
1541
|
L("[1st] Confirm payment flow response", B);
|
|
1542
1542
|
let we = (l = (c = B.payment_methods) == null ? void 0 : c[0]) == null ? void 0 : l.id;
|
|
1543
1543
|
const ie = (u = B.required_user_actions) == null ? void 0 : u.find(
|
|
1544
|
-
(
|
|
1544
|
+
(H) => H.type === "airwallex_payment_consent"
|
|
1545
1545
|
);
|
|
1546
1546
|
if (ie && ie.redirect_url) {
|
|
1547
1547
|
L("3DS Required, starting verification...", ie);
|
|
1548
|
-
const { status:
|
|
1548
|
+
const { status: H } = await $e({
|
|
1549
1549
|
url: ie.redirect_url,
|
|
1550
1550
|
baseUrl: t.baseUrl
|
|
1551
1551
|
});
|
|
1552
|
-
if (L(`╰ 3DS verification completed [Status: ${
|
|
1552
|
+
if (L(`╰ 3DS verification completed [Status: ${H}]`), H === z.CANCELLED)
|
|
1553
1553
|
throw new Error("3DS verification cancelled");
|
|
1554
|
-
if (
|
|
1554
|
+
if (H === z.FAILURE)
|
|
1555
1555
|
throw new Error("3DS verification failed");
|
|
1556
1556
|
}
|
|
1557
1557
|
if (ie && !we) {
|
|
1558
|
-
const
|
|
1558
|
+
const H = await ne(m, {
|
|
1559
1559
|
secure_token: y.token,
|
|
1560
1560
|
their_pm_id: ie.their_pm_id,
|
|
1561
1561
|
processor_specific_metadata: {
|
|
@@ -1563,7 +1563,7 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1563
1563
|
airwallex_consent_id: ie.consent_id
|
|
1564
1564
|
}
|
|
1565
1565
|
});
|
|
1566
|
-
L("[2nd] Confirm payment flow response",
|
|
1566
|
+
L("[2nd] Confirm payment flow response", H), we = (_ = (d = H.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id;
|
|
1567
1567
|
}
|
|
1568
1568
|
if (!we)
|
|
1569
1569
|
throw new Error("No PM ID found");
|
|
@@ -1571,7 +1571,7 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1571
1571
|
return { mode: "setup", result: { payment_method_id: we } };
|
|
1572
1572
|
{
|
|
1573
1573
|
L("Starting one-time payment flow...");
|
|
1574
|
-
const
|
|
1574
|
+
const H = {
|
|
1575
1575
|
secure_token: y.token,
|
|
1576
1576
|
payment_input: {
|
|
1577
1577
|
provider_type: r.provider
|
|
@@ -1589,10 +1589,10 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1589
1589
|
customer_first_name: k[p.FIRST_NAME],
|
|
1590
1590
|
customer_last_name: k[p.LAST_NAME]
|
|
1591
1591
|
};
|
|
1592
|
-
return { mode: "checkout", result: await
|
|
1592
|
+
return { mode: "checkout", result: await Ue(m, H) };
|
|
1593
1593
|
}
|
|
1594
1594
|
} catch (P) {
|
|
1595
|
-
throw
|
|
1595
|
+
throw le("Google Pay payment error", P), new Error((P == null ? void 0 : P.message) ?? "Unknown error");
|
|
1596
1596
|
}
|
|
1597
1597
|
}
|
|
1598
1598
|
), Xo = () => new Promise((t, r) => {
|
|
@@ -1627,7 +1627,7 @@ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1627
1627
|
}, { log__: Ae } = I("awx-apple-pay");
|
|
1628
1628
|
async function ri(t, r) {
|
|
1629
1629
|
try {
|
|
1630
|
-
const n = (await
|
|
1630
|
+
const n = (await it(r.connection, {
|
|
1631
1631
|
payment_provider: r.checkoutPaymentMethod.provider,
|
|
1632
1632
|
checkout_payment_method: r.checkoutPaymentMethod,
|
|
1633
1633
|
new_customer_email: r.nonCdeFormInputs[p.EMAIL],
|
|
@@ -1655,15 +1655,15 @@ async function oi(t, r) {
|
|
|
1655
1655
|
if (!t.redirect_url)
|
|
1656
1656
|
throw new Error("No redirect URL found");
|
|
1657
1657
|
Ae("3DS Required, starting verification...", t);
|
|
1658
|
-
const { status: i } = await
|
|
1658
|
+
const { status: i } = await $e({
|
|
1659
1659
|
url: t.redirect_url,
|
|
1660
1660
|
baseUrl: r.baseUrl
|
|
1661
1661
|
});
|
|
1662
|
-
if (Ae(`╰ 3DS verification completed [Status: ${i}]`), i ===
|
|
1662
|
+
if (Ae(`╰ 3DS verification completed [Status: ${i}]`), i === z.CANCELLED)
|
|
1663
1663
|
throw new Error("3DS verification cancelled");
|
|
1664
|
-
if (i ===
|
|
1664
|
+
if (i === z.FAILURE)
|
|
1665
1665
|
throw new Error("3DS verification failed");
|
|
1666
|
-
const a = await
|
|
1666
|
+
const a = await ne(r.connection, {
|
|
1667
1667
|
secure_token: r.prefill.token,
|
|
1668
1668
|
processor_specific_metadata: {
|
|
1669
1669
|
their_pm_id: t.their_pm_id,
|
|
@@ -1674,7 +1674,7 @@ async function oi(t, r) {
|
|
|
1674
1674
|
return Ae("[2nd] Confirm payment flow response", a), (o = (n = a.payment_methods) == null ? void 0 : n[0]) == null ? void 0 : o.id;
|
|
1675
1675
|
}
|
|
1676
1676
|
async function ii(t, r, n) {
|
|
1677
|
-
return { mode: "checkout", result: await
|
|
1677
|
+
return { mode: "checkout", result: await Ue(n.connection, {
|
|
1678
1678
|
secure_token: n.prefill.token,
|
|
1679
1679
|
payment_input: {
|
|
1680
1680
|
provider_type: n.checkoutPaymentMethod.provider
|
|
@@ -1694,7 +1694,7 @@ async function ii(t, r, n) {
|
|
|
1694
1694
|
async function ai(t, r, n) {
|
|
1695
1695
|
var o, i, a;
|
|
1696
1696
|
try {
|
|
1697
|
-
const s = t.payment, c = Qo(r.nonCdeFormInputs, s), l =
|
|
1697
|
+
const s = t.payment, c = Qo(r.nonCdeFormInputs, s), l = ge(
|
|
1698
1698
|
c,
|
|
1699
1699
|
r.formCallbacks.get.onValidationError,
|
|
1700
1700
|
r.defaultFieldValues
|
|
@@ -1707,7 +1707,7 @@ async function ai(t, r, n) {
|
|
|
1707
1707
|
country: l[p.COUNTRY],
|
|
1708
1708
|
update_processor_customer: !0
|
|
1709
1709
|
});
|
|
1710
|
-
const u = await
|
|
1710
|
+
const u = await ne(r.connection, {
|
|
1711
1711
|
secure_token: r.prefill.token,
|
|
1712
1712
|
processor_specific_metadata: {
|
|
1713
1713
|
payment_provider: r.checkoutPaymentMethod.provider,
|
|
@@ -1739,16 +1739,16 @@ async function ai(t, r, n) {
|
|
|
1739
1739
|
throw r.session.completePayment(c), s;
|
|
1740
1740
|
}
|
|
1741
1741
|
}
|
|
1742
|
-
const { log__: W, err__:
|
|
1742
|
+
const { log__: W, err__: Xe } = I("awx-apple-pay"), ln = e.object({
|
|
1743
1743
|
provider: e.literal("apple_pay"),
|
|
1744
1744
|
processor_name: e.literal("airwallex"),
|
|
1745
1745
|
metadata: e.object({
|
|
1746
1746
|
processor_account_id: e.string(),
|
|
1747
1747
|
processor_account_name: e.string()
|
|
1748
1748
|
})
|
|
1749
|
-
}), si =
|
|
1749
|
+
}), si = Fe(
|
|
1750
1750
|
async ({ context: t, formCallbacks: r }) => {
|
|
1751
|
-
const n = he(t.checkoutPaymentMethods,
|
|
1751
|
+
const n = he(t.checkoutPaymentMethods, ln);
|
|
1752
1752
|
if (!n)
|
|
1753
1753
|
return { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1754
1754
|
} };
|
|
@@ -1756,7 +1756,7 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1756
1756
|
try {
|
|
1757
1757
|
await Xo(), W("Apple Pay SDK loaded successfully");
|
|
1758
1758
|
} catch (l) {
|
|
1759
|
-
return
|
|
1759
|
+
return Xe("Failed to load Apple Pay SDK", l), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1760
1760
|
} };
|
|
1761
1761
|
}
|
|
1762
1762
|
if (!window.ApplePaySession || !ApplePaySession.canMakePayments())
|
|
@@ -1765,7 +1765,7 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1765
1765
|
if (W("Apple Pay Loaded"), !await ApplePaySession.canMakePayments())
|
|
1766
1766
|
return W("No active cards available for Apple Pay"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1767
1767
|
} };
|
|
1768
|
-
const o = t.anyCdeConnection, i = await
|
|
1768
|
+
const o = t.anyCdeConnection, i = await re(o), a = i.mode === "setup", s = await Le(o, i.token, a, void 0), c = n.metadata;
|
|
1769
1769
|
if (W("processorAccount", c), !c.processor_account_id)
|
|
1770
1770
|
throw new Error("No gateway merchant ID found in processor account");
|
|
1771
1771
|
return {
|
|
@@ -1774,10 +1774,10 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1774
1774
|
startFlow: async (l) => {
|
|
1775
1775
|
var u;
|
|
1776
1776
|
try {
|
|
1777
|
-
await
|
|
1777
|
+
await V.airwallexApplePay.run({
|
|
1778
1778
|
context: t,
|
|
1779
1779
|
checkoutPaymentMethod: n,
|
|
1780
|
-
nonCdeFormInputs:
|
|
1780
|
+
nonCdeFormInputs: _e(t.formDiv),
|
|
1781
1781
|
formCallbacks: r,
|
|
1782
1782
|
customParams: {
|
|
1783
1783
|
isSetupMode: a,
|
|
@@ -1788,12 +1788,12 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1788
1788
|
initResult: void 0
|
|
1789
1789
|
});
|
|
1790
1790
|
} catch (d) {
|
|
1791
|
-
|
|
1791
|
+
Xe("Apple Pay payment error", d), r.get.onCheckoutError((d == null ? void 0 : d.message) ?? "Unknown error");
|
|
1792
1792
|
}
|
|
1793
1793
|
}
|
|
1794
1794
|
};
|
|
1795
1795
|
}
|
|
1796
|
-
), ci =
|
|
1796
|
+
), ci = fe(
|
|
1797
1797
|
async ({
|
|
1798
1798
|
context: t,
|
|
1799
1799
|
checkoutPaymentMethod: r,
|
|
@@ -1802,11 +1802,11 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1802
1802
|
formCallbacks: i
|
|
1803
1803
|
}) => {
|
|
1804
1804
|
var a, s;
|
|
1805
|
-
const c = he(t.checkoutPaymentMethods,
|
|
1805
|
+
const c = he(t.checkoutPaymentMethods, ln), { initialPreview: l, isSetupMode: u, prefill: d, overridePaymentRequest: _ } = o, b = (((a = _ == null ? void 0 : _.amount) == null ? void 0 : a.currency) ?? l.currency ?? "USD").toUpperCase(), m = ((((s = _ == null ? void 0 : _.amount) == null ? void 0 : s.amountAtom) ?? l.amountAtom ?? 0) / 100).toFixed(2), y = {
|
|
1806
1806
|
label: (_ == null ? void 0 : _.label) ?? "Total",
|
|
1807
1807
|
type: _ != null && _.pending ? "pending" : "final",
|
|
1808
1808
|
amount: m
|
|
1809
|
-
},
|
|
1809
|
+
}, f = {
|
|
1810
1810
|
countryCode: "US",
|
|
1811
1811
|
currencyCode: b,
|
|
1812
1812
|
requiredBillingContactFields: ["email", "postalAddress", "name"],
|
|
@@ -1821,8 +1821,8 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1821
1821
|
total: y,
|
|
1822
1822
|
...(_ == null ? void 0 : _.applePayPaymentRequest) ?? {}
|
|
1823
1823
|
};
|
|
1824
|
-
W("Payment Request",
|
|
1825
|
-
const w = new ApplePaySession(3,
|
|
1824
|
+
W("Payment Request", f);
|
|
1825
|
+
const w = new ApplePaySession(3, f);
|
|
1826
1826
|
W("ApplePaySession", w);
|
|
1827
1827
|
const v = {
|
|
1828
1828
|
session: w,
|
|
@@ -1837,34 +1837,34 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1837
1837
|
defaultFieldValues: o == null ? void 0 : o.defaultFieldValues
|
|
1838
1838
|
};
|
|
1839
1839
|
let P;
|
|
1840
|
-
return new Promise((
|
|
1841
|
-
const
|
|
1840
|
+
return new Promise((U, k) => {
|
|
1841
|
+
const ee = () => {
|
|
1842
1842
|
W("Payment cancelled by user"), k(new Error("Payment cancelled by user"));
|
|
1843
|
-
}, { cleanupCancelListener:
|
|
1844
|
-
w.oncancel =
|
|
1843
|
+
}, { cleanupCancelListener: ce } = ni(ee);
|
|
1844
|
+
w.oncancel = ee, w.onvalidatemerchant = async (T) => {
|
|
1845
1845
|
try {
|
|
1846
|
-
P = await ri(
|
|
1846
|
+
P = await ri(T, v);
|
|
1847
1847
|
} catch (B) {
|
|
1848
1848
|
k(B);
|
|
1849
1849
|
}
|
|
1850
1850
|
}, w.onpaymentmethodselected = () => {
|
|
1851
|
-
const
|
|
1851
|
+
const T = {
|
|
1852
1852
|
newTotal: { ...y }
|
|
1853
1853
|
};
|
|
1854
|
-
w.completePaymentMethodSelection(
|
|
1855
|
-
}, w.onpaymentauthorized = async (
|
|
1854
|
+
w.completePaymentMethodSelection(T);
|
|
1855
|
+
}, w.onpaymentauthorized = async (T) => {
|
|
1856
1856
|
try {
|
|
1857
|
-
const B = await ai(
|
|
1858
|
-
|
|
1857
|
+
const B = await ai(T, v, P);
|
|
1858
|
+
ce(), U(B);
|
|
1859
1859
|
} catch (B) {
|
|
1860
1860
|
k(B);
|
|
1861
1861
|
}
|
|
1862
1862
|
}, w.begin();
|
|
1863
|
-
}).catch((
|
|
1864
|
-
throw
|
|
1863
|
+
}).catch((U) => {
|
|
1864
|
+
throw Xe("Apple Pay payment error", U), U;
|
|
1865
1865
|
});
|
|
1866
1866
|
}
|
|
1867
|
-
),
|
|
1867
|
+
), Qe = (t, r, n) => {
|
|
1868
1868
|
const o = t.filter((i) => {
|
|
1869
1869
|
const a = n === void 0 ? !0 : i.processor_name === n, s = i.provider === r;
|
|
1870
1870
|
return a && s;
|
|
@@ -1874,18 +1874,18 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1874
1874
|
if (o.length !== 1)
|
|
1875
1875
|
throw console.error("CPMs list", t), new Error(`More than one CPM found with provider '${r}' and processor '${n}'`);
|
|
1876
1876
|
return o[0];
|
|
1877
|
-
},
|
|
1877
|
+
}, V = {
|
|
1878
1878
|
// ✋ Note: For flows that require initialization, please add them to `init-flows.ts`
|
|
1879
1879
|
// Common
|
|
1880
1880
|
commonCC: {
|
|
1881
1881
|
init: async () => {
|
|
1882
1882
|
},
|
|
1883
|
-
run:
|
|
1883
|
+
run: xo
|
|
1884
1884
|
},
|
|
1885
1885
|
// Stripe
|
|
1886
1886
|
stripePR: {
|
|
1887
|
-
init:
|
|
1888
|
-
run:
|
|
1887
|
+
init: $o,
|
|
1888
|
+
run: qo
|
|
1889
1889
|
},
|
|
1890
1890
|
stripeLink: {
|
|
1891
1891
|
init: uo,
|
|
@@ -1893,7 +1893,7 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1893
1893
|
},
|
|
1894
1894
|
// Pockyt
|
|
1895
1895
|
pockytPaypal: {
|
|
1896
|
-
run:
|
|
1896
|
+
run: Ho
|
|
1897
1897
|
},
|
|
1898
1898
|
// Airwallex
|
|
1899
1899
|
airwallexGooglePay: {
|
|
@@ -1907,17 +1907,17 @@ const { log__: W, err__: Qe } = I("awx-apple-pay"), cn = e.object({
|
|
|
1907
1907
|
// 👉 Add more flows here
|
|
1908
1908
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1909
1909
|
};
|
|
1910
|
-
var
|
|
1911
|
-
return
|
|
1910
|
+
var et = function(t, r) {
|
|
1911
|
+
return et = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, o) {
|
|
1912
1912
|
n.__proto__ = o;
|
|
1913
1913
|
} || function(n, o) {
|
|
1914
1914
|
for (var i in o) Object.prototype.hasOwnProperty.call(o, i) && (n[i] = o[i]);
|
|
1915
|
-
},
|
|
1915
|
+
}, et(t, r);
|
|
1916
1916
|
};
|
|
1917
|
-
function
|
|
1917
|
+
function oe(t, r) {
|
|
1918
1918
|
if (typeof r != "function" && r !== null)
|
|
1919
1919
|
throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
1920
|
-
|
|
1920
|
+
et(t, r);
|
|
1921
1921
|
function n() {
|
|
1922
1922
|
this.constructor = t;
|
|
1923
1923
|
}
|
|
@@ -1950,7 +1950,7 @@ function li(t, r, n, o) {
|
|
|
1950
1950
|
u((o = o.apply(t, [])).next());
|
|
1951
1951
|
});
|
|
1952
1952
|
}
|
|
1953
|
-
function
|
|
1953
|
+
function un(t, r) {
|
|
1954
1954
|
var n = { label: 0, sent: function() {
|
|
1955
1955
|
if (a[0] & 1) throw a[1];
|
|
1956
1956
|
return a[1];
|
|
@@ -2010,7 +2010,7 @@ function ln(t, r) {
|
|
|
2010
2010
|
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
2011
2011
|
}
|
|
2012
2012
|
}
|
|
2013
|
-
function
|
|
2013
|
+
function ye(t) {
|
|
2014
2014
|
var r = typeof Symbol == "function" && Symbol.iterator, n = r && t[r], o = 0;
|
|
2015
2015
|
if (n) return n.call(t);
|
|
2016
2016
|
if (t && typeof t.length == "number") return {
|
|
@@ -2020,7 +2020,7 @@ function _e(t) {
|
|
|
2020
2020
|
};
|
|
2021
2021
|
throw new TypeError(r ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
2022
2022
|
}
|
|
2023
|
-
function
|
|
2023
|
+
function Re(t, r) {
|
|
2024
2024
|
var n = typeof Symbol == "function" && t[Symbol.iterator];
|
|
2025
2025
|
if (!n) return t;
|
|
2026
2026
|
var o = n.call(t), i, a = [], s;
|
|
@@ -2037,13 +2037,13 @@ function Te(t, r) {
|
|
|
2037
2037
|
}
|
|
2038
2038
|
return a;
|
|
2039
2039
|
}
|
|
2040
|
-
function
|
|
2040
|
+
function Te(t, r, n) {
|
|
2041
2041
|
if (arguments.length === 2) for (var o = 0, i = r.length, a; o < i; o++)
|
|
2042
2042
|
(a || !(o in r)) && (a || (a = Array.prototype.slice.call(r, 0, o)), a[o] = r[o]);
|
|
2043
2043
|
return t.concat(a || Array.prototype.slice.call(r));
|
|
2044
2044
|
}
|
|
2045
|
-
function
|
|
2046
|
-
return this instanceof
|
|
2045
|
+
function me(t) {
|
|
2046
|
+
return this instanceof me ? (this.v = t, this) : new me(t);
|
|
2047
2047
|
}
|
|
2048
2048
|
function ui(t, r, n) {
|
|
2049
2049
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
@@ -2057,21 +2057,21 @@ function ui(t, r, n) {
|
|
|
2057
2057
|
};
|
|
2058
2058
|
}
|
|
2059
2059
|
function c(m, y) {
|
|
2060
|
-
o[m] && (i[m] = function(
|
|
2060
|
+
o[m] && (i[m] = function(f) {
|
|
2061
2061
|
return new Promise(function(w, v) {
|
|
2062
|
-
a.push([m,
|
|
2062
|
+
a.push([m, f, w, v]) > 1 || l(m, f);
|
|
2063
2063
|
});
|
|
2064
2064
|
}, y && (i[m] = y(i[m])));
|
|
2065
2065
|
}
|
|
2066
2066
|
function l(m, y) {
|
|
2067
2067
|
try {
|
|
2068
2068
|
u(o[m](y));
|
|
2069
|
-
} catch (
|
|
2070
|
-
b(a[0][3],
|
|
2069
|
+
} catch (f) {
|
|
2070
|
+
b(a[0][3], f);
|
|
2071
2071
|
}
|
|
2072
2072
|
}
|
|
2073
2073
|
function u(m) {
|
|
2074
|
-
m.value instanceof
|
|
2074
|
+
m.value instanceof me ? Promise.resolve(m.value.v).then(d, _) : b(a[0][2], m);
|
|
2075
2075
|
}
|
|
2076
2076
|
function d(m) {
|
|
2077
2077
|
l("next", m);
|
|
@@ -2086,7 +2086,7 @@ function ui(t, r, n) {
|
|
|
2086
2086
|
function di(t) {
|
|
2087
2087
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
2088
2088
|
var r = t[Symbol.asyncIterator], n;
|
|
2089
|
-
return r ? r.call(t) : (t = typeof
|
|
2089
|
+
return r ? r.call(t) : (t = typeof ye == "function" ? ye(t) : t[Symbol.iterator](), n = {}, o("next"), o("throw"), o("return"), n[Symbol.asyncIterator] = function() {
|
|
2090
2090
|
return this;
|
|
2091
2091
|
}, n);
|
|
2092
2092
|
function o(a) {
|
|
@@ -2105,13 +2105,13 @@ function di(t) {
|
|
|
2105
2105
|
function O(t) {
|
|
2106
2106
|
return typeof t == "function";
|
|
2107
2107
|
}
|
|
2108
|
-
function
|
|
2108
|
+
function qe(t) {
|
|
2109
2109
|
var r = function(o) {
|
|
2110
2110
|
Error.call(o), o.stack = new Error().stack;
|
|
2111
2111
|
}, n = t(r);
|
|
2112
2112
|
return n.prototype = Object.create(Error.prototype), n.prototype.constructor = n, n;
|
|
2113
2113
|
}
|
|
2114
|
-
var
|
|
2114
|
+
var Ze = qe(function(t) {
|
|
2115
2115
|
return function(r) {
|
|
2116
2116
|
t(this), this.message = r ? r.length + ` errors occurred during unsubscription:
|
|
2117
2117
|
` + r.map(function(n, o) {
|
|
@@ -2138,12 +2138,12 @@ var Ce = function() {
|
|
|
2138
2138
|
if (s)
|
|
2139
2139
|
if (this._parentage = null, Array.isArray(s))
|
|
2140
2140
|
try {
|
|
2141
|
-
for (var c =
|
|
2141
|
+
for (var c = ye(s), l = c.next(); !l.done; l = c.next()) {
|
|
2142
2142
|
var u = l.value;
|
|
2143
2143
|
u.remove(this);
|
|
2144
2144
|
}
|
|
2145
|
-
} catch (
|
|
2146
|
-
r = { error:
|
|
2145
|
+
} catch (f) {
|
|
2146
|
+
r = { error: f };
|
|
2147
2147
|
} finally {
|
|
2148
2148
|
try {
|
|
2149
2149
|
l && !l.done && (n = c.return) && n.call(c);
|
|
@@ -2157,23 +2157,23 @@ var Ce = function() {
|
|
|
2157
2157
|
if (O(d))
|
|
2158
2158
|
try {
|
|
2159
2159
|
d();
|
|
2160
|
-
} catch (
|
|
2161
|
-
a =
|
|
2160
|
+
} catch (f) {
|
|
2161
|
+
a = f instanceof Ze ? f.errors : [f];
|
|
2162
2162
|
}
|
|
2163
2163
|
var _ = this._finalizers;
|
|
2164
2164
|
if (_) {
|
|
2165
2165
|
this._finalizers = null;
|
|
2166
2166
|
try {
|
|
2167
|
-
for (var b =
|
|
2167
|
+
for (var b = ye(_), m = b.next(); !m.done; m = b.next()) {
|
|
2168
2168
|
var y = m.value;
|
|
2169
2169
|
try {
|
|
2170
2170
|
bt(y);
|
|
2171
|
-
} catch (
|
|
2172
|
-
a = a ?? [],
|
|
2171
|
+
} catch (f) {
|
|
2172
|
+
a = a ?? [], f instanceof Ze ? a = Te(Te([], Re(a)), Re(f.errors)) : a.push(f);
|
|
2173
2173
|
}
|
|
2174
2174
|
}
|
|
2175
|
-
} catch (
|
|
2176
|
-
o = { error:
|
|
2175
|
+
} catch (f) {
|
|
2176
|
+
o = { error: f };
|
|
2177
2177
|
} finally {
|
|
2178
2178
|
try {
|
|
2179
2179
|
m && !m.done && (i = b.return) && i.call(b);
|
|
@@ -2183,7 +2183,7 @@ var Ce = function() {
|
|
|
2183
2183
|
}
|
|
2184
2184
|
}
|
|
2185
2185
|
if (a)
|
|
2186
|
-
throw new
|
|
2186
|
+
throw new Ze(a);
|
|
2187
2187
|
}
|
|
2188
2188
|
}, t.prototype.add = function(r) {
|
|
2189
2189
|
var n;
|
|
@@ -2214,14 +2214,14 @@ var Ce = function() {
|
|
|
2214
2214
|
var r = new t();
|
|
2215
2215
|
return r.closed = !0, r;
|
|
2216
2216
|
}(), t;
|
|
2217
|
-
}(),
|
|
2218
|
-
function
|
|
2217
|
+
}(), dn = Ce.EMPTY;
|
|
2218
|
+
function pn(t) {
|
|
2219
2219
|
return t instanceof Ce || t && "closed" in t && O(t.remove) && O(t.add) && O(t.unsubscribe);
|
|
2220
2220
|
}
|
|
2221
2221
|
function bt(t) {
|
|
2222
2222
|
O(t) ? t() : t.unsubscribe();
|
|
2223
2223
|
}
|
|
2224
|
-
var
|
|
2224
|
+
var mn = {
|
|
2225
2225
|
onUnhandledError: null,
|
|
2226
2226
|
onStoppedNotification: null,
|
|
2227
2227
|
Promise: void 0,
|
|
@@ -2231,14 +2231,14 @@ var pn = {
|
|
|
2231
2231
|
setTimeout: function(t, r) {
|
|
2232
2232
|
for (var n = [], o = 2; o < arguments.length; o++)
|
|
2233
2233
|
n[o - 2] = arguments[o];
|
|
2234
|
-
return setTimeout.apply(void 0,
|
|
2234
|
+
return setTimeout.apply(void 0, Te([t, r], Re(n)));
|
|
2235
2235
|
},
|
|
2236
2236
|
clearTimeout: function(t) {
|
|
2237
2237
|
return clearTimeout(t);
|
|
2238
2238
|
},
|
|
2239
2239
|
delegate: void 0
|
|
2240
2240
|
};
|
|
2241
|
-
function
|
|
2241
|
+
function _n(t) {
|
|
2242
2242
|
pi.setTimeout(function() {
|
|
2243
2243
|
throw t;
|
|
2244
2244
|
});
|
|
@@ -2249,13 +2249,13 @@ function Oe(t) {
|
|
|
2249
2249
|
t();
|
|
2250
2250
|
}
|
|
2251
2251
|
var lt = function(t) {
|
|
2252
|
-
|
|
2252
|
+
oe(r, t);
|
|
2253
2253
|
function r(n) {
|
|
2254
2254
|
var o = t.call(this) || this;
|
|
2255
|
-
return o.isStopped = !1, n ? (o.destination = n,
|
|
2255
|
+
return o.isStopped = !1, n ? (o.destination = n, pn(n) && n.add(o)) : o.destination = fi, o;
|
|
2256
2256
|
}
|
|
2257
2257
|
return r.create = function(n, o, i) {
|
|
2258
|
-
return new
|
|
2258
|
+
return new tt(n, o, i);
|
|
2259
2259
|
}, r.prototype.next = function(n) {
|
|
2260
2260
|
this.isStopped || this._next(n);
|
|
2261
2261
|
}, r.prototype.error = function(n) {
|
|
@@ -2280,7 +2280,7 @@ var lt = function(t) {
|
|
|
2280
2280
|
}
|
|
2281
2281
|
}, r;
|
|
2282
2282
|
}(Ce), mi = Function.prototype.bind;
|
|
2283
|
-
function
|
|
2283
|
+
function Be(t, r) {
|
|
2284
2284
|
return mi.call(t, r);
|
|
2285
2285
|
}
|
|
2286
2286
|
var _i = function() {
|
|
@@ -2314,8 +2314,8 @@ var _i = function() {
|
|
|
2314
2314
|
Pe(n);
|
|
2315
2315
|
}
|
|
2316
2316
|
}, t;
|
|
2317
|
-
}(),
|
|
2318
|
-
|
|
2317
|
+
}(), tt = function(t) {
|
|
2318
|
+
oe(r, t);
|
|
2319
2319
|
function r(n, o, i) {
|
|
2320
2320
|
var a = t.call(this) || this, s;
|
|
2321
2321
|
if (O(n) || !n)
|
|
@@ -2326,12 +2326,12 @@ var _i = function() {
|
|
|
2326
2326
|
};
|
|
2327
2327
|
else {
|
|
2328
2328
|
var c;
|
|
2329
|
-
a &&
|
|
2329
|
+
a && mn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
|
|
2330
2330
|
return a.unsubscribe();
|
|
2331
2331
|
}, s = {
|
|
2332
|
-
next: n.next &&
|
|
2333
|
-
error: n.error &&
|
|
2334
|
-
complete: n.complete &&
|
|
2332
|
+
next: n.next && Be(n.next, c),
|
|
2333
|
+
error: n.error && Be(n.error, c),
|
|
2334
|
+
complete: n.complete && Be(n.complete, c)
|
|
2335
2335
|
}) : s = n;
|
|
2336
2336
|
}
|
|
2337
2337
|
return a.destination = new _i(s), a;
|
|
@@ -2339,12 +2339,12 @@ var _i = function() {
|
|
|
2339
2339
|
return r;
|
|
2340
2340
|
}(lt);
|
|
2341
2341
|
function Pe(t) {
|
|
2342
|
-
|
|
2342
|
+
_n(t);
|
|
2343
2343
|
}
|
|
2344
2344
|
function yi(t) {
|
|
2345
2345
|
throw t;
|
|
2346
2346
|
}
|
|
2347
|
-
var
|
|
2347
|
+
var fi = {
|
|
2348
2348
|
closed: !0,
|
|
2349
2349
|
next: wt,
|
|
2350
2350
|
error: yi,
|
|
@@ -2352,11 +2352,11 @@ var hi = {
|
|
|
2352
2352
|
}, ut = function() {
|
|
2353
2353
|
return typeof Symbol == "function" && Symbol.observable || "@@observable";
|
|
2354
2354
|
}();
|
|
2355
|
-
function
|
|
2355
|
+
function hi(t) {
|
|
2356
2356
|
return t;
|
|
2357
2357
|
}
|
|
2358
2358
|
function gi(t) {
|
|
2359
|
-
return t.length === 0 ?
|
|
2359
|
+
return t.length === 0 ? hi : t.length === 1 ? t[0] : function(r) {
|
|
2360
2360
|
return t.reduce(function(n, o) {
|
|
2361
2361
|
return o(n);
|
|
2362
2362
|
}, r);
|
|
@@ -2370,7 +2370,7 @@ var Q = function() {
|
|
|
2370
2370
|
var n = new t();
|
|
2371
2371
|
return n.source = this, n.operator = r, n;
|
|
2372
2372
|
}, t.prototype.subscribe = function(r, n, o) {
|
|
2373
|
-
var i = this, a = wi(r) ? r : new
|
|
2373
|
+
var i = this, a = wi(r) ? r : new tt(r, n, o);
|
|
2374
2374
|
return Oe(function() {
|
|
2375
2375
|
var s = i, c = s.operator, l = s.source;
|
|
2376
2376
|
a.add(c ? c.call(a, l) : l ? i._subscribe(a) : i._trySubscribe(a));
|
|
@@ -2384,7 +2384,7 @@ var Q = function() {
|
|
|
2384
2384
|
}, t.prototype.forEach = function(r, n) {
|
|
2385
2385
|
var o = this;
|
|
2386
2386
|
return n = vt(n), new n(function(i, a) {
|
|
2387
|
-
var s = new
|
|
2387
|
+
var s = new tt({
|
|
2388
2388
|
next: function(c) {
|
|
2389
2389
|
try {
|
|
2390
2390
|
r(c);
|
|
@@ -2424,13 +2424,13 @@ var Q = function() {
|
|
|
2424
2424
|
}();
|
|
2425
2425
|
function vt(t) {
|
|
2426
2426
|
var r;
|
|
2427
|
-
return (r = t ??
|
|
2427
|
+
return (r = t ?? mn.Promise) !== null && r !== void 0 ? r : Promise;
|
|
2428
2428
|
}
|
|
2429
2429
|
function bi(t) {
|
|
2430
2430
|
return t && O(t.next) && O(t.error) && O(t.complete);
|
|
2431
2431
|
}
|
|
2432
2432
|
function wi(t) {
|
|
2433
|
-
return t && t instanceof lt || bi(t) &&
|
|
2433
|
+
return t && t instanceof lt || bi(t) && pn(t);
|
|
2434
2434
|
}
|
|
2435
2435
|
function vi(t) {
|
|
2436
2436
|
return O(t == null ? void 0 : t.lift);
|
|
@@ -2452,7 +2452,7 @@ function Ci(t, r, n, o, i) {
|
|
|
2452
2452
|
return new Si(t, r, n, o, i);
|
|
2453
2453
|
}
|
|
2454
2454
|
var Si = function(t) {
|
|
2455
|
-
|
|
2455
|
+
oe(r, t);
|
|
2456
2456
|
function r(n, o, i, a, s, c) {
|
|
2457
2457
|
var l = t.call(this, n) || this;
|
|
2458
2458
|
return l.onFinalize = s, l.shouldUnsubscribe = c, l._next = o ? function(u) {
|
|
@@ -2486,12 +2486,12 @@ var Si = function(t) {
|
|
|
2486
2486
|
t.prototype.unsubscribe.call(this), !o && ((n = this.onFinalize) === null || n === void 0 || n.call(this));
|
|
2487
2487
|
}
|
|
2488
2488
|
}, r;
|
|
2489
|
-
}(lt), Pi =
|
|
2489
|
+
}(lt), Pi = qe(function(t) {
|
|
2490
2490
|
return function() {
|
|
2491
2491
|
t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
|
|
2492
2492
|
};
|
|
2493
|
-
}),
|
|
2494
|
-
|
|
2493
|
+
}), yn = function(t) {
|
|
2494
|
+
oe(r, t);
|
|
2495
2495
|
function r() {
|
|
2496
2496
|
var n = t.call(this) || this;
|
|
2497
2497
|
return n.closed = !1, n.currentObservers = null, n.observers = [], n.isStopped = !1, n.hasError = !1, n.thrownError = null, n;
|
|
@@ -2509,7 +2509,7 @@ var Si = function(t) {
|
|
|
2509
2509
|
if (o._throwIfClosed(), !o.isStopped) {
|
|
2510
2510
|
o.currentObservers || (o.currentObservers = Array.from(o.observers));
|
|
2511
2511
|
try {
|
|
2512
|
-
for (var s =
|
|
2512
|
+
for (var s = ye(o.currentObservers), c = s.next(); !c.done; c = s.next()) {
|
|
2513
2513
|
var l = c.value;
|
|
2514
2514
|
l.next(n);
|
|
2515
2515
|
}
|
|
@@ -2557,7 +2557,7 @@ var Si = function(t) {
|
|
|
2557
2557
|
return this._throwIfClosed(), this._checkFinalizedStatuses(n), this._innerSubscribe(n);
|
|
2558
2558
|
}, r.prototype._innerSubscribe = function(n) {
|
|
2559
2559
|
var o = this, i = this, a = i.hasError, s = i.isStopped, c = i.observers;
|
|
2560
|
-
return a || s ?
|
|
2560
|
+
return a || s ? dn : (this.currentObservers = null, c.push(n), new Ce(function() {
|
|
2561
2561
|
o.currentObservers = null, xe(c, n);
|
|
2562
2562
|
}));
|
|
2563
2563
|
}, r.prototype._checkFinalizedStatuses = function(n) {
|
|
@@ -2570,7 +2570,7 @@ var Si = function(t) {
|
|
|
2570
2570
|
return new Et(n, o);
|
|
2571
2571
|
}, r;
|
|
2572
2572
|
}(Q), Et = function(t) {
|
|
2573
|
-
|
|
2573
|
+
oe(r, t);
|
|
2574
2574
|
function r(n, o) {
|
|
2575
2575
|
var i = t.call(this) || this;
|
|
2576
2576
|
return i.destination = n, i.source = o, i;
|
|
@@ -2586,15 +2586,15 @@ var Si = function(t) {
|
|
|
2586
2586
|
(o = (n = this.destination) === null || n === void 0 ? void 0 : n.complete) === null || o === void 0 || o.call(n);
|
|
2587
2587
|
}, r.prototype._subscribe = function(n) {
|
|
2588
2588
|
var o, i;
|
|
2589
|
-
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i :
|
|
2589
|
+
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i : dn;
|
|
2590
2590
|
}, r;
|
|
2591
|
-
}(
|
|
2591
|
+
}(yn), ki = {
|
|
2592
2592
|
now: function() {
|
|
2593
2593
|
return Date.now();
|
|
2594
2594
|
},
|
|
2595
2595
|
delegate: void 0
|
|
2596
2596
|
}, Ai = function(t) {
|
|
2597
|
-
|
|
2597
|
+
oe(r, t);
|
|
2598
2598
|
function r(n, o) {
|
|
2599
2599
|
return t.call(this) || this;
|
|
2600
2600
|
}
|
|
@@ -2605,14 +2605,14 @@ var Si = function(t) {
|
|
|
2605
2605
|
setInterval: function(t, r) {
|
|
2606
2606
|
for (var n = [], o = 2; o < arguments.length; o++)
|
|
2607
2607
|
n[o - 2] = arguments[o];
|
|
2608
|
-
return setInterval.apply(void 0,
|
|
2608
|
+
return setInterval.apply(void 0, Te([t, r], Re(n)));
|
|
2609
2609
|
},
|
|
2610
2610
|
clearInterval: function(t) {
|
|
2611
2611
|
return clearInterval(t);
|
|
2612
2612
|
},
|
|
2613
2613
|
delegate: void 0
|
|
2614
2614
|
}, Oi = function(t) {
|
|
2615
|
-
|
|
2615
|
+
oe(r, t);
|
|
2616
2616
|
function r(n, o) {
|
|
2617
2617
|
var i = t.call(this, n, o) || this;
|
|
2618
2618
|
return i.scheduler = n, i.work = o, i.pending = !1, i;
|
|
@@ -2661,7 +2661,7 @@ var Si = function(t) {
|
|
|
2661
2661
|
return n === void 0 && (n = 0), new this.schedulerActionCtor(this, r).schedule(o, n);
|
|
2662
2662
|
}, t.now = ki.now, t;
|
|
2663
2663
|
}(), Ii = function(t) {
|
|
2664
|
-
|
|
2664
|
+
oe(r, t);
|
|
2665
2665
|
function r(n, o) {
|
|
2666
2666
|
o === void 0 && (o = St.now);
|
|
2667
2667
|
var i = t.call(this, n, o) || this;
|
|
@@ -2685,10 +2685,10 @@ var Si = function(t) {
|
|
|
2685
2685
|
throw i;
|
|
2686
2686
|
}
|
|
2687
2687
|
}, r;
|
|
2688
|
-
}(St), ji = new Ii(Oi),
|
|
2688
|
+
}(St), ji = new Ii(Oi), Ri = function(t) {
|
|
2689
2689
|
return t && typeof t.length == "number" && typeof t != "function";
|
|
2690
2690
|
};
|
|
2691
|
-
function
|
|
2691
|
+
function Ti(t) {
|
|
2692
2692
|
return O(t == null ? void 0 : t.then);
|
|
2693
2693
|
}
|
|
2694
2694
|
function xi(t) {
|
|
@@ -2697,33 +2697,33 @@ function xi(t) {
|
|
|
2697
2697
|
function Mi(t) {
|
|
2698
2698
|
return Symbol.asyncIterator && O(t == null ? void 0 : t[Symbol.asyncIterator]);
|
|
2699
2699
|
}
|
|
2700
|
-
function
|
|
2700
|
+
function Ni(t) {
|
|
2701
2701
|
return new TypeError("You provided " + (t !== null && typeof t == "object" ? "an invalid object" : "'" + t + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
|
2702
2702
|
}
|
|
2703
|
-
function
|
|
2703
|
+
function Di() {
|
|
2704
2704
|
return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
|
|
2705
2705
|
}
|
|
2706
|
-
var Li =
|
|
2706
|
+
var Li = Di();
|
|
2707
2707
|
function Ui(t) {
|
|
2708
2708
|
return O(t == null ? void 0 : t[Li]);
|
|
2709
2709
|
}
|
|
2710
2710
|
function Fi(t) {
|
|
2711
2711
|
return ui(this, arguments, function() {
|
|
2712
2712
|
var r, n, o, i;
|
|
2713
|
-
return
|
|
2713
|
+
return un(this, function(a) {
|
|
2714
2714
|
switch (a.label) {
|
|
2715
2715
|
case 0:
|
|
2716
2716
|
r = t.getReader(), a.label = 1;
|
|
2717
2717
|
case 1:
|
|
2718
2718
|
a.trys.push([1, , 9, 10]), a.label = 2;
|
|
2719
2719
|
case 2:
|
|
2720
|
-
return [4,
|
|
2720
|
+
return [4, me(r.read())];
|
|
2721
2721
|
case 3:
|
|
2722
|
-
return n = a.sent(), o = n.value, i = n.done, i ? [4,
|
|
2722
|
+
return n = a.sent(), o = n.value, i = n.done, i ? [4, me(void 0)] : [3, 5];
|
|
2723
2723
|
case 4:
|
|
2724
2724
|
return [2, a.sent()];
|
|
2725
2725
|
case 5:
|
|
2726
|
-
return [4,
|
|
2726
|
+
return [4, me(o)];
|
|
2727
2727
|
case 6:
|
|
2728
2728
|
return [4, a.sent()];
|
|
2729
2729
|
case 7:
|
|
@@ -2747,18 +2747,18 @@ function qi(t) {
|
|
|
2747
2747
|
if (t != null) {
|
|
2748
2748
|
if (xi(t))
|
|
2749
2749
|
return Vi(t);
|
|
2750
|
-
if (Ti(t))
|
|
2751
|
-
return zi(t);
|
|
2752
2750
|
if (Ri(t))
|
|
2751
|
+
return zi(t);
|
|
2752
|
+
if (Ti(t))
|
|
2753
2753
|
return Yi(t);
|
|
2754
2754
|
if (Mi(t))
|
|
2755
|
-
return
|
|
2755
|
+
return fn(t);
|
|
2756
2756
|
if (Ui(t))
|
|
2757
|
-
return Hi(t);
|
|
2758
|
-
if ($i(t))
|
|
2759
2757
|
return Ki(t);
|
|
2758
|
+
if ($i(t))
|
|
2759
|
+
return Hi(t);
|
|
2760
2760
|
}
|
|
2761
|
-
throw
|
|
2761
|
+
throw Ni(t);
|
|
2762
2762
|
}
|
|
2763
2763
|
function Vi(t) {
|
|
2764
2764
|
return new Q(function(r) {
|
|
@@ -2781,14 +2781,14 @@ function Yi(t) {
|
|
|
2781
2781
|
r.closed || (r.next(n), r.complete());
|
|
2782
2782
|
}, function(n) {
|
|
2783
2783
|
return r.error(n);
|
|
2784
|
-
}).then(null,
|
|
2784
|
+
}).then(null, _n);
|
|
2785
2785
|
});
|
|
2786
2786
|
}
|
|
2787
|
-
function
|
|
2787
|
+
function Ki(t) {
|
|
2788
2788
|
return new Q(function(r) {
|
|
2789
2789
|
var n, o;
|
|
2790
2790
|
try {
|
|
2791
|
-
for (var i =
|
|
2791
|
+
for (var i = ye(t), a = i.next(); !a.done; a = i.next()) {
|
|
2792
2792
|
var s = a.value;
|
|
2793
2793
|
if (r.next(s), r.closed)
|
|
2794
2794
|
return;
|
|
@@ -2805,21 +2805,21 @@ function Hi(t) {
|
|
|
2805
2805
|
r.complete();
|
|
2806
2806
|
});
|
|
2807
2807
|
}
|
|
2808
|
-
function
|
|
2808
|
+
function fn(t) {
|
|
2809
2809
|
return new Q(function(r) {
|
|
2810
2810
|
Gi(t, r).catch(function(n) {
|
|
2811
2811
|
return r.error(n);
|
|
2812
2812
|
});
|
|
2813
2813
|
});
|
|
2814
2814
|
}
|
|
2815
|
-
function
|
|
2816
|
-
return
|
|
2815
|
+
function Hi(t) {
|
|
2816
|
+
return fn(Fi(t));
|
|
2817
2817
|
}
|
|
2818
2818
|
function Gi(t, r) {
|
|
2819
2819
|
var n, o, i, a;
|
|
2820
2820
|
return li(this, void 0, void 0, function() {
|
|
2821
2821
|
var s, c;
|
|
2822
|
-
return
|
|
2822
|
+
return un(this, function(l) {
|
|
2823
2823
|
switch (l.label) {
|
|
2824
2824
|
case 0:
|
|
2825
2825
|
l.trys.push([0, 5, 6, 11]), n = di(t), l.label = 1;
|
|
@@ -2869,7 +2869,7 @@ function Bi(t, r) {
|
|
|
2869
2869
|
};
|
|
2870
2870
|
return new Q(o);
|
|
2871
2871
|
}
|
|
2872
|
-
var Ji =
|
|
2872
|
+
var Ji = qe(function(t) {
|
|
2873
2873
|
return function() {
|
|
2874
2874
|
t(this), this.name = "EmptyError", this.message = "no elements in sequence";
|
|
2875
2875
|
};
|
|
@@ -2891,7 +2891,7 @@ function Wi(t, r) {
|
|
|
2891
2891
|
function Xi(t) {
|
|
2892
2892
|
return t instanceof Date && !isNaN(t);
|
|
2893
2893
|
}
|
|
2894
|
-
var Qi =
|
|
2894
|
+
var Qi = qe(function(t) {
|
|
2895
2895
|
return function(r) {
|
|
2896
2896
|
r === void 0 && (r = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = r;
|
|
2897
2897
|
};
|
|
@@ -2901,23 +2901,23 @@ function ea(t, r) {
|
|
|
2901
2901
|
if (o == null && i == null)
|
|
2902
2902
|
throw new TypeError("No timeout provided.");
|
|
2903
2903
|
return Ei(function(_, b) {
|
|
2904
|
-
var m, y,
|
|
2904
|
+
var m, y, f = null, w = 0, v = function(P) {
|
|
2905
2905
|
y = Zi(b, l, function() {
|
|
2906
2906
|
try {
|
|
2907
2907
|
m.unsubscribe(), qi(s({
|
|
2908
2908
|
meta: d,
|
|
2909
|
-
lastValue:
|
|
2909
|
+
lastValue: f,
|
|
2910
2910
|
seen: w
|
|
2911
2911
|
})).subscribe(b);
|
|
2912
|
-
} catch (
|
|
2913
|
-
b.error(
|
|
2912
|
+
} catch (U) {
|
|
2913
|
+
b.error(U);
|
|
2914
2914
|
}
|
|
2915
2915
|
}, P);
|
|
2916
2916
|
};
|
|
2917
2917
|
m = _.subscribe(Ci(b, function(P) {
|
|
2918
|
-
y == null || y.unsubscribe(), w++, b.next(
|
|
2918
|
+
y == null || y.unsubscribe(), w++, b.next(f = P), i > 0 && v(i);
|
|
2919
2919
|
}, void 0, void 0, function() {
|
|
2920
|
-
y != null && y.closed || y == null || y.unsubscribe(),
|
|
2920
|
+
y != null && y.closed || y == null || y.unsubscribe(), f = null;
|
|
2921
2921
|
})), !w && v(o != null ? typeof o == "number" ? o : +o - l.now() : i);
|
|
2922
2922
|
});
|
|
2923
2923
|
}
|
|
@@ -2961,7 +2961,7 @@ class Ie {
|
|
|
2961
2961
|
with: () => Bi(() => new Error(r.timeoutErrMsg))
|
|
2962
2962
|
};
|
|
2963
2963
|
return Wi(this._subject.pipe(ea(n)));
|
|
2964
|
-
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new
|
|
2964
|
+
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new yn();
|
|
2965
2965
|
}
|
|
2966
2966
|
get current() {
|
|
2967
2967
|
return this._current;
|
|
@@ -2987,31 +2987,31 @@ const { log__: na, err__: ra } = I("init-flows"), ke = (t, r) => {
|
|
|
2987
2987
|
}, ia = () => ({
|
|
2988
2988
|
// 💡 Add new init flows here
|
|
2989
2989
|
// Stripe PR
|
|
2990
|
-
stripePR: ke("Stripe PR",
|
|
2990
|
+
stripePR: ke("Stripe PR", V.stripePR.init),
|
|
2991
2991
|
// Stripe Link
|
|
2992
|
-
stripeLink: ke("Stripe Link",
|
|
2992
|
+
stripeLink: ke("Stripe Link", V.stripeLink.init),
|
|
2993
2993
|
// Airwallex GooglePay
|
|
2994
|
-
airwallexGooglePay: ke("Airwallex GPay",
|
|
2994
|
+
airwallexGooglePay: ke("Airwallex GPay", V.airwallexGooglePay.init),
|
|
2995
2995
|
// Airwallex ApplePay
|
|
2996
|
-
airwallexApplePay: ke("Airwallex ApplePay",
|
|
2996
|
+
airwallexApplePay: ke("Airwallex ApplePay", V.airwallexApplePay.init)
|
|
2997
2997
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2998
|
-
}), { err__: aa } = I("form-callbacks"),
|
|
2999
|
-
onFocus:
|
|
3000
|
-
onBlur:
|
|
3001
|
-
onChange:
|
|
3002
|
-
onLoad:
|
|
3003
|
-
onLoadError:
|
|
3004
|
-
onValidationError:
|
|
3005
|
-
onCheckoutStarted:
|
|
3006
|
-
onCheckoutSuccess:
|
|
3007
|
-
onSetupPaymentMethodSuccess:
|
|
3008
|
-
onCheckoutError:
|
|
3009
|
-
onPaymentRequestLoad:
|
|
3010
|
-
}),
|
|
2998
|
+
}), { err__: aa } = I("form-callbacks"), F = e.function().optional(), Pt = e.object({
|
|
2999
|
+
onFocus: F,
|
|
3000
|
+
onBlur: F,
|
|
3001
|
+
onChange: F,
|
|
3002
|
+
onLoad: F,
|
|
3003
|
+
onLoadError: F,
|
|
3004
|
+
onValidationError: F,
|
|
3005
|
+
onCheckoutStarted: F,
|
|
3006
|
+
onCheckoutSuccess: F,
|
|
3007
|
+
onSetupPaymentMethodSuccess: F,
|
|
3008
|
+
onCheckoutError: F,
|
|
3009
|
+
onPaymentRequestLoad: F
|
|
3010
|
+
}), ue = class je {
|
|
3011
3011
|
constructor() {
|
|
3012
3012
|
this.setCallbacks = (r) => {
|
|
3013
3013
|
this._callbacks = je.createEmptyCallbacks(), Object.entries(r).forEach(([n, o]) => {
|
|
3014
|
-
const i =
|
|
3014
|
+
const i = Dn(n, o ?? je.NOOP, aa);
|
|
3015
3015
|
this._callbacks[n] = i;
|
|
3016
3016
|
});
|
|
3017
3017
|
}, this._callbacks = je.createEmptyCallbacks();
|
|
@@ -3023,17 +3023,17 @@ const { log__: na, err__: ra } = I("init-flows"), ke = (t, r) => {
|
|
|
3023
3023
|
return { ...this._callbacks };
|
|
3024
3024
|
}
|
|
3025
3025
|
};
|
|
3026
|
-
|
|
3027
|
-
},
|
|
3026
|
+
ue.NOOP = () => {
|
|
3027
|
+
}, ue.createEmptyCallbacks = () => {
|
|
3028
3028
|
const t = {};
|
|
3029
3029
|
return Object.keys(Pt.keyof().enum).forEach((r) => {
|
|
3030
|
-
t[r] =
|
|
3030
|
+
t[r] = ue.NOOP;
|
|
3031
3031
|
}), t;
|
|
3032
|
-
},
|
|
3033
|
-
const r = new
|
|
3032
|
+
}, ue.fromObject = (t) => {
|
|
3033
|
+
const r = new ue();
|
|
3034
3034
|
return r.setCallbacks(Pt.parse(t)), r;
|
|
3035
3035
|
};
|
|
3036
|
-
let sa =
|
|
3036
|
+
let sa = ue;
|
|
3037
3037
|
class ca {
|
|
3038
3038
|
constructor(r, n, o, i) {
|
|
3039
3039
|
this.handleMessage = (a) => {
|
|
@@ -3129,14 +3129,14 @@ const da = (t, r, n) => {
|
|
|
3129
3129
|
n.get.onPaymentRequestLoad(l);
|
|
3130
3130
|
}
|
|
3131
3131
|
});
|
|
3132
|
-
}, At = (t, r, n, o, i) =>
|
|
3132
|
+
}, At = (t, r, n, o, i) => V.stripePR.run({
|
|
3133
3133
|
context: n,
|
|
3134
|
-
checkoutPaymentMethod:
|
|
3135
|
-
nonCdeFormInputs:
|
|
3134
|
+
checkoutPaymentMethod: Qe(n.checkoutPaymentMethods, t),
|
|
3135
|
+
nonCdeFormInputs: _e(n.formDiv),
|
|
3136
3136
|
formCallbacks: o,
|
|
3137
3137
|
customParams: { provider: t, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
|
|
3138
3138
|
initResult: r
|
|
3139
|
-
}), Ot = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: J, err__: ae } = I("op-form"),
|
|
3139
|
+
}), Ot = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: J, err__: ae } = I("op-form"), de = class nt {
|
|
3140
3140
|
constructor(r) {
|
|
3141
3141
|
this.cdeLoadEvent = new Ie(), this.anyCdeConn = new Ie(), this.context = new Ie(), this.initFlows = ia(), this.startFormInit = async () => {
|
|
3142
3142
|
try {
|
|
@@ -3151,7 +3151,7 @@ const da = (t, r, n) => {
|
|
|
3151
3151
|
timeoutErrMsg: Ot
|
|
3152
3152
|
});
|
|
3153
3153
|
J("├ CDE connection received"), J("├ Creating OJS context, setting up handlers...");
|
|
3154
|
-
const i =
|
|
3154
|
+
const i = nt.buildOjsFlowContext(
|
|
3155
3155
|
this.config,
|
|
3156
3156
|
n,
|
|
3157
3157
|
o,
|
|
@@ -3186,10 +3186,10 @@ const da = (t, r, n) => {
|
|
|
3186
3186
|
}
|
|
3187
3187
|
};
|
|
3188
3188
|
return this.connectToElement({ type: i.type, node: i.node }), this.registeredElements || (this.registeredElements = {
|
|
3189
|
-
[
|
|
3190
|
-
[
|
|
3191
|
-
[
|
|
3192
|
-
[
|
|
3189
|
+
[pe.CARD]: void 0,
|
|
3190
|
+
[pe.CARD_NUMBER]: void 0,
|
|
3191
|
+
[pe.CARD_EXPIRY]: void 0,
|
|
3192
|
+
[pe.CARD_CVC]: void 0
|
|
3193
3193
|
}), this.registeredElements[n] = i, i;
|
|
3194
3194
|
}, this.buildQueryString = (n) => {
|
|
3195
3195
|
const o = new URLSearchParams();
|
|
@@ -3204,10 +3204,10 @@ const da = (t, r, n) => {
|
|
|
3204
3204
|
ae("Please wait for the form to finish loading before submitting.");
|
|
3205
3205
|
return;
|
|
3206
3206
|
}
|
|
3207
|
-
|
|
3207
|
+
V.commonCC.run({
|
|
3208
3208
|
context: n,
|
|
3209
|
-
checkoutPaymentMethod:
|
|
3210
|
-
nonCdeFormInputs:
|
|
3209
|
+
checkoutPaymentMethod: Qe(n.checkoutPaymentMethods, "credit_card"),
|
|
3210
|
+
nonCdeFormInputs: _e(n.formDiv),
|
|
3211
3211
|
formCallbacks: this.formCallbacks,
|
|
3212
3212
|
customParams: {
|
|
3213
3213
|
currentCdeConnections: this.connectionManager.getAllConnections()
|
|
@@ -3232,10 +3232,10 @@ const da = (t, r, n) => {
|
|
|
3232
3232
|
}
|
|
3233
3233
|
switch (n) {
|
|
3234
3234
|
case "pockyt-paypal":
|
|
3235
|
-
return
|
|
3235
|
+
return V.pockytPaypal.run({
|
|
3236
3236
|
context: i,
|
|
3237
|
-
checkoutPaymentMethod:
|
|
3238
|
-
nonCdeFormInputs:
|
|
3237
|
+
checkoutPaymentMethod: Qe(i.checkoutPaymentMethods, "paypal", "pockyt"),
|
|
3238
|
+
nonCdeFormInputs: _e(i.formDiv),
|
|
3239
3239
|
formCallbacks: this.formCallbacks,
|
|
3240
3240
|
customParams: { settings: o },
|
|
3241
3241
|
initResult: void 0
|
|
@@ -3262,7 +3262,7 @@ const da = (t, r, n) => {
|
|
|
3262
3262
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
|
|
3263
3263
|
}, this.updateCallbacks = (n) => {
|
|
3264
3264
|
this.formCallbacks.setCallbacks(n);
|
|
3265
|
-
},
|
|
3265
|
+
}, nt.assignAsSingleton(this), this.ojsVersion = "0.2.10", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = sa.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${Nt()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ua(), this.eventHandler = new ca(this.formId, this.baseUrl, this.formCallbacks, {
|
|
3266
3266
|
setFormHeight: this.setFormHeight,
|
|
3267
3267
|
onCdeLoaded: this.onCdeLoaded,
|
|
3268
3268
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -3272,20 +3272,20 @@ const da = (t, r, n) => {
|
|
|
3272
3272
|
return this.config.checkoutSecureToken;
|
|
3273
3273
|
}
|
|
3274
3274
|
};
|
|
3275
|
-
|
|
3276
|
-
if (
|
|
3275
|
+
de.ojsFlows = V, de.assignAsSingleton = (t) => {
|
|
3276
|
+
if (de.getInstance())
|
|
3277
3277
|
throw new Error("OpenPay instance already exists. Only one instance is allowed.");
|
|
3278
3278
|
window.ojs = t;
|
|
3279
|
-
},
|
|
3279
|
+
}, de.getInstance = () => window.ojs ?? null, de.buildOjsFlowContext = (t, r, n, o) => ({
|
|
3280
3280
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
3281
|
-
baseUrl: new URL(t.baseUrl ??
|
|
3281
|
+
baseUrl: new URL(t.baseUrl ?? Ut).origin,
|
|
3282
3282
|
formDiv: o,
|
|
3283
3283
|
elementsSessionId: r.sessionId,
|
|
3284
3284
|
checkoutPaymentMethods: r.checkoutPaymentMethods,
|
|
3285
3285
|
anyCdeConnection: n,
|
|
3286
3286
|
customInitParams: t.customInitParams ?? {}
|
|
3287
3287
|
});
|
|
3288
|
-
let Me =
|
|
3288
|
+
let Me = de;
|
|
3289
3289
|
const pa = e.object({
|
|
3290
3290
|
type: e.string(),
|
|
3291
3291
|
loc: e.array(e.string()),
|
|
@@ -3306,18 +3306,18 @@ const _a = (t, r, n) => (...o) => {
|
|
|
3306
3306
|
n(`[form] Error running callback (${t}):`, i);
|
|
3307
3307
|
return;
|
|
3308
3308
|
}
|
|
3309
|
-
},
|
|
3309
|
+
}, R = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), N = (t) => e.nullable(t.optional());
|
|
3310
3310
|
var hn = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(hn || {});
|
|
3311
3311
|
const ya = e.nativeEnum(hn);
|
|
3312
|
-
var
|
|
3313
|
-
const
|
|
3314
|
-
var
|
|
3315
|
-
e.nativeEnum(
|
|
3316
|
-
const
|
|
3312
|
+
var gn = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(gn || {});
|
|
3313
|
+
const bn = e.nativeEnum(gn), fa = e.union([ya, bn]);
|
|
3314
|
+
var be = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(be || {});
|
|
3315
|
+
e.nativeEnum(be);
|
|
3316
|
+
const Ve = e.object({
|
|
3317
3317
|
provider: e.string(),
|
|
3318
|
-
processor_name:
|
|
3319
|
-
metadata:
|
|
3320
|
-
}),
|
|
3318
|
+
processor_name: N(e.string()),
|
|
3319
|
+
metadata: N(e.record(e.string(), e.any()))
|
|
3320
|
+
}), ha = e.object({
|
|
3321
3321
|
id: e.string()
|
|
3322
3322
|
});
|
|
3323
3323
|
e.object({
|
|
@@ -3360,25 +3360,25 @@ const K = e.enum([
|
|
|
3360
3360
|
"START_PAYMENT_FLOW"
|
|
3361
3361
|
]), ga = K.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), ba = e.object({ type: ga }), wa = K.extract(["BLUR", "FOCUS", "CHANGE"]), va = e.object({
|
|
3362
3362
|
type: wa,
|
|
3363
|
-
elementType:
|
|
3363
|
+
elementType: bn,
|
|
3364
3364
|
errors: e.array(e.string()).optional()
|
|
3365
3365
|
}), Ea = K.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ca = e.object({
|
|
3366
3366
|
type: Ea,
|
|
3367
|
-
message:
|
|
3367
|
+
message: R,
|
|
3368
3368
|
headers: e.record(e.string(), e.string()).optional()
|
|
3369
3369
|
}), Sa = K.extract(["VALIDATION_ERROR"]), Pa = e.object({
|
|
3370
3370
|
type: Sa,
|
|
3371
|
-
elementType:
|
|
3371
|
+
elementType: fa,
|
|
3372
3372
|
errors: e.array(e.string())
|
|
3373
3373
|
}), ka = e.object({
|
|
3374
3374
|
type: e.literal(K.enum.LAYOUT),
|
|
3375
|
-
height:
|
|
3375
|
+
height: R
|
|
3376
3376
|
}), Aa = e.object({
|
|
3377
3377
|
type: e.literal(K.enum.LOADED),
|
|
3378
|
-
sessionId:
|
|
3378
|
+
sessionId: R,
|
|
3379
3379
|
totalAmountAtoms: e.number(),
|
|
3380
3380
|
currency: S,
|
|
3381
|
-
checkoutPaymentMethods: e.array(
|
|
3381
|
+
checkoutPaymentMethods: e.array(Ve)
|
|
3382
3382
|
}), Oa = e.object({
|
|
3383
3383
|
type: e.literal(K.enum.PAYMENT_FLOW_STARTED),
|
|
3384
3384
|
nextActionMetadata: e.record(e.string(), e.any()),
|
|
@@ -3387,31 +3387,31 @@ const K = e.enum([
|
|
|
3387
3387
|
}), Ia = e.object({
|
|
3388
3388
|
type: e.literal(K.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
3389
3389
|
paymentMethodId: e.string()
|
|
3390
|
-
}),
|
|
3391
|
-
firstName:
|
|
3392
|
-
lastName:
|
|
3393
|
-
email:
|
|
3394
|
-
zipCode:
|
|
3395
|
-
country:
|
|
3390
|
+
}), ze = e.object({
|
|
3391
|
+
firstName: R,
|
|
3392
|
+
lastName: R,
|
|
3393
|
+
email: R,
|
|
3394
|
+
zipCode: R,
|
|
3395
|
+
country: R,
|
|
3396
3396
|
promotionCode: S
|
|
3397
3397
|
}), ja = e.object({
|
|
3398
3398
|
firstName: S,
|
|
3399
3399
|
lastName: S,
|
|
3400
|
-
email:
|
|
3401
|
-
zipCode:
|
|
3402
|
-
country:
|
|
3400
|
+
email: R,
|
|
3401
|
+
zipCode: R,
|
|
3402
|
+
country: R,
|
|
3403
3403
|
promotionCode: S,
|
|
3404
3404
|
address: S,
|
|
3405
3405
|
city: S,
|
|
3406
3406
|
state: S
|
|
3407
|
-
}),
|
|
3408
|
-
type:
|
|
3409
|
-
sessionId:
|
|
3410
|
-
checkoutPaymentMethod:
|
|
3407
|
+
}), Ra = K.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ta = e.object({
|
|
3408
|
+
type: Ra,
|
|
3409
|
+
sessionId: R,
|
|
3410
|
+
checkoutPaymentMethod: Ve,
|
|
3411
3411
|
paymentFlowMetadata: e.any().optional(),
|
|
3412
3412
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
3413
3413
|
existingCCPMId: S
|
|
3414
|
-
}).extend(
|
|
3414
|
+
}).extend(ze.shape), xa = e.object({
|
|
3415
3415
|
type: e.literal(K.enum.TOKENIZE_SUCCESS),
|
|
3416
3416
|
isReadyForCheckout: e.boolean()
|
|
3417
3417
|
}), Ma = e.object({
|
|
@@ -3419,31 +3419,31 @@ const K = e.enum([
|
|
|
3419
3419
|
invoiceUrls: e.array(e.string()),
|
|
3420
3420
|
subscriptionIds: e.array(e.string()),
|
|
3421
3421
|
customerId: e.string()
|
|
3422
|
-
}),
|
|
3422
|
+
}), Na = e.discriminatedUnion("type", [
|
|
3423
3423
|
ba,
|
|
3424
3424
|
va,
|
|
3425
3425
|
Ca,
|
|
3426
3426
|
Pa,
|
|
3427
3427
|
ka,
|
|
3428
3428
|
Aa,
|
|
3429
|
-
|
|
3429
|
+
Ta,
|
|
3430
3430
|
xa,
|
|
3431
3431
|
Ma,
|
|
3432
3432
|
Oa,
|
|
3433
3433
|
Ia
|
|
3434
3434
|
]);
|
|
3435
3435
|
e.object({
|
|
3436
|
-
payload:
|
|
3437
|
-
nonce:
|
|
3438
|
-
formId:
|
|
3439
|
-
elementId:
|
|
3436
|
+
payload: Na,
|
|
3437
|
+
nonce: R,
|
|
3438
|
+
formId: R,
|
|
3439
|
+
elementId: R
|
|
3440
3440
|
});
|
|
3441
3441
|
e.object({
|
|
3442
3442
|
amountAtom: e.number(),
|
|
3443
3443
|
/**
|
|
3444
3444
|
* The three-letter ISO 4217 currency code for the payment.
|
|
3445
3445
|
*/
|
|
3446
|
-
currency:
|
|
3446
|
+
currency: R
|
|
3447
3447
|
});
|
|
3448
3448
|
e.enum(["apple_pay", "google_pay"]);
|
|
3449
3449
|
e.object({
|
|
@@ -3452,12 +3452,12 @@ e.object({
|
|
|
3452
3452
|
});
|
|
3453
3453
|
e.object({
|
|
3454
3454
|
secure_token: e.string(),
|
|
3455
|
-
existing_cc_pm_id:
|
|
3456
|
-
their_pm_id:
|
|
3457
|
-
checkout_attempt_id:
|
|
3458
|
-
processor_specific_metadata:
|
|
3455
|
+
existing_cc_pm_id: N(e.string()),
|
|
3456
|
+
their_pm_id: N(e.string()),
|
|
3457
|
+
checkout_attempt_id: N(e.string()),
|
|
3458
|
+
processor_specific_metadata: N(e.record(e.string(), e.any()))
|
|
3459
3459
|
});
|
|
3460
|
-
const
|
|
3460
|
+
const Da = e.object({
|
|
3461
3461
|
invoice_urls: e.array(e.string()),
|
|
3462
3462
|
subscription_ids: e.array(e.string()),
|
|
3463
3463
|
customer_id: e.string()
|
|
@@ -3479,15 +3479,15 @@ e.discriminatedUnion("success", [
|
|
|
3479
3479
|
]);
|
|
3480
3480
|
e.object({
|
|
3481
3481
|
session_id: e.string(),
|
|
3482
|
-
checkout_payment_method:
|
|
3483
|
-
non_cde_form_fields:
|
|
3482
|
+
checkout_payment_method: Ve,
|
|
3483
|
+
non_cde_form_fields: ze,
|
|
3484
3484
|
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
3485
|
-
existing_cc_pm_id:
|
|
3485
|
+
existing_cc_pm_id: N(e.string())
|
|
3486
3486
|
});
|
|
3487
3487
|
e.object({
|
|
3488
3488
|
session_id: e.string(),
|
|
3489
|
-
checkout_payment_method:
|
|
3490
|
-
non_cde_form_fields:
|
|
3489
|
+
checkout_payment_method: Ve,
|
|
3490
|
+
non_cde_form_fields: ze,
|
|
3491
3491
|
extra_metadata: e.record(e.string(), e.any()).optional()
|
|
3492
3492
|
});
|
|
3493
3493
|
e.object({
|
|
@@ -3511,20 +3511,20 @@ e.object({
|
|
|
3511
3511
|
});
|
|
3512
3512
|
const Fa = e.object({
|
|
3513
3513
|
type: e.string(),
|
|
3514
|
-
redirect_url:
|
|
3515
|
-
initial_intent_id:
|
|
3516
|
-
consent_id:
|
|
3517
|
-
their_pm_id:
|
|
3518
|
-
payment_session:
|
|
3514
|
+
redirect_url: N(e.string()),
|
|
3515
|
+
initial_intent_id: N(e.string()),
|
|
3516
|
+
consent_id: N(e.string()),
|
|
3517
|
+
their_pm_id: N(e.string()),
|
|
3518
|
+
payment_session: N(e.record(e.string(), e.any()))
|
|
3519
3519
|
});
|
|
3520
3520
|
e.discriminatedUnion("present", [
|
|
3521
3521
|
e.object({ present: e.literal(!0), href: e.string() }),
|
|
3522
3522
|
e.object({ present: e.literal(!1) })
|
|
3523
3523
|
]);
|
|
3524
3524
|
e.object({
|
|
3525
|
-
payment_methods: e.array(
|
|
3526
|
-
pay_first_success_response:
|
|
3527
|
-
required_user_actions:
|
|
3525
|
+
payment_methods: e.array(ha),
|
|
3526
|
+
pay_first_success_response: N(Da),
|
|
3527
|
+
required_user_actions: N(e.array(Fa))
|
|
3528
3528
|
});
|
|
3529
3529
|
e.object({
|
|
3530
3530
|
stripe_pk: e.string(),
|
|
@@ -3544,14 +3544,14 @@ e.object({
|
|
|
3544
3544
|
headers: e.record(e.string(), e.string()).optional()
|
|
3545
3545
|
});
|
|
3546
3546
|
e.enum(["usd", "brl"]);
|
|
3547
|
-
const
|
|
3547
|
+
const wn = e.object({
|
|
3548
3548
|
name: e.string(),
|
|
3549
3549
|
amount_atom_off: g(e.number()),
|
|
3550
3550
|
percent_off: g(e.number()),
|
|
3551
3551
|
currency: g(e.string()),
|
|
3552
3552
|
duration: e.string(),
|
|
3553
3553
|
duration_in_months: g(e.number())
|
|
3554
|
-
}),
|
|
3554
|
+
}), vn = e.object({
|
|
3555
3555
|
amount_subtotal_atom: e.number().int(),
|
|
3556
3556
|
amount_total_atom: e.number().int(),
|
|
3557
3557
|
currency: e.string(),
|
|
@@ -3576,37 +3576,37 @@ const bn = e.object({
|
|
|
3576
3576
|
subscription_items: e.array(za),
|
|
3577
3577
|
trial_start: g(e.string()),
|
|
3578
3578
|
trial_end: g(e.string())
|
|
3579
|
-
}),
|
|
3579
|
+
}), En = e.object({
|
|
3580
3580
|
amount_atom: e.number()
|
|
3581
|
-
}),
|
|
3581
|
+
}), Ka = e.object({
|
|
3582
3582
|
amount_atom: e.number(),
|
|
3583
3583
|
amount_atom_considering_discount_applied: e.number(),
|
|
3584
3584
|
currency: e.string(),
|
|
3585
|
-
discount_amount_atoms: e.array(
|
|
3585
|
+
discount_amount_atoms: e.array(En),
|
|
3586
3586
|
subscription_item_id: e.string()
|
|
3587
|
-
}),
|
|
3588
|
-
coupon:
|
|
3587
|
+
}), Ha = e.object({
|
|
3588
|
+
coupon: wn
|
|
3589
3589
|
}), Ga = e.object({
|
|
3590
3590
|
currency: e.string(),
|
|
3591
|
-
discounts: e.array(
|
|
3591
|
+
discounts: e.array(Ha),
|
|
3592
3592
|
hosted_invoice_url: g(e.string()),
|
|
3593
|
-
lines: e.array(
|
|
3593
|
+
lines: e.array(Ka),
|
|
3594
3594
|
remaining_amount_atom: e.number(),
|
|
3595
3595
|
tax_amount_atom: e.number(),
|
|
3596
3596
|
total_amount_atom: e.number(),
|
|
3597
|
-
total_discount_amount_atoms: e.array(
|
|
3597
|
+
total_discount_amount_atoms: e.array(En)
|
|
3598
3598
|
}), It = e.object({
|
|
3599
3599
|
created: e.array(Ya),
|
|
3600
3600
|
invoices: e.array(Ga)
|
|
3601
3601
|
}), Za = e.object({
|
|
3602
3602
|
preview: It,
|
|
3603
3603
|
preview_post_trial: g(It),
|
|
3604
|
-
coupons: e.array(
|
|
3604
|
+
coupons: e.array(wn)
|
|
3605
3605
|
}), jt = e.object({
|
|
3606
3606
|
status: e.literal("open"),
|
|
3607
3607
|
token: e.string(),
|
|
3608
3608
|
email: g(e.string()),
|
|
3609
|
-
line_items: e.array(
|
|
3609
|
+
line_items: e.array(vn),
|
|
3610
3610
|
amount_subtotal_atom: e.number().int(),
|
|
3611
3611
|
amount_total_atom: e.number().int(),
|
|
3612
3612
|
brand: Va,
|
|
@@ -3647,7 +3647,7 @@ e.object({
|
|
|
3647
3647
|
customer_email: e.string(),
|
|
3648
3648
|
customer_zip_code: e.string(),
|
|
3649
3649
|
customer_country: e.string(),
|
|
3650
|
-
line_items: e.array(
|
|
3650
|
+
line_items: e.array(vn),
|
|
3651
3651
|
total_amount_atom: e.number().int(),
|
|
3652
3652
|
cancel_at_end: e.boolean(),
|
|
3653
3653
|
checkout_payment_method: Se,
|
|
@@ -3702,7 +3702,7 @@ e.object({
|
|
|
3702
3702
|
});
|
|
3703
3703
|
e.object({
|
|
3704
3704
|
session_id: e.string(),
|
|
3705
|
-
non_cde_form_fields:
|
|
3705
|
+
non_cde_form_fields: ze,
|
|
3706
3706
|
checkout_payment_method: Se,
|
|
3707
3707
|
extra_metadata: e.record(e.string(), e.any())
|
|
3708
3708
|
// This is optional in CDE, but not in OJS moving forward
|
|
@@ -3779,9 +3779,9 @@ var is = /* @__PURE__ */ function() {
|
|
|
3779
3779
|
})(Error);
|
|
3780
3780
|
const as = (t) => {
|
|
3781
3781
|
const r = (...o) => {
|
|
3782
|
-
window.console.log(`${
|
|
3782
|
+
window.console.log(`${te.green.bold("ojs/")}${te.bold.gray(`${t}`)} `, ...o);
|
|
3783
3783
|
}, n = (...o) => {
|
|
3784
|
-
window.console.warn(`${
|
|
3784
|
+
window.console.warn(`${te.red.bold("ojs/")}${te.bold.gray(`${t}`)} `, ...o);
|
|
3785
3785
|
};
|
|
3786
3786
|
return {
|
|
3787
3787
|
log: r,
|
|
@@ -3812,7 +3812,7 @@ e.object({
|
|
|
3812
3812
|
"op-airwallex-initial-intent-id": e.string(),
|
|
3813
3813
|
"op-airwallex-consent-id": e.string()
|
|
3814
3814
|
});
|
|
3815
|
-
const
|
|
3815
|
+
const Rt = {
|
|
3816
3816
|
isAvailable: !1,
|
|
3817
3817
|
isLoading: !0,
|
|
3818
3818
|
startFlow: async () => {
|
|
@@ -3866,7 +3866,7 @@ e.object({
|
|
|
3866
3866
|
processor_account_name: e.string()
|
|
3867
3867
|
})
|
|
3868
3868
|
});
|
|
3869
|
-
const
|
|
3869
|
+
const Tt = {
|
|
3870
3870
|
isLoading: !0,
|
|
3871
3871
|
isAvailable: !1,
|
|
3872
3872
|
startFlow: async () => {
|
|
@@ -3876,18 +3876,18 @@ const Rt = {
|
|
|
3876
3876
|
and ".isAvailable" to know if a payment request is available.`
|
|
3877
3877
|
);
|
|
3878
3878
|
}
|
|
3879
|
-
}, { err__: ss } = as("form-callbacks"),
|
|
3880
|
-
onFocus:
|
|
3881
|
-
onBlur:
|
|
3882
|
-
onChange:
|
|
3883
|
-
onLoad:
|
|
3884
|
-
onLoadError:
|
|
3885
|
-
onValidationError:
|
|
3886
|
-
onCheckoutStarted:
|
|
3887
|
-
onCheckoutSuccess:
|
|
3888
|
-
onSetupPaymentMethodSuccess:
|
|
3889
|
-
onCheckoutError:
|
|
3890
|
-
onPaymentRequestLoad:
|
|
3879
|
+
}, { err__: ss } = as("form-callbacks"), $ = e.function().optional(), xt = e.object({
|
|
3880
|
+
onFocus: $,
|
|
3881
|
+
onBlur: $,
|
|
3882
|
+
onChange: $,
|
|
3883
|
+
onLoad: $,
|
|
3884
|
+
onLoadError: $,
|
|
3885
|
+
onValidationError: $,
|
|
3886
|
+
onCheckoutStarted: $,
|
|
3887
|
+
onCheckoutSuccess: $,
|
|
3888
|
+
onSetupPaymentMethodSuccess: $,
|
|
3889
|
+
onCheckoutError: $,
|
|
3890
|
+
onPaymentRequestLoad: $
|
|
3891
3891
|
}), Z = class Z {
|
|
3892
3892
|
constructor() {
|
|
3893
3893
|
this.setCallbacks = (r) => {
|
|
@@ -3914,10 +3914,10 @@ Z.NOOP = () => {
|
|
|
3914
3914
|
const n = new Z();
|
|
3915
3915
|
return n.setCallbacks(xt.parse(r)), n;
|
|
3916
3916
|
};
|
|
3917
|
-
let
|
|
3917
|
+
let rt = Z;
|
|
3918
3918
|
const cs = (t) => {
|
|
3919
3919
|
var n;
|
|
3920
|
-
const r =
|
|
3920
|
+
const r = rt.fromObject({
|
|
3921
3921
|
onFocus: t.onFocus,
|
|
3922
3922
|
onBlur: t.onBlur,
|
|
3923
3923
|
onChange: t.onChange,
|
|
@@ -3933,9 +3933,9 @@ const cs = (t) => {
|
|
|
3933
3933
|
return Me.getInstance() && ((n = Me.getInstance()) == null || n.updateCallbacks(r.get)), r.get;
|
|
3934
3934
|
}, ls = (t) => {
|
|
3935
3935
|
const [r, n] = se({
|
|
3936
|
-
apple_pay:
|
|
3937
|
-
google_pay:
|
|
3938
|
-
}), o =
|
|
3936
|
+
apple_pay: Tt,
|
|
3937
|
+
google_pay: Tt
|
|
3938
|
+
}), o = Pn(
|
|
3939
3939
|
(i) => {
|
|
3940
3940
|
n(i), t == null || t(i);
|
|
3941
3941
|
},
|
|
@@ -3944,35 +3944,35 @@ const cs = (t) => {
|
|
|
3944
3944
|
return { paymentRequests: r, overridenOnPaymentRequestLoad: o };
|
|
3945
3945
|
}, Mt = "op_ojs_form", gs = (t) => {
|
|
3946
3946
|
const [r, n] = se(), [o, i] = se(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = se(!1), [u, d] = se(null), [_, b] = se({
|
|
3947
|
-
googlePay:
|
|
3948
|
-
applePay:
|
|
3947
|
+
googlePay: Rt,
|
|
3948
|
+
applePay: Rt
|
|
3949
3949
|
}), m = cs({
|
|
3950
3950
|
...t,
|
|
3951
3951
|
onPaymentRequestLoad: s,
|
|
3952
|
-
onLoad: (
|
|
3952
|
+
onLoad: (f, w) => {
|
|
3953
3953
|
var v;
|
|
3954
|
-
l(!0), (v = t.onLoad) == null || v.call(t,
|
|
3954
|
+
l(!0), (v = t.onLoad) == null || v.call(t, f, w);
|
|
3955
3955
|
}
|
|
3956
3956
|
});
|
|
3957
|
-
if (
|
|
3957
|
+
if (Je(() => {
|
|
3958
3958
|
if (r) return;
|
|
3959
|
-
const
|
|
3959
|
+
const f = Me.getInstance() ?? new Me({
|
|
3960
3960
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
3961
3961
|
formTarget: `#${Mt}`,
|
|
3962
3962
|
baseUrl: t.baseUrl,
|
|
3963
3963
|
customInitParams: t.customInitParams,
|
|
3964
3964
|
...m
|
|
3965
3965
|
});
|
|
3966
|
-
n(
|
|
3967
|
-
const w = us(
|
|
3968
|
-
return i(w),
|
|
3966
|
+
n(f);
|
|
3967
|
+
const w = us(f);
|
|
3968
|
+
return i(w), f.initFlows.stripeLink.publisher.subscribe((v) => {
|
|
3969
3969
|
v.isSuccess && v.loadedValue.isAvailable && d(v.loadedValue.controller);
|
|
3970
|
-
}),
|
|
3970
|
+
}), f.initFlows.airwallexGooglePay.publisher.subscribe((v) => {
|
|
3971
3971
|
v.isSuccess && v.loadedValue.isAvailable && b((P) => ({
|
|
3972
3972
|
applePay: P.applePay,
|
|
3973
3973
|
googlePay: v.loadedValue
|
|
3974
3974
|
}));
|
|
3975
|
-
}),
|
|
3975
|
+
}), f.initFlows.airwallexApplePay.publisher.subscribe((v) => {
|
|
3976
3976
|
v.isSuccess && v.loadedValue.isAvailable && b((P) => ({
|
|
3977
3977
|
googlePay: P.googlePay,
|
|
3978
3978
|
applePay: {
|
|
@@ -3981,10 +3981,10 @@ const cs = (t) => {
|
|
|
3981
3981
|
}
|
|
3982
3982
|
}));
|
|
3983
3983
|
}), () => {
|
|
3984
|
-
|
|
3984
|
+
f.destroy();
|
|
3985
3985
|
};
|
|
3986
3986
|
}, []), !r)
|
|
3987
|
-
return /* @__PURE__ */
|
|
3987
|
+
return /* @__PURE__ */ q(He, {});
|
|
3988
3988
|
const y = {
|
|
3989
3989
|
submit: r.submitCard,
|
|
3990
3990
|
submitWith: r.generalSubmit,
|
|
@@ -4000,7 +4000,7 @@ const cs = (t) => {
|
|
|
4000
4000
|
stripeLink: u,
|
|
4001
4001
|
airwallex: _
|
|
4002
4002
|
};
|
|
4003
|
-
return /* @__PURE__ */
|
|
4003
|
+
return /* @__PURE__ */ q(He, { children: o ? /* @__PURE__ */ q(Lt.Provider, { value: o, children: /* @__PURE__ */ q("div", { id: Mt, className: t.className, children: t.children(y) }) }) : /* @__PURE__ */ q(He, {}) });
|
|
4004
4004
|
}, us = (t) => ({
|
|
4005
4005
|
formId: t.formId,
|
|
4006
4006
|
formHeight: t.formProperties.height,
|
|
@@ -4008,30 +4008,30 @@ const cs = (t) => {
|
|
|
4008
4008
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
4009
4009
|
registerIframe: t.registerIframe,
|
|
4010
4010
|
baseUrl: t.baseUrl
|
|
4011
|
-
}),
|
|
4012
|
-
const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = An(), u = r.toLowerCase(), [d, _] = se(!1), b =
|
|
4011
|
+
}), Ye = (t) => {
|
|
4012
|
+
const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = An(), u = r.toLowerCase(), [d, _] = se(!1), b = kn(null), m = Ke(() => n ? $a(n) : "", [n]), y = Ke(() => ({
|
|
4013
4013
|
border: "none",
|
|
4014
4014
|
width: "100%",
|
|
4015
4015
|
height: a
|
|
4016
|
-
}), [a]),
|
|
4016
|
+
}), [a]), f = Ke(() => {
|
|
4017
4017
|
if (!s || !i) return "";
|
|
4018
4018
|
const w = new URLSearchParams();
|
|
4019
4019
|
return w.append("referer", i), w.append("styles", m), w.append("formId", o), w.append("secureToken", s), w.toString();
|
|
4020
4020
|
}, [m, o, i, s]);
|
|
4021
|
-
return
|
|
4021
|
+
return Je(() => _(!0), []), Je(() => {
|
|
4022
4022
|
!b.current || !d || c(r, b.current);
|
|
4023
|
-
}, [d]), s ? /* @__PURE__ */
|
|
4023
|
+
}, [d]), s ? /* @__PURE__ */ q(
|
|
4024
4024
|
"iframe",
|
|
4025
4025
|
{
|
|
4026
4026
|
id: `ojs-${u}-element`,
|
|
4027
4027
|
name: `${u}-element`,
|
|
4028
4028
|
className: "ojs-iframe",
|
|
4029
|
-
src: `${l}/app/v1/${u}-element/?${
|
|
4029
|
+
src: `${l}/app/v1/${u}-element/?${f}`,
|
|
4030
4030
|
style: y,
|
|
4031
4031
|
ref: b
|
|
4032
4032
|
}
|
|
4033
|
-
) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */
|
|
4034
|
-
}, bs = ({ styles: t }) => /* @__PURE__ */
|
|
4033
|
+
) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ q("div", {}));
|
|
4034
|
+
}, bs = ({ styles: t }) => /* @__PURE__ */ q(Ye, { styles: t, elementType: be.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ q(Ye, { styles: t, elementType: be.CARD }), vs = ({ styles: t }) => /* @__PURE__ */ q(Ye, { styles: t, elementType: be.CARD_EXPIRY }), Es = ({ styles: t }) => /* @__PURE__ */ q(Ye, { styles: t, elementType: be.CARD_NUMBER });
|
|
4035
4035
|
export {
|
|
4036
4036
|
bs as CardCvcElement,
|
|
4037
4037
|
ws as CardElement,
|
|
@@ -4041,4 +4041,4 @@ export {
|
|
|
4041
4041
|
hn as FieldName,
|
|
4042
4042
|
An as useOpenPayElements
|
|
4043
4043
|
};
|
|
4044
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBmZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgWXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBLdCA9IHokMS5hcnJheShZdCksIEh0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIFd0ID0geiQxLmFycmF5KEh0KSwgWnQgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBadFtyXSA/PyB0O1xufSwgSnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEJ0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUXQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEsgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChKdCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEt0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gQnQocikgOiBXdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IFF0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFh0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCB2ID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBSID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIGZ0ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShmdCB8fCB7fSk7XG5jb25zdCBtdCA9IHokMS5uYXRpdmVFbnVtKGZ0KSwgeXQgPSB6JDEudW5pb24oW3B0LCBtdF0pO1xudmFyIG5lID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkobmUgfHwge30pO1xuY29uc3QgZXIgPSB6JDEubmF0aXZlRW51bShuZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHRyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IHYsXG4gIGV4cGlyeTogdixcbiAgY3ZjOiB2XG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHYsXG4gIGNvbG9yOiB2LFxuICBmb250RmFtaWx5OiB2LFxuICBmb250U2l6ZTogdixcbiAgZm9udFdlaWdodDogdixcbiAgbWFyZ2luOiB2LFxuICBwYWRkaW5nOiB2LFxuICBsZXR0ZXJTcGFjaW5nOiB2LFxuICBsaW5lSGVpZ2h0OiB2LFxuICBoaWRlSWNvbjogdlxufSk7XG5jb25zdCBVID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHJyID0gVS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgbnIgPSB6JDEub2JqZWN0KHsgdHlwZTogcnIgfSksIG9yID0gVS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIGlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG9yLFxuICBlbGVtZW50VHlwZTogbXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIHNyID0gVS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgYXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogc3IsXG4gIG1lc3NhZ2U6IEksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBjciA9IFUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogY3IsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IElcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChVLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB2LFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoVS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGZyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEksXG4gIGxhc3ROYW1lOiBJLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogdixcbiAgbGFzdE5hbWU6IHYsXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiB2LFxuICBhZGRyZXNzOiB2LFxuICBjaXR5OiB2LFxuICBzdGF0ZTogdlxufSksIHlyID0gVS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBociA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB5cixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZCh1ZS5zaGFwZSksIF9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgZ3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoVS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIHdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBucixcbiAgaXIsXG4gIGFyLFxuICBscixcbiAgdXIsXG4gIGRyLFxuICBocixcbiAgX3IsXG4gIGdyLFxuICBwcixcbiAgZnJcbl0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiB3cixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkodnIpXG59KSwgU3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIEVyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogdWUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHVlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgaiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKGogfHwge30pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBrciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFByID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBBciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheSh0ciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHokMS5hcnJheShodCkpXG59KSwgSXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgT3IgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBUciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgX3QoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIE1yID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgRHIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBUcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBfdCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgaWUgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBici5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIF8gPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBndCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogXyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IF8oeiQxLm51bWJlcigpKVxufSksIHd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBfKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogXyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcXIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogXyhxcilcbn0pLCBkZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogXyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogXyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBfKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IF8oeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBfKHokMS5zdHJpbmcoKSlcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShidCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IGd0XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IF8oeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoYnQpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCB2dCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBfKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KGd0KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkod3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogR3IsXG4gIHN1YnNfcHJldmlldzogXyh2dCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KGRlKVxufSksIEV0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW0V0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh3dCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBkZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IF8oeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IF8oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBkZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IFN0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGRlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHVlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZGUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogXyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBfKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBfKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IF8oeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IF8oeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogXyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBfKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBDdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IEN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBmbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIHZ0KSwgQiA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBFdCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFN0KSwgbW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIFN0KSwgSiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEFyKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIFByXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBmbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgU3IpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBrdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGt0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQ3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgYWUgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKEsoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gQShcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogSyhlKSB9O1xuICB9XG59LCBBID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtmZS5yZWQuYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IEEoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgY2UgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzogUHQsIGVycl9fOiBBdCB9ID0gQShcImNvbW1vbi1jY1wiKSwgbGUgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIFB0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gdWUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gSXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IEF0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBBdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBQdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogaywgZXJyX186IGtuIH0gPSBBKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBrKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gY2UodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgayhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEIoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBrKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IE1yKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgayhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIG0gPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBnID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IGsoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKGsoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIG0oKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKGsoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIGsoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgayhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKGsoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIE4uc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGllKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogbSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGcsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IGFlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIGsoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBrKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBsZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgayhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgayhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgbSA9IGF3YWl0IEIocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBrKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGcgPSBhd2FpdCBKKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoZykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgayhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBnKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBrKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIGt0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IGouQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgSXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gai5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gai5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IGouU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBBKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShLKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShLKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogT3QgfSA9IEEoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBPdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBSdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IE90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7SyhyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEl0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBSdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogR24sIGVycl9fOiBxZSB9ID0gQShcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IHFlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBHbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgcWUoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtLKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgSXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IHFlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBiLCBlcnJfXzogSmUgfSA9IEEoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBBKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IGFlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgQihzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGxlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgYihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke20ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBtIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogbSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgQ3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBiKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBtID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICBiKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBxbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChLbihwLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgV24odC5iYXNlVXJsLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHUuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmID0gYXdhaXQgbW4ocywgdSk7XG4gICAgICAgIGIoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgZik7XG4gICAgICAgIGNvbnN0IHkgPSAoKGwgPSBwLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBsW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBtID8gYihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogeSA/IChiKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgWG4oZikpIDogKGIoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBRbihmLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgaCA9IGYuY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7aH1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEoocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBiKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IEUgPSBWZSh3KTtcbiAgICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0UucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBFIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHt5ID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBXZShzLCB7XG4gICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGgsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgSmUoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIEplKHApLCBwO1xuICAgIH1cbiAgfVxuKSwgSm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIE9yLnBhcnNlKHIpO1xufSwgQm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGtyLnBhcnNlKHIpO1xufSwgUW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gQm4odCk7XG4gIGlmIChlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiICYmIGUucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEllKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBqLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IGouRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFhuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IEpuKHQpO1xuICBCZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgTnIociksIEJlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogTywgZXJyX186IGVvIH0gPSBBKFwic3RyaXBlLXByXCIpLCB0byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgcm8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgTyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBjZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHRvKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCBCKGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQga2UoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IERyKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChlbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKE8oXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIG5vID0gYWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoTyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgTyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSksIGlvKGMsIHkuYW1vdW50LCB5LnBlbmRpbmcsIHkuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBPKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCBGcihjKTtcbiAgICBPKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCB1KSwgTyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IG9vKGUsIHUpLCBwID0gbGUobCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIE8oXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBwKTtcbiAgICBjb25zdCBtID0gYXdhaXQgeW4oYSwge1xuICAgICAgZmllbGRzOiBwLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIGcgPSBzbyhtKTtcbiAgICBPKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgTHIoZywgdSk7XG4gICAgY29uc3QgZiA9IGF3YWl0IEIoYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBPKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IEooYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFZlKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIE8oXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBwW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogcFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBwW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogcFtkLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogcFtkLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGEsIHkpIH07XG4gICAgfVxuICB9XG4pLCBvbyA9ICh0LCByKSA9PiB7XG4gIHZhciB1LCBsLCBwLCBtO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgobCA9ICh1ID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiB1LnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgYSA9IChtID0gKHAgPSByLnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHIuc2hpcHBpbmdBZGRyZXNzO1xuICByZXR1cm4gZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiLCBPKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgaW8gPSAodCwgciwgZSwgbikgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgc28gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gUnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogRiwgZXJyX186IFFlIH0gPSBBKFwicG9ja3l0LXBheXBhbFwiKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBjbyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGxvID0gYWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIFMsIFY7XG4gICAgRihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBCKHMpO1xuICAgIEYoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhby5wYXJzZShyKTtcbiAgICBGKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncywgbCA9IGxlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdSA9PSBudWxsID8gdm9pZCAwIDogdS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gU24obCk7XG4gICAgRihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgZyA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbSA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoUyA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MpICE9IG51bGwgJiYgUy51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH07XG4gICAgaWYgKChWID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBWLnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgRihcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIGNvbnN0IEMgPSB0LmJhc2VVcmwsIFcgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBDKS50b1N0cmluZygpLCB0ZSA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZykpLCBaID0gYCR7V30/c3Q9JHthLnRva2VufSZyPSR7dGV9YDtcbiAgICAgIHRocm93IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gWiwgYXdhaXQgX3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgRihcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBjb25zdCBmID0gYXdhaXQgQ2UocywgZyk7XG4gICAgaWYgKEYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgZiksICFmLmNoZWNrb3V0X2F0dGVtcHRfaWQpXG4gICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlc3BvbnNlOlwiLCBmKSwgbmV3IEVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNoZWNrb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgY29uc3QgeSA9IGNvLnBhcnNlKGYucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXTtcbiAgICBGKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IGggPSBhd2FpdCBqbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBzLFxuICAgICAgeS52ZXJpZnlfdG9rZW4sXG4gICAgICB5LnBheXBhbF9pZnJhbWVfdXJsXG4gICAgKTtcbiAgICBGKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIGgpO1xuICAgIGNvbnN0IHcgPSBSdChoLmhyZWYpO1xuICAgIEYoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7d31gKTtcbiAgICBjb25zdCBFID0gYXdhaXQgSihzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdyxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBmLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoRihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBFKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBFLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghRS5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IFFlKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgRSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IEUucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBUdCA9ICh7XG4gIGdhdGV3YXk6IHQsXG4gIGdhdGV3YXlNZXJjaGFudElkOiByLFxuICBtZXJjaGFudE5hbWU6IGUsXG4gIG1lcmNoYW50SWQ6IG4sXG4gIGluaXRpYWxQcmV2aWV3OiBpLFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG59KSA9PiB7XG4gIHZhciBwLCBtO1xuICBjb25zdCBhID0gKChwID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBwLmFtb3VudEF0b20pID8/IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmFtb3VudEF0b20pID8/IDAsIGMgPSBNYXRoLm1heChhIC8gMTAwLCAwKSwgdSA9ICgoKG0gPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uY3VycmVuY3kpID8/IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmN1cnJlbmN5KSA/PyBcIlVTRFwiKS50b1VwcGVyQ2FzZSgpLCBsID0ge1xuICAgIGFwaVZlcnNpb246IDIsXG4gICAgYXBpVmVyc2lvbk1pbm9yOiAwLFxuICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNBUkRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRBdXRoTWV0aG9kczogW1wiUEFOX09OTFlcIiwgXCJDUllQVE9HUkFNXzNEU1wiXSxcbiAgICAgICAgICBhbGxvd2VkQ2FyZE5ldHdvcmtzOiBbXCJBTUVYXCIsIFwiRElTQ09WRVJcIiwgXCJJTlRFUkFDXCIsIFwiSkNCXCIsIFwiTUFTVEVSQ0FSRFwiLCBcIlZJU0FcIl0sXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NSZXF1aXJlZDogITAsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiAhMCxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogITBcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW5pemF0aW9uU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHR5cGU6IFwiUEFZTUVOVF9HQVRFV0FZXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZ2F0ZXdheTogdCxcbiAgICAgICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiByXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBlbWFpbFJlcXVpcmVkOiAhMCxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFRPRE86IGFzYXAgZm9yIHByb2QgLSBhaXJ3YWxsZXggaGFzIG5vIGRvY3MgZm9yIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICAvLyBCQ1IyRE40VFg3STNGUlJKXG4gICAgICBtZXJjaGFudE5hbWU6IGVcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IHMgIT0gbnVsbCAmJiBzLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogYy50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gcyAhPSBudWxsICYmIHMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB7IC4uLmwsIC4uLnMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgfSA6IGw7XG59LCB1byA9ICgpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICBlLnNyYyA9IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBwbyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIHIgPyBodC5wYXJzZShyKSA6IG51bGw7XG59LCBmbyA9ICh0LCByKSA9PiB7XG4gIHZhciBpLCBzLCBhLCBjO1xuICBjb25zdCBlID0geyAuLi50IH0sIG4gPSAocyA9IChpID0gci5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLmxdID0gKChjID0gKGEgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHAgPSBsLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtkLkNPVU5UUlldID0gZVtkLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCBlW2QuQUREUkVTU10gPSBlW2QuQUREUkVTU10gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCBlW2QuQ0lUWV0gPSBlW2QuQ0lUWV0gfHwgbi5sb2NhbGl0eSB8fCBcIlwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCBlW2QuU1RBVEVdID0gZVtkLlNUQVRFXSB8fCBuLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCBlW2QuRklSU1RfTkFNRV0gPSBlW2QuRklSU1RfTkFNRV0gfHwgdSB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5MQVNUX05BTUVdID0gZVtkLkxBU1RfTkFNRV0gfHwgcCB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGU7XG59LCB7IGxvZ19fOiBNLCBlcnJfXzogcmUgfSA9IEEoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmxldCBSZSA9IG51bGw7XG5jb25zdCBNdCA9ICh0KSA9PiB0ID09PSBkdCB8fCB0ID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgRHQgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gTXQodCk7XG4gIHJldHVybiBSZSA9PT0gbnVsbCAmJiAoUmUgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiBlLFxuICAgIG1lcmNoYW50SW5mbzogci5tZXJjaGFudEluZm9cbiAgfSkpLCBSZTtcbn0sIEZ0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBtbyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICB2YXIgYSwgYztcbiAgICBjb25zdCBlID0gY2UodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBGdCk7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBNKFwiR29vZ2xlIFBheSBDUE1cIiwgZSk7XG4gICAgY29uc3QgbiA9IGUubWV0YWRhdGE7XG4gICAgaWYgKCFuLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIHJlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGlmIChNKFwiTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLlwiKSwgYXdhaXQgdW8oKSwgISgoYyA9IChhID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudHMpICE9IG51bGwgJiYgYy5hcGkpKVxuICAgICAgcmV0dXJuIHJlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGlmIChNdCh0LmJhc2VVcmwpID09PSBcIlBST0RVQ1RJT05cIiAmJiAhbi5nb29nbGVfcGF5X21lcmNoYW50X2lkKVxuICAgICAgcmV0dXJuIHJlKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIE0oXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHUgPSBUdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBuLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG4ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogbi5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB2b2lkIDBcbiAgICAgIH0pLCB7IHJlc3VsdDogbCB9ID0gYXdhaXQgRHQodC5iYXNlVXJsLCB1KS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIHVcbiAgICAgICk7XG4gICAgICBpZiAoIWwpXG4gICAgICAgIHJldHVybiBNKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgICAgfSB9O1xuICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgIHJldHVybiByZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIE4uYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaWUodC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHUgPz8ge31cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgIHJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGwpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgeW8gPSBhZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgbSwgZywgZiwgeSwgaCwgdywgRTtcbiAgICBNKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBjZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZ0KSwgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEIoYSksIHUgPSBzLm1ldGFkYXRhO1xuICAgIGlmICghdS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgbCA9IFR0KHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogdS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogdS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogdS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogYXdhaXQga2UoXG4gICAgICAgIGEsXG4gICAgICAgIGMudG9rZW4sXG4gICAgICAgIGMubW9kZSA9PT0gXCJzZXR1cFwiLFxuICAgICAgICB2b2lkIDBcbiAgICAgICksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KSwgcCA9IER0KHQuYmFzZVVybCwgbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFMgPSBhd2FpdCBwLmxvYWRQYXltZW50RGF0YShsKTtcbiAgICAgIE0oXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBTKTtcbiAgICAgIGNvbnN0IFYgPSBmbyhlLCBTKSwgQyA9IGxlKFxuICAgICAgICBWLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgaSA9PSBudWxsID8gdm9pZCAwIDogaS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICksIFcgPSAoZyA9IChtID0gUy5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGcudG9rZW47XG4gICAgICBpZiAoIVcpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgdGUgPSBhd2FpdCBDZShhLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IENbZC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBDW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IENbZC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHBvc3RhbF9jb2RlOiBDW2QuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnlfY29kZTogQ1tkLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pLCBaID0gcG8odGUpO1xuICAgICAgTShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIFopO1xuICAgICAgY29uc3QgcSA9IGF3YWl0IEooYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IFogPT0gbnVsbCA/IHZvaWQgMCA6IFouY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogV1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBNKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgcSk7XG4gICAgICBsZXQgRCA9ICh5ID0gKGYgPSBxLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB5LmlkO1xuICAgICAgY29uc3QgWCA9IChoID0gcS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBoLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFggJiYgWC5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgTShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIFgpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogeCB9ID0gYXdhaXQgSWUoe1xuICAgICAgICAgIHVybDogWC5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogdC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoTShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7eH1dYCksIHggPT09IGouQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoeCA9PT0gai5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFggJiYgIUQpIHtcbiAgICAgICAgY29uc3QgeCA9IGF3YWl0IEooYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogWC50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogWC5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHgpLCBEID0gKEUgPSAodyA9IHgucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogd1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgaWYgKGMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeyBwYXltZW50X21ldGhvZF9pZDogRCB9IH07XG4gICAgICB7XG4gICAgICAgIE0oXCJTdGFydGluZyBvbmUtdGltZSBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgICAgIGNvbnN0IHggPSB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICEwLFxuICAgICAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IEQsXG4gICAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICAgIGN1c3RvbWVyX2VtYWlsOiBDW2QuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBDW2QuWklQX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IENbZC5DT1VOVFJZXSxcbiAgICAgICAgICBwcm9tb3Rpb25fY29kZTogQ1tkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBDW2QuRklSU1RfTkFNRV0sXG4gICAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBDW2QuTEFTVF9OQU1FXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgUGUoYSwgeCkgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChTKSB7XG4gICAgICB0aHJvdyByZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBTKSwgbmV3IEVycm9yKChTID09IG51bGwgPyB2b2lkIDAgOiBTLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIGhvID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLCBlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBfbyA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSByLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSByLmJpbGxpbmdDb250YWN0LCBpID0gci5zaGlwcGluZ0NvbnRhY3QsIHMgPSB7IC4uLnQgfTtcbiAgcmV0dXJuIChlIHx8IG4gfHwgaSkgJiYgKHNbZC5FTUFJTF0gPSBzW2QuRU1BSUxdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmVtYWlsQWRkcmVzcykgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZW1haWxBZGRyZXNzKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIHNbZC5DT1VOVFJZXSA9IHNbZC5DT1VOVFJZXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jb3VudHJ5Q29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uY291bnRyeUNvZGUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIHNbZC5aSVBfQ09ERV0gPSBzW2QuWklQX0NPREVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnBvc3RhbENvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLnBvc3RhbENvZGUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgc1tkLkZJUlNUX05BTUVdID0gc1tkLkZJUlNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdpdmVuTmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZ2l2ZW5OYW1lKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5naXZlbk5hbWUpIHx8IFwiX09QX1VOS05PV05cIiwgc1tkLkxBU1RfTkFNRV0gPSBzW2QuTEFTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5mYW1pbHlOYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5mYW1pbHlOYW1lKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5mYW1pbHlOYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIpLCBzO1xufSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pLCB3byA9ICh0KSA9PiBnby5zYWZlUGFyc2UodCkuZGF0YSwgYm8gPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgXCJtZXNzYWdlXCIsXG4gICAgKGUpID0+IHtcbiAgICAgIHZhciBpO1xuICAgICAgY29uc3QgbiA9IHdvKGUpO1xuICAgICAgKChpID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaS5tZXNzYWdlVHlwZSkgPT09IFwid2luZG93Y2xvc2luZ1wiICYmICh0KCksIHIuYWJvcnQoKSk7XG4gICAgfSxcbiAgICB7XG4gICAgICBzaWduYWw6IHIuc2lnbmFsXG4gICAgfVxuICApLCB7XG4gICAgY2xlYW51cENhbmNlbExpc3RlbmVyOiAoKSA9PiByLmFib3J0KClcbiAgfTtcbn0sIHsgbG9nX186IGhlIH0gPSBBKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIHZvKHQsIHIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IENlKHIuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiByLm5vbkNkZUZvcm1JbnB1dHNbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogci5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLCBpID0gbi5wYXltZW50X3Nlc3Npb24sIHMgPSBuLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGlmICghcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihpKSwgcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IHIuc2Vzc2lvbi5hYm9ydCgpLCBlO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFbyh0LCByKSB7XG4gIHZhciBpLCBzO1xuICBpZiAoIXQucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgaGUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCB0KTtcbiAgY29uc3QgeyBzdGF0dXM6IGUgfSA9IGF3YWl0IEllKHtcbiAgICB1cmw6IHQucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHIuYmFzZVVybFxuICB9KTtcbiAgaWYgKGhlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtlfV1gKSwgZSA9PT0gai5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChlID09PSBqLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCBKKHIuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogci5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IHQudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdC5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgKHMgPSAoaSA9IG4ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQ7XG59XG5hc3luYyBmdW5jdGlvbiBTbyh0LCByLCBlKSB7XG4gIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShlLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGUucHJlZmlsbC50b2tlbixcbiAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICBwcm92aWRlcl90eXBlOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH0sXG4gICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdCxcbiAgICBsaW5lX2l0ZW1zOiBlLnByZWZpbGwubGluZV9pdGVtcyxcbiAgICB0b3RhbF9hbW91bnRfYXRvbTogZS5wcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBjdXN0b21lcl9lbWFpbDogcltkLkVNQUlMXSxcbiAgICBjdXN0b21lcl96aXBfY29kZTogcltkLlpJUF9DT0RFXSxcbiAgICBjdXN0b21lcl9jb3VudHJ5OiByW2QuQ09VTlRSWV0sXG4gICAgcHJvbW90aW9uX2NvZGU6IHJbZC5QUk9NT1RJT05fQ09ERV1cbiAgfSkgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIENvKHQsIHIsIGUpIHtcbiAgdmFyIG4sIGksIHM7XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgYyA9IF9vKHIubm9uQ2RlRm9ybUlucHV0cywgYSksIHUgPSBsZShcbiAgICAgIGMsXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGF3YWl0IHZuKHIuY29ubmVjdGlvbiwge1xuICAgICAgZW1haWw6IHVbZC5FTUFJTF0sXG4gICAgICBmaXJzdF9uYW1lOiB1W2QuRklSU1RfTkFNRV0sXG4gICAgICBsYXN0X25hbWU6IHVbZC5MQVNUX05BTUVdLFxuICAgICAgemlwX2NvZGU6IHVbZC5aSVBfQ09ERV0sXG4gICAgICBjb3VudHJ5OiB1W2QuQ09VTlRSWV0sXG4gICAgICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiAhMFxuICAgIH0pO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBKKHIuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGhlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgbGV0IHAgPSAoaSA9IChuID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZDtcbiAgICBjb25zdCBtID0gKHMgPSBsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmluZChcbiAgICAgIChmKSA9PiBmLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobSAhPSBudWxsICYmIG0ucmVkaXJlY3RfdXJsICYmIG0uY29uc2VudF9pZCAmJiBtLnRoZWlyX3BtX2lkICYmIChwID0gYXdhaXQgRW8obSwgcikpLCAhcClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGcgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZyksIHIuaXNTZXR1cE1vZGUgPyB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBwIH0gfSA6IGF3YWl0IFNvKHAsIHUsIHIpO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyByLnNlc3Npb24uY29tcGxldGVQYXltZW50KGMpLCBhO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBZLCBlcnJfXzogRmUgfSA9IEEoXCJhd3gtYXBwbGUtcGF5XCIpLCBMdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwga28gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgY29uc3QgZSA9IGNlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTHQpO1xuICAgIGlmICghZSlcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgWShcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaG8oKSwgWShcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICByZXR1cm4gRmUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIHApLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFkoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKFkoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFkoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgQihpKSwgYSA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBjID0gYXdhaXQga2UoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgdSA9IGUubWV0YWRhdGE7XG4gICAgaWYgKFkoXCJwcm9jZXNzb3JBY2NvdW50XCIsIHUpLCAhdS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jIChwKSA9PiB7XG4gICAgICAgIHZhciBtO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IE4uYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBpZSh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICBpc1NldHVwTW9kZTogYSxcbiAgICAgICAgICAgICAgcHJlZmlsbDogcyxcbiAgICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6ICgobSA9IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYW1vdW50KSA/PyBjLFxuICAgICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwID09IG51bGwgPyB2b2lkIDAgOiBwLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgIEZlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZyksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZyA9PSBudWxsID8gdm9pZCAwIDogZy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBQbyA9IGFlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBTLCBWO1xuICAgIGNvbnN0IHMgPSBjZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEx0KSwgeyBpbml0aWFsUHJldmlldzogYSwgaXNTZXR1cE1vZGU6IGMsIHByZWZpbGw6IHUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGwgfSA9IG4sIHAgPSAoKChTID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBTLmN1cnJlbmN5KSA/PyBhLmN1cnJlbmN5ID8/IFwiVVNEXCIpLnRvVXBwZXJDYXNlKCksIGcgPSAoKCgoViA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogVi5hbW91bnRBdG9tKSA/PyBhLmFtb3VudEF0b20gPz8gMCkgLyAxMDApLnRvRml4ZWQoMiksIGYgPSB7XG4gICAgICBsYWJlbDogKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubGFiZWwpID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IGwgIT0gbnVsbCAmJiBsLnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudDogZ1xuICAgIH0sIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBwLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWw6IGYsXG4gICAgICAuLi4obCA9PSBudWxsID8gdm9pZCAwIDogbC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH07XG4gICAgWShcIlBheW1lbnQgUmVxdWVzdFwiLCB5KTtcbiAgICBjb25zdCBoID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KTtcbiAgICBZKFwiQXBwbGVQYXlTZXNzaW9uXCIsIGgpO1xuICAgIGNvbnN0IHcgPSB7XG4gICAgICBzZXNzaW9uOiBoLFxuICAgICAgY29ubmVjdGlvbjogdC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHMubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGMsXG4gICAgICBiYXNlVXJsOiB0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBpLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgbGV0IEU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChDLCBXKSA9PiB7XG4gICAgICBjb25zdCB0ZSA9ICgpID0+IHtcbiAgICAgICAgWShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIFcobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCB7IGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogWiB9ID0gYm8odGUpO1xuICAgICAgaC5vbmNhbmNlbCA9IHRlLCBoLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChxKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRSA9IGF3YWl0IHZvKHEsIHcpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgVyhEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5mIH1cbiAgICAgICAgfTtcbiAgICAgICAgaC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24ocSk7XG4gICAgICB9LCBoLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAocSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEQgPSBhd2FpdCBDbyhxLCB3LCBFKTtcbiAgICAgICAgICBaKCksIEMoRCk7XG4gICAgICAgIH0gY2F0Y2ggKEQpIHtcbiAgICAgICAgICBXKEQpO1xuICAgICAgICB9XG4gICAgICB9LCBoLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKEMpID0+IHtcbiAgICAgIHRocm93IEZlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQyksIEM7XG4gICAgfSk7XG4gIH1cbiksIExlID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IGUgPT09IHZvaWQgMCA/ICEwIDogaS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgYSA9IGkucHJvdmlkZXIgPT09IHI7XG4gICAgcmV0dXJuIHMgJiYgYTtcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIG5bMF07XG59LCBOID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFpuXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IHJvLFxuICAgIHJ1bjogbm9cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IEluLFxuICAgIHJ1bjogT25cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogbG9cbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IG1vLFxuICAgIHJ1bjogeW9cbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBrbyxcbiAgICBydW46IFBvXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xudmFyIE5lID0gZnVuY3Rpb24odCwgcikge1xuICByZXR1cm4gTmUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZS5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciBpIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBpKSAmJiAoZVtpXSA9IG5baV0pO1xuICB9LCBOZSh0LCByKTtcbn07XG5mdW5jdGlvbiBRKHQsIHIpIHtcbiAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgTmUodCwgcik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChlLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIEFvKHQsIHIsIGUsIG4pIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiBlID8gcyA6IG5ldyBlKGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsKG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGEobSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbChuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgYShtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChwKSB7XG4gICAgICBwLmRvbmUgPyBzKHAudmFsdWUpIDogaShwLnZhbHVlKS50aGVuKGMsIHUpO1xuICAgIH1cbiAgICBsKChuID0gbi5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gTnQodCwgcikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGMobCkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gdShbbCwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gdShsKSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgbFswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBpICYmIChzID0gbFswXSAmIDIgPyBpLnJldHVybiA6IGxbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgbFsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAobCA9IFtsWzBdICYgMiwgcy52YWx1ZV0pLCBsWzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSBsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogbFsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgaSA9IGxbMV0sIGwgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IGUudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKGxbMF0gPT09IDYgfHwgbFswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsWzBdID09PSAzICYmICghcyB8fCBsWzFdID4gc1swXSAmJiBsWzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBsWzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsWzBdID09PSA2ICYmIGUubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1sxXSwgcyA9IGw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgZS5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzJdLCBlLm9wcy5wdXNoKGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGwgPSByLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgbCA9IFs2LCBwXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKGxbMF0gJiA1KSB0aHJvdyBsWzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiBsWzBdID8gbFsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gc2UodCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHIgJiYgdFtyXSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIG4gPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbbisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IociA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHdlKHQsIHIpIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciBuID0gZS5jYWxsKHQpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChyID09PSB2b2lkIDAgfHwgci0tID4gMCkgJiYgIShpID0gbi5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gYmUodCwgciwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGkgPSByLmxlbmd0aCwgczsgbiA8IGk7IG4rKylcbiAgICAocyB8fCAhKG4gaW4gcikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwgMCwgbikpLCBzW25dID0gcltuXSk7XG4gIHJldHVybiB0LmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKTtcbn1cbmZ1bmN0aW9uIG9lKHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvZSA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBvZSh0KTtcbn1cbmZ1bmN0aW9uIElvKHQsIHIsIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSBlLmFwcGx5KHQsIHIgfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYShmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihmLCBtKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoZiwgeSkge1xuICAgIG5bZl0gJiYgKGlbZl0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odywgRSkge1xuICAgICAgICBzLnB1c2goW2YsIGgsIHcsIEVdKSA+IDEgfHwgdShmLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIHkgJiYgKGlbZl0gPSB5KGlbZl0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gdShmLCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGwobltmXSh5KSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgZyhzWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbChmKSB7XG4gICAgZi52YWx1ZSBpbnN0YW5jZW9mIG9lID8gUHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihwLCBtKSA6IGcoc1swXVsyXSwgZik7XG4gIH1cbiAgZnVuY3Rpb24gcChmKSB7XG4gICAgdShcIm5leHRcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gbShmKSB7XG4gICAgdShcInRocm93XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIGcoZiwgeSkge1xuICAgIGYoeSksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgdShzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gT28odCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gciA/IHIuY2FsbCh0KSA6ICh0ID0gdHlwZW9mIHNlID09IFwiZnVuY3Rpb25cIiA/IHNlKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIG4ocykge1xuICAgIGVbc10gPSB0W3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCB1KSB7XG4gICAgICAgIGEgPSB0W3NdKGEpLCBpKGMsIHUsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgdSkge1xuICAgIFByb21pc2UucmVzb2x2ZSh1KS50aGVuKGZ1bmN0aW9uKGwpIHtcbiAgICAgIHMoeyB2YWx1ZTogbCwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gUCh0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBPZSh0KSB7XG4gIHZhciByID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQocik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIFRlID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdmUodCwgcikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKHIpO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIHBlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gciwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIGUsIG4sIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gc2UoYSksIHUgPSBjLm5leHQoKTsgIXUuZG9uZTsgdSA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gdS52YWx1ZTtcbiAgICAgICAgICAgICAgbC5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgciA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdSAmJiAhdS5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIHAgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChQKHApKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHAoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIHMgPSBoIGluc3RhbmNlb2YgVGUgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIG0gPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgZyA9IHNlKG0pLCBmID0gZy5uZXh0KCk7ICFmLmRvbmU7IGYgPSBnLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHkgPSBmLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWGUoeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCBoIGluc3RhbmNlb2YgVGUgPyBzID0gYmUoYmUoW10sIHdlKHMpKSwgd2UoaC5lcnJvcnMpKSA6IHMucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmICYmICFmLmRvbmUgJiYgKGkgPSBnLnJldHVybikgJiYgaS5jYWxsKGcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgVGUocyk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKHIgJiYgciAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgWGUocik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKHIuY2xvc2VkIHx8IHIuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICByLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChyKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gciB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMocik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gociksIGUpIDogZSA/IFtlLCByXSA6IHI7XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gciA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIHZlKGUsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgdmUoZSwgciksIHIgaW5zdGFuY2VvZiB0ICYmIHIuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHQoKTtcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMCwgcjtcbiAgfSgpLCB0O1xufSgpLCBqdCA9IHBlLkVNUFRZO1xuZnVuY3Rpb24gVXQodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIHBlIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIFAodC5yZW1vdmUpICYmIFAodC5hZGQpICYmIFAodC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBYZSh0KSB7XG4gIFAodCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgeHQgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgJHQgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBiZShbdCwgcl0sIHdlKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIFZ0KHQpIHtcbiAgJHQuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIGV0KCkge1xufVxuZnVuY3Rpb24gX2UodCkge1xuICB0KCk7XG59XG52YXIgR2UgPSBmdW5jdGlvbih0KSB7XG4gIFEociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSkge1xuICAgIHZhciBuID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIGUgPyAobi5kZXN0aW5hdGlvbiA9IGUsIFV0KGUpICYmIGUuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBEbywgbjtcbiAgfVxuICByZXR1cm4gci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIG5ldyBqZShlLCBuLCBpKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IoZSkpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCByLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgcjtcbn0ocGUpLCBSbyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gTWUodCwgcikge1xuICByZXR1cm4gUm8uY2FsbCh0LCByKTtcbn1cbnZhciBUbyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBtZShuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGUuZXJyb3Iocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIG1lKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIG1lKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG1lKGUpO1xuICAgICAgfVxuICB9LCB0O1xufSgpLCBqZSA9IGZ1bmN0aW9uKHQpIHtcbiAgUShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpKSB7XG4gICAgdmFyIHMgPSB0LmNhbGwodGhpcykgfHwgdGhpcywgYTtcbiAgICBpZiAoUChlKSB8fCAhZSlcbiAgICAgIGEgPSB7XG4gICAgICAgIG5leHQ6IGUgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBpID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgcyAmJiB4dC51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUoZSksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGEgPSB7XG4gICAgICAgIG5leHQ6IGUubmV4dCAmJiBNZShlLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogZS5lcnJvciAmJiBNZShlLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IGUuY29tcGxldGUgJiYgTWUoZS5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogYSA9IGU7XG4gICAgfVxuICAgIHJldHVybiBzLmRlc3RpbmF0aW9uID0gbmV3IFRvKGEpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShHZSk7XG5mdW5jdGlvbiBtZSh0KSB7XG4gIFZ0KHQpO1xufVxuZnVuY3Rpb24gTW8odCkge1xuICB0aHJvdyB0O1xufVxudmFyIERvID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBldCxcbiAgZXJyb3I6IE1vLFxuICBjb21wbGV0ZTogZXRcbn0sIHplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24gRm8odCkge1xuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIExvKHQpIHtcbiAgcmV0dXJuIHQubGVuZ3RoID09PSAwID8gRm8gOiB0Lmxlbmd0aCA9PT0gMSA/IHRbMF0gOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpKG4pO1xuICAgIH0sIGUpO1xuICB9O1xufVxudmFyIEggPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgciAmJiAodGhpcy5fc3Vic2NyaWJlID0gcik7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSBuZXcgdCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGUub3BlcmF0b3IgPSByLCBlO1xuICB9LCB0LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gam8ocikgPyByIDogbmV3IGplKHIsIGUsIG4pO1xuICAgIHJldHVybiBfZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIHUgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgdSkgOiB1ID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSB0dChlKSwgbmV3IGUoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgamUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgICAgcyh1KSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbemVdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gTG8ocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSB0dChyKSwgbmV3IHIoZnVuY3Rpb24obiwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gdHQodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyB4dC5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIE5vKHQpIHtcbiAgcmV0dXJuIHQgJiYgUCh0Lm5leHQpICYmIFAodC5lcnJvcikgJiYgUCh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGpvKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIEdlIHx8IE5vKHQpICYmIFV0KHQpO1xufVxuZnVuY3Rpb24gVW8odCkge1xuICByZXR1cm4gUCh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24geG8odCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChVbyhyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gJG8odCwgciwgZSwgbiwgaSkge1xuICByZXR1cm4gbmV3IFZvKHQsIHIsIGUsIG4sIGkpO1xufVxudmFyIFZvID0gZnVuY3Rpb24odCkge1xuICBRKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGksIHMsIGEsIGMpIHtcbiAgICB2YXIgdSA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiB1Lm9uRmluYWxpemUgPSBhLCB1LnNob3VsZFVuc3Vic2NyaWJlID0gYywgdS5fbmV4dCA9IG4gPyBmdW5jdGlvbihsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKGwpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlLmVycm9yKHApO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgdS5fZXJyb3IgPSBzID8gZnVuY3Rpb24obCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyhsKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZS5lcnJvcihwKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCB1Ll9jb21wbGV0ZSA9IGkgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkoKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgZS5lcnJvcihsKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCB1O1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgcjtcbn0oR2UpLCBxbyA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgcXQgPSBmdW5jdGlvbih0KSB7XG4gIFEociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBydCh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IHFvKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHM7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IHNlKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBhLm5leHQoKTsgIWMuZG9uZTsgYyA9IGEubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgdSA9IGMudmFsdWU7XG4gICAgICAgICAgICB1Lm5leHQoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgaSA9IHsgZXJyb3I6IGwgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChzID0gYS5yZXR1cm4pICYmIHMuY2FsbChhKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGkgPSBuLm9ic2VydmVyczsgaS5sZW5ndGg7IClcbiAgICAgICAgICBpLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUuX3Rocm93SWZDbG9zZWQoKSwgIWUuaXNTdG9wcGVkKSB7XG4gICAgICAgIGUuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKChlID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCByLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLCB0aGlzLl9pbm5lclN1YnNjcmliZShlKTtcbiAgfSwgci5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IHRoaXMsIHMgPSBpLmhhc0Vycm9yLCBhID0gaS5pc1N0b3BwZWQsIGMgPSBpLm9ic2VydmVycztcbiAgICByZXR1cm4gcyB8fCBhID8ganQgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKGUpLCBuZXcgcGUoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCB2ZShjLCBlKTtcbiAgICB9KSk7XG4gIH0sIHIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IG4uaGFzRXJyb3IsIHMgPSBuLnRocm93bkVycm9yLCBhID0gbi5pc1N0b3BwZWQ7XG4gICAgaSA/IGUuZXJyb3IocykgOiBhICYmIGUuY29tcGxldGUoKTtcbiAgfSwgci5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgSCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiBuZXcgcnQoZSwgbik7XG4gIH0sIHI7XG59KEgpLCBydCA9IGZ1bmN0aW9uKHQpIHtcbiAgUShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IGUsIGkuc291cmNlID0gbiwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbjtcbiAgICAobiA9IChlID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICByZXR1cm4gKGkgPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShlKSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IGp0O1xuICB9LCByO1xufShxdCksIEdvID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCB6byA9IGZ1bmN0aW9uKHQpIHtcbiAgUShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcjtcbn0ocGUpLCBudCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgYmUoW3QsIHJdLCB3ZShlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFlvID0gZnVuY3Rpb24odCkge1xuICBRKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLnNjaGVkdWxlciA9IGUsIGkud29yayA9IG4sIGkucGVuZGluZyA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoaSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gaSA9PT0gdm9pZCAwICYmIChpID0gMCksIG50LnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgaSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgaSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGkgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBudC5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBpID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiBpO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgaSA9ICEwLCBzID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgaSA9IGUuc2NoZWR1bGVyLCBzID0gaS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIHZlKHMsIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGksIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCByO1xufSh6byksIG90ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQociwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gciwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgcikuc2NoZWR1bGUobiwgZSk7XG4gIH0sIHQubm93ID0gR28ubm93LCB0O1xufSgpLCBLbyA9IGZ1bmN0aW9uKHQpIHtcbiAgUShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gb3Qubm93KTtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmFjdGlvbnMgPSBbXSwgaS5fYWN0aXZlID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGk7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChpID0gZS5leGVjdXRlKGUuc3RhdGUsIGUuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAoZSA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBpKSB7XG4gICAgICBmb3IgKDsgZSA9IG4uc2hpZnQoKTsgKVxuICAgICAgICBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBpO1xuICAgIH1cbiAgfSwgcjtcbn0ob3QpLCBIbyA9IG5ldyBLbyhZbyksIFdvID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gWm8odCkge1xuICByZXR1cm4gUCh0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRoZW4pO1xufVxuZnVuY3Rpb24gSm8odCkge1xuICByZXR1cm4gUCh0W3plXSk7XG59XG5mdW5jdGlvbiBCbyh0KSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBQKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIFFvKHQpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAodCAhPT0gbnVsbCAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyB0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBYbygpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBlaSA9IFhvKCk7XG5mdW5jdGlvbiB0aSh0KSB7XG4gIHJldHVybiBQKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbZWldKTtcbn1cbmZ1bmN0aW9uIHJpKHQpIHtcbiAgcmV0dXJuIElvKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG4sIGksIHM7XG4gICAgcmV0dXJuIE50KHRoaXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHN3aXRjaCAoYS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZSA9IHQuZ2V0UmVhZGVyKCksIGEubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgYS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIG9lKGUucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IGEuc2VudCgpLCBpID0gbi52YWx1ZSwgcyA9IG4uZG9uZSwgcyA/IFs0LCBvZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBvZShpKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBhLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gZS5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBuaSh0KSB7XG4gIHJldHVybiBQKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIG9pKHQpIHtcbiAgaWYgKHQgaW5zdGFuY2VvZiBIKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKEpvKHQpKVxuICAgICAgcmV0dXJuIGlpKHQpO1xuICAgIGlmIChXbyh0KSlcbiAgICAgIHJldHVybiBzaSh0KTtcbiAgICBpZiAoWm8odCkpXG4gICAgICByZXR1cm4gYWkodCk7XG4gICAgaWYgKEJvKHQpKVxuICAgICAgcmV0dXJuIEd0KHQpO1xuICAgIGlmICh0aSh0KSlcbiAgICAgIHJldHVybiBjaSh0KTtcbiAgICBpZiAobmkodCkpXG4gICAgICByZXR1cm4gbGkodCk7XG4gIH1cbiAgdGhyb3cgUW8odCk7XG59XG5mdW5jdGlvbiBpaSh0KSB7XG4gIHJldHVybiBuZXcgSChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0W3plXSgpO1xuICAgIGlmIChQKGUuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiBlLnN1YnNjcmliZShyKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gc2kodCkge1xuICByZXR1cm4gbmV3IEgoZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdC5sZW5ndGggJiYgIXIuY2xvc2VkOyBlKyspXG4gICAgICByLm5leHQodFtlXSk7XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGFpKHQpIHtcbiAgcmV0dXJuIG5ldyBIKGZ1bmN0aW9uKHIpIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgci5jbG9zZWQgfHwgKHIubmV4dChlKSwgci5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsIFZ0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaSh0KSB7XG4gIHJldHVybiBuZXcgSChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGkgPSBzZSh0KSwgcyA9IGkubmV4dCgpOyAhcy5kb25lOyBzID0gaS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGEgPSBzLnZhbHVlO1xuICAgICAgICBpZiAoci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgZSA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyAmJiAhcy5kb25lICYmIChuID0gaS5yZXR1cm4pICYmIG4uY2FsbChpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR3QodCkge1xuICByZXR1cm4gbmV3IEgoZnVuY3Rpb24ocikge1xuICAgIHVpKHQsIHIpLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxpKHQpIHtcbiAgcmV0dXJuIEd0KHJpKHQpKTtcbn1cbmZ1bmN0aW9uIHVpKHQsIHIpIHtcbiAgdmFyIGUsIG4sIGksIHM7XG4gIHJldHVybiBBbyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGEsIGM7XG4gICAgcmV0dXJuIE50KHRoaXMsIGZ1bmN0aW9uKHUpIHtcbiAgICAgIHN3aXRjaCAodS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgdS50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIGUgPSBPbyh0KSwgdS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIGUubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gdS5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChhID0gbi52YWx1ZSwgci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgdS5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IHUuc2VudCgpLCBpID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIHUudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAocyA9IGUucmV0dXJuKSA/IFs0LCBzLmNhbGwoZSldIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdS5zZW50KCksIHUubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHIuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRpKHQsIHIsIGUsIG4sIGkpIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIGkgPT09IHZvaWQgMCAmJiAoaSA9ICExKTtcbiAgdmFyIHMgPSByLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIGUoKSwgaSA/IHQuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKHQuYWRkKHMpLCAhaSlcbiAgICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIHBpKHQsIHIpIHtcbiAgdmFyIGUgPSBQKHQpID8gdCA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0O1xuICB9LCBuID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBpLmVycm9yKGUoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgSChuKTtcbn1cbnZhciBmaSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIG1pKHQsIHIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IGUocykgOiBuKG5ldyBmaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB5aSh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odCk7XG59XG52YXIgaGkgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gbnVsbCksIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gX2kodCwgcikge1xuICB2YXIgZSA9IHlpKHQpID8geyBmaXJzdDogdCB9IDogdHlwZW9mIHQgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogdCB9IDogdCwgbiA9IGUuZmlyc3QsIGkgPSBlLmVhY2gsIHMgPSBlLndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBnaSA6IHMsIGMgPSBlLnNjaGVkdWxlciwgdSA9IGMgPT09IHZvaWQgMCA/IEhvIDogYywgbCA9IGUubWV0YSwgcCA9IGwgPT09IHZvaWQgMCA/IG51bGwgOiBsO1xuICBpZiAobiA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiB4byhmdW5jdGlvbihtLCBnKSB7XG4gICAgdmFyIGYsIHksIGggPSBudWxsLCB3ID0gMCwgRSA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgIHkgPSBkaShnLCB1LCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmLnVuc3Vic2NyaWJlKCksIG9pKGEoe1xuICAgICAgICAgICAgbWV0YTogcCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IHdcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKGcpO1xuICAgICAgICB9IGNhdGNoIChWKSB7XG4gICAgICAgICAgZy5lcnJvcihWKTtcbiAgICAgICAgfVxuICAgICAgfSwgUyk7XG4gICAgfTtcbiAgICBmID0gbS5zdWJzY3JpYmUoJG8oZywgZnVuY3Rpb24oUykge1xuICAgICAgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgdysrLCBnLm5leHQoaCA9IFMpLCBpID4gMCAmJiBFKGkpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHkgIT0gbnVsbCAmJiB5LmNsb3NlZCB8fCB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICF3ICYmIEUobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIHUubm93KCkgOiBpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnaSh0KSB7XG4gIHRocm93IG5ldyBoaSh0KTtcbn1cbmNsYXNzIGdlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogciB9LCB0aGlzLl9zdWJqZWN0Lm5leHQociksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHIsIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiByLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihyKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHIpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiByLCB0aGlzLnN1YnNjcmliZSA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmICRlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IHIudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gcGkoKCkgPT4gbmV3IEVycm9yKHIudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1pKHRoaXMuX3N1YmplY3QucGlwZShfaShlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBxdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB3aSwgZXJyX186IGJpIH0gPSBBKFwiaW5pdC1mbG93c1wiKSwgeWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbmV3IGdlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCByKG4pO1xuICAgICAgICB3aShg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgZS5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIGJpKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEsoaSksIFwiRGV0YWlsczpcIiwgaSksIGUudGhyb3coaSwgSyhpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgdmkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgRWkgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogeWUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogeWUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB5ZShcIkFpcndhbGxleCBHUGF5XCIsIE4uYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHllKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIE4uYWlyd2FsbGV4QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBTaSB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCBMID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgaXQgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogTCxcbiAgb25CbHVyOiBMLFxuICBvbkNoYW5nZTogTCxcbiAgb25Mb2FkOiBMLFxuICBvbkxvYWRFcnJvcjogTCxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IEwsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBMLFxuICBvbkNoZWNrb3V0U3VjY2VzczogTCxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBMLFxuICBvbkNoZWNrb3V0RXJyb3I6IEwsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBMXG59KSwgJCA9IGNsYXNzICQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSAkLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBpID0gWHQoZSwgbiA/PyAkLk5PT1AsIFNpKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gaTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9ICQuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbiQuTk9PUCA9ICgpID0+IHtcbn0sICQuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGl0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIHJbZV0gPSAkLk5PT1A7XG4gIH0pLCByO1xufSwgJC5mcm9tT2JqZWN0ID0gKHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyAkKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhpdC5wYXJzZShyKSksIGU7XG59O1xubGV0IFVlID0gJDtcbmNsYXNzIENpIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoc3Qocy5vcmlnaW4pICE9PSBzdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgYSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gVXIoSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gVW5rbm93biBldmVudC4gSWdub3Jpbmc6XCIsIG0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChhKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IHUsIHBheWxvYWQ6IGwgfSA9IGEsIHAgPSBsLnR5cGU7XG4gICAgICBzd2l0Y2ggKHApIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChsLmhlaWdodCA/IGAke2wuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKHUsIGwuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKHUsIGwuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZSh1LCBsLmVsZW1lbnRUeXBlLCBsLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1t1XSA9IHMuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IobC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKGwuZWxlbWVudFR5cGUsIGwuZXJyb3JzLCB1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIHApO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChzKSA9PiBzLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIXMuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBzLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBzKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKHMubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIHMpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKHMubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSByLCB0aGlzLmJhc2VVcmwgPSBlLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaTtcbiAgfVxufVxuY29uc3Qgc3QgPSAodCkgPT4gbmV3IFVSTCh0KS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBraSh0LCByKSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogclxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgeHIobik7XG4gIGlmICghJHIobiwgaSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIFBpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihyLCBlKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQociwgZSk7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCByID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IEFpID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gdDtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChpKSA9PiB7XG4gICAgaWYgKGkuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBzID0gaS5sb2FkZWRWYWx1ZSwgYSA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgdSA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jIChsKSA9PiB7XG4gICAgICAgICAgICBhICYmIGF0KFwiYXBwbGVfcGF5XCIsIHMsIHIsIGUsIGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICAgICAgYyAmJiBhdChcImdvb2dsZV9wYXlcIiwgcywgciwgZSwgbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZS5nZXQub25QYXltZW50UmVxdWVzdExvYWQodSk7XG4gICAgfVxuICB9KTtcbn0sIGF0ID0gKHQsIHIsIGUsIG4sIGkpID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHQpLFxuICBub25DZGVGb3JtSW5wdXRzOiBpZShlLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IHQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiByXG59KSwgY3QgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBHLCBlcnJfXzogZWUgfSA9IEEoXCJvcC1mb3JtXCIpLCB6ID0gY2xhc3MgeiB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBnZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgZ2UoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGdlKCksIHRoaXMuaW5pdEZsb3dzID0gRWkoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgRyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBHKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgRyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgRyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGN0XG4gICAgICAgIH0pO1xuICAgICAgICBHKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBHKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBpID0gei5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGkpLCBBaSh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgRyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdmkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIEcoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IEsoZSk7XG4gICAgICAgIGVlKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBuKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihuKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIG4gJiYgKG4ubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgbiA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgaSA9IGVyLnBhcnNlKGUpLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgYSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhuKTtcbiAgICAgIHMubmFtZSA9IGAke2l9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gYS50b1N0cmluZygpLCBzLnNyYyA9IGMuaHJlZiwgcy5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGksIHMpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogbixcbiAgICAgICAgbW91bnQ6IChzKSA9PiB7XG4gICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgcmV0dXJuIChhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwZW5kQ2hpbGQobik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogaS50eXBlLCBub2RlOiBpLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW25lLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtuZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW25lLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbbmUuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGksIGk7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIGpyKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIGtpKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gZWUoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIG4pKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBlZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE4uY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGllKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIGVlKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW24sIGldKSA9PiAoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICAuLi5pLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIGVlKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlKSB7XG4gICAgICAgIGNhc2UgXCJwb2NreXQtcGF5cGFsXCI6XG4gICAgICAgICAgcmV0dXJuIE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBpLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShpLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaWUoaS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogbiB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocykgPT4ge1xuICAgICAgICAgICAgcy5pc1N1Y2Nlc3MgJiYgcy5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSA/IHMubG9hZGVkVmFsdWUuc3RhcnRGbG93KG4pIDogZWUoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IGVlKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgJGUoZSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIEcoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCB6LmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi45XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHIuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5yLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gVWUuZnJvbU9iamVjdChyKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSByLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IFBpKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IENpKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xuei5vanNGbG93cyA9IE4sIHouYXNzaWduQXNTaW5nbGV0b24gPSAocikgPT4ge1xuICBpZiAoei5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gcjtcbn0sIHouZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHouYnVpbGRPanNGbG93Q29udGV4dCA9IChyLCBlLCBuLCBpKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiByLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IGR0KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IGx0ID0gejtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtmZS5yZWQuYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKGx0LmdldEluc3RhbmNlKCkpIHtcbiAgICBsdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gbHQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgbHQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQubG9hZGVkVmFsdWUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXhcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiBgJHtiYXNlVXJsfS9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50Lz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxHQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FBQUEsRUFDcEMsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBQ0EsU0FBUztBQUNYLENBQUMsR0FFS2MsS0FBcUIsTUFBTTtBQUMvQixRQUFNQyxJQUFVZCxHQUFXWSxFQUFlO0FBQzFDLE1BQUksQ0FBQ0U7QUFDSCxVQUFNLElBQUksTUFBTSxtRUFBbUU7QUFFckYsU0FBT0E7QUFDVCxHQUVNQyxLQUFLLDhCQUE4QkMsS0FBS1IsRUFBSSxPQUFPO0FBQUEsRUFDdkQsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9B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LElBQWMsRUFBRSxRQUFBdEYsR0FBUSxhQUFhN0IsR0FBZ0IsU0FBUyxDQUFDLEdBR3RGb0ksS0FBYyxDQUFDLEVBQUUsUUFBQXZHLEVBQU8sTUFDTCxnQkFBQWpaLEVBQUl1ZSxJQUFjLEVBQUUsUUFBQXRGLEdBQVEsYUFBYTdCLEdBQWdCLEtBQUssQ0FBQyxHQUdsRnFJLEtBQW9CLENBQUMsRUFBRSxRQUFBeEcsRUFBTyxNQUNYLGdCQUFBalosRUFBSXVlLElBQWMsRUFBRSxRQUFBdEYsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDLEdBR3pGc0ksS0FBb0IsQ0FBQyxFQUFFLFFBQUF6RyxFQUFPLE1BQ1gsZ0JBQUFqWixFQUFJdWUsSUFBYyxFQUFFLFFBQUF0RixHQUFRLGFBQWE3QixHQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJmZSIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAiZHQiLCAiWXQiLCAiS3QiLCAiSHQiLCAiV3QiLCAiWnQiLCAiRGUiLCAiSnQiLCAiQnQiLCAiZSIsICJRdCIsICJLIiwgIlh0IiwgIm4iLCAiSSIsICJ2IiwgIlIiLCAiZCIsICJwdCIsICJmdCIsICJtdCIsICJ5dCIsICJuZSIsICJlciIsICJFZSIsICJ0ciIsICJVIiwgInJyIiwgIm5yIiwgIm9yIiwgImlyIiwgInNyIiwgImFyIiwgImNyIiwgImxyIiwgInVyIiwgImRyIiwgInByIiwgImZyIiwgInVlIiwgIm1yIiwgInlyIiwgImhyIiwgIl9yIiwgImdyIiwgIndyIiwgImJyIiwgInhlIiwgInZyIiwgIkVyIiwgIlNyIiwgImoiLCAiQ3IiLCAia3IiLCAiaHQiLCAiUHIiLCAiQXIiLCAiSXIiLCAiT3IiLCAiUnIiLCAiVHIiLCAiU2UiLCAiWWUiLCAiX3QiLCAiTXIiLCAiRHIiLCAicyIsICJhIiwgIkZyIiwgIkxyIiwgIk5yIiwgImkiLCAiYyIsICJqciIsICJpZSIsICJVciIsICJ4ciIsICIkciIsICJfIiwgIlZyIiwgImd0IiwgInd0IiwgInFyIiwgIkdyIiwgImRlIiwgInpyIiwgIllyIiwgImJ0IiwgIktyIiwgIkhyIiwgIldyIiwgIktlIiwgInZ0IiwgIkhlIiwgIkV0IiwgIlpyIiwgIkpyIiwgIkJyIiwgIlFyIiwgIlhyIiwgImVuIiwgInRuIiwgInJuIiwgIlN0IiwgIm5uIiwgIm9uIiwgInNuIiwgImFuIiwgImNuIiwgImxuIiwgInVuIiwgIkN0IiwgIlQiLCAicG4iLCAiZG4iLCAiZm4iLCAiQiIsICJDZSIsICJtbiIsICJ5biIsICJKIiwgImhuIiwgIl9uIiwgImtlIiwgImduIiwgIldlIiwgInduIiwgIlBlIiwgImt0IiwgImJuIiwgInZuIiwgIiRlIiwgImFlIiwgIkFlIiwgIkEiLCAiRGkiLCAiRW4iLCAiVmUiLCAiY2UiLCAiU24iLCAiUHQiLCAiQXQiLCAibGUiLCAiQ24iLCAiWmUiLCAiayIsICJrbiIsICJQbiIsICJBbiIsICJJbiIsICJ1IiwgImwiLCAicCIsICJtIiwgImciLCAiZiIsICJOIiwgIlRuIiwgIk9uIiwgIlJuIiwgIk1uIiwgIkRuIiwgIkZuIiwgIkxuIiwgIkllIiwgIkl0IiwgIk5uIiwgImpuIiwgIlVuIiwgIk90IiwgInhuIiwgIiRuIiwgIlJ0IiwgIlZuIiwgInFuIiwgIkduIiwgInFlIiwgInpuIiwgIlluIiwgIktuIiwgIkhuIiwgIlduIiwgImIiLCAiSmUiLCAiQmUiLCAiWm4iLCAidyIsICJ5IiwgIlhuIiwgIlFuIiwgImgiLCAiRSIsICJKbiIsICJCbiIsICJPIiwgImVvIiwgInRvIiwgInJvIiwgIm5vIiwgImlvIiwgIm9vIiwgInNvIiwgIlFlIiwgImFvIiwgImNvIiwgImxvIiwgIlMiLCAiViIsICJDIiwgIlciLCAidGUiLCAiWiIsICJUdCIsICJ1byIsICJwbyIsICJmbyIsICJNIiwgInJlIiwgIlJlIiwgIk10IiwgIkR0IiwgIkZ0IiwgIm1vIiwgInlvIiwgInEiLCAiRCIsICJYIiwgIngiLCAiaG8iLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAiaGUiLCAidm8iLCAiRW8iLCAiU28iLCAiQ28iLCAiWSIsICJGZSIsICJMdCIsICJrbyIsICJQbyIsICJMZSIsICJOZSIsICJRIiwgIkFvIiwgIk50IiwgInNlIiwgIndlIiwgImJlIiwgIm9lIiwgIklvIiwgIk9vIiwgIlAiLCAiT2UiLCAiVGUiLCAidmUiLCAicGUiLCAiWGUiLCAianQiLCAiVXQiLCAieHQiLCAiJHQiLCAiVnQiLCAiZXQiLCAiX2UiLCAiR2UiLCAiRG8iLCAiamUiLCAiUm8iLCAiTWUiLCAiVG8iLCAibWUiLCAiTW8iLCAiemUiLCAiRm8iLCAiTG8iLCAiSCIsICJqbyIsICJ0dCIsICJObyIsICJVbyIsICJ4byIsICIkbyIsICJWbyIsICJxbyIsICJxdCIsICJydCIsICJHbyIsICJ6byIsICJudCIsICJZbyIsICJvdCIsICJLbyIsICJIbyIsICJXbyIsICJabyIsICJKbyIsICJCbyIsICJRbyIsICJYbyIsICJlaSIsICJ0aSIsICJyaSIsICJuaSIsICJvaSIsICJpaSIsICJzaSIsICJhaSIsICJHdCIsICJjaSIsICJsaSIsICJ1aSIsICJkaSIsICJwaSIsICJmaSIsICJtaSIsICJ5aSIsICJoaSIsICJfaSIsICJnaSIsICJnZSIsICJ3aSIsICJiaSIsICJ5ZSIsICJ2aSIsICJFaSIsICJTaSIsICJMIiwgIml0IiwgIiQiLCAiciIsICJVZSIsICJDaSIsICJzdCIsICJraSIsICJQaSIsICJBaSIsICJhdCIsICJjdCIsICJHIiwgImVlIiwgInoiLCAibHQiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMiLCAiX2V4dGVuZFN0YXRpY3MiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIkFXWF9MT0FESU5HIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJwcm9wcyIsICJfYSIsICJmb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJmb3JtIiwgInZhbHVlIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJwcmV2IiwgImNoaWxkcmVuUHJvcHMiLCAiRWxlbWVudEZyYW1lIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAiaWZyYW1lUmVmIiwgImVsZW1lbnRTdHlsZSIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K
|
|
4044
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgY29ubmVjdFRvQ2hpbGQgfSBmcm9tICdwZW5wYWwnO1xuaW1wb3J0IGZlIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IHB0ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBZdCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSksIEt0ID0gei5hcnJheShZdCksIEh0ID0gei5vYmplY3Qoe1xuICBjb2RlOiB6LnN0cmluZygpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBwYXRoOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgV3QgPSB6LmFycmF5KEh0KSwgWnQgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIE1lID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBadFtyXSA/PyB0O1xufSwgSnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEJ0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gTWUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7TWUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUXQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFcgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChKdCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEt0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gQnQocikgOiBXdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IFF0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIE1lKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFh0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgdiA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFIgPSAodCkgPT4gei5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBmdCA9IHoubmF0aXZlRW51bShkKTtcbnZhciBtdCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCB0KSkobXQgfHwge30pO1xuY29uc3QgeXQgPSB6Lm5hdGl2ZUVudW0obXQpLCBodCA9IHoudW5pb24oW2Z0LCB5dF0pO1xudmFyIG5lID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkobmUgfHwge30pO1xuY29uc3QgZXIgPSB6Lm5hdGl2ZUVudW0obmUpLCBFZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogUih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCB0ciA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiB2LFxuICBleHBpcnk6IHYsXG4gIGN2YzogdlxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogdixcbiAgY29sb3I6IHYsXG4gIGZvbnRGYW1pbHk6IHYsXG4gIGZvbnRTaXplOiB2LFxuICBmb250V2VpZ2h0OiB2LFxuICBtYXJnaW46IHYsXG4gIHBhZGRpbmc6IHYsXG4gIGxldHRlclNwYWNpbmc6IHYsXG4gIGxpbmVIZWlnaHQ6IHYsXG4gIGhpZGVJY29uOiB2XG59KTtcbmNvbnN0IFUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHJyID0gVS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgbnIgPSB6Lm9iamVjdCh7IHR5cGU6IHJyIH0pLCBvciA9IFUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBpciA9IHoub2JqZWN0KHtcbiAgdHlwZTogb3IsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBzciA9IFUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIGFyID0gei5vYmplY3Qoe1xuICB0eXBlOiBzcixcbiAgbWVzc2FnZTogSSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIGNyID0gVS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBsciA9IHoub2JqZWN0KHtcbiAgdHlwZTogY3IsXG4gIGVsZW1lbnRUeXBlOiBodCxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgdXIgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChVLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBJXG59KSwgZHIgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChVLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogdixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShFZSlcbn0pLCBwciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIGZyID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoVS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pLCB1ZSA9IHoub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBJLFxuICBsYXN0TmFtZTogSSxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IHZcbn0pLCBtciA9IHoub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiB2LFxuICBsYXN0TmFtZTogdixcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IHYsXG4gIGFkZHJlc3M6IHYsXG4gIGNpdHk6IHYsXG4gIHN0YXRlOiB2XG59KSwgeXIgPSBVLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIGhyID0gei5vYmplY3Qoe1xuICB0eXBlOiB5cixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogdlxufSkuZXh0ZW5kKHVlLnNoYXBlKSwgX3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChVLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pLCBnciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSksIHdyID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgbnIsXG4gIGlyLFxuICBhcixcbiAgbHIsXG4gIHVyLFxuICBkcixcbiAgaHIsXG4gIF9yLFxuICBncixcbiAgcHIsXG4gIGZyXG5dKSwgYnIgPSB6Lm9iamVjdCh7XG4gIHBheWxvYWQ6IHdyLFxuICBub25jZTogSSxcbiAgZm9ybUlkOiBJLFxuICBlbGVtZW50SWQ6IElcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBJXG59KTtcbnouZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogUih6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogUih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgVWUgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKClcbn0pLCB2ciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXIgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheSh2cilcbn0pLCBTciA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKCEwKSB9KSxcbiAgRXJcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHVlLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogUih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnZhciBqID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCB0LkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgdC5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCB0KSkoaiB8fCB7fSk7XG5jb25zdCBDciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3Qga3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogei5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHouc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBfdCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogUih6LnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogUih6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogUih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBQciA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKCEwKSwgaHJlZjogei5zdHJpbmcoKSB9KSxcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITEpIH0pXG5dKSwgQXIgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheSh0ciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKFVlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHouYXJyYXkoX3QpKVxufSksIElyID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBmdC5wYXJzZShlKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyByW2ldID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAocltpXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgcjtcbn0sIE9yID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSksIFJyID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pLCBUciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgZ3QoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIE1yID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgRHIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBUcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBndCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgaWUgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBici5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIGggPSAodCkgPT4gei5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IFZyID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCB3dCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBoKHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogaCh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGgoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IGgoei5udW1iZXIoKSlcbn0pLCBidCA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IGgoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBoKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBoKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIHFyID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIEdyID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogaChxcilcbn0pLCBkZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBoKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogaCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCB6ciA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBZciA9IHoub2JqZWN0KHtcbiAgaWQ6IGgoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGgoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGgoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheSh6ciksXG4gIHRyaWFsX3N0YXJ0OiBoKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IGgoei5zdHJpbmcoKSlcbn0pLCB2dCA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBLciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkodnQpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIEhyID0gei5vYmplY3Qoe1xuICBjb3Vwb246IHd0XG59KSwgV3IgPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGgoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEtyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkodnQpXG59KSwgS2UgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoWXIpLFxuICBpbnZvaWNlczogei5hcnJheShXcilcbn0pLCBFdCA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogS2UsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogaChLZSksXG4gIGNvdXBvbnM6IHouYXJyYXkod3QpXG59KSwgSGUgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBoKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KGJ0KSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogR3IsXG4gIHN1YnNfcHJldmlldzogaChFdCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShkZSlcbn0pLCBTdCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIEpyID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbU3QsIFpyLCBKcl0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHouc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoYnQpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBkZSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogaCh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBRciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFFyKTtcbmNvbnN0IFhyID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGVuID0gei5vYmplY3Qoe1xuICBwcmljZV9pZDogei5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHoubnVtYmVyKCkuaW50KClcbn0pLCB0biA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSksIHJuID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGgoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGRlLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogdG4ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKFhyLnNoYXBlKS5leHRlbmQocm4uc2hhcGUpO1xuY29uc3QgQ3QgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGgoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGRlXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogdWUsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBkZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG5jb25zdCBubiA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IGgoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogaCh6LnN0cmluZygpKSxcbiAgbGluZTE6IGgoei5zdHJpbmcoKSksXG4gIGxpbmUyOiBoKHouc3RyaW5nKCkpLFxuICBsaW5lMzogaCh6LnN0cmluZygpKSxcbiAgY2l0eTogaCh6LnN0cmluZygpKSxcbiAgc3RhdGU6IGgoei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IGgoei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBoKHouc3RyaW5nKCkpLFxuICBlbWFpbDogaCh6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogaCh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBoKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBoKHouYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIGVtYWlsOiBoKHouc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBoKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGgoei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogaCh6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogaCh6LnN0cmluZygpKSxcbiAgYWRkcmVzczogaCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBzbiA9ICh0KSA9PiB0LnJlZHVjZSgociwgZSkgPT4gciArIGUsIDApO1xuZnVuY3Rpb24gYW4odCwgcikge1xuICB2YXIgZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgZSA/IGUodCwgcikgOiB0Ll9fcHJvdG9fXyA9IHI7XG59XG5mdW5jdGlvbiBjbih0LCByKSB7XG4gIHIgPT09IHZvaWQgMCAmJiAociA9IHQuY29uc3RydWN0b3IpO1xuICB2YXIgZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBlICYmIGUodCwgcik7XG59XG52YXIgbG4gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oaSwgcykge1xuICAgICAgaS5fX3Byb3RvX18gPSBzO1xuICAgIH0gfHwgZnVuY3Rpb24oaSwgcykge1xuICAgICAgZm9yICh2YXIgYSBpbiBzKVxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgYSkgJiYgKGlbYV0gPSBzW2FdKTtcbiAgICB9LCB0KGUsIG4pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24ociwgZSkge1xuICAgIGlmICh0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCIgJiYgZSAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIHQociwgZSk7XG4gICAgZnVuY3Rpb24gbigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSByO1xuICAgIH1cbiAgICByLnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKG4ucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyBuKCkpO1xuICB9O1xufSgpLCB1biA9IGZ1bmN0aW9uKHQpIHtcbiAgbG4ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdGhpcy5jb25zdHJ1Y3RvciwgcyA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBpLm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgYW4ocywgaS5wcm90b3R5cGUpLCBjbihzKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oRXJyb3IpO1xuY2xhc3Mga3QgZXh0ZW5kcyB1biB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICBjb25zdCBlID0gYCR7ci5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZSksIHRoaXMucmVzcG9uc2UgPSByO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBUID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IHQuc2VuZChyKTtcbiAgaWYgKHBuKG4pKVxuICAgIHRocm93IG5ldyBrdChuKTtcbiAgaWYgKCFkbihuLCBlKSkge1xuICAgIGNvbnN0IGkgPSBlLnNhZmVQYXJzZShuKTtcbiAgICB0aHJvdyBpLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIGUsIFwiQWN0dWFsOlwiLCBuKSwgaS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG47XG59LCBkbiA9ICh0LCByKSA9PiByLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBwbiA9ICh0KSA9PiBWci5zYWZlUGFyc2UodCkuc3VjY2VzcywgZm4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogciB9LCBFdCksIEIgPSBhc3luYyAodCkgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgU3QpLCB4ZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBDdCksIG1uID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogciB9LCBubiksIHluID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogciB9LCBDdCksIEogPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBBciksIGhuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQoXG4gIHQsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogciB9LFxuICBQclxuKSwgX24gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgZm4odCwge1xuICAgIHNlY3VyZV90b2tlbjogcixcbiAgICBwcm9tb3Rpb25fY29kZTogZVxuICB9KSwgaSA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoaS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2kuc2l6ZX1gKTtcbiAgY29uc3QgcyA9IGkudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGEgPSBzbihuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBzLFxuICAgIGFtb3VudEF0b206IGFcbiAgfTtcbn0sIENlID0gYXN5bmMgKHQsIHIsIGUsIG4pID0+IHtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBpID0gYXdhaXQgX24odCwgciwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogaS5hbW91bnRBdG9tLCBjdXJyZW5jeTogaS5jdXJyZW5jeSB9O1xuICB9XG59LCBnbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICh0LnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbSh0LnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gVChuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiByIH0sIFNyKVxuICAgIClcbiAgKTtcbn0sIFdlID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiByIH0sIFVlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGNoZWNrb3V0Q2FyZEVsZW1lbnRzOlwiLCBlLCBKU09OLnN0cmluZ2lmeShlKSksIGU7XG4gIH1cbn0sIHduID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHIgfSwgQnIpLCBrZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiByIH0sIFVlKSwgUHQgPSAxZTMsIGJuID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc29sZS5sb2cocik7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBQdCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IFQobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIENyKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgaSksIGk7XG59LCB2biA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJ1cGRhdGVfY2hlY2tvdXRfY3VzdG9tZXJcIiwgcGF5bG9hZDogciB9LCBvbik7XG5mdW5jdGlvbiAkZSh0KSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dH1gKTtcbn1cbmNvbnN0IGFlID0gKHQpID0+IGFzeW5jIChyKSA9PiB7XG4gIHZhciBlLCBuO1xuICB0cnkge1xuICAgIChuID0gKGUgPSByLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCBuLmNhbGwoZSk7XG4gICAgY29uc3QgaSA9IGF3YWl0IHQocik7XG4gICAgaWYgKGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoaS5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgIGVsc2UgaWYgKGkubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgaS5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICBpLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICBpLnJlc3VsdC5jdXN0b21lcl9pZFxuICAgICAgKTtcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2l9YCk7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihXKGkpKTtcbiAgfVxufSwgUGUgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdChyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgZXJyX186IG4gfSA9IFAoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgcmV0dXJuIG4oZSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFcoZSkgfTtcbiAgfVxufSwgUCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtmZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2ZlLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH0sIGUgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7ZmUucmVkLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IHIsXG4gICAgZXJyOiBlLFxuICAgIGxvZ19fOiByLFxuICAgIGVycl9fOiBlXG4gIH07XG59LCB7IGxvZ19fOiBEaSwgZXJyX186IEVuIH0gPSBQKFwiY29tbW9uXCIpLCBWZSA9ICh0KSA9PiB7XG4gIGlmICh0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7dC5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogdC5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIGNlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHQuZmluZCgobikgPT4gci5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghZSlcbiAgICB0aHJvdyBFbihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCB0KSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiByLnBhcnNlKGUpO1xufSwgU24gPSAodCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB0LmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgIHppcF9jb2RlOiB0LnppcENvZGUsXG4gICAgY291bnRyeTogdC5jb3VudHJ5XG4gIH0sXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB0LmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdC5sYXN0TmFtZVxufSksIHsgbG9nX186IEF0LCBlcnJfXzogSXQgfSA9IFAoXCJjb21tb24tY2NcIiksIGxlID0gKHQsIHIsIGUpID0+IHtcbiAgaWYgKGUpIHtcbiAgICBBdChgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgZm9yIChjb25zdCBbaSwgc10gb2YgT2JqZWN0LmVudHJpZXMoZSkpXG4gICAgICB0W2ldIHx8ICh0W2ldID0gcyk7XG4gIH1cbiAgY29uc3QgbiA9IHVlLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBpID0gbi5lcnJvci5mb3JtYXQoKSwgcyA9IElyKGkpO1xuICAgIGZvciAoY29uc3QgW2EsIGNdIG9mIE9iamVjdC5lbnRyaWVzKHMpKVxuICAgICAgcihhLCBjLCBhKTtcbiAgICB0aHJvdyBJdChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgQ24gPSAodCwgcikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IGh0LnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFpLnN1Y2Nlc3MpXG4gICAgICAgICAgSXQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gaS5kYXRhO1xuICAgICAgICAgIHIocywgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgQXQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIFplID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEMsIGVycl9fOiBrbiB9ID0gUChcInN0cmlwZS1saW5rXCIpLCBQbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIEFuID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gUGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBDKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gY2UodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgQyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEIoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBDKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBDZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IE1yKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgQyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIG0gPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBnID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEMoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEMoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIG0oKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKEMoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgQyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEMoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIE4uc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGllKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogbSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGcsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IGFlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIEMoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBDKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBsZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgQyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgeGUocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgQyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgbSA9IGF3YWl0IEIocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGcgPSBhd2FpdCBKKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoZykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgQyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBrZShzLCBnKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBDKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIFB0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IGouQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gQWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgT3QgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgQWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gai5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gai5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IGouU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBQKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShXKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShXKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogUnQgfSA9IFAoXCJwb2NreXQtY2NcIiksIHhuID0gei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSksICRuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHhuLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgUnQobiksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgVHQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIFVuKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBSdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke1cocil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgVm4gPSAodCwgcikgPT4gbmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KHIpLCBxbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBHbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IE90KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBUdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogem4sIGVycl9fOiBxZSB9ID0gUChcImFpcndhbGxleC1jY1wiKSwgWW4gPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KSwgS24gPSAodCkgPT4ge1xuICBjb25zdCByID0gWW4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBxZShuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBIbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBXbiA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gem4oYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7cn1dYCksIHI7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IHFlKGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7VyhyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBabiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBLbihyKSwgbiA9IGF3YWl0IE90KHsgdXJsOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSksIGkgPSBXbihuLmhyZWYgPz8gXCJcIiksIHMgPSBlW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAocyAhPT0gaSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHUgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtzfSkuYDtcbiAgICB0aHJvdyBxZSh1KSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpLFxuICAgICAgY29uc2VudF9pZDogZVtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogdywgZXJyX186IEplIH0gPSBQKFwiY29tbW9uLWNjXCIpLCB7IGxvZ19fOiBCZSB9ID0gUChcInN0cmlwZS1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgSm4gPSBhZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgbDtcbiAgICB3KFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHIgfSk7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IEIocyk7XG4gICAgdyhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHthLm1vZGV9XWApO1xuICAgIGNvbnN0IGMgPSBsZShlLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHUgPSB7XG4gICAgICBzZXNzaW9uX2lkOiB0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHt9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgdyhg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBnbihpLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiB0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChDbihwLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIHcoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7YS50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCB3bihzLCB1KTtcbiAgICAgICAgcmV0dXJuIHcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHttLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogbSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdyhg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCBXZShzLCB1KTtcbiAgICAgICAgcmV0dXJuIHcoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IG0gfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICBpZiAocCBpbnN0YW5jZW9mIGt0ICYmIHAub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgdyhcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIHcoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgcC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgY29uc3QgbSA9IHFuKHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgdyhcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgR24odC5iYXNlVXJsLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHUuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSG4ocC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIHcoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgYiA9IGF3YWl0IFpuKHQuYmFzZVVybCwgcC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB1LmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IG1uKHMsIHUpO1xuICAgICAgICB3KFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIGYpO1xuICAgICAgICBjb25zdCB5ID0gKChsID0gcC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogbFtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgbSA/IHcoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IHkgPyAodyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IGVvKGYpKSA6ICh3KFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgWG4oZiwgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IF8gPSBmLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICB3KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke199XWApO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBKKHMsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBfXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdyhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBiKTtcbiAgICAgICAgICBjb25zdCBBID0gVmUoYik7XG4gICAgICAgICAgcmV0dXJuIHcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtBLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogQSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHcoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7eSA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgV2Uocywge1xuICAgICAgICAgICAgLi4udSxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBfLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB3KFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBiIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEplKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBKZShwKSwgcDtcbiAgICB9XG4gIH1cbiksIEJuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBPci5wYXJzZShyKTtcbn0sIFFuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBrci5wYXJzZShyKTtcbn0sIFhuID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFFuKHQpO1xuICBpZiAoZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiAmJiBlLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIHcoXCLilJwgQWlyd2FsbGV4IDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHcoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtlLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IHsgc3RhdHVzOiBuIH0gPSBhd2FpdCBBZSh7IHVybDogZS5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHIgfSk7XG4gIGlmICh3KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gai5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBqLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCBlbyA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBCbih0KTtcbiAgQmUoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ci5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IE5yKHIpLCBCZShcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHsgbG9nX186IE8sIGVycl9fOiB0byB9ID0gUChcInN0cmlwZS1wclwiKSwgcm8gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBubyA9IFBlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IGNlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcm8pO1xuICAgIE8oXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgZSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgbiA9IGF3YWl0IEIoZSksIGkgPSBuLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBPKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCBDZShlLCBuLnRva2VuLCBpLCB2b2lkIDApLCBhID0gYXdhaXQgRHIoXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBpXG4gICAgKTtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgYS5jYW5NYWtlUGF5bWVudCgpO1xuICAgIHJldHVybiBjID09PSBudWxsID8gKHRvKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfSkgOiAoTyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBjKSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGEsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGMuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogYy5nb29nbGVQYXlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuKSwgb28gPSBhZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChPKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgaS5wcm92aWRlciAhPT0gci5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7aS5wcm92aWRlcn0sIGdvdCAke3IucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGkgIT0gbnVsbCAmJiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHkgPSBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBPKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCB5KSwgc28oYywgeS5hbW91bnQsIHkucGVuZGluZywgeS5zdHJpcGVBcHBsZVBheSk7XG4gICAgfVxuICAgIE8oXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgdSA9IGF3YWl0IEZyKGMpO1xuICAgIE8oXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIHUpLCBPKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBsID0gaW8oZSwgdSksIHAgPSBsZShsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgTyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIHApO1xuICAgIGNvbnN0IG0gPSBhd2FpdCB5bihhLCB7XG4gICAgICBmaWVsZHM6IHAsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJcbiAgICB9KSwgZyA9IGFvKG0pO1xuICAgIE8oXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBMcihnLCB1KTtcbiAgICBjb25zdCBmID0gYXdhaXQgQihhKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE8oXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgSihhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoeSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgTyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHBbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBwW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IHBbZC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBwW2QuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBwW2QuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBwW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQga2UoYSwgeSkgfTtcbiAgICB9XG4gIH1cbiksIGlvID0gKHQsIHIpID0+IHtcbiAgdmFyIHUsIGwsIHAsIG07XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChsID0gKHUgPSByLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogbC5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwLCBhID0gKG0gPSAocCA9IHIucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogbS5hZGRyZXNzLCBjID0gci5zaGlwcGluZ0FkZHJlc3M7XG4gIHJldHVybiBlW2QuRklSU1RfTkFNRV0gPSBlW2QuRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5MQVNUX05BTUVdID0gZVtkLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5FTUFJTF0gPSBlW2QuRU1BSUxdIHx8IHIucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5aSVBfQ09ERV0gPSBlW2QuWklQX0NPREVdIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCIsIE8oXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBzbyA9ICh0LCByLCBlLCBuKSA9PiB7XG4gIHQudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiByLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogZVxuICAgIH0sXG4gICAgY3VycmVuY3k6IHIuY3VycmVuY3ksXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBhbyA9ICh0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3QucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBSci5wYXJzZSh0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCB7IGxvZ19fOiAkLCBlcnJfXzogUWUgfSA9IFAoXCJwb2NreXQtcGF5cGFsXCIpLCBjbyA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGxvID0gYWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIFgsIEc7XG4gICAgJChcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBCKHMpO1xuICAgICQoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBjby5wYXJzZShyKTtcbiAgICAkKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncywgbCA9IGxlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdSA9PSBudWxsID8gdm9pZCAwIDogdS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gU24obCk7XG4gICAgJChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSB2NCgpLCBnID0gYS5tb2RlICE9PSBcInNldHVwXCIsIGYgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGcsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGcgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGEubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBhLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKFggPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnNldHRpbmdzKSAhPSBudWxsICYmIFgudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IG1cbiAgICAgIH0sXG4gICAgICAuLi5wXG4gICAgfSwgeSA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIHQuYmFzZVVybCkudG9TdHJpbmcoKSwgXyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZikpLCBiID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogYS50b2tlbixcbiAgICAgIHI6IF9cbiAgICB9KSwgQSA9IGAke3l9PyR7Yi50b1N0cmluZygpfWA7XG4gICAgaWYgKChHID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBHLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93ICQoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gQSwgYXdhaXQgZ3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAkKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCAkKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IEUgPSBhd2FpdCBqbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBzLFxuICAgICAgbSxcbiAgICAgIEFcbiAgICApO1xuICAgICQoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgRSk7XG4gICAgY29uc3QgcSA9IFR0KEUuaHJlZiksIFMgPSBWbihFLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIVMpXG4gICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgRS5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgICQoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7cX1gKTtcbiAgICBjb25zdCBNID0gYXdhaXQgSihzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogcSxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGcgPyBTIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCQoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTSksIGEubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTS5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIU0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIE0pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBNLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgTXQgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogcixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogaSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xufSkgPT4ge1xuICB2YXIgcCwgbTtcbiAgY29uc3QgYSA9ICgocCA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogcC5hbW91bnRBdG9tKSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnRBdG9tKSA/PyAwLCBjID0gTWF0aC5tYXgoYSAvIDEwMCwgMCksIHUgPSAoKChtID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBtLmN1cnJlbmN5KSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jdXJyZW5jeSkgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgbCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBUT0RPOiBhc2FwIGZvciBwcm9kIC0gYWlyd2FsbGV4IGhhcyBubyBkb2NzIGZvciB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbiA/PyBcIlwiLFxuICAgICAgLy8gQkNSMkRONFRYN0kzRlJSSlxuICAgICAgbWVyY2hhbnROYW1lOiBlXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBzICE9IG51bGwgJiYgcy5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IGMudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID8geyAuLi5sLCAuLi5zLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBsO1xufSwgdW8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBHb29nbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgcG8gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiByID8gX3QucGFyc2UocikgOiBudWxsO1xufSwgZm8gPSAodCwgcikgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBuID0gKHMgPSAoaSA9IHIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5sXSA9ICgoYyA9IChhID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBwID0gbC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgci5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgZVtkLkFERFJFU1NdID0gZVtkLkFERFJFU1NdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgZVtkLkNJVFldID0gZVtkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgZVtkLlpJUF9DT0RFXSA9IGVbZC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgZVtkLlNUQVRFXSA9IGVbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHAgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBlO1xufSwgeyBsb2dfXzogRCwgZXJyX186IHJlIH0gPSBQKFwiYXd4LWdvb2dsZS1wYXlcIik7XG5sZXQgT2UgPSBudWxsO1xuY29uc3QgRHQgPSAodCkgPT4gdCA9PT0gcHQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIEZ0ID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IER0KHQpO1xuICByZXR1cm4gT2UgPT09IG51bGwgJiYgKE9lID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IHIubWVyY2hhbnRJbmZvXG4gIH0pKSwgT2U7XG59LCBMdCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIG1vID0gUGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIHZhciBhLCBjO1xuICAgIGNvbnN0IGUgPSBjZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEx0KTtcbiAgICBpZiAoIWUpXG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIEQoXCJHb29nbGUgUGF5IENQTVwiLCBlKTtcbiAgICBjb25zdCBuID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoIW4ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gcmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKEQoXCJMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uXCIpLCBhd2FpdCB1bygpLCAhKChjID0gKGEgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogYS5wYXltZW50cykgIT0gbnVsbCAmJiBjLmFwaSkpXG4gICAgICByZXR1cm4gcmUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKER0KHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFuLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gcmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgRChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdSA9IE10KHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogbi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBuLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHZvaWQgMFxuICAgICAgfSksIHsgcmVzdWx0OiBsIH0gPSBhd2FpdCBGdCh0LmJhc2VVcmwsIHUpLmlzUmVhZHlUb1BheShcbiAgICAgICAgdVxuICAgICAgKTtcbiAgICAgIGlmICghbClcbiAgICAgICAgcmV0dXJuIEQoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9IH07XG4gICAgfSBjYXRjaCAodSkge1xuICAgICAgcmV0dXJuIHJlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgdSksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgTi5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBpZSh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogdSA/PyB7fVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgcmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbCksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobCA9PSBudWxsID8gdm9pZCAwIDogbC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCB5byA9IGFlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBtLCBnLCBmLCB5LCBfLCBiLCBBO1xuICAgIEQoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGNlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTHQpLCBhID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgQihhKSwgdSA9IHMubWV0YWRhdGE7XG4gICAgaWYgKCF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBsID0gTXQoe1xuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiB1LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiB1LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiB1Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhd2FpdCBDZShcbiAgICAgICAgYSxcbiAgICAgICAgYy50b2tlbixcbiAgICAgICAgYy5tb2RlID09PSBcInNldHVwXCIsXG4gICAgICAgIHZvaWQgMFxuICAgICAgKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pLCBwID0gRnQodC5iYXNlVXJsLCBsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgRSA9IGF3YWl0IHAubG9hZFBheW1lbnREYXRhKGwpO1xuICAgICAgRChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEUpO1xuICAgICAgY29uc3QgcSA9IGZvKGUsIEUpLCBTID0gbGUoXG4gICAgICAgIHEsXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBpID09IG51bGwgPyB2b2lkIDAgOiBpLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKSwgTSA9IChnID0gKG0gPSBFLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZy50b2tlbjtcbiAgICAgIGlmICghTSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBYID0gYXdhaXQgeGUoYSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBTW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogU1tkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBTW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogU1tkLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5X2NvZGU6IFNbZC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgRyA9IHBvKFgpO1xuICAgICAgRChcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIEcpO1xuICAgICAgY29uc3QgeiA9IGF3YWl0IEooYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IEcgPT0gbnVsbCA/IHZvaWQgMCA6IEcuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogTVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBEKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeik7XG4gICAgICBsZXQgRiA9ICh5ID0gKGYgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB5LmlkO1xuICAgICAgY29uc3QgZWUgPSAoXyA9IHoucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogXy5maW5kKFxuICAgICAgICAoeCkgPT4geC50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChlZSAmJiBlZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgRChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGVlKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IHggfSA9IGF3YWl0IEFlKHtcbiAgICAgICAgICB1cmw6IGVlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChEKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHt4fV1gKSwgeCA9PT0gai5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmICh4ID09PSBqLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoZWUgJiYgIUYpIHtcbiAgICAgICAgY29uc3QgeCA9IGF3YWl0IEooYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogZWUudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGVlLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBEKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeCksIEYgPSAoQSA9IChiID0geC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBiWzBdKSA9PSBudWxsID8gdm9pZCAwIDogQS5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICBpZiAoYy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBGIH0gfTtcbiAgICAgIHtcbiAgICAgICAgRChcIlN0YXJ0aW5nIG9uZS10aW1lIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICAgICAgY29uc3QgeCA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogRixcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgICAgY3VzdG9tZXJfZW1haWw6IFNbZC5FTUFJTF0sXG4gICAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IFNbZC5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogU1tkLkNPVU5UUlldLFxuICAgICAgICAgIHByb21vdGlvbl9jb2RlOiBTW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IFNbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IFNbZC5MQVNUX05BTUVdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBrZShhLCB4KSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgIHRocm93IHJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEUpLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgaG8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsIGUuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIF9vID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHIudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHIuYmlsbGluZ0NvbnRhY3QsIGkgPSByLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4udCB9O1xuICByZXR1cm4gKGUgfHwgbiB8fCBpKSAmJiAoc1tkLkVNQUlMXSA9IHNbZC5FTUFJTF0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1tkLkNPVU5UUlldID0gc1tkLkNPVU5UUlldIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1tkLlpJUF9DT0RFXSA9IHNbZC5aSVBfQ09ERV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBzW2QuRklSU1RfTkFNRV0gPSBzW2QuRklSU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmdpdmVuTmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiLCBzW2QuTEFTVF9OQU1FXSA9IHNbZC5MQVNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmZhbWlseU5hbWUpIHx8IFwiX09QX1VOS05PV05cIiksIHM7XG59LCBnbyA9IHoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSksIHdvID0gKHQpID0+IGdvLnNhZmVQYXJzZSh0KS5kYXRhLCBibyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcIm1lc3NhZ2VcIixcbiAgICAoZSkgPT4ge1xuICAgICAgdmFyIGk7XG4gICAgICBjb25zdCBuID0gd28oZSk7XG4gICAgICAoKGkgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2VUeXBlKSA9PT0gXCJ3aW5kb3djbG9zaW5nXCIgJiYgKHQoKSwgci5hYm9ydCgpKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNpZ25hbDogci5zaWduYWxcbiAgICB9XG4gICksIHtcbiAgICBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6ICgpID0+IHIuYWJvcnQoKVxuICB9O1xufSwgeyBsb2dfXzogaGUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gdm8odCwgcikge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgeGUoci5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogci5ub25DZGVGb3JtSW5wdXRzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogci5ub25DZGVGb3JtSW5wdXRzW2QuTEFTVF9OQU1FXSxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IHQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiByLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0sIGkgPSBuLnBheW1lbnRfc2Vzc2lvbiwgcyA9IG4uY29uc2VudF9pZDtcbiAgICBpZiAoIWkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgaWYgKCFzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGkpLCBzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgci5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEVvKHQsIHIpIHtcbiAgdmFyIGksIHM7XG4gIGlmICghdC5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBoZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHQpO1xuICBjb25zdCB7IHN0YXR1czogZSB9ID0gYXdhaXQgQWUoe1xuICAgIHVybDogdC5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogci5iYXNlVXJsXG4gIH0pO1xuICBpZiAoaGUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2V9XWApLCBlID09PSBqLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGUgPT09IGouRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEooci5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogdC50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB0LmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCAocyA9IChpID0gbi5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZDtcbn1cbmFzeW5jIGZ1bmN0aW9uIFNvKHQsIHIsIGUpIHtcbiAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IGtlKGUuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogZS5wcmVmaWxsLnRva2VuLFxuICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgIHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfSxcbiAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhMCxcbiAgICB1c2VfY29uZmlybWVkX3BtX2lkOiB0LFxuICAgIGxpbmVfaXRlbXM6IGUucHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBlLnByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGN1c3RvbWVyX2VtYWlsOiByW2QuRU1BSUxdLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiByW2QuWklQX0NPREVdLFxuICAgIGN1c3RvbWVyX2NvdW50cnk6IHJbZC5DT1VOVFJZXSxcbiAgICBwcm9tb3Rpb25fY29kZTogcltkLlBST01PVElPTl9DT0RFXVxuICB9KSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gQ28odCwgciwgZSkge1xuICB2YXIgbiwgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gdC5wYXltZW50LCBjID0gX28oci5ub25DZGVGb3JtSW5wdXRzLCBhKSwgdSA9IGxlKFxuICAgICAgYyxcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgYXdhaXQgdm4oci5jb25uZWN0aW9uLCB7XG4gICAgICBlbWFpbDogdVtkLkVNQUlMXSxcbiAgICAgIGZpcnN0X25hbWU6IHVbZC5GSVJTVF9OQU1FXSxcbiAgICAgIGxhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICB6aXBfY29kZTogdVtkLlpJUF9DT0RFXSxcbiAgICAgIGNvdW50cnk6IHVbZC5DT1VOVFJZXSxcbiAgICAgIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6ICEwXG4gICAgfSk7XG4gICAgY29uc3QgbCA9IGF3YWl0IEooci5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBsZXQgcCA9IChpID0gKG4gPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF0pID09IG51bGwgPyB2b2lkIDAgOiBpLmlkO1xuICAgIGNvbnN0IG0gPSAocyA9IGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogcy5maW5kKFxuICAgICAgKGYpID0+IGYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChtICE9IG51bGwgJiYgbS5yZWRpcmVjdF91cmwgJiYgbS5jb25zZW50X2lkICYmIG0udGhlaXJfcG1faWQgJiYgKHAgPSBhd2FpdCBFbyhtLCByKSksICFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChnKSwgci5pc1NldHVwTW9kZSA/IHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IHAgfSB9IDogYXdhaXQgU28ocCwgdSwgcik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBjID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IEgsIGVycl9fOiBEZSB9ID0gUChcImF3eC1hcHBsZS1wYXlcIiksIE50ID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBrbyA9IFBlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gY2UodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBOdCk7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBIKFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBobygpLCBIKFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHJldHVybiBEZShcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgcCksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gSChcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoSChcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gSChcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBCKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCIsIGMgPSBhd2FpdCBDZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB1ID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoSChcInByb2Nlc3NvckFjY291bnRcIiwgdSksICF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHApID0+IHtcbiAgICAgICAgdmFyIG07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgTi5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGllKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGlzU2V0dXBNb2RlOiBhLFxuICAgICAgICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICAgICAgICBpbml0aWFsUHJldmlldzogKChtID0gcCA9PSBudWxsID8gdm9pZCAwIDogcC5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogbS5hbW91bnQpID8/IGMsXG4gICAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgRGUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBnKSwgci5nZXQub25DaGVja291dEVycm9yKChnID09IG51bGwgPyB2b2lkIDAgOiBnLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFBvID0gYWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogaVxuICB9KSA9PiB7XG4gICAgdmFyIEUsIHE7XG4gICAgY29uc3QgcyA9IGNlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTnQpLCB7IGluaXRpYWxQcmV2aWV3OiBhLCBpc1NldHVwTW9kZTogYywgcHJlZmlsbDogdSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbCB9ID0gbiwgcCA9ICgoKEUgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuY3VycmVuY3kpID8/IGEuY3VycmVuY3kgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgZyA9ICgoKChxID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBxLmFtb3VudEF0b20pID8/IGEuYW1vdW50QXRvbSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKSwgZiA9IHtcbiAgICAgIGxhYmVsOiAobCA9PSBudWxsID8gdm9pZCAwIDogbC5sYWJlbCkgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogbCAhPSBudWxsICYmIGwucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBnXG4gICAgfSwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHAsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogZixcbiAgICAgIC4uLihsID09IG51bGwgPyB2b2lkIDAgOiBsLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfTtcbiAgICBIKFwiUGF5bWVudCBSZXF1ZXN0XCIsIHkpO1xuICAgIGNvbnN0IF8gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpO1xuICAgIEgoXCJBcHBsZVBheVNlc3Npb25cIiwgXyk7XG4gICAgY29uc3QgYiA9IHtcbiAgICAgIHNlc3Npb246IF8sXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogcy5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogYyxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGksXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICBsZXQgQTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKFMsIE0pID0+IHtcbiAgICAgIGNvbnN0IFggPSAoKSA9PiB7XG4gICAgICAgIEgoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBNKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgeyBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6IEcgfSA9IGJvKFgpO1xuICAgICAgXy5vbmNhbmNlbCA9IFgsIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHopID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBBID0gYXdhaXQgdm8oeiwgYik7XG4gICAgICAgIH0gY2F0Y2ggKEYpIHtcbiAgICAgICAgICBNKEYpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB6ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmYgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih6KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh6KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IENvKHosIGIsIEEpO1xuICAgICAgICAgIEcoKSwgUyhGKTtcbiAgICAgICAgfSBjYXRjaCAoRikge1xuICAgICAgICAgIE0oRik7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoUykgPT4ge1xuICAgICAgdGhyb3cgRGUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBTKSwgUztcbiAgICB9KTtcbiAgfVxuKSwgRmUgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gdC5maWx0ZXIoKGkpID0+IHtcbiAgICBjb25zdCBzID0gZSA9PT0gdm9pZCAwID8gITAgOiBpLnByb2Nlc3Nvcl9uYW1lID09PSBlLCBhID0gaS5wcm92aWRlciA9PT0gcjtcbiAgICByZXR1cm4gcyAmJiBhO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAobi5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gblswXTtcbn0sIE4gPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogSm5cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbm8sXG4gICAgcnVuOiBvb1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogSW4sXG4gICAgcnVuOiBPblxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBsb1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogbW8sXG4gICAgcnVuOiB5b1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGtvLFxuICAgIHJ1bjogUG9cbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgTGUgPSBmdW5jdGlvbih0LCByKSB7XG4gIHJldHVybiBMZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBlLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIGkgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGkpICYmIChlW2ldID0gbltpXSk7XG4gIH0sIExlKHQsIHIpO1xufTtcbmZ1bmN0aW9uIFEodCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBMZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gQW8odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBpKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGEpIHtcbiAgICBmdW5jdGlvbiBjKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwobi5uZXh0KHApKTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgYShtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsKG4udGhyb3cocCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBhKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHAuZG9uZSA/IHMocC52YWx1ZSkgOiBpKHAudmFsdWUpLnRoZW4oYywgdSk7XG4gICAgfVxuICAgIGwoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBqdCh0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBpLCBzLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyhsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiB1KFtsLCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB1KGwpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCBsWzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGkgJiYgKHMgPSBsWzBdICYgMiA/IGkucmV0dXJuIDogbFswXSA/IGkudGhyb3cgfHwgKChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEocyA9IHMuY2FsbChpLCBsWzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBzICYmIChsID0gW2xbMF0gJiAyLCBzLnZhbHVlXSksIGxbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiBsWzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBpID0gbFsxXSwgbCA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAobFswXSA9PT0gNiB8fCBsWzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxbMF0gPT09IDMgJiYgKCFzIHx8IGxbMV0gPiBzWzBdICYmIGxbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IGxbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2gobCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbCA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICBsID0gWzYsIHBdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAobFswXSAmIDUpIHRocm93IGxbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IGxbMF0gPyBsWzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBzZSh0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gciAmJiB0W3JdLCBuID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgbiA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtuKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihyID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gd2UodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGksIHMgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGkgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBiZSh0LCByLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgaSA9IHIubGVuZ3RoLCBzOyBuIDwgaTsgbisrKVxuICAgIChzIHx8ICEobiBpbiByKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLCAwLCBuKSksIHNbbl0gPSByW25dKTtcbiAgcmV0dXJuIHQuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpO1xufVxuZnVuY3Rpb24gb2UodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG9lID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IG9lKHQpO1xufVxuZnVuY3Rpb24gSW8odCwgciwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGUuYXBwbHkodCwgciB8fCBbXSksIGksIHMgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGEpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuICBmdW5jdGlvbiBhKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKGYsIG0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhmLCB5KSB7XG4gICAgbltmXSAmJiAoaVtmXSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihiLCBBKSB7XG4gICAgICAgIHMucHVzaChbZiwgXywgYiwgQV0pID4gMSB8fCB1KGYsIF8pO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAoaVtmXSA9IHkoaVtmXSkpKTtcbiAgfVxuICBmdW5jdGlvbiB1KGYsIHkpIHtcbiAgICB0cnkge1xuICAgICAgbChuW2ZdKHkpKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBnKHNbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBsKGYpIHtcbiAgICBmLnZhbHVlIGluc3RhbmNlb2Ygb2UgPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKHAsIG0pIDogZyhzWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBwKGYpIHtcbiAgICB1KFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBtKGYpIHtcbiAgICB1KFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gZyhmLCB5KSB7XG4gICAgZih5KSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiB1KHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBPbyh0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiByID8gci5jYWxsKHQpIDogKHQgPSB0eXBlb2Ygc2UgPT0gXCJmdW5jdGlvblwiID8gc2UodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gbihzKSB7XG4gICAgZVtzXSA9IHRbc10gJiYgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIHUpIHtcbiAgICAgICAgYSA9IHRbc10oYSksIGkoYywgdSwgYS5kb25lLCBhLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaShzLCBhLCBjLCB1KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oZnVuY3Rpb24obCkge1xuICAgICAgcyh7IHZhbHVlOiBsLCBkb25lOiBjIH0pO1xuICAgIH0sIGEpO1xuICB9XG59XG5mdW5jdGlvbiBrKHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIEllKHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChyKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgUmUgPSBJZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiB2ZSh0LCByKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yocik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgcGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgaSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBzZShhKSwgdSA9IGMubmV4dCgpOyAhdS5kb25lOyB1ID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSB1LnZhbHVlO1xuICAgICAgICAgICAgICBsLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB1ICYmICF1LmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgcCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKGsocCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiBSZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgbSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAobSkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBnID0gc2UobSksIGYgPSBnLm5leHQoKTsgIWYuZG9uZTsgZiA9IGcubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBYZSh5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIF8gaW5zdGFuY2VvZiBSZSA/IHMgPSBiZShiZShbXSwgd2UocykpLCB3ZShfLmVycm9ycykpIDogcy5wdXNoKF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBfIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAoaSA9IGcucmV0dXJuKSAmJiBpLmNhbGwoZyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBSZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBYZShyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgdmUoZSwgcik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiB2ZShlLCByKSwgciBpbnN0YW5jZW9mIHQgJiYgci5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgdCgpO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICEwLCByO1xuICB9KCksIHQ7XG59KCksIFV0ID0gcGUuRU1QVFk7XG5mdW5jdGlvbiB4dCh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgcGUgfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgayh0LnJlbW92ZSkgJiYgayh0LmFkZCkgJiYgayh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIFhlKHQpIHtcbiAgayh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciAkdCA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBWdCA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIGJlKFt0LCByXSwgd2UoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gcXQodCkge1xuICBWdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gZXQoKSB7XG59XG5mdW5jdGlvbiBfZSh0KSB7XG4gIHQoKTtcbn1cbnZhciBHZSA9IGZ1bmN0aW9uKHQpIHtcbiAgUShyLCB0KTtcbiAgZnVuY3Rpb24gcihlKSB7XG4gICAgdmFyIG4gPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgZSA/IChuLmRlc3RpbmF0aW9uID0gZSwgeHQoZSkgJiYgZS5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IERvLCBuO1xuICB9XG4gIHJldHVybiByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gbmV3IE5lKGUsIG4sIGkpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihlKSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByO1xufShwZSksIFJvID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBUZSh0LCByKSB7XG4gIHJldHVybiBSby5jYWxsKHQsIHIpO1xufVxudmFyIFRvID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICBlLm5leHQocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIG1lKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgbWUobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgbWUocik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbWUoZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIE5lID0gZnVuY3Rpb24odCkge1xuICBRKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChrKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmICR0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIFRlKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIFRlKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBUZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgVG8oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KEdlKTtcbmZ1bmN0aW9uIG1lKHQpIHtcbiAgcXQodCk7XG59XG5mdW5jdGlvbiBNbyh0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgRG8gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGV0LFxuICBlcnJvcjogTW8sXG4gIGNvbXBsZXRlOiBldFxufSwgemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBGbyh0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gTG8odCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyBGbyA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkobik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgWiA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICByICYmICh0aGlzLl9zdWJzY3JpYmUgPSByKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IHIsIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMsIHMgPSBqbyhyKSA/IHIgOiBuZXcgTmUociwgZSwgbik7XG4gICAgcmV0dXJuIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEgPSBpLCBjID0gYS5vcGVyYXRvciwgdSA9IGEuc291cmNlO1xuICAgICAgcy5hZGQoYyA/IGMuY2FsbChzLCB1KSA6IHUgPyBpLl9zdWJzY3JpYmUocykgOiBpLl90cnlTdWJzY3JpYmUocykpO1xuICAgIH0pLCBzO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHIuZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ociwgZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gZSA9IHR0KGUpLCBuZXcgZShmdW5jdGlvbihpLCBzKSB7XG4gICAgICB2YXIgYSA9IG5ldyBOZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcihjKTtcbiAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICBzKHUpLCBhLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcyxcbiAgICAgICAgY29tcGxldGU6IGlcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUoYSk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZVt6ZV0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICByW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBMbyhyKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gciA9IHR0KHIpLCBuZXcgcihmdW5jdGlvbihuLCBpKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIHMgPSBhO1xuICAgICAgfSwgZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gaShhKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gbmV3IHQocik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiB0dCh0KSB7XG4gIHZhciByO1xuICByZXR1cm4gKHIgPSB0ID8/ICR0LlByb21pc2UpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gTm8odCkge1xuICByZXR1cm4gdCAmJiBrKHQubmV4dCkgJiYgayh0LmVycm9yKSAmJiBrKHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gam8odCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgR2UgfHwgTm8odCkgJiYgeHQodCk7XG59XG5mdW5jdGlvbiBVbyh0KSB7XG4gIHJldHVybiBrKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiB4byh0KSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgaWYgKFVvKHIpKVxuICAgICAgcmV0dXJuIHIubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiAkbyh0LCByLCBlLCBuLCBpKSB7XG4gIHJldHVybiBuZXcgVm8odCwgciwgZSwgbiwgaSk7XG59XG52YXIgVm8gPSBmdW5jdGlvbih0KSB7XG4gIFEociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSwgcywgYSwgYykge1xuICAgIHZhciB1ID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHUub25GaW5hbGl6ZSA9IGEsIHUuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCB1Ll9uZXh0ID0gbiA/IGZ1bmN0aW9uKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4obCk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUuZXJyb3IocCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCB1Ll9lcnJvciA9IHMgPyBmdW5jdGlvbihsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzKGwpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlLmVycm9yKHApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIHUuX2NvbXBsZXRlID0gaSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSgpO1xuICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICBlLmVycm9yKGwpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIHU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCByO1xufShHZSksIHFvID0gSWUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBHdCA9IGZ1bmN0aW9uKHQpIHtcbiAgUShyLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gbmV3IHJ0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gZSwgbjtcbiAgfSwgci5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgcW8oKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gc2Uobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciB1ID0gYy52YWx1ZTtcbiAgICAgICAgICAgIHUubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogbCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IG4ub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBVdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBwZShmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIHZlKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgci5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gbi5oYXNFcnJvciwgcyA9IG4udGhyb3duRXJyb3IsIGEgPSBuLmlzU3RvcHBlZDtcbiAgICBpID8gZS5lcnJvcihzKSA6IGEgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCByLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBaKCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZTtcbiAgfSwgci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBydChlLCBuKTtcbiAgfSwgcjtcbn0oWiksIHJ0ID0gZnVuY3Rpb24odCkge1xuICBRKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gZSwgaS5zb3VyY2UgPSBuLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuO1xuICAgIChuID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIHJldHVybiAoaSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogVXQ7XG4gIH0sIHI7XG59KEd0KSwgR28gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHpvID0gZnVuY3Rpb24odCkge1xuICBRKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByO1xufShwZSksIG50ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBiZShbdCwgcl0sIHdlKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgWW8gPSBmdW5jdGlvbih0KSB7XG4gIFEociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuc2NoZWR1bGVyID0gZSwgaS53b3JrID0gbiwgaS5wZW5kaW5nID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gZTtcbiAgICB2YXIgcyA9IHRoaXMuaWQsIGEgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gcyAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBzLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChpID0gdGhpcy5pZCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoYSwgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgbnQuc2V0SW50ZXJ2YWwoZS5mbHVzaC5iaW5kKGUsIHRoaXMpLCBpKTtcbiAgfSwgci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgaWYgKGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBpICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gaSAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIG50LmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIGkgPSB0aGlzLl9leGVjdXRlKGUsIG4pO1xuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIGk7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhlKTtcbiAgICB9IGNhdGNoIChhKSB7XG4gICAgICBpID0gITAsIHMgPSBhIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgcztcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSBlLmlkLCBpID0gZS5zY2hlZHVsZXIsIHMgPSBpLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgdmUocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KHpvKSwgb3QgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSBHby5ub3csIHQ7XG59KCksIEtvID0gZnVuY3Rpb24odCkge1xuICBRKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBvdC5ub3cpO1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyBlID0gbi5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCByO1xufShvdCksIEhvID0gbmV3IEtvKFlvKSwgV28gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBabyh0KSB7XG4gIHJldHVybiBrKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiBKbyh0KSB7XG4gIHJldHVybiBrKHRbemVdKTtcbn1cbmZ1bmN0aW9uIEJvKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGsodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gUW8odCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIFhvKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGVpID0gWG8oKTtcbmZ1bmN0aW9uIHRpKHQpIHtcbiAgcmV0dXJuIGsodCA9PSBudWxsID8gdm9pZCAwIDogdFtlaV0pO1xufVxuZnVuY3Rpb24gcmkodCkge1xuICByZXR1cm4gSW8odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbiwgaSwgcztcbiAgICByZXR1cm4ganQodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgb2UoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gYS5zZW50KCksIGkgPSBuLnZhbHVlLCBzID0gbi5kb25lLCBzID8gWzQsIG9lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIG9lKGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5pKHQpIHtcbiAgcmV0dXJuIGsodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gb2kodCkge1xuICBpZiAodCBpbnN0YW5jZW9mIFopXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoSm8odCkpXG4gICAgICByZXR1cm4gaWkodCk7XG4gICAgaWYgKFdvKHQpKVxuICAgICAgcmV0dXJuIHNpKHQpO1xuICAgIGlmIChabyh0KSlcbiAgICAgIHJldHVybiBhaSh0KTtcbiAgICBpZiAoQm8odCkpXG4gICAgICByZXR1cm4genQodCk7XG4gICAgaWYgKHRpKHQpKVxuICAgICAgcmV0dXJuIGNpKHQpO1xuICAgIGlmIChuaSh0KSlcbiAgICAgIHJldHVybiBsaSh0KTtcbiAgfVxuICB0aHJvdyBRbyh0KTtcbn1cbmZ1bmN0aW9uIGlpKHQpIHtcbiAgcmV0dXJuIG5ldyBaKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRbemVdKCk7XG4gICAgaWYgKGsoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKHIpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBzaSh0KSB7XG4gIHJldHVybiBuZXcgWihmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhci5jbG9zZWQ7IGUrKylcbiAgICAgIHIubmV4dCh0W2VdKTtcbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYWkodCkge1xuICByZXR1cm4gbmV3IFooZnVuY3Rpb24ocikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICByLmNsb3NlZCB8fCAoci5uZXh0KGUpLCByLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgcXQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNpKHQpIHtcbiAgcmV0dXJuIG5ldyBaKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9IHNlKHQpLCBzID0gaS5uZXh0KCk7ICFzLmRvbmU7IHMgPSBpLm5leHQoKSkge1xuICAgICAgICB2YXIgYSA9IHMudmFsdWU7XG4gICAgICAgIGlmIChyLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBzICYmICFzLmRvbmUgJiYgKG4gPSBpLnJldHVybikgJiYgbi5jYWxsKGkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6dCh0KSB7XG4gIHJldHVybiBuZXcgWihmdW5jdGlvbihyKSB7XG4gICAgdWkodCwgcikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbGkodCkge1xuICByZXR1cm4genQocmkodCkpO1xufVxuZnVuY3Rpb24gdWkodCwgcikge1xuICB2YXIgZSwgbiwgaSwgcztcbiAgcmV0dXJuIEFvKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4ganQodGhpcywgZnVuY3Rpb24odSkge1xuICAgICAgc3dpdGNoICh1LmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB1LnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IE9vKHQpLCB1LmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSB1LnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSBuLnZhbHVlLCByLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICB1LmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gdS5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gdS50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChzID0gZS5yZXR1cm4pID8gWzQsIHMuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1LnNlbnQoKSwgdS5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gci5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZGkodCwgciwgZSwgbiwgaSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IHIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBpID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAodC5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gcGkodCwgcikge1xuICB2YXIgZSA9IGsodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIG4gPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBaKG4pO1xufVxudmFyIGZpID0gSWUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gbWkodCwgcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBzID0gYSwgaSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpID8gZShzKSA6IG4obmV3IGZpKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHlpKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciBoaSA9IEllKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBfaSh0LCByKSB7XG4gIHZhciBlID0geWkodCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCBuID0gZS5maXJzdCwgaSA9IGUuZWFjaCwgcyA9IGUud2l0aCwgYSA9IHMgPT09IHZvaWQgMCA/IGdpIDogcywgYyA9IGUuc2NoZWR1bGVyLCB1ID0gYyA9PT0gdm9pZCAwID8gSG8gOiBjLCBsID0gZS5tZXRhLCBwID0gbCA9PT0gdm9pZCAwID8gbnVsbCA6IGw7XG4gIGlmIChuID09IG51bGwgJiYgaSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHhvKGZ1bmN0aW9uKG0sIGcpIHtcbiAgICB2YXIgZiwgeSwgXyA9IG51bGwsIGIgPSAwLCBBID0gZnVuY3Rpb24oRSkge1xuICAgICAgeSA9IGRpKGcsIHUsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgb2koYSh7XG4gICAgICAgICAgICBtZXRhOiBwLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBfLFxuICAgICAgICAgICAgc2VlbjogYlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoZyk7XG4gICAgICAgIH0gY2F0Y2ggKHEpIHtcbiAgICAgICAgICBnLmVycm9yKHEpO1xuICAgICAgICB9XG4gICAgICB9LCBFKTtcbiAgICB9O1xuICAgIGYgPSBtLnN1YnNjcmliZSgkbyhnLCBmdW5jdGlvbihFKSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBiKyssIGcubmV4dChfID0gRSksIGkgPiAwICYmIEEoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIWIgJiYgQShuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gdS5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdpKHQpIHtcbiAgdGhyb3cgbmV3IGhpKHQpO1xufVxuY2xhc3MgZ2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiByIH0sIHRoaXMuX3N1YmplY3QubmV4dChyKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAociwgZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHIsIGVyck1zZzogZSB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHIpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAocikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHIsIHRoaXMuc3Vic2NyaWJlID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCksIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgJGUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0ge1xuICAgICAgICBmaXJzdDogci50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBwaSgoKSA9PiBuZXcgRXJyb3Ioci50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbWkodGhpcy5fc3ViamVjdC5waXBlKF9pKGUpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IEd0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHdpLCBlcnJfXzogYmkgfSA9IFAoXCJpbml0LWZsb3dzXCIpLCB5ZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgZ2UoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHIobik7XG4gICAgICAgIHdpKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCBlLnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgYmkoYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgVyhpKSwgXCJEZXRhaWxzOlwiLCBpKSwgZS50aHJvdyhpLCBXKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCB2aSA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiByLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCBFaSA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiB5ZShcIlN0cmlwZSBQUlwiLCBOLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiB5ZShcIlN0cmlwZSBMaW5rXCIsIE4uc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHllKFwiQWlyd2FsbGV4IEdQYXlcIiwgTi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogeWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IFNpIH0gPSBQKFwiZm9ybS1jYWxsYmFja3NcIiksIEwgPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgaXQgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IEwsXG4gIG9uQmx1cjogTCxcbiAgb25DaGFuZ2U6IEwsXG4gIG9uTG9hZDogTCxcbiAgb25Mb2FkRXJyb3I6IEwsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBMLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogTCxcbiAgb25DaGVja291dFN1Y2Nlc3M6IEwsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogTCxcbiAgb25DaGVja291dEVycm9yOiBMLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogTFxufSksIFYgPSBjbGFzcyBWIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gVi5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFh0KGUsIG4gPz8gVi5OT09QLCBTaSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSBWLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5WLk5PT1AgPSAoKSA9PiB7XG59LCBWLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhpdC5rZXlvZigpLmVudW0pLmZvckVhY2goKGUpID0+IHtcbiAgICByW2VdID0gVi5OT09QO1xuICB9KSwgcjtcbn0sIFYuZnJvbU9iamVjdCA9IChyKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgVigpO1xuICByZXR1cm4gZS5zZXRDYWxsYmFja3MoaXQucGFyc2UocikpLCBlO1xufTtcbmxldCBqZSA9IFY7XG5jbGFzcyBDaSB7XG4gIGNvbnN0cnVjdG9yKHIsIGUsIG4sIGkpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAocykgPT4ge1xuICAgICAgaWYgKCFzLnNvdXJjZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgaWYgKHN0KHMub3JpZ2luKSAhPT0gc3QodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnBlbnBhbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IFVyKEpTT04ucGFyc2Uocy5kYXRhKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIFVua25vd24gZXZlbnQuIElnbm9yaW5nOlwiLCBtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiB1LCBwYXlsb2FkOiBsIH0gPSBhLCBwID0gbC50eXBlO1xuICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQobC5oZWlnaHQgPyBgJHtsLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyh1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cih1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UodSwgbC5lbGVtZW50VHlwZSwgbC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbdV0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKGwubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihsLmVsZW1lbnRUeXBlLCBsLmVycm9ycywgdSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBwKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IHN0ID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24ga2kodCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IHhyKG4pO1xuICBpZiAoISRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBQaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBBaSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIHUgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICAgICAgYSAmJiBhdChcImFwcGxlX3BheVwiLCBzLCByLCBlLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgICAgIGMgJiYgYXQoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKHUpO1xuICAgIH1cbiAgfSk7XG59LCBhdCA9ICh0LCByLCBlLCBuLCBpKSA9PiBOLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogaWUoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIGN0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogWSwgZXJyX186IHRlIH0gPSBQKFwib3AtZm9ybVwiKSwgSyA9IGNsYXNzIEsge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgZ2UoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IGdlKCksIHRoaXMuY29udGV4dCA9IG5ldyBnZSgpLCB0aGlzLmluaXRGbG93cyA9IEVpKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFkoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgWShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogY3RcbiAgICAgICAgfSk7XG4gICAgICAgIFkoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIFkoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgWShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgWShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IEsuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChpKSwgQWkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIFkoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IHZpKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBZKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBXKGUpO1xuICAgICAgICB0ZShcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbiksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3Iobik7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gZSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBuICYmIChuLm5vZGUuc3R5bGUuaGVpZ2h0ID0gZSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnNldChlKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlKSwgZSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGUsIG4gPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGkgPSBlci5wYXJzZShlKSwgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGEgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcobik7XG4gICAgICBzLm5hbWUgPSBgJHtpfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGMgPSBuZXcgVVJMKGAvYXBwL3YxLyR7cy5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBjLnNlYXJjaCA9IGEudG9TdHJpbmcoKSwgcy5zcmMgPSBjLmhyZWYsIHMuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIHMuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShpLCBzKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgIHR5cGU6IGUsXG4gICAgICAgIG5vZGU6IG4sXG4gICAgICAgIG1vdW50OiAocykgPT4ge1xuICAgICAgICAgIHZhciBhO1xuICAgICAgICAgIHJldHVybiAoYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocykpID09IG51bGwgPyB2b2lkIDAgOiBhLmFwcGVuZENoaWxkKG4pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGkudHlwZSwgbm9kZTogaS5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtuZS5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbbmUuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtuZS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW25lLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbZV0gPSBpLCBpO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChlKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIG4uYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgbi5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBlLnN0eWxlcyAmJiBuLmFwcGVuZChcInN0eWxlc1wiLCBqcihlLnN0eWxlcykpLCBuLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBuO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlKSA9PiB7XG4gICAgICBraShlLm5vZGUpLnRoZW4oKG4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGUudHlwZSwgbiksIHRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmFueUNkZUNvbm4uc2V0KG4pO1xuICAgICAgfSkuY2F0Y2goKG4pID0+IHRlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgdGUoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBOLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBpZShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICB0ZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtuLCBpXSkgPT4gKHtcbiAgICAgICAgbmFtZTogbixcbiAgICAgICAgLi4uaS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghaSkge1xuICAgICAgICB0ZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZSkge1xuICAgICAgICBjYXNlIFwicG9ja3l0LXBheXBhbFwiOlxuICAgICAgICAgIHJldHVybiBOLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogaSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoaS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGllKGkuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IG4gfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IHRlKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgICAgICBzLmlzU3VjY2VzcyAmJiBzLmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlID8gcy5sb2FkZWRWYWx1ZS5zdGFydEZsb3cobikgOiB0ZShcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICRlKGUpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBZKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGUgJiYgZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoZSk7XG4gICAgfSwgSy5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMTBcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBqZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgUGkoKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgQ2kodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5LLm9qc0Zsb3dzID0gTiwgSy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChLLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgSy5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgSy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHIuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gcHQpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgbHQgPSBLO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0gei5vYmplY3Qoe1xuICBjb2RlOiB6LnN0cmluZygpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBwYXRoOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56Lm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogei5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHouc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtmZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2ZlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7ZmUucmVkLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuXG56Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChsdC5nZXRJbnN0YW5jZSgpKSB7XG4gICAgbHQuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IGx0LmdldEluc3RhbmNlKCkgPz8gbmV3IGx0KHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheToge1xuICAgICAgICAgICAgLi4ucmVzdWx0LmxvYWRlZFZhbHVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVE7QUFFZixNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUtjLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWQsR0FBV1ksRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FB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SSxPQUFPLENBQUMsQ0FBQztBQWF4QyxHQUVNc2YsS0FBaUIsQ0FBQyxFQUFFLFFBQUF0RyxFQUFPLE1BQ1IsZ0JBQUFoWixFQUFJc2UsSUFBYyxFQUFFLFFBQUF0RixHQUFRLGFBQWE3QixHQUFnQixTQUFTLENBQUMsR0FHdEZvSSxLQUFjLENBQUMsRUFBRSxRQUFBdkcsRUFBTyxNQUNMLGdCQUFBaFosRUFBSXNlLElBQWMsRUFBRSxRQUFBdEYsR0FBUSxhQUFhN0IsR0FBZ0IsS0FBSyxDQUFDLEdBR2xGcUksS0FBb0IsQ0FBQyxFQUFFLFFBQUF4RyxFQUFPLE1BQ1gsZ0JBQUFoWixFQUFJc2UsSUFBYyxFQUFFLFFBQUF0RixHQUFRLGFBQWE3QixHQUFnQixZQUFZLENBQUMsR0FHekZzSSxLQUFvQixDQUFDLEVBQUUsUUFBQXpHLEVBQU8sTUFDWCxnQkFBQWhaLEVBQUlzZSxJQUFjLEVBQUUsUUFBQXRGLEdBQVEsYUFBYTdCLEdBQWdCLFlBQVksQ0FBQzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJqc3giLCAiRnJhZ21lbnQiLCAieiIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJmZSIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAicHQiLCAiWXQiLCAiS3QiLCAiSHQiLCAiV3QiLCAiWnQiLCAiTWUiLCAiSnQiLCAiQnQiLCAiZSIsICJRdCIsICJXIiwgIlh0IiwgIm4iLCAiSSIsICJ2IiwgIlIiLCAiZCIsICJmdCIsICJtdCIsICJ5dCIsICJodCIsICJuZSIsICJlciIsICJFZSIsICJ0ciIsICJVIiwgInJyIiwgIm5yIiwgIm9yIiwgImlyIiwgInNyIiwgImFyIiwgImNyIiwgImxyIiwgInVyIiwgImRyIiwgInByIiwgImZyIiwgInVlIiwgIm1yIiwgInlyIiwgImhyIiwgIl9yIiwgImdyIiwgIndyIiwgImJyIiwgIlVlIiwgInZyIiwgIkVyIiwgIlNyIiwgImoiLCAiQ3IiLCAia3IiLCAiX3QiLCAiUHIiLCAiQXIiLCAiSXIiLCAiT3IiLCAiUnIiLCAiVHIiLCAiU2UiLCAiWWUiLCAiZ3QiLCAiTXIiLCAiRHIiLCAicyIsICJhIiwgIkZyIiwgIkxyIiwgIk5yIiwgImkiLCAiYyIsICJqciIsICJpZSIsICJVciIsICJ4ciIsICIkciIsICJWciIsICJ3dCIsICJidCIsICJxciIsICJHciIsICJkZSIsICJ6ciIsICJZciIsICJ2dCIsICJLciIsICJIciIsICJXciIsICJLZSIsICJFdCIsICJIZSIsICJTdCIsICJaciIsICJKciIsICJCciIsICJRciIsICJYciIsICJlbiIsICJ0biIsICJybiIsICJDdCIsICJubiIsICJvbiIsICJzbiIsICJhbiIsICJjbiIsICJsbiIsICJ1biIsICJrdCIsICJUIiwgInBuIiwgImRuIiwgImZuIiwgIkIiLCAieGUiLCAibW4iLCAieW4iLCAiSiIsICJobiIsICJfbiIsICJDZSIsICJnbiIsICJXZSIsICJ3biIsICJrZSIsICJQdCIsICJibiIsICJ2biIsICIkZSIsICJhZSIsICJQZSIsICJQIiwgIkRpIiwgIkVuIiwgIlZlIiwgImNlIiwgIlNuIiwgIkF0IiwgIkl0IiwgImxlIiwgIkNuIiwgIlplIiwgIkMiLCAia24iLCAiUG4iLCAiQW4iLCAiSW4iLCAidSIsICJsIiwgInAiLCAibSIsICJnIiwgImYiLCAiTiIsICJUbiIsICJPbiIsICJSbiIsICJNbiIsICJEbiIsICJGbiIsICJMbiIsICJBZSIsICJPdCIsICJObiIsICJqbiIsICJVbiIsICJSdCIsICJ4biIsICIkbiIsICJUdCIsICJWbiIsICJxbiIsICJHbiIsICJ6biIsICJxZSIsICJZbiIsICJLbiIsICJIbiIsICJXbiIsICJabiIsICJ3IiwgIkplIiwgIkJlIiwgIkpuIiwgImIiLCAieSIsICJlbyIsICJYbiIsICJfIiwgIkEiLCAiQm4iLCAiUW4iLCAiTyIsICJ0byIsICJybyIsICJubyIsICJvbyIsICJzbyIsICJpbyIsICJhbyIsICIkIiwgIlFlIiwgImNvIiwgImxvIiwgIlgiLCAiRyIsICJFIiwgInEiLCAiUyIsICJNIiwgIk10IiwgInVvIiwgInBvIiwgImZvIiwgIkQiLCAicmUiLCAiT2UiLCAiRHQiLCAiRnQiLCAiTHQiLCAibW8iLCAieW8iLCAiRiIsICJlZSIsICJ4IiwgImhvIiwgIl9vIiwgImdvIiwgIndvIiwgImJvIiwgImhlIiwgInZvIiwgIkVvIiwgIlNvIiwgIkNvIiwgIkgiLCAiRGUiLCAiTnQiLCAia28iLCAiUG8iLCAiRmUiLCAiTGUiLCAiUSIsICJBbyIsICJqdCIsICJzZSIsICJ3ZSIsICJiZSIsICJvZSIsICJJbyIsICJPbyIsICJrIiwgIkllIiwgIlJlIiwgInZlIiwgInBlIiwgIlhlIiwgIlV0IiwgInh0IiwgIiR0IiwgIlZ0IiwgInF0IiwgImV0IiwgIl9lIiwgIkdlIiwgIkRvIiwgIk5lIiwgIlJvIiwgIlRlIiwgIlRvIiwgIm1lIiwgIk1vIiwgInplIiwgIkZvIiwgIkxvIiwgIloiLCAiam8iLCAidHQiLCAiTm8iLCAiVW8iLCAieG8iLCAiJG8iLCAiVm8iLCAicW8iLCAiR3QiLCAicnQiLCAiR28iLCAiem8iLCAibnQiLCAiWW8iLCAib3QiLCAiS28iLCAiSG8iLCAiV28iLCAiWm8iLCAiSm8iLCAiQm8iLCAiUW8iLCAiWG8iLCAiZWkiLCAidGkiLCAicmkiLCAibmkiLCAib2kiLCAiaWkiLCAic2kiLCAiYWkiLCAienQiLCAiY2kiLCAibGkiLCAidWkiLCAiZGkiLCAicGkiLCAiZmkiLCAibWkiLCAieWkiLCAiaGkiLCAiX2kiLCAiZ2kiLCAiZ2UiLCAid2kiLCAiYmkiLCAieWUiLCAidmkiLCAiRWkiLCAiU2kiLCAiTCIsICJpdCIsICJWIiwgInIiLCAiamUiLCAiQ2kiLCAic3QiLCAia2kiLCAiUGkiLCAiQWkiLCAiYXQiLCAiY3QiLCAiWSIsICJ0ZSIsICJLIiwgImx0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJBV1hfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|