@getopenpay/openpay-js-react 0.2.6 → 0.2.8-alpha.c35a29a
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.d.ts +12 -5
- package/dist/index.js +516 -505
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createContext as
|
|
1
|
+
import { createContext as En, useContext as Cn, useState as ae, useCallback as Sn, useEffect as We, useRef as Pn, useMemo as Ke } from "react";
|
|
2
2
|
import { jsx as F, Fragment as Ge } from "react/jsx-runtime";
|
|
3
3
|
import { z as e } from "zod";
|
|
4
|
-
import { v4 as
|
|
5
|
-
import { connectToChild as
|
|
4
|
+
import { v4 as kn } from "uuid";
|
|
5
|
+
import { connectToChild as Dt } from "penpal";
|
|
6
6
|
import ee from "chalk";
|
|
7
|
-
const
|
|
7
|
+
const Nt = En({
|
|
8
8
|
formId: "",
|
|
9
9
|
formHeight: "",
|
|
10
10
|
referrer: void 0,
|
|
@@ -12,40 +12,40 @@ const Dt = vn({
|
|
|
12
12
|
registerIframe: () => {
|
|
13
13
|
},
|
|
14
14
|
baseUrl: ""
|
|
15
|
-
}),
|
|
16
|
-
const t =
|
|
15
|
+
}), An = () => {
|
|
16
|
+
const t = Cn(Nt);
|
|
17
17
|
if (!t)
|
|
18
18
|
throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
|
|
19
19
|
return t;
|
|
20
|
-
}, Lt = "https://cde.getopenpay.com",
|
|
20
|
+
}, Lt = "https://cde.getopenpay.com", On = e.object({
|
|
21
21
|
type: e.string(),
|
|
22
22
|
loc: e.array(e.string()),
|
|
23
23
|
msg: e.string(),
|
|
24
24
|
url: e.string()
|
|
25
|
-
}),
|
|
25
|
+
}), In = e.array(On), jn = e.object({
|
|
26
26
|
code: e.string(),
|
|
27
27
|
message: e.string(),
|
|
28
28
|
path: e.array(e.string())
|
|
29
|
-
}),
|
|
29
|
+
}), Tn = e.array(jn), Rn = {
|
|
30
30
|
"failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
|
|
31
31
|
}, Qe = (t) => {
|
|
32
32
|
const r = t.toLowerCase().trim();
|
|
33
|
-
return
|
|
34
|
-
},
|
|
33
|
+
return Rn[r] ?? t;
|
|
34
|
+
}, xn = (t) => {
|
|
35
35
|
try {
|
|
36
36
|
return typeof JSON.parse(t) == "object";
|
|
37
37
|
} catch {
|
|
38
38
|
return !1;
|
|
39
39
|
}
|
|
40
|
-
},
|
|
40
|
+
}, Mn = (t) => t.length === 1 ? Qe(t[0].msg) : `Please fix the following errors:
|
|
41
41
|
${t.map((r) => `• ${Qe(r.msg)}`).join(`
|
|
42
|
-
`)}`,
|
|
42
|
+
`)}`, Dn = (t) => `Encountered the following errors:
|
|
43
43
|
${t.map((r) => `- ${r.path.join("/")}: ${r.message}`).join(`
|
|
44
44
|
`)}`, W = (t) => {
|
|
45
45
|
if (t instanceof Error)
|
|
46
|
-
if (
|
|
46
|
+
if (xn(t.message)) {
|
|
47
47
|
const r = JSON.parse(t.message);
|
|
48
|
-
return
|
|
48
|
+
return In.safeParse(r).success ? Mn(r) : Tn.safeParse(r).success ? Dn(r) : (console.warn(`Encountered unknown stringified JSON object:
|
|
49
49
|
${t.message}`), t.message);
|
|
50
50
|
} else
|
|
51
51
|
return Qe(t.message);
|
|
@@ -64,35 +64,35 @@ ${t.message}`), t.message);
|
|
|
64
64
|
n(`[form] Error running callback (${t}):`, i);
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
}, I = e.string().trim().min(1, { message: "Cannot be blank" }),
|
|
67
|
+
}, I = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), x = (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
69
|
const Ut = e.nativeEnum(p);
|
|
70
70
|
var Ft = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Ft || {});
|
|
71
71
|
const $t = e.nativeEnum(Ft), qt = e.union([Ut, $t]);
|
|
72
72
|
var ue = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(ue || {});
|
|
73
|
-
const
|
|
73
|
+
const Ln = e.nativeEnum(ue), Me = e.object({
|
|
74
74
|
provider: e.string(),
|
|
75
75
|
processor_name: x(e.string()),
|
|
76
76
|
metadata: x(e.record(e.string(), e.any()))
|
|
77
|
-
}),
|
|
77
|
+
}), Un = e.object({
|
|
78
78
|
id: e.string()
|
|
79
79
|
});
|
|
80
80
|
e.object({
|
|
81
|
-
cardNumber:
|
|
82
|
-
expiry:
|
|
83
|
-
cvc:
|
|
81
|
+
cardNumber: S,
|
|
82
|
+
expiry: S,
|
|
83
|
+
cvc: S
|
|
84
84
|
});
|
|
85
85
|
e.object({
|
|
86
|
-
backgroundColor:
|
|
87
|
-
color:
|
|
88
|
-
fontFamily:
|
|
89
|
-
fontSize:
|
|
90
|
-
fontWeight:
|
|
91
|
-
margin:
|
|
92
|
-
padding:
|
|
93
|
-
letterSpacing:
|
|
94
|
-
lineHeight:
|
|
95
|
-
hideIcon:
|
|
86
|
+
backgroundColor: S,
|
|
87
|
+
color: S,
|
|
88
|
+
fontFamily: S,
|
|
89
|
+
fontSize: S,
|
|
90
|
+
fontWeight: S,
|
|
91
|
+
margin: S,
|
|
92
|
+
padding: S,
|
|
93
|
+
letterSpacing: S,
|
|
94
|
+
lineHeight: S,
|
|
95
|
+
hideIcon: S
|
|
96
96
|
});
|
|
97
97
|
const V = e.enum([
|
|
98
98
|
// Element -> Form
|
|
@@ -115,33 +115,33 @@ const V = e.enum([
|
|
|
115
115
|
"TOKENIZE",
|
|
116
116
|
"CHECKOUT",
|
|
117
117
|
"START_PAYMENT_FLOW"
|
|
118
|
-
]),
|
|
119
|
-
type:
|
|
118
|
+
]), Fn = V.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), $n = e.object({ type: Fn }), qn = V.extract(["BLUR", "FOCUS", "CHANGE"]), Vn = e.object({
|
|
119
|
+
type: qn,
|
|
120
120
|
elementType: $t,
|
|
121
121
|
errors: e.array(e.string()).optional()
|
|
122
|
-
}),
|
|
123
|
-
type:
|
|
122
|
+
}), zn = V.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Yn = e.object({
|
|
123
|
+
type: zn,
|
|
124
124
|
message: I,
|
|
125
125
|
headers: e.record(e.string(), e.string()).optional()
|
|
126
|
-
}),
|
|
127
|
-
type:
|
|
126
|
+
}), Hn = V.extract(["VALIDATION_ERROR"]), Kn = e.object({
|
|
127
|
+
type: Hn,
|
|
128
128
|
elementType: qt,
|
|
129
129
|
errors: e.array(e.string())
|
|
130
|
-
}),
|
|
130
|
+
}), Gn = e.object({
|
|
131
131
|
type: e.literal(V.enum.LAYOUT),
|
|
132
132
|
height: I
|
|
133
|
-
}),
|
|
133
|
+
}), Zn = e.object({
|
|
134
134
|
type: e.literal(V.enum.LOADED),
|
|
135
135
|
sessionId: I,
|
|
136
136
|
totalAmountAtoms: e.number(),
|
|
137
|
-
currency:
|
|
137
|
+
currency: S,
|
|
138
138
|
checkoutPaymentMethods: e.array(Me)
|
|
139
|
-
}),
|
|
139
|
+
}), Bn = e.object({
|
|
140
140
|
type: e.literal(V.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
145
|
type: e.literal(V.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
146
146
|
paymentMethodId: e.string()
|
|
147
147
|
}), we = e.object({
|
|
@@ -150,46 +150,46 @@ const V = e.enum([
|
|
|
150
150
|
email: I,
|
|
151
151
|
zipCode: I,
|
|
152
152
|
country: I,
|
|
153
|
-
promotionCode:
|
|
154
|
-
}),
|
|
155
|
-
firstName:
|
|
156
|
-
lastName:
|
|
153
|
+
promotionCode: S
|
|
154
|
+
}), Wn = e.object({
|
|
155
|
+
firstName: S,
|
|
156
|
+
lastName: S,
|
|
157
157
|
email: I,
|
|
158
158
|
zipCode: I,
|
|
159
159
|
country: I,
|
|
160
|
-
promotionCode:
|
|
161
|
-
address:
|
|
162
|
-
city:
|
|
163
|
-
state:
|
|
164
|
-
}),
|
|
165
|
-
type:
|
|
160
|
+
promotionCode: S,
|
|
161
|
+
address: S,
|
|
162
|
+
city: S,
|
|
163
|
+
state: S
|
|
164
|
+
}), Qn = V.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Xn = e.object({
|
|
165
|
+
type: Qn,
|
|
166
166
|
sessionId: I,
|
|
167
167
|
checkoutPaymentMethod: Me,
|
|
168
168
|
paymentFlowMetadata: e.any().optional(),
|
|
169
169
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
170
|
-
existingCCPMId:
|
|
171
|
-
}).extend(we.shape),
|
|
170
|
+
existingCCPMId: S
|
|
171
|
+
}).extend(we.shape), er = e.object({
|
|
172
172
|
type: e.literal(V.enum.TOKENIZE_SUCCESS),
|
|
173
173
|
isReadyForCheckout: e.boolean()
|
|
174
|
-
}),
|
|
174
|
+
}), tr = e.object({
|
|
175
175
|
type: e.literal(V.enum.CHECKOUT_SUCCESS),
|
|
176
176
|
invoiceUrls: e.array(e.string()),
|
|
177
177
|
subscriptionIds: e.array(e.string()),
|
|
178
178
|
customerId: e.string()
|
|
179
|
-
}),
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
Hn,
|
|
179
|
+
}), nr = e.discriminatedUnion("type", [
|
|
180
|
+
$n,
|
|
181
|
+
Vn,
|
|
182
|
+
Yn,
|
|
184
183
|
Kn,
|
|
185
184
|
Gn,
|
|
186
|
-
|
|
185
|
+
Zn,
|
|
187
186
|
Xn,
|
|
188
187
|
er,
|
|
189
|
-
|
|
190
|
-
Bn
|
|
191
|
-
|
|
192
|
-
|
|
188
|
+
tr,
|
|
189
|
+
Bn,
|
|
190
|
+
Jn
|
|
191
|
+
]), rr = e.object({
|
|
192
|
+
payload: nr,
|
|
193
193
|
nonce: I,
|
|
194
194
|
formId: I,
|
|
195
195
|
elementId: I
|
|
@@ -217,20 +217,20 @@ const it = e.object({
|
|
|
217
217
|
invoice_urls: e.array(e.string()),
|
|
218
218
|
subscription_ids: e.array(e.string()),
|
|
219
219
|
customer_id: e.string()
|
|
220
|
-
}),
|
|
220
|
+
}), or = e.object({
|
|
221
221
|
elementType: e.string(),
|
|
222
222
|
errors: e.array(e.string())
|
|
223
223
|
});
|
|
224
224
|
e.object({
|
|
225
225
|
session_id: e.string()
|
|
226
226
|
});
|
|
227
|
-
const
|
|
227
|
+
const ir = e.object({
|
|
228
228
|
success: e.literal(!1),
|
|
229
229
|
error_type: e.literal("validation_error"),
|
|
230
|
-
errors: e.array(
|
|
231
|
-
}),
|
|
230
|
+
errors: e.array(or)
|
|
231
|
+
}), ar = e.discriminatedUnion("success", [
|
|
232
232
|
e.object({ success: e.literal(!0) }),
|
|
233
|
-
|
|
233
|
+
ir
|
|
234
234
|
]);
|
|
235
235
|
e.object({
|
|
236
236
|
session_id: e.string(),
|
|
@@ -246,7 +246,7 @@ e.object({
|
|
|
246
246
|
extra_metadata: e.record(e.string(), e.any()).optional()
|
|
247
247
|
});
|
|
248
248
|
var q = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(q || {});
|
|
249
|
-
const
|
|
249
|
+
const sr = e.object({
|
|
250
250
|
status: e.enum([
|
|
251
251
|
"success",
|
|
252
252
|
"failure",
|
|
@@ -258,7 +258,7 @@ const ar = e.object({
|
|
|
258
258
|
e.object({
|
|
259
259
|
href: e.string().optional().nullable()
|
|
260
260
|
});
|
|
261
|
-
const
|
|
261
|
+
const cr = e.object({
|
|
262
262
|
type: e.string(),
|
|
263
263
|
redirect_url: e.string(),
|
|
264
264
|
initial_intent_id: e.string(),
|
|
@@ -271,14 +271,14 @@ const sr = e.object({
|
|
|
271
271
|
consent_id: x(e.string()),
|
|
272
272
|
their_pm_id: x(e.string()),
|
|
273
273
|
payment_session: x(e.record(e.string(), e.any()))
|
|
274
|
-
}),
|
|
274
|
+
}), lr = e.discriminatedUnion("present", [
|
|
275
275
|
e.object({ present: e.literal(!0), href: e.string() }),
|
|
276
276
|
e.object({ present: e.literal(!1) })
|
|
277
|
-
]),
|
|
278
|
-
payment_methods: e.array(
|
|
277
|
+
]), ur = e.object({
|
|
278
|
+
payment_methods: e.array(Un),
|
|
279
279
|
pay_first_success_response: x(it),
|
|
280
280
|
required_user_actions: x(e.array(Vt))
|
|
281
|
-
}),
|
|
281
|
+
}), dr = (t) => {
|
|
282
282
|
const r = {};
|
|
283
283
|
return Object.entries(t).forEach(([n, o]) => {
|
|
284
284
|
try {
|
|
@@ -288,31 +288,31 @@ const sr = e.object({
|
|
|
288
288
|
return;
|
|
289
289
|
}
|
|
290
290
|
}), r;
|
|
291
|
-
},
|
|
291
|
+
}, pr = e.object({
|
|
292
292
|
stripe_pk: e.string(),
|
|
293
293
|
client_secret: e.string(),
|
|
294
294
|
stripe_pm_id: e.string()
|
|
295
|
-
}),
|
|
295
|
+
}), mr = e.object({
|
|
296
296
|
type: e.string(),
|
|
297
297
|
client_secret: e.string(),
|
|
298
298
|
stripe_pk: e.string()
|
|
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 zt(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
|
-
},
|
|
309
|
-
const n = await
|
|
308
|
+
}, yr = async (t, r) => {
|
|
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
|
+
}, hr = 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 sr = e.object({
|
|
|
327
327
|
requestPayerEmail: !0,
|
|
328
328
|
disableWallets: []
|
|
329
329
|
});
|
|
330
|
-
},
|
|
330
|
+
}, zt = (t) => new Promise((r) => {
|
|
331
331
|
setTimeout(r, t);
|
|
332
|
-
}), dt = () => "Stripe" in window,
|
|
332
|
+
}), dt = () => "Stripe" in window, fr = 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 sr = 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 sr = 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")
|
|
@@ -365,7 +365,7 @@ const sr = e.object({
|
|
|
365
365
|
return i ? { ...n, [i]: o.value } : n;
|
|
366
366
|
}, {}), vr = (t) => {
|
|
367
367
|
try {
|
|
368
|
-
return
|
|
368
|
+
return rr.parse(t);
|
|
369
369
|
} catch (r) {
|
|
370
370
|
throw console.error("Error parsing event payload:", t, r), r;
|
|
371
371
|
}
|
|
@@ -379,7 +379,7 @@ const sr = 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, f = (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 Yt = e.object({
|
|
391
391
|
name: e.string(),
|
|
392
|
-
amount_atom_off:
|
|
393
|
-
percent_off:
|
|
394
|
-
currency:
|
|
392
|
+
amount_atom_off: f(e.number()),
|
|
393
|
+
percent_off: f(e.number()),
|
|
394
|
+
currency: f(e.string()),
|
|
395
395
|
duration: e.string(),
|
|
396
|
-
duration_in_months:
|
|
397
|
-
}),
|
|
396
|
+
duration_in_months: f(e.number())
|
|
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: f(e.string()),
|
|
402
402
|
price_id: e.string(),
|
|
403
|
-
billing_interval:
|
|
404
|
-
billing_interval_count:
|
|
403
|
+
billing_interval: f(e.string()),
|
|
404
|
+
billing_interval_count: f(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: f(Pr)
|
|
409
409
|
}), ve = e.object({
|
|
410
410
|
provider: e.string(),
|
|
411
|
-
processor_name:
|
|
412
|
-
metadata:
|
|
411
|
+
processor_name: f(e.string()),
|
|
412
|
+
metadata: f(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: f(e.string()),
|
|
417
|
+
billing_interval: f(e.string()),
|
|
418
|
+
billing_interval_count: f(e.number().int()),
|
|
419
419
|
subscription_items: e.array(Ar),
|
|
420
|
-
trial_start:
|
|
421
|
-
trial_end:
|
|
422
|
-
}),
|
|
420
|
+
trial_start: f(e.string()),
|
|
421
|
+
trial_end: f(e.string())
|
|
422
|
+
}), Kt = 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(Kt),
|
|
429
429
|
subscription_item_id: e.string()
|
|
430
430
|
}), jr = e.object({
|
|
431
|
-
coupon:
|
|
431
|
+
coupon: Yt
|
|
432
432
|
}), Tr = e.object({
|
|
433
433
|
currency: e.string(),
|
|
434
434
|
discounts: e.array(jr),
|
|
435
|
-
hosted_invoice_url:
|
|
435
|
+
hosted_invoice_url: f(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(Kt)
|
|
441
441
|
}), pt = e.object({
|
|
442
442
|
created: e.array(Or),
|
|
443
443
|
invoices: e.array(Tr)
|
|
444
|
-
}),
|
|
444
|
+
}), Gt = e.object({
|
|
445
445
|
preview: pt,
|
|
446
|
-
preview_post_trial:
|
|
447
|
-
coupons: e.array(
|
|
446
|
+
preview_post_trial: f(pt),
|
|
447
|
+
coupons: e.array(Yt)
|
|
448
448
|
}), mt = e.object({
|
|
449
449
|
status: e.literal("open"),
|
|
450
450
|
token: e.string(),
|
|
451
|
-
email:
|
|
452
|
-
line_items: e.array(
|
|
451
|
+
email: f(e.string()),
|
|
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: f(Gt),
|
|
457
457
|
// Null in setup mode
|
|
458
458
|
methods_available: e.array(ve)
|
|
459
|
-
}),
|
|
459
|
+
}), Zt = e.discriminatedUnion("mode", [
|
|
460
460
|
e.object({
|
|
461
461
|
mode: e.literal("setup"),
|
|
462
462
|
currency: e.nullable(e.undefined())
|
|
@@ -470,7 +470,7 @@ const zt = e.object({
|
|
|
470
470
|
}), xr = e.object({
|
|
471
471
|
status: e.literal("expired")
|
|
472
472
|
});
|
|
473
|
-
e.union([
|
|
473
|
+
e.union([Zt, Rr, xr]);
|
|
474
474
|
e.object({
|
|
475
475
|
logo: e.string(),
|
|
476
476
|
icon: e.string(),
|
|
@@ -490,13 +490,13 @@ e.object({
|
|
|
490
490
|
customer_email: e.string(),
|
|
491
491
|
customer_zip_code: e.string(),
|
|
492
492
|
customer_country: e.string(),
|
|
493
|
-
line_items: e.array(
|
|
493
|
+
line_items: e.array(Ht),
|
|
494
494
|
total_amount_atom: e.number().int(),
|
|
495
495
|
cancel_at_end: e.boolean(),
|
|
496
496
|
checkout_payment_method: ve,
|
|
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: f(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 Dr = 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(Dr);
|
|
515
|
+
const Nr = 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 Dr = 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: f(e.record(e.string(), e.any()))
|
|
529
529
|
});
|
|
530
530
|
e.object({
|
|
531
531
|
payment_provider: e.string(),
|
|
@@ -534,13 +534,13 @@ 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(Nr.shape).extend(Fr.shape);
|
|
538
|
+
const Bt = e.object({
|
|
539
539
|
required_user_actions: e.array(e.record(e.string(), e.any())),
|
|
540
|
-
checkout_attempt_id:
|
|
540
|
+
checkout_attempt_id: f(e.string())
|
|
541
541
|
});
|
|
542
542
|
e.object({
|
|
543
|
-
fields:
|
|
543
|
+
fields: Wn,
|
|
544
544
|
checkoutPaymentMethod: ve
|
|
545
545
|
});
|
|
546
546
|
e.object({
|
|
@@ -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: f(e.string()),
|
|
560
|
+
last_name: f(e.string()),
|
|
561
|
+
line1: f(e.string()),
|
|
562
|
+
line2: f(e.string()),
|
|
563
|
+
line3: f(e.string()),
|
|
564
|
+
city: f(e.string()),
|
|
565
|
+
state: f(e.string()),
|
|
566
|
+
country: f(e.string()),
|
|
567
|
+
zip_code: f(e.string()),
|
|
568
|
+
email: f(e.string()),
|
|
569
|
+
billing_email: f(e.string()),
|
|
570
|
+
phone_number: f(e.string()),
|
|
571
|
+
update_processor_customer: f(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: f(e.string()),
|
|
576
|
+
first_name: f(e.string()),
|
|
577
|
+
last_name: f(e.string()),
|
|
578
|
+
phone_number: f(e.string()),
|
|
579
|
+
billing_email: f(e.string()),
|
|
580
|
+
address: f(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;
|
|
@@ -619,7 +619,7 @@ var Hr = /* @__PURE__ */ function() {
|
|
|
619
619
|
}
|
|
620
620
|
return r;
|
|
621
621
|
}(Error);
|
|
622
|
-
class
|
|
622
|
+
class Jt extends Kr {
|
|
623
623
|
constructor(r) {
|
|
624
624
|
const n = `${r.message}`;
|
|
625
625
|
super(n), this.response = r;
|
|
@@ -628,19 +628,19 @@ class Bt 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 Jt(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 }, Gt), ne = async (t) => await D(t, { type: "get_prefill", payload: {} }, Zt), Ne = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, Bt), 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 }, Bt), te = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, ur), Qr = async (t, r) => await D(
|
|
641
641
|
t,
|
|
642
642
|
{ type: "check_if_popup_window_verified", payload: r },
|
|
643
|
-
|
|
643
|
+
lr
|
|
644
644
|
), Xr = async (t, r, n) => {
|
|
645
645
|
const o = await Br(t, {
|
|
646
646
|
secure_token: r,
|
|
@@ -666,26 +666,26 @@ 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 }, it);
|
|
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 }, it), Wt = 1e3, no = async (t, r) => {
|
|
679
679
|
console.log(r);
|
|
680
|
-
const n = await
|
|
680
|
+
const n = await Dt({
|
|
681
681
|
iframe: t,
|
|
682
682
|
debug: !0,
|
|
683
|
-
timeout:
|
|
683
|
+
timeout: Wt,
|
|
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
|
}
|
|
@@ -726,7 +726,7 @@ const _e = (t) => async (r) => {
|
|
|
726
726
|
log__: r,
|
|
727
727
|
err__: n
|
|
728
728
|
};
|
|
729
|
-
}, { log__:
|
|
729
|
+
}, { log__: fs, err__: oo } = O("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,18 +743,18 @@ const _e = (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__: Xt } = O("common-cc"), he = (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
|
}
|
|
752
752
|
const o = we.safeParse(t);
|
|
753
753
|
if (!o.success) {
|
|
754
|
-
const i = o.error.format(), a =
|
|
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 Xt("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) => {
|
|
@@ -763,12 +763,12 @@ const _e = (t) => async (r) => {
|
|
|
763
763
|
throw n.errors.forEach((o) => {
|
|
764
764
|
const i = qt.safeParse(o.elementType);
|
|
765
765
|
if (!i.success)
|
|
766
|
-
|
|
766
|
+
Xt(`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__: k, err__: so } = O("stripe-link"), co = e.object({
|
|
773
773
|
provider: e.literal("stripe_link"),
|
|
774
774
|
processor_name: e.literal("stripe"),
|
|
@@ -787,7 +787,7 @@ const _e = (t) => async (r) => {
|
|
|
787
787
|
k("Starting stripe link flow...");
|
|
788
788
|
const i = t.anyCdeConnection, a = await ne(i), s = a.mode === "setup";
|
|
789
789
|
k("Creating stripe elements...");
|
|
790
|
-
const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = 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",
|
|
@@ -802,23 +802,23 @@ const _e = (t) => async (r) => {
|
|
|
802
802
|
googlePay: "never",
|
|
803
803
|
paypal: "never"
|
|
804
804
|
}
|
|
805
|
-
}),
|
|
805
|
+
}), _ = () => {
|
|
806
806
|
d.mount(`#${yt}`);
|
|
807
807
|
}, b = () => {
|
|
808
808
|
d.unmount();
|
|
809
809
|
};
|
|
810
|
-
return n != null && n.doNotMountOnInit ? k("NOT mounting stripe link button (doNotMountOnInit is true)") : (k("Mounting stripe link button..."),
|
|
810
|
+
return n != null && n.doNotMountOnInit ? k("NOT mounting stripe link button (doNotMountOnInit is true)") : (k("Mounting stripe link button..."), _()), d.on("click", async (m) => {
|
|
811
811
|
if (k("Stripe Link button clicked"), n != null && n.overrideLinkSubmit && !await n.overrideLinkSubmit()) {
|
|
812
812
|
k("Stripe Link submit aborted by overrideLinkSubmit");
|
|
813
813
|
return;
|
|
814
814
|
}
|
|
815
|
-
|
|
816
|
-
}), d.on("confirm", async (
|
|
817
|
-
k("Stripe Link window confirmed",
|
|
815
|
+
m.resolve();
|
|
816
|
+
}), d.on("confirm", async (m) => {
|
|
817
|
+
k("Stripe Link window confirmed", m);
|
|
818
818
|
const y = await u.createPaymentMethod({
|
|
819
819
|
elements: l,
|
|
820
820
|
params: {
|
|
821
|
-
billing_details:
|
|
821
|
+
billing_details: m.billingDetails
|
|
822
822
|
}
|
|
823
823
|
});
|
|
824
824
|
y.error ? (so("error", y.error), r.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (k("paymentMethod", y.paymentMethod), $.stripeLink.run({
|
|
@@ -832,7 +832,7 @@ const _e = (t) => async (r) => {
|
|
|
832
832
|
}), {
|
|
833
833
|
isAvailable: !0,
|
|
834
834
|
controller: {
|
|
835
|
-
mountButton:
|
|
835
|
+
mountButton: _,
|
|
836
836
|
dismountButton: b,
|
|
837
837
|
waitForButtonToMount: async () => await _o(yt)
|
|
838
838
|
}
|
|
@@ -849,9 +849,9 @@ const _e = (t) => async (r) => {
|
|
|
849
849
|
k("Running Stripe Link flow...");
|
|
850
850
|
const a = t.anyCdeConnection;
|
|
851
851
|
k("Merging PM fields with form fields...");
|
|
852
|
-
const s = mo(n, i.stripePM), c =
|
|
852
|
+
const s = mo(n, i.stripePM), c = he(s, o.get.onValidationError);
|
|
853
853
|
k("Starting payment flow...");
|
|
854
|
-
const l = await
|
|
854
|
+
const l = await Ne(a, {
|
|
855
855
|
payment_provider: r.provider,
|
|
856
856
|
checkout_payment_method: r,
|
|
857
857
|
their_existing_pm_id: i.stripePM.id,
|
|
@@ -867,14 +867,14 @@ const _e = (t) => async (r) => {
|
|
|
867
867
|
const u = lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await ne(a);
|
|
868
868
|
if (d.mode === "setup") {
|
|
869
869
|
k("Doing payment setup...");
|
|
870
|
-
const
|
|
870
|
+
const _ = await te(a, {
|
|
871
871
|
secure_token: d.token,
|
|
872
872
|
existing_cc_pm_id: u
|
|
873
873
|
});
|
|
874
|
-
return { mode: "setup", result: st(
|
|
874
|
+
return { mode: "setup", result: st(_) };
|
|
875
875
|
} else {
|
|
876
876
|
k("Doing checkout...");
|
|
877
|
-
const
|
|
877
|
+
const _ = {
|
|
878
878
|
secure_token: d.token,
|
|
879
879
|
payment_input: {
|
|
880
880
|
provider_type: r.provider
|
|
@@ -888,7 +888,7 @@ const _e = (t) => async (r) => {
|
|
|
888
888
|
cancel_at_end: !1,
|
|
889
889
|
checkout_payment_method: r
|
|
890
890
|
};
|
|
891
|
-
return { mode: "checkout", result: await Ue(a,
|
|
891
|
+
return { mode: "checkout", result: await Ue(a, _) };
|
|
892
892
|
}
|
|
893
893
|
}
|
|
894
894
|
), mo = (t, r) => {
|
|
@@ -902,7 +902,7 @@ const _e = (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}", ho = (t) => {
|
|
906
906
|
const r = document.createElement("template");
|
|
907
907
|
r.innerHTML = `
|
|
908
908
|
<style>
|
|
@@ -920,7 +920,7 @@ const _e = (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 fo(t, r, n) {
|
|
924
924
|
const o = async () => {
|
|
925
925
|
try {
|
|
926
926
|
const a = await no(t, n);
|
|
@@ -929,7 +929,7 @@ function ho(t, r, n) {
|
|
|
929
929
|
}
|
|
930
930
|
};
|
|
931
931
|
o();
|
|
932
|
-
const i = setInterval(o,
|
|
932
|
+
const i = setInterval(o, Wt);
|
|
933
933
|
return i;
|
|
934
934
|
}
|
|
935
935
|
function go({
|
|
@@ -945,20 +945,20 @@ function go({
|
|
|
945
945
|
};
|
|
946
946
|
}
|
|
947
947
|
async function $e(t) {
|
|
948
|
-
const { url: r, baseUrl: n } = t, o =
|
|
948
|
+
const { url: r, baseUrl: n } = t, o = ho(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 = fo(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
|
|
961
|
+
const en = async (t) => {
|
|
962
962
|
const r = await $e(t);
|
|
963
963
|
if (r.status === q.CANCELLED)
|
|
964
964
|
throw new Error("3DS verification cancelled");
|
|
@@ -987,7 +987,7 @@ const Xt = async (t) => {
|
|
|
987
987
|
}
|
|
988
988
|
}, 1e3);
|
|
989
989
|
});
|
|
990
|
-
}, { log__: vo, err__:
|
|
990
|
+
}, { log__: vo, err__: tn } = O("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 Xt = 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 tn(o), new Error(n);
|
|
999
999
|
}
|
|
1000
1000
|
return r.data;
|
|
1001
|
-
},
|
|
1001
|
+
}, nn = (t) => {
|
|
1002
1002
|
try {
|
|
1003
1003
|
const r = new URL(t ?? "").searchParams.get("vaultId");
|
|
1004
1004
|
if (!r)
|
|
@@ -1006,14 +1006,14 @@ const Xt = 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 tn(n, `Resulting URL: ${t}.
|
|
1010
1010
|
Error: ${W(r)}`), new Error(n);
|
|
1011
1011
|
}
|
|
1012
1012
|
}, So = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, Po = async (t, r) => {
|
|
1013
|
-
const n = Co(r), o = await
|
|
1013
|
+
const n = Co(r), o = await en({ url: n["op-pockyt-3ds-url"], baseUrl: t });
|
|
1014
1014
|
return {
|
|
1015
1015
|
existing_cc: {
|
|
1016
|
-
vault_id:
|
|
1016
|
+
vault_id: nn(o.href ?? ""),
|
|
1017
1017
|
transaction_no: n["op-pockyt-txn-no"],
|
|
1018
1018
|
reference_no: n["op-pockyt-ref-no"]
|
|
1019
1019
|
}
|
|
@@ -1041,7 +1041,7 @@ Error: ${W(r)}`), new Error(n);
|
|
|
1041
1041
|
Error: ${W(r)}`), new Error(n);
|
|
1042
1042
|
}
|
|
1043
1043
|
}, To = async (t, r) => {
|
|
1044
|
-
const n = Oo(r), o = await
|
|
1044
|
+
const n = Oo(r), o = await en({ url: n["op-airwallex-3ds-url"], baseUrl: t }), i = jo(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,7 +1052,7 @@ Error: ${W(r)}`), new Error(n);
|
|
|
1052
1052
|
consent_id: n["op-airwallex-consent-id"]
|
|
1053
1053
|
}
|
|
1054
1054
|
};
|
|
1055
|
-
}, { log__:
|
|
1055
|
+
}, { log__: C, err__: ht } = O("common-cc"), { log__: ft } = O("stripe-cc");
|
|
1056
1056
|
e.array(
|
|
1057
1057
|
e.object({
|
|
1058
1058
|
our_existing_pm_id: e.string()
|
|
@@ -1067,92 +1067,95 @@ const Ro = _e(
|
|
|
1067
1067
|
customParams: i
|
|
1068
1068
|
}) => {
|
|
1069
1069
|
var a;
|
|
1070
|
-
|
|
1070
|
+
C("├ Running common CC flow...", { checkoutPaymentMethod: r });
|
|
1071
1071
|
const s = t.anyCdeConnection, c = await ne(s);
|
|
1072
|
-
|
|
1073
|
-
const l =
|
|
1072
|
+
C(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
|
|
1073
|
+
const l = he(n, o.get.onValidationError), u = {
|
|
1074
1074
|
session_id: t.elementsSessionId,
|
|
1075
1075
|
checkout_payment_method: r,
|
|
1076
1076
|
non_cde_form_fields: l,
|
|
1077
1077
|
extra_metadata: {}
|
|
1078
1078
|
};
|
|
1079
1079
|
try {
|
|
1080
|
-
|
|
1080
|
+
C(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
1081
1081
|
const d = await eo(i.currentCdeConnections, {
|
|
1082
1082
|
session_id: t.elementsSessionId
|
|
1083
1083
|
});
|
|
1084
1084
|
if (ao(d, o.get.onValidationError), c.mode === "setup") {
|
|
1085
|
-
|
|
1086
|
-
const
|
|
1087
|
-
return
|
|
1085
|
+
C(`├ Setting up payment method in CDE [Token: ${c.token}]`);
|
|
1086
|
+
const _ = await to(s, u);
|
|
1087
|
+
return C(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
|
|
1088
1088
|
} else {
|
|
1089
|
-
|
|
1090
|
-
const
|
|
1091
|
-
return
|
|
1089
|
+
C(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
1090
|
+
const _ = await _t(s, u);
|
|
1091
|
+
return C("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
|
|
1092
1092
|
}
|
|
1093
1093
|
} catch (d) {
|
|
1094
|
-
if (d instanceof
|
|
1095
|
-
|
|
1096
|
-
const
|
|
1097
|
-
if (
|
|
1098
|
-
|
|
1099
|
-
const
|
|
1100
|
-
u.extra_metadata.pockyt =
|
|
1094
|
+
if (d instanceof Jt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
|
|
1095
|
+
C("├ Card requires 3DS, starting non-legacy payment flow"), C("Received 3DS error response headers:", d.response.headers);
|
|
1096
|
+
const _ = So(d.response.headers);
|
|
1097
|
+
if (_) {
|
|
1098
|
+
C("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
|
|
1099
|
+
const h = await Po(t.baseUrl, d.response.headers);
|
|
1100
|
+
u.extra_metadata.pockyt = h;
|
|
1101
1101
|
}
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
u.extra_metadata.airwallex = v;
|
|
1102
|
+
if (Io(d.response.headers)) {
|
|
1103
|
+
C("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
|
|
1104
|
+
const h = await To(t.baseUrl, d.response.headers);
|
|
1105
|
+
u.extra_metadata.airwallex = h;
|
|
1107
1106
|
}
|
|
1108
|
-
const
|
|
1109
|
-
|
|
1110
|
-
const
|
|
1111
|
-
|
|
1112
|
-
const
|
|
1107
|
+
const b = await Jr(s, u);
|
|
1108
|
+
C("├ Payment flow result:", b);
|
|
1109
|
+
const m = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
|
|
1110
|
+
_ ? C("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (C("├ Using stripe 3DS flow"), await No(b)) : (C("├ Using common 3DS flow"), await Do(b, t.baseUrl));
|
|
1111
|
+
const y = b.cc_pm_id;
|
|
1113
1112
|
if (c.mode === "setup") {
|
|
1114
|
-
|
|
1115
|
-
const
|
|
1113
|
+
C(`├ Confirming payment flow [cc_pm_id: ${y}]`);
|
|
1114
|
+
const h = await te(s, {
|
|
1116
1115
|
secure_token: c.token,
|
|
1117
|
-
existing_cc_pm_id:
|
|
1116
|
+
existing_cc_pm_id: y
|
|
1118
1117
|
});
|
|
1119
|
-
|
|
1120
|
-
const
|
|
1121
|
-
return
|
|
1118
|
+
C("├ Confirm payment flow result received Result:", h);
|
|
1119
|
+
const w = st(h);
|
|
1120
|
+
return C(`╰ Setup completed successfully [PM ID: ${w.payment_method_id}]`), { mode: "setup", result: w };
|
|
1122
1121
|
} else {
|
|
1123
|
-
|
|
1124
|
-
const
|
|
1122
|
+
C(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
|
|
1123
|
+
const h = await _t(s, {
|
|
1125
1124
|
...u,
|
|
1126
|
-
existing_cc_pm_id:
|
|
1127
|
-
do_not_use_legacy_cc_flow:
|
|
1125
|
+
existing_cc_pm_id: y,
|
|
1126
|
+
do_not_use_legacy_cc_flow: m
|
|
1128
1127
|
});
|
|
1129
|
-
return
|
|
1128
|
+
return C("╰ Checkout completed successfully."), { mode: "checkout", result: h };
|
|
1130
1129
|
}
|
|
1131
1130
|
}
|
|
1132
|
-
throw
|
|
1131
|
+
throw ht("╰ Error checking out card info in CDE"), ht(d), d;
|
|
1133
1132
|
}
|
|
1134
1133
|
}
|
|
1135
1134
|
), xo = (t) => {
|
|
1136
1135
|
const r = t.required_user_actions.find((n) => n.type === "stripe_3ds");
|
|
1137
1136
|
if (!r)
|
|
1138
1137
|
throw new Error("No stripe 3DS action found");
|
|
1139
|
-
return
|
|
1138
|
+
return pr.parse(r);
|
|
1140
1139
|
}, Mo = (t) => {
|
|
1141
1140
|
const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
|
|
1142
1141
|
if (!r)
|
|
1143
1142
|
throw new Error("No common 3DS action found");
|
|
1144
|
-
return
|
|
1145
|
-
},
|
|
1143
|
+
return cr.parse(r);
|
|
1144
|
+
}, Do = async (t, r) => {
|
|
1146
1145
|
const n = Mo(t);
|
|
1147
|
-
|
|
1146
|
+
if (n.type === "airwallex_payment_consent" && n.redirect_url === "3DS_COMPLETE") {
|
|
1147
|
+
C("├ Airwallex 3DS flow completed successfully");
|
|
1148
|
+
return;
|
|
1149
|
+
}
|
|
1150
|
+
C(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
|
|
1148
1151
|
const { status: o } = await $e({ url: n.redirect_url, baseUrl: r });
|
|
1149
|
-
if (
|
|
1152
|
+
if (C(`╰ 3DS verification completed [Status: ${o}]`), o === q.CANCELLED)
|
|
1150
1153
|
throw new Error("3DS verification cancelled");
|
|
1151
1154
|
if (o === q.FAILURE)
|
|
1152
1155
|
throw new Error("3DS verification failed");
|
|
1153
|
-
},
|
|
1156
|
+
}, No = async (t) => {
|
|
1154
1157
|
const r = xo(t);
|
|
1155
|
-
|
|
1158
|
+
ft(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await br(r), ft("╰ Stripe 3DS flow completed successfully");
|
|
1156
1159
|
}, { log__: R, err__: Lo } = O("stripe-pr"), Uo = e.object({
|
|
1157
1160
|
provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
|
|
1158
1161
|
processor_name: e.literal("stripe"),
|
|
@@ -1166,7 +1169,7 @@ const Ro = _e(
|
|
|
1166
1169
|
R("Initializing Stripe PR flow...");
|
|
1167
1170
|
const n = t.anyCdeConnection, o = await ne(n), i = o.mode === "setup";
|
|
1168
1171
|
R("Getting initial preview amount");
|
|
1169
|
-
const a = await Le(n, o.token, i, void 0), s = await
|
|
1172
|
+
const a = await Le(n, o.token, i, void 0), s = await hr(
|
|
1170
1173
|
r.metadata.stripe_pk,
|
|
1171
1174
|
a.amountAtom,
|
|
1172
1175
|
a.currency,
|
|
@@ -1200,26 +1203,26 @@ const Ro = _e(
|
|
|
1200
1203
|
R("Overriding PR amount with", y), Vo(c, y.amount, y.pending, y.stripeApplePay);
|
|
1201
1204
|
}
|
|
1202
1205
|
R("Showing PR dialog..."), c.show();
|
|
1203
|
-
const l = await
|
|
1206
|
+
const l = await fr(c);
|
|
1204
1207
|
R("Stripe PM added event:", l), R("Merging PM fields with form fields...");
|
|
1205
|
-
const u = qo(n, l), d =
|
|
1208
|
+
const u = qo(n, l), d = he(u, o.get.onValidationError);
|
|
1206
1209
|
R("PR dialog finished. Starting payment flow...", d);
|
|
1207
|
-
const
|
|
1210
|
+
const _ = await Wr(s, {
|
|
1208
1211
|
fields: d,
|
|
1209
1212
|
checkoutPaymentMethod: r
|
|
1210
|
-
}), b = zo(
|
|
1213
|
+
}), b = zo(_);
|
|
1211
1214
|
R("Confirming PR with Stripe..."), await gr(b, l);
|
|
1212
|
-
const
|
|
1213
|
-
if (
|
|
1215
|
+
const m = await ne(s);
|
|
1216
|
+
if (m.mode === "setup") {
|
|
1214
1217
|
R("Confirming payment flow for setup...");
|
|
1215
1218
|
const y = await te(s, {
|
|
1216
|
-
secure_token:
|
|
1219
|
+
secure_token: m.token
|
|
1217
1220
|
});
|
|
1218
1221
|
return { mode: "setup", result: st(y) };
|
|
1219
1222
|
} else {
|
|
1220
1223
|
R("Performing checkout...");
|
|
1221
1224
|
const y = {
|
|
1222
|
-
secure_token:
|
|
1225
|
+
secure_token: m.token,
|
|
1223
1226
|
payment_input: {
|
|
1224
1227
|
provider_type: r.provider
|
|
1225
1228
|
},
|
|
@@ -1229,8 +1232,8 @@ const Ro = _e(
|
|
|
1229
1232
|
customer_zip_code: d[p.ZIP_CODE],
|
|
1230
1233
|
customer_country: d[p.COUNTRY],
|
|
1231
1234
|
promotion_code: d[p.PROMOTION_CODE],
|
|
1232
|
-
line_items:
|
|
1233
|
-
total_amount_atom:
|
|
1235
|
+
line_items: m.line_items,
|
|
1236
|
+
total_amount_atom: m.amount_total_atom,
|
|
1234
1237
|
cancel_at_end: !1,
|
|
1235
1238
|
checkout_payment_method: r
|
|
1236
1239
|
};
|
|
@@ -1239,8 +1242,8 @@ const Ro = _e(
|
|
|
1239
1242
|
}
|
|
1240
1243
|
), qo = (t, r) => {
|
|
1241
1244
|
var n, o, i, a;
|
|
1242
|
-
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,
|
|
1243
|
-
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) || (
|
|
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", R("Final form inputs:", s), s;
|
|
1244
1247
|
}, Vo = (t, r, n, o) => {
|
|
1245
1248
|
t.update({
|
|
1246
1249
|
total: {
|
|
@@ -1255,7 +1258,7 @@ const Ro = _e(
|
|
|
1255
1258
|
if (t.required_user_actions.length !== 1)
|
|
1256
1259
|
throw new Error(`Error occurred.
|
|
1257
1260
|
Details: got ${t.required_user_actions.length} required user actions`);
|
|
1258
|
-
return
|
|
1261
|
+
return mr.parse(t.required_user_actions[0]);
|
|
1259
1262
|
}, { log__: Z, err__: gt } = O("pockyt-paypal"), Yo = e.object({
|
|
1260
1263
|
processor_name: e.literal("pockyt"),
|
|
1261
1264
|
provider: e.literal("paypal")
|
|
@@ -1272,61 +1275,69 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1272
1275
|
formCallbacks: o,
|
|
1273
1276
|
customParams: i
|
|
1274
1277
|
}) => {
|
|
1278
|
+
var a, s;
|
|
1275
1279
|
Z("Running Pockyt Paypal flow...");
|
|
1276
|
-
const
|
|
1280
|
+
const c = t.anyCdeConnection, l = await ne(c);
|
|
1277
1281
|
Z("Verifying CPM...");
|
|
1278
|
-
const
|
|
1282
|
+
const u = Yo.parse(r);
|
|
1279
1283
|
Z("├ Validating non-CDE form fields");
|
|
1280
|
-
const
|
|
1284
|
+
const d = i == null ? void 0 : i.settings, _ = he(
|
|
1281
1285
|
n,
|
|
1282
1286
|
o.get.onValidationError,
|
|
1283
|
-
|
|
1284
|
-
),
|
|
1285
|
-
Z(`Starting payment flow... Mode: ${
|
|
1286
|
-
const m =
|
|
1287
|
-
payment_provider:
|
|
1288
|
-
checkout_payment_method:
|
|
1287
|
+
d == null ? void 0 : d.defaultFieldValues
|
|
1288
|
+
), b = io(_);
|
|
1289
|
+
Z(`Starting payment flow... Mode: ${l.mode}`);
|
|
1290
|
+
const m = l.mode !== "setup", y = await Ne(c, {
|
|
1291
|
+
payment_provider: u.provider,
|
|
1292
|
+
checkout_payment_method: u,
|
|
1289
1293
|
use_pay_first_flow: m,
|
|
1290
1294
|
pay_first_flow_cart_info: m ? {
|
|
1291
1295
|
// TODO add coupon and cart adjusted line items later
|
|
1292
|
-
line_items:
|
|
1293
|
-
displayed_total_amount_atom:
|
|
1296
|
+
line_items: l.line_items,
|
|
1297
|
+
displayed_total_amount_atom: l.amount_total_atom
|
|
1294
1298
|
} : void 0,
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
const _ = Ho.parse(b.required_user_actions)[0];
|
|
1300
|
-
Z("Opening paypal iframe...");
|
|
1301
|
-
const y = await wo(
|
|
1302
|
-
"PayPal",
|
|
1303
|
-
a,
|
|
1304
|
-
_.verify_token,
|
|
1305
|
-
_.paypal_iframe_url
|
|
1306
|
-
);
|
|
1307
|
-
Z("Paypal flow result", y);
|
|
1308
|
-
const f = tn(y.href);
|
|
1309
|
-
Z(`Confirming payment flow using vault ID ${f}`);
|
|
1310
|
-
const w = await te(a, {
|
|
1311
|
-
secure_token: s.token,
|
|
1312
|
-
their_pm_id: f,
|
|
1313
|
-
checkout_attempt_id: m ? b.checkout_attempt_id : void 0
|
|
1299
|
+
processor_specific_metadata: {
|
|
1300
|
+
use_paypal_redirect_flow: !!((a = i == null ? void 0 : i.settings) != null && a.useRedirectFlow)
|
|
1301
|
+
},
|
|
1302
|
+
...b
|
|
1314
1303
|
});
|
|
1315
|
-
if (Z("
|
|
1304
|
+
if (Z("Start payment flow response", y), !y.checkout_attempt_id)
|
|
1305
|
+
throw gt("Checkout attempt ID not found in response:", y), new Error("An error occurred during checkout, please try again with another payment method.");
|
|
1306
|
+
const h = Ho.parse(y.required_user_actions)[0];
|
|
1307
|
+
if ((s = i == null ? void 0 : i.settings) != null && s.useRedirectFlow)
|
|
1308
|
+
throw window.location.href = h.paypal_iframe_url, await zt(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
|
|
1309
|
+
{
|
|
1310
|
+
Z("Opening paypal iframe...");
|
|
1311
|
+
const w = await wo(
|
|
1312
|
+
"PayPal",
|
|
1313
|
+
c,
|
|
1314
|
+
h.verify_token,
|
|
1315
|
+
h.paypal_iframe_url
|
|
1316
|
+
);
|
|
1317
|
+
Z("Paypal flow result", w);
|
|
1318
|
+
const v = nn(w.href);
|
|
1319
|
+
Z(`Confirming payment flow using vault ID ${v}`);
|
|
1320
|
+
const E = await te(c, {
|
|
1321
|
+
secure_token: l.token,
|
|
1322
|
+
their_pm_id: v,
|
|
1323
|
+
checkout_attempt_id: m ? y.checkout_attempt_id : void 0
|
|
1324
|
+
});
|
|
1325
|
+
if (Z("Confirm payment flow result", E), l.mode === "setup")
|
|
1326
|
+
return {
|
|
1327
|
+
mode: "setup",
|
|
1328
|
+
result: {
|
|
1329
|
+
payment_method_id: E.payment_methods[0].id
|
|
1330
|
+
}
|
|
1331
|
+
};
|
|
1332
|
+
if (!E.pay_first_success_response)
|
|
1333
|
+
throw gt("Checkout failed, no pay-first success response:", E), new Error("Checkout failed, please try again with another payment method.");
|
|
1316
1334
|
return {
|
|
1317
|
-
mode: "
|
|
1318
|
-
result:
|
|
1319
|
-
payment_method_id: w.payment_methods[0].id
|
|
1320
|
-
}
|
|
1335
|
+
mode: "checkout",
|
|
1336
|
+
result: E.pay_first_success_response
|
|
1321
1337
|
};
|
|
1322
|
-
|
|
1323
|
-
throw gt("Checkout failed, no pay-first success response:", w), new Error("Checkout failed, please try again with another payment method.");
|
|
1324
|
-
return {
|
|
1325
|
-
mode: "checkout",
|
|
1326
|
-
result: w.pay_first_success_response
|
|
1327
|
-
};
|
|
1338
|
+
}
|
|
1328
1339
|
}
|
|
1329
|
-
),
|
|
1340
|
+
), rn = ({
|
|
1330
1341
|
gateway: t,
|
|
1331
1342
|
gatewayMerchantId: r,
|
|
1332
1343
|
merchantName: n,
|
|
@@ -1335,7 +1346,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1335
1346
|
overridePaymentRequest: a
|
|
1336
1347
|
}) => {
|
|
1337
1348
|
var s, c;
|
|
1338
|
-
const l = ((s = a == null ? void 0 : a.amount) == null ? void 0 : s.amountAtom) ?? (i == null ? void 0 : i.amountAtom) ?? 0, u = Math.max(l / 100, 0), d = (((c = a == null ? void 0 : a.amount) == null ? void 0 : c.currency) ?? (i == null ? void 0 : i.currency) ?? "USD").toUpperCase(),
|
|
1349
|
+
const l = ((s = a == null ? void 0 : a.amount) == null ? void 0 : s.amountAtom) ?? (i == null ? void 0 : i.amountAtom) ?? 0, u = Math.max(l / 100, 0), d = (((c = a == null ? void 0 : a.amount) == null ? void 0 : c.currency) ?? (i == null ? void 0 : i.currency) ?? "USD").toUpperCase(), _ = {
|
|
1339
1350
|
apiVersion: 2,
|
|
1340
1351
|
apiVersionMinor: 0,
|
|
1341
1352
|
allowedPaymentMethods: [
|
|
@@ -1375,7 +1386,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1375
1386
|
totalPrice: u.toFixed(2)
|
|
1376
1387
|
}
|
|
1377
1388
|
};
|
|
1378
|
-
return a != null && a.googlePayPaymentRequest ? { ...
|
|
1389
|
+
return a != null && a.googlePayPaymentRequest ? { ..._, ...a.googlePayPaymentRequest } : _;
|
|
1379
1390
|
}, Go = () => new Promise((t, r) => {
|
|
1380
1391
|
const n = document.createElement("script");
|
|
1381
1392
|
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);
|
|
@@ -1390,15 +1401,15 @@ Details: got ${t.required_user_actions.length} required user actions`);
|
|
|
1390
1401
|
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";
|
|
1391
1402
|
}
|
|
1392
1403
|
return s;
|
|
1393
|
-
}, { log__:
|
|
1404
|
+
}, { log__: N, err__: se } = O("awx-google-pay");
|
|
1394
1405
|
let Ze = null;
|
|
1395
|
-
const
|
|
1396
|
-
const n =
|
|
1406
|
+
const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TEST", an = (t, r) => {
|
|
1407
|
+
const n = on(t);
|
|
1397
1408
|
return Ze === null && (Ze = new window.google.payments.api.PaymentsClient({
|
|
1398
1409
|
environment: n,
|
|
1399
1410
|
merchantInfo: r.merchantInfo
|
|
1400
1411
|
})), Ze;
|
|
1401
|
-
},
|
|
1412
|
+
}, sn = e.object({
|
|
1402
1413
|
provider: e.literal("google_pay"),
|
|
1403
1414
|
processor_name: e.literal("airwallex"),
|
|
1404
1415
|
metadata: e.object({
|
|
@@ -1409,34 +1420,34 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1409
1420
|
}), Jo = Fe(
|
|
1410
1421
|
async ({ context: t, formCallbacks: r }) => {
|
|
1411
1422
|
var n, o;
|
|
1412
|
-
const i = ye(t.checkoutPaymentMethods,
|
|
1423
|
+
const i = ye(t.checkoutPaymentMethods, sn);
|
|
1413
1424
|
if (!i)
|
|
1414
1425
|
return { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1415
1426
|
} };
|
|
1416
|
-
|
|
1427
|
+
N("Google Pay CPM", i);
|
|
1417
1428
|
const a = i.metadata;
|
|
1418
1429
|
if (!a.processor_account_id)
|
|
1419
1430
|
return se("No gateway merchant ID found in processor account"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1420
1431
|
} };
|
|
1421
|
-
if (
|
|
1432
|
+
if (N("Loading Google Pay SDK..."), await Go(), !((o = (n = window.google) == null ? void 0 : n.payments) != null && o.api))
|
|
1422
1433
|
return se("Google Pay SDK not loaded properly"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1423
1434
|
} };
|
|
1424
|
-
if (
|
|
1435
|
+
if (on(t.baseUrl) === "PRODUCTION" && !a.google_pay_merchant_id)
|
|
1425
1436
|
return se("Google Pay merchant ID is required for production environment"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1426
1437
|
} };
|
|
1427
|
-
|
|
1438
|
+
N("Google Pay SDK loaded", window.google.payments);
|
|
1428
1439
|
try {
|
|
1429
|
-
const s =
|
|
1440
|
+
const s = rn({
|
|
1430
1441
|
gateway: "airwallex",
|
|
1431
1442
|
gatewayMerchantId: a.processor_account_id,
|
|
1432
1443
|
merchantName: a.processor_account_name,
|
|
1433
1444
|
merchantId: a.google_pay_merchant_id ?? "",
|
|
1434
1445
|
initialPreview: void 0
|
|
1435
|
-
}), { result: c } = await
|
|
1446
|
+
}), { result: c } = await an(t.baseUrl, s).isReadyToPay(
|
|
1436
1447
|
s
|
|
1437
1448
|
);
|
|
1438
1449
|
if (!c)
|
|
1439
|
-
return
|
|
1450
|
+
return N("Google Pay is not available for this user"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1440
1451
|
} };
|
|
1441
1452
|
} catch (s) {
|
|
1442
1453
|
return se("Error checking Google Pay availability", s), { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
@@ -1469,35 +1480,35 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1469
1480
|
formCallbacks: o,
|
|
1470
1481
|
customParams: i
|
|
1471
1482
|
}) => {
|
|
1472
|
-
var a, s, c, l, u, d,
|
|
1473
|
-
|
|
1474
|
-
const b = ye(t.checkoutPaymentMethods,
|
|
1475
|
-
if (!
|
|
1483
|
+
var a, s, c, l, u, d, _;
|
|
1484
|
+
N("Starting Google Pay flow...");
|
|
1485
|
+
const b = ye(t.checkoutPaymentMethods, sn), m = t.anyCdeConnection, y = await ne(m), h = b.metadata;
|
|
1486
|
+
if (!h.processor_account_id)
|
|
1476
1487
|
throw new Error("No gateway merchant ID found in processor account");
|
|
1477
|
-
const w =
|
|
1488
|
+
const w = rn({
|
|
1478
1489
|
gateway: "airwallex",
|
|
1479
|
-
gatewayMerchantId:
|
|
1480
|
-
merchantName:
|
|
1481
|
-
merchantId:
|
|
1490
|
+
gatewayMerchantId: h.processor_account_id,
|
|
1491
|
+
merchantName: h.processor_account_name,
|
|
1492
|
+
merchantId: h.google_pay_merchant_id ?? "",
|
|
1482
1493
|
initialPreview: await Le(
|
|
1483
|
-
|
|
1494
|
+
m,
|
|
1484
1495
|
y.token,
|
|
1485
1496
|
y.mode === "setup",
|
|
1486
1497
|
void 0
|
|
1487
1498
|
),
|
|
1488
1499
|
overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest
|
|
1489
|
-
}), v =
|
|
1500
|
+
}), v = an(t.baseUrl, w);
|
|
1490
1501
|
try {
|
|
1491
|
-
const
|
|
1492
|
-
|
|
1493
|
-
const X = Bo(n,
|
|
1502
|
+
const E = await v.loadPaymentData(w);
|
|
1503
|
+
N("Google Pay Payment data", E);
|
|
1504
|
+
const X = Bo(n, E), T = he(
|
|
1494
1505
|
X,
|
|
1495
1506
|
o.get.onValidationError,
|
|
1496
1507
|
i == null ? void 0 : i.defaultFieldValues
|
|
1497
|
-
), ge = (s = (a =
|
|
1508
|
+
), ge = (s = (a = E.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
|
|
1498
1509
|
if (!ge)
|
|
1499
1510
|
throw new Error("No payment token received from Google Pay");
|
|
1500
|
-
const He = await
|
|
1511
|
+
const He = await Ne(m, {
|
|
1501
1512
|
payment_provider: r.provider,
|
|
1502
1513
|
checkout_payment_method: r,
|
|
1503
1514
|
new_customer_email: T[p.EMAIL],
|
|
@@ -1508,8 +1519,8 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1508
1519
|
country_code: T[p.COUNTRY]
|
|
1509
1520
|
}
|
|
1510
1521
|
}), K = Zo(He);
|
|
1511
|
-
|
|
1512
|
-
const G = await te(
|
|
1522
|
+
N("Start flow next actions", K);
|
|
1523
|
+
const G = await te(m, {
|
|
1513
1524
|
secure_token: y.token,
|
|
1514
1525
|
processor_specific_metadata: {
|
|
1515
1526
|
payment_provider: r.provider,
|
|
@@ -1524,24 +1535,24 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1524
1535
|
}
|
|
1525
1536
|
}
|
|
1526
1537
|
});
|
|
1527
|
-
|
|
1538
|
+
N("[1st] Confirm payment flow response", G);
|
|
1528
1539
|
let be = (l = (c = G.payment_methods) == null ? void 0 : c[0]) == null ? void 0 : l.id;
|
|
1529
1540
|
const oe = (u = G.required_user_actions) == null ? void 0 : u.find(
|
|
1530
1541
|
(Y) => Y.type === "airwallex_payment_consent"
|
|
1531
1542
|
);
|
|
1532
1543
|
if (oe && oe.redirect_url) {
|
|
1533
|
-
|
|
1544
|
+
N("3DS Required, starting verification...", oe);
|
|
1534
1545
|
const { status: Y } = await $e({
|
|
1535
1546
|
url: oe.redirect_url,
|
|
1536
1547
|
baseUrl: t.baseUrl
|
|
1537
1548
|
});
|
|
1538
|
-
if (
|
|
1549
|
+
if (N(`╰ 3DS verification completed [Status: ${Y}]`), Y === q.CANCELLED)
|
|
1539
1550
|
throw new Error("3DS verification cancelled");
|
|
1540
1551
|
if (Y === q.FAILURE)
|
|
1541
1552
|
throw new Error("3DS verification failed");
|
|
1542
1553
|
}
|
|
1543
1554
|
if (oe && !be) {
|
|
1544
|
-
const Y = await te(
|
|
1555
|
+
const Y = await te(m, {
|
|
1545
1556
|
secure_token: y.token,
|
|
1546
1557
|
their_pm_id: oe.their_pm_id,
|
|
1547
1558
|
processor_specific_metadata: {
|
|
@@ -1549,14 +1560,14 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1549
1560
|
airwallex_consent_id: oe.consent_id
|
|
1550
1561
|
}
|
|
1551
1562
|
});
|
|
1552
|
-
|
|
1563
|
+
N("[2nd] Confirm payment flow response", Y), be = (_ = (d = Y.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id;
|
|
1553
1564
|
}
|
|
1554
1565
|
if (!be)
|
|
1555
1566
|
throw new Error("No PM ID found");
|
|
1556
1567
|
if (y.mode === "setup")
|
|
1557
1568
|
return { mode: "setup", result: { payment_method_id: be } };
|
|
1558
1569
|
{
|
|
1559
|
-
|
|
1570
|
+
N("Starting one-time payment flow...");
|
|
1560
1571
|
const Y = {
|
|
1561
1572
|
secure_token: y.token,
|
|
1562
1573
|
payment_input: {
|
|
@@ -1575,10 +1586,10 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1575
1586
|
customer_first_name: T[p.FIRST_NAME],
|
|
1576
1587
|
customer_last_name: T[p.LAST_NAME]
|
|
1577
1588
|
};
|
|
1578
|
-
return { mode: "checkout", result: await Ue(
|
|
1589
|
+
return { mode: "checkout", result: await Ue(m, Y) };
|
|
1579
1590
|
}
|
|
1580
|
-
} catch (
|
|
1581
|
-
throw se("Google Pay payment error",
|
|
1591
|
+
} catch (E) {
|
|
1592
|
+
throw se("Google Pay payment error", E), new Error((E == null ? void 0 : E.message) ?? "Unknown error");
|
|
1582
1593
|
}
|
|
1583
1594
|
}
|
|
1584
1595
|
), Qo = () => new Promise((t, r) => {
|
|
@@ -1613,7 +1624,7 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1613
1624
|
}, { log__: ke } = O("awx-apple-pay");
|
|
1614
1625
|
async function ri(t, r) {
|
|
1615
1626
|
try {
|
|
1616
|
-
const n = (await
|
|
1627
|
+
const n = (await Ne(r.connection, {
|
|
1617
1628
|
payment_provider: r.checkoutPaymentMethod.provider,
|
|
1618
1629
|
checkout_payment_method: r.checkoutPaymentMethod,
|
|
1619
1630
|
new_customer_email: r.nonCdeFormInputs[p.EMAIL],
|
|
@@ -1680,7 +1691,7 @@ async function ii(t, r, n) {
|
|
|
1680
1691
|
async function ai(t, r, n) {
|
|
1681
1692
|
var o, i, a;
|
|
1682
1693
|
try {
|
|
1683
|
-
const s = t.payment, c = Xo(r.nonCdeFormInputs, s), l =
|
|
1694
|
+
const s = t.payment, c = Xo(r.nonCdeFormInputs, s), l = he(
|
|
1684
1695
|
c,
|
|
1685
1696
|
r.formCallbacks.get.onValidationError,
|
|
1686
1697
|
r.defaultFieldValues
|
|
@@ -1709,10 +1720,10 @@ async function ai(t, r, n) {
|
|
|
1709
1720
|
});
|
|
1710
1721
|
ke("[1st] Confirm payment flow response", u);
|
|
1711
1722
|
let d = (i = (o = u.payment_methods) == null ? void 0 : o[0]) == null ? void 0 : i.id;
|
|
1712
|
-
const
|
|
1713
|
-
(
|
|
1723
|
+
const _ = (a = u.required_user_actions) == null ? void 0 : a.find(
|
|
1724
|
+
(m) => m.type === "airwallex_payment_consent"
|
|
1714
1725
|
);
|
|
1715
|
-
if (
|
|
1726
|
+
if (_ != null && _.redirect_url && _.consent_id && _.their_pm_id && (d = await oi(_, r)), !d)
|
|
1716
1727
|
throw new Error("No PM ID found");
|
|
1717
1728
|
const b = {
|
|
1718
1729
|
status: ApplePaySession.STATUS_SUCCESS
|
|
@@ -1725,7 +1736,7 @@ async function ai(t, r, n) {
|
|
|
1725
1736
|
throw r.session.completePayment(c), s;
|
|
1726
1737
|
}
|
|
1727
1738
|
}
|
|
1728
|
-
const { log__: J, err__: Xe } = O("awx-apple-pay"),
|
|
1739
|
+
const { log__: J, err__: Xe } = O("awx-apple-pay"), cn = e.object({
|
|
1729
1740
|
provider: e.literal("apple_pay"),
|
|
1730
1741
|
processor_name: e.literal("airwallex"),
|
|
1731
1742
|
metadata: e.object({
|
|
@@ -1734,7 +1745,7 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
|
|
|
1734
1745
|
})
|
|
1735
1746
|
}), si = Fe(
|
|
1736
1747
|
async ({ context: t, formCallbacks: r }) => {
|
|
1737
|
-
const n = ye(t.checkoutPaymentMethods,
|
|
1748
|
+
const n = ye(t.checkoutPaymentMethods, cn);
|
|
1738
1749
|
if (!n)
|
|
1739
1750
|
return { isAvailable: !1, isLoading: !1, startFlow: async () => {
|
|
1740
1751
|
} };
|
|
@@ -1788,11 +1799,11 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
|
|
|
1788
1799
|
formCallbacks: i
|
|
1789
1800
|
}) => {
|
|
1790
1801
|
var a, s;
|
|
1791
|
-
const c = ye(t.checkoutPaymentMethods,
|
|
1792
|
-
label: (
|
|
1793
|
-
type:
|
|
1794
|
-
amount:
|
|
1795
|
-
},
|
|
1802
|
+
const c = ye(t.checkoutPaymentMethods, cn), { 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 = {
|
|
1803
|
+
label: (_ == null ? void 0 : _.label) ?? "Total",
|
|
1804
|
+
type: _ != null && _.pending ? "pending" : "final",
|
|
1805
|
+
amount: m
|
|
1806
|
+
}, h = {
|
|
1796
1807
|
countryCode: "US",
|
|
1797
1808
|
currencyCode: b,
|
|
1798
1809
|
requiredBillingContactFields: ["email", "postalAddress", "name"],
|
|
@@ -1805,10 +1816,10 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
|
|
|
1805
1816
|
"supportsEMV"
|
|
1806
1817
|
],
|
|
1807
1818
|
total: y,
|
|
1808
|
-
...(
|
|
1819
|
+
...(_ == null ? void 0 : _.applePayPaymentRequest) ?? {}
|
|
1809
1820
|
};
|
|
1810
|
-
J("Payment Request",
|
|
1811
|
-
const w = new ApplePaySession(3,
|
|
1821
|
+
J("Payment Request", h);
|
|
1822
|
+
const w = new ApplePaySession(3, h);
|
|
1812
1823
|
J("ApplePaySession", w);
|
|
1813
1824
|
const v = {
|
|
1814
1825
|
session: w,
|
|
@@ -1822,14 +1833,14 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
|
|
|
1822
1833
|
formCallbacks: i,
|
|
1823
1834
|
defaultFieldValues: o == null ? void 0 : o.defaultFieldValues
|
|
1824
1835
|
};
|
|
1825
|
-
let
|
|
1836
|
+
let E;
|
|
1826
1837
|
return new Promise((X, T) => {
|
|
1827
1838
|
const ge = () => {
|
|
1828
1839
|
J("Payment cancelled by user"), T(new Error("Payment cancelled by user"));
|
|
1829
1840
|
}, { cleanupCancelListener: He } = ni(ge);
|
|
1830
1841
|
w.oncancel = ge, w.onvalidatemerchant = async (K) => {
|
|
1831
1842
|
try {
|
|
1832
|
-
|
|
1843
|
+
E = await ri(K, v);
|
|
1833
1844
|
} catch (G) {
|
|
1834
1845
|
T(G);
|
|
1835
1846
|
}
|
|
@@ -1840,7 +1851,7 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
|
|
|
1840
1851
|
w.completePaymentMethodSelection(K);
|
|
1841
1852
|
}, w.onpaymentauthorized = async (K) => {
|
|
1842
1853
|
try {
|
|
1843
|
-
const G = await ai(K, v,
|
|
1854
|
+
const G = await ai(K, v, E);
|
|
1844
1855
|
He(), X(G);
|
|
1845
1856
|
} catch (G) {
|
|
1846
1857
|
T(G);
|
|
@@ -1919,15 +1930,15 @@ function li(t, r, n, o) {
|
|
|
1919
1930
|
function c(d) {
|
|
1920
1931
|
try {
|
|
1921
1932
|
u(o.next(d));
|
|
1922
|
-
} catch (
|
|
1923
|
-
s(
|
|
1933
|
+
} catch (_) {
|
|
1934
|
+
s(_);
|
|
1924
1935
|
}
|
|
1925
1936
|
}
|
|
1926
1937
|
function l(d) {
|
|
1927
1938
|
try {
|
|
1928
1939
|
u(o.throw(d));
|
|
1929
|
-
} catch (
|
|
1930
|
-
s(
|
|
1940
|
+
} catch (_) {
|
|
1941
|
+
s(_);
|
|
1931
1942
|
}
|
|
1932
1943
|
}
|
|
1933
1944
|
function u(d) {
|
|
@@ -1936,7 +1947,7 @@ function li(t, r, n, o) {
|
|
|
1936
1947
|
u((o = o.apply(t, [])).next());
|
|
1937
1948
|
});
|
|
1938
1949
|
}
|
|
1939
|
-
function
|
|
1950
|
+
function ln(t, r) {
|
|
1940
1951
|
var n = { label: 0, sent: function() {
|
|
1941
1952
|
if (a[0] & 1) throw a[1];
|
|
1942
1953
|
return a[1];
|
|
@@ -2037,36 +2048,36 @@ function ui(t, r, n) {
|
|
|
2037
2048
|
return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", s), i[Symbol.asyncIterator] = function() {
|
|
2038
2049
|
return this;
|
|
2039
2050
|
}, i;
|
|
2040
|
-
function s(
|
|
2051
|
+
function s(m) {
|
|
2041
2052
|
return function(y) {
|
|
2042
|
-
return Promise.resolve(y).then(
|
|
2053
|
+
return Promise.resolve(y).then(m, _);
|
|
2043
2054
|
};
|
|
2044
2055
|
}
|
|
2045
|
-
function c(
|
|
2046
|
-
o[
|
|
2056
|
+
function c(m, y) {
|
|
2057
|
+
o[m] && (i[m] = function(h) {
|
|
2047
2058
|
return new Promise(function(w, v) {
|
|
2048
|
-
a.push([
|
|
2059
|
+
a.push([m, h, w, v]) > 1 || l(m, h);
|
|
2049
2060
|
});
|
|
2050
|
-
}, y && (i[
|
|
2061
|
+
}, y && (i[m] = y(i[m])));
|
|
2051
2062
|
}
|
|
2052
|
-
function l(
|
|
2063
|
+
function l(m, y) {
|
|
2053
2064
|
try {
|
|
2054
|
-
u(o[
|
|
2055
|
-
} catch (
|
|
2056
|
-
b(a[0][3],
|
|
2065
|
+
u(o[m](y));
|
|
2066
|
+
} catch (h) {
|
|
2067
|
+
b(a[0][3], h);
|
|
2057
2068
|
}
|
|
2058
2069
|
}
|
|
2059
|
-
function u(
|
|
2060
|
-
|
|
2070
|
+
function u(m) {
|
|
2071
|
+
m.value instanceof de ? Promise.resolve(m.value.v).then(d, _) : b(a[0][2], m);
|
|
2061
2072
|
}
|
|
2062
|
-
function d(
|
|
2063
|
-
l("next",
|
|
2073
|
+
function d(m) {
|
|
2074
|
+
l("next", m);
|
|
2064
2075
|
}
|
|
2065
|
-
function m
|
|
2066
|
-
l("throw",
|
|
2076
|
+
function _(m) {
|
|
2077
|
+
l("throw", m);
|
|
2067
2078
|
}
|
|
2068
|
-
function b(
|
|
2069
|
-
|
|
2079
|
+
function b(m, y) {
|
|
2080
|
+
m(y), a.shift(), a.length && l(a[0][0], a[0][1]);
|
|
2070
2081
|
}
|
|
2071
2082
|
}
|
|
2072
2083
|
function di(t) {
|
|
@@ -2128,8 +2139,8 @@ var Ee = function() {
|
|
|
2128
2139
|
var u = l.value;
|
|
2129
2140
|
u.remove(this);
|
|
2130
2141
|
}
|
|
2131
|
-
} catch (
|
|
2132
|
-
r = { error:
|
|
2142
|
+
} catch (h) {
|
|
2143
|
+
r = { error: h };
|
|
2133
2144
|
} finally {
|
|
2134
2145
|
try {
|
|
2135
2146
|
l && !l.done && (n = c.return) && n.call(c);
|
|
@@ -2143,26 +2154,26 @@ var Ee = function() {
|
|
|
2143
2154
|
if (A(d))
|
|
2144
2155
|
try {
|
|
2145
2156
|
d();
|
|
2146
|
-
} catch (
|
|
2147
|
-
a =
|
|
2157
|
+
} catch (h) {
|
|
2158
|
+
a = h instanceof Be ? h.errors : [h];
|
|
2148
2159
|
}
|
|
2149
|
-
var
|
|
2150
|
-
if (
|
|
2160
|
+
var _ = this._finalizers;
|
|
2161
|
+
if (_) {
|
|
2151
2162
|
this._finalizers = null;
|
|
2152
2163
|
try {
|
|
2153
|
-
for (var b = me(
|
|
2154
|
-
var y =
|
|
2164
|
+
for (var b = me(_), m = b.next(); !m.done; m = b.next()) {
|
|
2165
|
+
var y = m.value;
|
|
2155
2166
|
try {
|
|
2156
2167
|
bt(y);
|
|
2157
|
-
} catch (
|
|
2158
|
-
a = a ?? [],
|
|
2168
|
+
} catch (h) {
|
|
2169
|
+
a = a ?? [], h instanceof Be ? a = Te(Te([], je(a)), je(h.errors)) : a.push(h);
|
|
2159
2170
|
}
|
|
2160
2171
|
}
|
|
2161
|
-
} catch (
|
|
2162
|
-
o = { error:
|
|
2172
|
+
} catch (h) {
|
|
2173
|
+
o = { error: h };
|
|
2163
2174
|
} finally {
|
|
2164
2175
|
try {
|
|
2165
|
-
|
|
2176
|
+
m && !m.done && (i = b.return) && i.call(b);
|
|
2166
2177
|
} finally {
|
|
2167
2178
|
if (o) throw o.error;
|
|
2168
2179
|
}
|
|
@@ -2200,14 +2211,14 @@ var Ee = function() {
|
|
|
2200
2211
|
var r = new t();
|
|
2201
2212
|
return r.closed = !0, r;
|
|
2202
2213
|
}(), t;
|
|
2203
|
-
}(),
|
|
2204
|
-
function
|
|
2214
|
+
}(), un = Ee.EMPTY;
|
|
2215
|
+
function dn(t) {
|
|
2205
2216
|
return t instanceof Ee || t && "closed" in t && A(t.remove) && A(t.add) && A(t.unsubscribe);
|
|
2206
2217
|
}
|
|
2207
2218
|
function bt(t) {
|
|
2208
2219
|
A(t) ? t() : t.unsubscribe();
|
|
2209
2220
|
}
|
|
2210
|
-
var
|
|
2221
|
+
var pn = {
|
|
2211
2222
|
onUnhandledError: null,
|
|
2212
2223
|
onStoppedNotification: null,
|
|
2213
2224
|
Promise: void 0,
|
|
@@ -2224,7 +2235,7 @@ var dn = {
|
|
|
2224
2235
|
},
|
|
2225
2236
|
delegate: void 0
|
|
2226
2237
|
};
|
|
2227
|
-
function
|
|
2238
|
+
function mn(t) {
|
|
2228
2239
|
pi.setTimeout(function() {
|
|
2229
2240
|
throw t;
|
|
2230
2241
|
});
|
|
@@ -2238,7 +2249,7 @@ var lt = function(t) {
|
|
|
2238
2249
|
re(r, t);
|
|
2239
2250
|
function r(n) {
|
|
2240
2251
|
var o = t.call(this) || this;
|
|
2241
|
-
return o.isStopped = !1, n ? (o.destination = n,
|
|
2252
|
+
return o.isStopped = !1, n ? (o.destination = n, dn(n) && n.add(o)) : o.destination = hi, o;
|
|
2242
2253
|
}
|
|
2243
2254
|
return r.create = function(n, o, i) {
|
|
2244
2255
|
return new nt(n, o, i);
|
|
@@ -2312,7 +2323,7 @@ var _i = function() {
|
|
|
2312
2323
|
};
|
|
2313
2324
|
else {
|
|
2314
2325
|
var c;
|
|
2315
|
-
a &&
|
|
2326
|
+
a && pn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
|
|
2316
2327
|
return a.unsubscribe();
|
|
2317
2328
|
}, s = {
|
|
2318
2329
|
next: n.next && Je(n.next, c),
|
|
@@ -2325,12 +2336,12 @@ var _i = function() {
|
|
|
2325
2336
|
return r;
|
|
2326
2337
|
}(lt);
|
|
2327
2338
|
function Se(t) {
|
|
2328
|
-
|
|
2339
|
+
mn(t);
|
|
2329
2340
|
}
|
|
2330
2341
|
function yi(t) {
|
|
2331
2342
|
throw t;
|
|
2332
2343
|
}
|
|
2333
|
-
var
|
|
2344
|
+
var hi = {
|
|
2334
2345
|
closed: !0,
|
|
2335
2346
|
next: wt,
|
|
2336
2347
|
error: yi,
|
|
@@ -2338,11 +2349,11 @@ var fi = {
|
|
|
2338
2349
|
}, ut = function() {
|
|
2339
2350
|
return typeof Symbol == "function" && Symbol.observable || "@@observable";
|
|
2340
2351
|
}();
|
|
2341
|
-
function
|
|
2352
|
+
function fi(t) {
|
|
2342
2353
|
return t;
|
|
2343
2354
|
}
|
|
2344
2355
|
function gi(t) {
|
|
2345
|
-
return t.length === 0 ?
|
|
2356
|
+
return t.length === 0 ? fi : t.length === 1 ? t[0] : function(r) {
|
|
2346
2357
|
return t.reduce(function(n, o) {
|
|
2347
2358
|
return o(n);
|
|
2348
2359
|
}, r);
|
|
@@ -2410,13 +2421,13 @@ var Q = function() {
|
|
|
2410
2421
|
}();
|
|
2411
2422
|
function vt(t) {
|
|
2412
2423
|
var r;
|
|
2413
|
-
return (r = t ??
|
|
2424
|
+
return (r = t ?? pn.Promise) !== null && r !== void 0 ? r : Promise;
|
|
2414
2425
|
}
|
|
2415
2426
|
function bi(t) {
|
|
2416
2427
|
return t && A(t.next) && A(t.error) && A(t.complete);
|
|
2417
2428
|
}
|
|
2418
2429
|
function wi(t) {
|
|
2419
|
-
return t && t instanceof lt || bi(t) &&
|
|
2430
|
+
return t && t instanceof lt || bi(t) && dn(t);
|
|
2420
2431
|
}
|
|
2421
2432
|
function vi(t) {
|
|
2422
2433
|
return A(t == null ? void 0 : t.lift);
|
|
@@ -2476,7 +2487,7 @@ var Si = function(t) {
|
|
|
2476
2487
|
return function() {
|
|
2477
2488
|
t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
|
|
2478
2489
|
};
|
|
2479
|
-
}),
|
|
2490
|
+
}), _n = function(t) {
|
|
2480
2491
|
re(r, t);
|
|
2481
2492
|
function r() {
|
|
2482
2493
|
var n = t.call(this) || this;
|
|
@@ -2543,7 +2554,7 @@ var Si = function(t) {
|
|
|
2543
2554
|
return this._throwIfClosed(), this._checkFinalizedStatuses(n), this._innerSubscribe(n);
|
|
2544
2555
|
}, r.prototype._innerSubscribe = function(n) {
|
|
2545
2556
|
var o = this, i = this, a = i.hasError, s = i.isStopped, c = i.observers;
|
|
2546
|
-
return a || s ?
|
|
2557
|
+
return a || s ? un : (this.currentObservers = null, c.push(n), new Ee(function() {
|
|
2547
2558
|
o.currentObservers = null, Re(c, n);
|
|
2548
2559
|
}));
|
|
2549
2560
|
}, r.prototype._checkFinalizedStatuses = function(n) {
|
|
@@ -2572,9 +2583,9 @@ var Si = function(t) {
|
|
|
2572
2583
|
(o = (n = this.destination) === null || n === void 0 ? void 0 : n.complete) === null || o === void 0 || o.call(n);
|
|
2573
2584
|
}, r.prototype._subscribe = function(n) {
|
|
2574
2585
|
var o, i;
|
|
2575
|
-
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i :
|
|
2586
|
+
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i : un;
|
|
2576
2587
|
}, r;
|
|
2577
|
-
}(
|
|
2588
|
+
}(_n), ki = {
|
|
2578
2589
|
now: function() {
|
|
2579
2590
|
return Date.now();
|
|
2580
2591
|
},
|
|
@@ -2683,20 +2694,20 @@ function xi(t) {
|
|
|
2683
2694
|
function Mi(t) {
|
|
2684
2695
|
return Symbol.asyncIterator && A(t == null ? void 0 : t[Symbol.asyncIterator]);
|
|
2685
2696
|
}
|
|
2686
|
-
function
|
|
2697
|
+
function Di(t) {
|
|
2687
2698
|
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.");
|
|
2688
2699
|
}
|
|
2689
|
-
function
|
|
2700
|
+
function Ni() {
|
|
2690
2701
|
return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
|
|
2691
2702
|
}
|
|
2692
|
-
var Li =
|
|
2703
|
+
var Li = Ni();
|
|
2693
2704
|
function Ui(t) {
|
|
2694
2705
|
return A(t == null ? void 0 : t[Li]);
|
|
2695
2706
|
}
|
|
2696
2707
|
function Fi(t) {
|
|
2697
2708
|
return ui(this, arguments, function() {
|
|
2698
2709
|
var r, n, o, i;
|
|
2699
|
-
return
|
|
2710
|
+
return ln(this, function(a) {
|
|
2700
2711
|
switch (a.label) {
|
|
2701
2712
|
case 0:
|
|
2702
2713
|
r = t.getReader(), a.label = 1;
|
|
@@ -2738,13 +2749,13 @@ function qi(t) {
|
|
|
2738
2749
|
if (Ri(t))
|
|
2739
2750
|
return Yi(t);
|
|
2740
2751
|
if (Mi(t))
|
|
2741
|
-
return
|
|
2752
|
+
return yn(t);
|
|
2742
2753
|
if (Ui(t))
|
|
2743
2754
|
return Hi(t);
|
|
2744
2755
|
if ($i(t))
|
|
2745
2756
|
return Ki(t);
|
|
2746
2757
|
}
|
|
2747
|
-
throw
|
|
2758
|
+
throw Di(t);
|
|
2748
2759
|
}
|
|
2749
2760
|
function Vi(t) {
|
|
2750
2761
|
return new Q(function(r) {
|
|
@@ -2767,7 +2778,7 @@ function Yi(t) {
|
|
|
2767
2778
|
r.closed || (r.next(n), r.complete());
|
|
2768
2779
|
}, function(n) {
|
|
2769
2780
|
return r.error(n);
|
|
2770
|
-
}).then(null,
|
|
2781
|
+
}).then(null, mn);
|
|
2771
2782
|
});
|
|
2772
2783
|
}
|
|
2773
2784
|
function Hi(t) {
|
|
@@ -2791,7 +2802,7 @@ function Hi(t) {
|
|
|
2791
2802
|
r.complete();
|
|
2792
2803
|
});
|
|
2793
2804
|
}
|
|
2794
|
-
function
|
|
2805
|
+
function yn(t) {
|
|
2795
2806
|
return new Q(function(r) {
|
|
2796
2807
|
Gi(t, r).catch(function(n) {
|
|
2797
2808
|
return r.error(n);
|
|
@@ -2799,13 +2810,13 @@ function _n(t) {
|
|
|
2799
2810
|
});
|
|
2800
2811
|
}
|
|
2801
2812
|
function Ki(t) {
|
|
2802
|
-
return
|
|
2813
|
+
return yn(Fi(t));
|
|
2803
2814
|
}
|
|
2804
2815
|
function Gi(t, r) {
|
|
2805
2816
|
var n, o, i, a;
|
|
2806
2817
|
return li(this, void 0, void 0, function() {
|
|
2807
2818
|
var s, c;
|
|
2808
|
-
return
|
|
2819
|
+
return ln(this, function(l) {
|
|
2809
2820
|
switch (l.label) {
|
|
2810
2821
|
case 0:
|
|
2811
2822
|
l.trys.push([0, 5, 6, 11]), n = di(t), l.label = 1;
|
|
@@ -2886,24 +2897,24 @@ function ea(t, r) {
|
|
|
2886
2897
|
var n = Qi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = n.first, i = n.each, a = n.with, s = a === void 0 ? ta : a, c = n.scheduler, l = c === void 0 ? ji : c, u = n.meta, d = u === void 0 ? null : u;
|
|
2887
2898
|
if (o == null && i == null)
|
|
2888
2899
|
throw new TypeError("No timeout provided.");
|
|
2889
|
-
return Ei(function(
|
|
2890
|
-
var
|
|
2900
|
+
return Ei(function(_, b) {
|
|
2901
|
+
var m, y, h = null, w = 0, v = function(E) {
|
|
2891
2902
|
y = Zi(b, l, function() {
|
|
2892
2903
|
try {
|
|
2893
|
-
|
|
2904
|
+
m.unsubscribe(), qi(s({
|
|
2894
2905
|
meta: d,
|
|
2895
|
-
lastValue:
|
|
2906
|
+
lastValue: h,
|
|
2896
2907
|
seen: w
|
|
2897
2908
|
})).subscribe(b);
|
|
2898
2909
|
} catch (X) {
|
|
2899
2910
|
b.error(X);
|
|
2900
2911
|
}
|
|
2901
|
-
},
|
|
2912
|
+
}, E);
|
|
2902
2913
|
};
|
|
2903
|
-
|
|
2904
|
-
y == null || y.unsubscribe(), w++, b.next(
|
|
2914
|
+
m = _.subscribe(Ci(b, function(E) {
|
|
2915
|
+
y == null || y.unsubscribe(), w++, b.next(h = E), i > 0 && v(i);
|
|
2905
2916
|
}, void 0, void 0, function() {
|
|
2906
|
-
y != null && y.closed || y == null || y.unsubscribe(),
|
|
2917
|
+
y != null && y.closed || y == null || y.unsubscribe(), h = null;
|
|
2907
2918
|
})), !w && v(o != null ? typeof o == "number" ? o : +o - l.now() : i);
|
|
2908
2919
|
});
|
|
2909
2920
|
}
|
|
@@ -2947,7 +2958,7 @@ class Oe {
|
|
|
2947
2958
|
with: () => Bi(() => new Error(r.timeoutErrMsg))
|
|
2948
2959
|
};
|
|
2949
2960
|
return Wi(this._subject.pipe(ea(n)));
|
|
2950
|
-
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new
|
|
2961
|
+
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new _n();
|
|
2951
2962
|
}
|
|
2952
2963
|
get current() {
|
|
2953
2964
|
return this._current;
|
|
@@ -3066,7 +3077,7 @@ class ca {
|
|
|
3066
3077
|
}
|
|
3067
3078
|
const kt = (t) => new URL(t).origin;
|
|
3068
3079
|
async function la(t, r) {
|
|
3069
|
-
const n = await
|
|
3080
|
+
const n = await Dt({
|
|
3070
3081
|
iframe: t,
|
|
3071
3082
|
debug: !1,
|
|
3072
3083
|
childOrigin: r
|
|
@@ -3158,7 +3169,7 @@ const da = (t, r, n) => {
|
|
|
3158
3169
|
this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(n), n);
|
|
3159
3170
|
}, this.createElement = (n, o = {}) => {
|
|
3160
3171
|
if (!this.config) throw new Error("OpenPay form not initialized");
|
|
3161
|
-
const i =
|
|
3172
|
+
const i = Ln.parse(n), a = document.createElement("iframe"), s = this.buildQueryString(o);
|
|
3162
3173
|
a.name = `${i}-element`;
|
|
3163
3174
|
const c = new URL(`/app/v1/${a.name}/`, this.config.baseUrl);
|
|
3164
3175
|
return c.search = s.toString(), a.src = c.href, a.style.border = "none", a.style.width = "100%", this.registerIframe(i, a);
|
|
@@ -3248,7 +3259,7 @@ const da = (t, r, n) => {
|
|
|
3248
3259
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
|
|
3249
3260
|
}, this.updateCallbacks = (n) => {
|
|
3250
3261
|
this.formCallbacks.setCallbacks(n);
|
|
3251
|
-
}, rt.assignAsSingleton(this), this.ojsVersion = "0.2.
|
|
3262
|
+
}, rt.assignAsSingleton(this), this.ojsVersion = "0.2.8", 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-${kn()}`, 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, {
|
|
3252
3263
|
setFormHeight: this.setFormHeight,
|
|
3253
3264
|
onCdeLoaded: this.onCdeLoaded,
|
|
3254
3265
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -3292,36 +3303,36 @@ const _a = (t, r, n) => (...o) => {
|
|
|
3292
3303
|
n(`[form] Error running callback (${t}):`, i);
|
|
3293
3304
|
return;
|
|
3294
3305
|
}
|
|
3295
|
-
}, j = e.string().trim().min(1, { message: "Cannot be blank" }),
|
|
3296
|
-
var
|
|
3297
|
-
const ya = e.nativeEnum(
|
|
3306
|
+
}, j = e.string().trim().min(1, { message: "Cannot be blank" }), P = e.string().trim().optional(), M = (t) => e.nullable(t.optional());
|
|
3307
|
+
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 || {});
|
|
3308
|
+
const ya = e.nativeEnum(hn);
|
|
3298
3309
|
var fn = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(fn || {});
|
|
3299
|
-
const
|
|
3300
|
-
var
|
|
3301
|
-
e.nativeEnum(
|
|
3310
|
+
const gn = e.nativeEnum(fn), ha = e.union([ya, gn]);
|
|
3311
|
+
var fe = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(fe || {});
|
|
3312
|
+
e.nativeEnum(fe);
|
|
3302
3313
|
const Ve = e.object({
|
|
3303
3314
|
provider: e.string(),
|
|
3304
3315
|
processor_name: M(e.string()),
|
|
3305
3316
|
metadata: M(e.record(e.string(), e.any()))
|
|
3306
|
-
}),
|
|
3317
|
+
}), fa = e.object({
|
|
3307
3318
|
id: e.string()
|
|
3308
3319
|
});
|
|
3309
3320
|
e.object({
|
|
3310
|
-
cardNumber:
|
|
3311
|
-
expiry:
|
|
3312
|
-
cvc:
|
|
3321
|
+
cardNumber: P,
|
|
3322
|
+
expiry: P,
|
|
3323
|
+
cvc: P
|
|
3313
3324
|
});
|
|
3314
3325
|
e.object({
|
|
3315
|
-
backgroundColor:
|
|
3316
|
-
color:
|
|
3317
|
-
fontFamily:
|
|
3318
|
-
fontSize:
|
|
3319
|
-
fontWeight:
|
|
3320
|
-
margin:
|
|
3321
|
-
padding:
|
|
3322
|
-
letterSpacing:
|
|
3323
|
-
lineHeight:
|
|
3324
|
-
hideIcon:
|
|
3326
|
+
backgroundColor: P,
|
|
3327
|
+
color: P,
|
|
3328
|
+
fontFamily: P,
|
|
3329
|
+
fontSize: P,
|
|
3330
|
+
fontWeight: P,
|
|
3331
|
+
margin: P,
|
|
3332
|
+
padding: P,
|
|
3333
|
+
letterSpacing: P,
|
|
3334
|
+
lineHeight: P,
|
|
3335
|
+
hideIcon: P
|
|
3325
3336
|
});
|
|
3326
3337
|
const z = e.enum([
|
|
3327
3338
|
// Element -> Form
|
|
@@ -3346,7 +3357,7 @@ const z = e.enum([
|
|
|
3346
3357
|
"START_PAYMENT_FLOW"
|
|
3347
3358
|
]), ga = z.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), ba = e.object({ type: ga }), wa = z.extract(["BLUR", "FOCUS", "CHANGE"]), va = e.object({
|
|
3348
3359
|
type: wa,
|
|
3349
|
-
elementType:
|
|
3360
|
+
elementType: gn,
|
|
3350
3361
|
errors: e.array(e.string()).optional()
|
|
3351
3362
|
}), Ea = z.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ca = e.object({
|
|
3352
3363
|
type: Ea,
|
|
@@ -3354,7 +3365,7 @@ const z = e.enum([
|
|
|
3354
3365
|
headers: e.record(e.string(), e.string()).optional()
|
|
3355
3366
|
}), Sa = z.extract(["VALIDATION_ERROR"]), Pa = e.object({
|
|
3356
3367
|
type: Sa,
|
|
3357
|
-
elementType:
|
|
3368
|
+
elementType: ha,
|
|
3358
3369
|
errors: e.array(e.string())
|
|
3359
3370
|
}), ka = e.object({
|
|
3360
3371
|
type: e.literal(z.enum.LAYOUT),
|
|
@@ -3363,7 +3374,7 @@ const z = e.enum([
|
|
|
3363
3374
|
type: e.literal(z.enum.LOADED),
|
|
3364
3375
|
sessionId: j,
|
|
3365
3376
|
totalAmountAtoms: e.number(),
|
|
3366
|
-
currency:
|
|
3377
|
+
currency: P,
|
|
3367
3378
|
checkoutPaymentMethods: e.array(Ve)
|
|
3368
3379
|
}), Oa = e.object({
|
|
3369
3380
|
type: e.literal(z.enum.PAYMENT_FLOW_STARTED),
|
|
@@ -3379,24 +3390,24 @@ const z = e.enum([
|
|
|
3379
3390
|
email: j,
|
|
3380
3391
|
zipCode: j,
|
|
3381
3392
|
country: j,
|
|
3382
|
-
promotionCode:
|
|
3393
|
+
promotionCode: P
|
|
3383
3394
|
}), ja = e.object({
|
|
3384
|
-
firstName:
|
|
3385
|
-
lastName:
|
|
3395
|
+
firstName: P,
|
|
3396
|
+
lastName: P,
|
|
3386
3397
|
email: j,
|
|
3387
3398
|
zipCode: j,
|
|
3388
3399
|
country: j,
|
|
3389
|
-
promotionCode:
|
|
3390
|
-
address:
|
|
3391
|
-
city:
|
|
3392
|
-
state:
|
|
3400
|
+
promotionCode: P,
|
|
3401
|
+
address: P,
|
|
3402
|
+
city: P,
|
|
3403
|
+
state: P
|
|
3393
3404
|
}), Ta = z.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ra = e.object({
|
|
3394
3405
|
type: Ta,
|
|
3395
3406
|
sessionId: j,
|
|
3396
3407
|
checkoutPaymentMethod: Ve,
|
|
3397
3408
|
paymentFlowMetadata: e.any().optional(),
|
|
3398
3409
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
3399
|
-
existingCCPMId:
|
|
3410
|
+
existingCCPMId: P
|
|
3400
3411
|
}).extend(ze.shape), xa = e.object({
|
|
3401
3412
|
type: e.literal(z.enum.TOKENIZE_SUCCESS),
|
|
3402
3413
|
isReadyForCheckout: e.boolean()
|
|
@@ -3405,7 +3416,7 @@ const z = e.enum([
|
|
|
3405
3416
|
invoiceUrls: e.array(e.string()),
|
|
3406
3417
|
subscriptionIds: e.array(e.string()),
|
|
3407
3418
|
customerId: e.string()
|
|
3408
|
-
}),
|
|
3419
|
+
}), Da = e.discriminatedUnion("type", [
|
|
3409
3420
|
ba,
|
|
3410
3421
|
va,
|
|
3411
3422
|
Ca,
|
|
@@ -3419,7 +3430,7 @@ const z = e.enum([
|
|
|
3419
3430
|
Ia
|
|
3420
3431
|
]);
|
|
3421
3432
|
e.object({
|
|
3422
|
-
payload:
|
|
3433
|
+
payload: Da,
|
|
3423
3434
|
nonce: j,
|
|
3424
3435
|
formId: j,
|
|
3425
3436
|
elementId: j
|
|
@@ -3443,7 +3454,7 @@ e.object({
|
|
|
3443
3454
|
checkout_attempt_id: M(e.string()),
|
|
3444
3455
|
processor_specific_metadata: M(e.record(e.string(), e.any()))
|
|
3445
3456
|
});
|
|
3446
|
-
const
|
|
3457
|
+
const Na = e.object({
|
|
3447
3458
|
invoice_urls: e.array(e.string()),
|
|
3448
3459
|
subscription_ids: e.array(e.string()),
|
|
3449
3460
|
customer_id: e.string()
|
|
@@ -3508,8 +3519,8 @@ e.discriminatedUnion("present", [
|
|
|
3508
3519
|
e.object({ present: e.literal(!1) })
|
|
3509
3520
|
]);
|
|
3510
3521
|
e.object({
|
|
3511
|
-
payment_methods: e.array(
|
|
3512
|
-
pay_first_success_response: M(
|
|
3522
|
+
payment_methods: e.array(fa),
|
|
3523
|
+
pay_first_success_response: M(Na),
|
|
3513
3524
|
required_user_actions: M(e.array(Fa))
|
|
3514
3525
|
});
|
|
3515
3526
|
e.object({
|
|
@@ -3530,14 +3541,14 @@ e.object({
|
|
|
3530
3541
|
headers: e.record(e.string(), e.string()).optional()
|
|
3531
3542
|
});
|
|
3532
3543
|
e.enum(["usd", "brl"]);
|
|
3533
|
-
const
|
|
3544
|
+
const bn = e.object({
|
|
3534
3545
|
name: e.string(),
|
|
3535
3546
|
amount_atom_off: g(e.number()),
|
|
3536
3547
|
percent_off: g(e.number()),
|
|
3537
3548
|
currency: g(e.string()),
|
|
3538
3549
|
duration: e.string(),
|
|
3539
3550
|
duration_in_months: g(e.number())
|
|
3540
|
-
}),
|
|
3551
|
+
}), wn = e.object({
|
|
3541
3552
|
amount_subtotal_atom: e.number().int(),
|
|
3542
3553
|
amount_total_atom: e.number().int(),
|
|
3543
3554
|
currency: e.string(),
|
|
@@ -3562,16 +3573,16 @@ const gn = e.object({
|
|
|
3562
3573
|
subscription_items: e.array(za),
|
|
3563
3574
|
trial_start: g(e.string()),
|
|
3564
3575
|
trial_end: g(e.string())
|
|
3565
|
-
}),
|
|
3576
|
+
}), vn = e.object({
|
|
3566
3577
|
amount_atom: e.number()
|
|
3567
3578
|
}), Ha = e.object({
|
|
3568
3579
|
amount_atom: e.number(),
|
|
3569
3580
|
amount_atom_considering_discount_applied: e.number(),
|
|
3570
3581
|
currency: e.string(),
|
|
3571
|
-
discount_amount_atoms: e.array(
|
|
3582
|
+
discount_amount_atoms: e.array(vn),
|
|
3572
3583
|
subscription_item_id: e.string()
|
|
3573
3584
|
}), Ka = e.object({
|
|
3574
|
-
coupon:
|
|
3585
|
+
coupon: bn
|
|
3575
3586
|
}), Ga = e.object({
|
|
3576
3587
|
currency: e.string(),
|
|
3577
3588
|
discounts: e.array(Ka),
|
|
@@ -3580,19 +3591,19 @@ const gn = e.object({
|
|
|
3580
3591
|
remaining_amount_atom: e.number(),
|
|
3581
3592
|
tax_amount_atom: e.number(),
|
|
3582
3593
|
total_amount_atom: e.number(),
|
|
3583
|
-
total_discount_amount_atoms: e.array(
|
|
3594
|
+
total_discount_amount_atoms: e.array(vn)
|
|
3584
3595
|
}), It = e.object({
|
|
3585
3596
|
created: e.array(Ya),
|
|
3586
3597
|
invoices: e.array(Ga)
|
|
3587
3598
|
}), Za = e.object({
|
|
3588
3599
|
preview: It,
|
|
3589
3600
|
preview_post_trial: g(It),
|
|
3590
|
-
coupons: e.array(
|
|
3601
|
+
coupons: e.array(bn)
|
|
3591
3602
|
}), jt = e.object({
|
|
3592
3603
|
status: e.literal("open"),
|
|
3593
3604
|
token: e.string(),
|
|
3594
3605
|
email: g(e.string()),
|
|
3595
|
-
line_items: e.array(
|
|
3606
|
+
line_items: e.array(wn),
|
|
3596
3607
|
amount_subtotal_atom: e.number().int(),
|
|
3597
3608
|
amount_total_atom: e.number().int(),
|
|
3598
3609
|
brand: Va,
|
|
@@ -3633,7 +3644,7 @@ e.object({
|
|
|
3633
3644
|
customer_email: e.string(),
|
|
3634
3645
|
customer_zip_code: e.string(),
|
|
3635
3646
|
customer_country: e.string(),
|
|
3636
|
-
line_items: e.array(
|
|
3647
|
+
line_items: e.array(wn),
|
|
3637
3648
|
total_amount_atom: e.number().int(),
|
|
3638
3649
|
cancel_at_end: e.boolean(),
|
|
3639
3650
|
checkout_payment_method: Ce,
|
|
@@ -3921,7 +3932,7 @@ const cs = (t) => {
|
|
|
3921
3932
|
const [r, n] = ae({
|
|
3922
3933
|
apple_pay: Rt,
|
|
3923
3934
|
google_pay: Rt
|
|
3924
|
-
}), o =
|
|
3935
|
+
}), o = Sn(
|
|
3925
3936
|
(i) => {
|
|
3926
3937
|
n(i), t == null || t(i);
|
|
3927
3938
|
},
|
|
@@ -3929,45 +3940,45 @@ const cs = (t) => {
|
|
|
3929
3940
|
);
|
|
3930
3941
|
return { paymentRequests: r, overridenOnPaymentRequestLoad: o };
|
|
3931
3942
|
}, Mt = "op_ojs_form", gs = (t) => {
|
|
3932
|
-
const [r, n] = ae(), [o, i] = ae(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = ae(!1), [u, d] = ae(null), [
|
|
3943
|
+
const [r, n] = ae(), [o, i] = ae(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = ae(!1), [u, d] = ae(null), [_, b] = ae({
|
|
3933
3944
|
googlePay: Tt,
|
|
3934
3945
|
applePay: Tt
|
|
3935
|
-
}),
|
|
3946
|
+
}), m = cs({
|
|
3936
3947
|
...t,
|
|
3937
3948
|
onPaymentRequestLoad: s,
|
|
3938
|
-
onLoad: (
|
|
3949
|
+
onLoad: (h, w) => {
|
|
3939
3950
|
var v;
|
|
3940
|
-
l(!0), (v = t.onLoad) == null || v.call(t,
|
|
3951
|
+
l(!0), (v = t.onLoad) == null || v.call(t, h, w);
|
|
3941
3952
|
}
|
|
3942
3953
|
});
|
|
3943
3954
|
if (We(() => {
|
|
3944
3955
|
if (r) return;
|
|
3945
|
-
const
|
|
3956
|
+
const h = xe.getInstance() ?? new xe({
|
|
3946
3957
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
3947
3958
|
formTarget: `#${Mt}`,
|
|
3948
3959
|
baseUrl: t.baseUrl,
|
|
3949
3960
|
customInitParams: t.customInitParams,
|
|
3950
|
-
...
|
|
3961
|
+
...m
|
|
3951
3962
|
});
|
|
3952
|
-
n(
|
|
3953
|
-
const w = us(
|
|
3954
|
-
return i(w),
|
|
3963
|
+
n(h);
|
|
3964
|
+
const w = us(h);
|
|
3965
|
+
return i(w), h.initFlows.stripeLink.publisher.subscribe((v) => {
|
|
3955
3966
|
v.isSuccess && v.loadedValue.isAvailable && d(v.loadedValue.controller);
|
|
3956
|
-
}),
|
|
3957
|
-
v.isSuccess && v.loadedValue.isAvailable && b((
|
|
3958
|
-
applePay:
|
|
3967
|
+
}), h.initFlows.airwallexGooglePay.publisher.subscribe((v) => {
|
|
3968
|
+
v.isSuccess && v.loadedValue.isAvailable && b((E) => ({
|
|
3969
|
+
applePay: E.applePay,
|
|
3959
3970
|
googlePay: v.loadedValue
|
|
3960
3971
|
}));
|
|
3961
|
-
}),
|
|
3962
|
-
v.isSuccess && v.loadedValue.isAvailable && b((
|
|
3963
|
-
googlePay:
|
|
3972
|
+
}), h.initFlows.airwallexApplePay.publisher.subscribe((v) => {
|
|
3973
|
+
v.isSuccess && v.loadedValue.isAvailable && b((E) => ({
|
|
3974
|
+
googlePay: E.googlePay,
|
|
3964
3975
|
applePay: {
|
|
3965
3976
|
...v.loadedValue,
|
|
3966
3977
|
isLoading: !1
|
|
3967
3978
|
}
|
|
3968
3979
|
}));
|
|
3969
3980
|
}), () => {
|
|
3970
|
-
|
|
3981
|
+
h.destroy();
|
|
3971
3982
|
};
|
|
3972
3983
|
}, []), !r)
|
|
3973
3984
|
return /* @__PURE__ */ F(Ge, {});
|
|
@@ -3984,9 +3995,9 @@ const cs = (t) => {
|
|
|
3984
3995
|
error: null
|
|
3985
3996
|
},
|
|
3986
3997
|
stripeLink: u,
|
|
3987
|
-
airwallex:
|
|
3998
|
+
airwallex: _
|
|
3988
3999
|
};
|
|
3989
|
-
return /* @__PURE__ */ F(Ge, { children: o ? /* @__PURE__ */ F(
|
|
4000
|
+
return /* @__PURE__ */ F(Ge, { children: o ? /* @__PURE__ */ F(Nt.Provider, { value: o, children: /* @__PURE__ */ F("div", { id: Mt, className: t.className, children: t.children(y) }) }) : /* @__PURE__ */ F(Ge, {}) });
|
|
3990
4001
|
}, us = (t) => ({
|
|
3991
4002
|
formId: t.formId,
|
|
3992
4003
|
formHeight: t.formProperties.height,
|
|
@@ -3995,16 +4006,16 @@ const cs = (t) => {
|
|
|
3995
4006
|
registerIframe: t.registerIframe,
|
|
3996
4007
|
baseUrl: t.baseUrl
|
|
3997
4008
|
}), Ye = (t) => {
|
|
3998
|
-
const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } =
|
|
4009
|
+
const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = An(), u = r.toLowerCase(), [d, _] = ae(!1), b = Pn(null), m = Ke(() => n ? $a(n) : "", [n]), y = Ke(() => ({
|
|
3999
4010
|
border: "none",
|
|
4000
4011
|
width: "100%",
|
|
4001
4012
|
height: a
|
|
4002
|
-
}), [a]),
|
|
4013
|
+
}), [a]), h = Ke(() => {
|
|
4003
4014
|
if (!s || !i) return "";
|
|
4004
4015
|
const w = new URLSearchParams();
|
|
4005
|
-
return w.append("referer", i), w.append("styles",
|
|
4006
|
-
}, [
|
|
4007
|
-
return We(() =>
|
|
4016
|
+
return w.append("referer", i), w.append("styles", m), w.append("formId", o), w.append("secureToken", s), w.toString();
|
|
4017
|
+
}, [m, o, i, s]);
|
|
4018
|
+
return We(() => _(!0), []), We(() => {
|
|
4008
4019
|
!b.current || !d || c(r, b.current);
|
|
4009
4020
|
}, [d]), s ? /* @__PURE__ */ F(
|
|
4010
4021
|
"iframe",
|
|
@@ -4012,19 +4023,19 @@ const cs = (t) => {
|
|
|
4012
4023
|
id: `ojs-${u}-element`,
|
|
4013
4024
|
name: `${u}-element`,
|
|
4014
4025
|
className: "ojs-iframe",
|
|
4015
|
-
src: `${l}/app/v1/${u}-element/?${
|
|
4026
|
+
src: `${l}/app/v1/${u}-element/?${h}`,
|
|
4016
4027
|
style: y,
|
|
4017
4028
|
ref: b
|
|
4018
4029
|
}
|
|
4019
4030
|
) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ F("div", {}));
|
|
4020
|
-
}, bs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType:
|
|
4031
|
+
}, bs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD }), vs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_EXPIRY }), Es = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_NUMBER });
|
|
4021
4032
|
export {
|
|
4022
4033
|
bs as CardCvcElement,
|
|
4023
4034
|
ws as CardElement,
|
|
4024
4035
|
vs as CardExpiryElement,
|
|
4025
4036
|
Es as CardNumberElement,
|
|
4026
4037
|
gs as ElementsForm,
|
|
4027
|
-
|
|
4028
|
-
|
|
4038
|
+
hn as FieldName,
|
|
4039
|
+
An as useOpenPayElements
|
|
4029
4040
|
};
|
|
4030
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBtZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgenQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBZdCA9IHokMS5hcnJheSh6dCksIEt0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIEh0ID0geiQxLmFycmF5KEt0KSwgV3QgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBXdFtyXSA/PyB0O1xufSwgWnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEp0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgQnQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChadCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFl0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gSnQocikgOiBIdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IEJ0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFF0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCBiID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBSID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIG10ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShtdCB8fCB7fSk7XG5jb25zdCBmdCA9IHokMS5uYXRpdmVFbnVtKG10KSwgeXQgPSB6JDEudW5pb24oW3B0LCBmdF0pO1xudmFyIHJlID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkocmUgfHwge30pO1xuY29uc3QgWHQgPSB6JDEubmF0aXZlRW51bShyZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGVyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IGIsXG4gIGV4cGlyeTogYixcbiAgY3ZjOiBiXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IGIsXG4gIGNvbG9yOiBiLFxuICBmb250RmFtaWx5OiBiLFxuICBmb250U2l6ZTogYixcbiAgZm9udFdlaWdodDogYixcbiAgbWFyZ2luOiBiLFxuICBwYWRkaW5nOiBiLFxuICBsZXR0ZXJTcGFjaW5nOiBiLFxuICBsaW5lSGVpZ2h0OiBiLFxuICBoaWRlSWNvbjogYlxufSk7XG5jb25zdCBqID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHRyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgcnIgPSB6JDEub2JqZWN0KHsgdHlwZTogdHIgfSksIG5yID0gai5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIG9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG5yLFxuICBlbGVtZW50VHlwZTogZnQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIGlyID0gai5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgc3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaXIsXG4gIG1lc3NhZ2U6IEksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBhciA9IGouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgY3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogYXIsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIGxyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IElcbn0pLCB1ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChqLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBiLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgZHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHByID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBsZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEksXG4gIGxhc3ROYW1lOiBJLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogYlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogYixcbiAgbGFzdE5hbWU6IGIsXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiBiLFxuICBhZGRyZXNzOiBiLFxuICBjaXR5OiBiLFxuICBzdGF0ZTogYlxufSksIGZyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCB5ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBmcixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IGJcbn0pLmV4dGVuZChsZS5zaGFwZSksIGhyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgX3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIGdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBycixcbiAgb3IsXG4gIHNyLFxuICBjcixcbiAgbHIsXG4gIHVyLFxuICB5cixcbiAgaHIsXG4gIF9yLFxuICBkcixcbiAgcHJcbl0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBncixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIGJyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCB2ciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoYnIpXG59KSwgRXIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIHZyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgTiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKE4gfHwge30pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBDciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGtyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBQciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShlciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHokMS5hcnJheShodCkpXG59KSwgQXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgSXIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBPciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgRHIoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIFRyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgTXIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBScltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBEciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgb2UgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3ci5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIGcgPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBfdCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogZyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogZyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogZyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IGcoeiQxLm51bWJlcigpKVxufSksIGd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBnKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogZyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgR3IgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgcXIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogZyhHcilcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IGcoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBnKHokMS5zdHJpbmcoKSlcbn0pLCB3dCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheSh3dCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IF90XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkod3QpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBnKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KF90KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoZ3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogcXIsXG4gIHN1YnNfcHJldmlldzogZyhidCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHVlKVxufSksIHZ0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW3Z0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShndCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IEV0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHVlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogZyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBnKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBnKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IGcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IGcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogZyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBTdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IFN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBtbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIGJ0KSwgVyA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCB2dCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEV0KSwgZm4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEV0KSwgSCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFByKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIGtyXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBtbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgRXIpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBDdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IEN0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgU3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3Qgc2UgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFkoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gUChcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogWShlKSB9O1xuICB9XG59LCBQID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke21lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7bWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHttZS5yZWQuYm9sZChcIm9qcy9cIil9JHttZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IFAoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgYWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzoga3QsIGVycl9fOiBQdCB9ID0gUChcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIGt0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gbGUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gQXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IFB0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBQdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBrdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogQywgZXJyX186IGtuIH0gPSBQKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBDKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgQyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBDKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IFRyKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgQyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEMoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEMoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKEMoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgQyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEMoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEwuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGgsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIEMoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBDKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBjZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgQyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgQyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgZiA9IGF3YWl0IFcocyk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoaCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgQyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgaCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGYubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGYuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBoKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBDKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIEN0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IE4uQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgQXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IE4uU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBQKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShZKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShZKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogSXQgfSA9IFAoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBJdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBPdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEl0KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WShyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBHbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEF0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBPdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogcW4sIGVycl9fOiBHZSB9ID0gUChcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IEdlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBxbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgR2UoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgQXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IEdlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiB3LCBlcnJfXzogSmUgfSA9IFAoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBQKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIHcoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgVyhzKTtcbiAgICB3KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGNlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICB3KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgdyhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gdyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3KGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gdyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogZiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgU3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICB3KFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgdyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBmID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICB3KFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBHbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBFO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGggPSBLbihwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoaCkge1xuICAgICAgICAgIHcoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IFduKHQuYmFzZVVybCwgcC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB1LmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IGZuKHMsIHUpO1xuICAgICAgICB3KFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIG0pO1xuICAgICAgICBjb25zdCB5ID0gZiB8fCBoLCBfID0gKChsID0gcC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogbFtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgeSA/IHcoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IF8gPyAodyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IFhuKG0pKSA6ICh3KFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgUW4obSwgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IHYgPSBtLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICB3KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3Z9XWApO1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB2XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdyhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBFKTtcbiAgICAgICAgICBjb25zdCBTID0gVmUoRSk7XG4gICAgICAgICAgcmV0dXJuIHcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtTLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogUyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHcoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7XyA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBFID0gYXdhaXQgV2Uocywge1xuICAgICAgICAgICAgLi4udSxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB2LFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogX1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB3KFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBFIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEplKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBKZShwKSwgcDtcbiAgICB9XG4gIH1cbiksIEpuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBJci5wYXJzZShyKTtcbn0sIEJuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBDci5wYXJzZShyKTtcbn0sIFFuID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IEJuKHQpO1xuICB3KGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7ZS5yZWRpcmVjdF91cmx9XWApO1xuICBjb25zdCB7IHN0YXR1czogbiB9ID0gYXdhaXQgSWUoeyB1cmw6IGUucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiByIH0pO1xuICBpZiAodyhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bn1dYCksIG4gPT09IE4uQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobiA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xufSwgWG4gPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gSm4odCk7XG4gIEJlKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke3IuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBOcihyKSwgQmUoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCB7IGxvZ19fOiBPLCBlcnJfXzogZW8gfSA9IFAoXCJzdHJpcGUtcHJcIiksIHRvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBybyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdG8pO1xuICAgIE8oXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgZSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgbiA9IGF3YWl0IFcoZSksIGkgPSBuLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBPKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCBrZShlLCBuLnRva2VuLCBpLCB2b2lkIDApLCBhID0gYXdhaXQgTXIoXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBpXG4gICAgKTtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgYS5jYW5NYWtlUGF5bWVudCgpO1xuICAgIHJldHVybiBjID09PSBudWxsID8gKGVvKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfSkgOiAoTyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBjKSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGEsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGMuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogYy5nb29nbGVQYXlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuKSwgbm8gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChPKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgaS5wcm92aWRlciAhPT0gci5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7aS5wcm92aWRlcn0sIGdvdCAke3IucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGkgIT0gbnVsbCAmJiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHkgPSBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBPKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCB5KSwgaW8oYywgeS5hbW91bnQsIHkucGVuZGluZywgeS5zdHJpcGVBcHBsZVBheSk7XG4gICAgfVxuICAgIE8oXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgdSA9IGF3YWl0IEZyKGMpO1xuICAgIE8oXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIHUpLCBPKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBsID0gb28oZSwgdSksIHAgPSBjZShsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgTyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIHApO1xuICAgIGNvbnN0IGYgPSBhd2FpdCB5bihhLCB7XG4gICAgICBmaWVsZHM6IHAsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJcbiAgICB9KSwgaCA9IHNvKGYpO1xuICAgIE8oXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBMcihoLCB1KTtcbiAgICBjb25zdCBtID0gYXdhaXQgVyhhKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE8oXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgSChhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoeSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgTyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHBbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBwW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IHBbZC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBwW2QuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBwW2QuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBwW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgUGUoYSwgeSkgfTtcbiAgICB9XG4gIH1cbiksIG9vID0gKHQsIHIpID0+IHtcbiAgdmFyIHUsIGwsIHAsIGY7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChsID0gKHUgPSByLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogbC5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwLCBhID0gKGYgPSAocCA9IHIucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogZi5hZGRyZXNzLCBjID0gci5zaGlwcGluZ0FkZHJlc3M7XG4gIHJldHVybiBlW2QuRklSU1RfTkFNRV0gPSBlW2QuRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5MQVNUX05BTUVdID0gZVtkLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5FTUFJTF0gPSBlW2QuRU1BSUxdIHx8IHIucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5aSVBfQ09ERV0gPSBlW2QuWklQX0NPREVdIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCIsIE8oXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBpbyA9ICh0LCByLCBlLCBuKSA9PiB7XG4gIHQudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiByLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogZVxuICAgIH0sXG4gICAgY3VycmVuY3k6IHIuY3VycmVuY3ksXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBzbyA9ICh0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3QucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBPci5wYXJzZSh0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCB7IGxvZ19fOiBWLCBlcnJfXzogUWUgfSA9IFAoXCJwb2NreXQtcGF5cGFsXCIpLCBhbyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIGNvID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgbG8gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICBWKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IFcocyk7XG4gICAgVihcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYyA9IGFvLnBhcnNlKHIpO1xuICAgIFYoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IHUgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnNldHRpbmdzLCBsID0gY2UoXG4gICAgICBlLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIHAgPSBTbihsKTtcbiAgICBWKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHthLm1vZGV9YCk7XG4gICAgY29uc3QgZiA9IGEubW9kZSAhPT0gXCJzZXR1cFwiLCBoID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBmLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBmID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBhLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYS5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIC4uLnBcbiAgICB9KTtcbiAgICBpZiAoVihcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBoKSwgIWguY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICAgIHRocm93IFFlKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVzcG9uc2U6XCIsIGgpLCBuZXcgRXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2hlY2tvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBjb25zdCBtID0gY28ucGFyc2UoaC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdO1xuICAgIFYoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgeSA9IGF3YWl0IGpuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIHMsXG4gICAgICBtLnZlcmlmeV90b2tlbixcbiAgICAgIG0ucGF5cGFsX2lmcmFtZV91cmxcbiAgICApO1xuICAgIFYoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgeSk7XG4gICAgY29uc3QgXyA9IE90KHkuaHJlZik7XG4gICAgVihgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtffWApO1xuICAgIGNvbnN0IHYgPSBhd2FpdCBIKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBfLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZiA/IGguY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChWKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIHYpLCBhLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IHYucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCF2LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgUWUoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCB2KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdi5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIFJ0ID0gKHtcbiAgZ2F0ZXdheTogdCxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHIsXG4gIG1lcmNoYW50TmFtZTogZSxcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IGksXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbn0pID0+IHtcbiAgdmFyIHAsIGY7XG4gIGNvbnN0IGEgPSAoKHAgPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYW1vdW50QXRvbSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50QXRvbSkgPz8gMCwgYyA9IE1hdGgubWF4KGEgLyAxMDAsIDApLCB1ID0gKCgoZiA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5jdXJyZW5jeSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY3VycmVuY3kpID8/IFwiVVNEXCIpLnRvVXBwZXJDYXNlKCksIGwgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiB0LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gVE9ETzogYXNhcCBmb3IgcHJvZCAtIGFpcndhbGxleCBoYXMgbm8gZG9jcyBmb3IgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIC8vIEJDUjJETjRUWDdJM0ZSUkpcbiAgICAgIG1lcmNoYW50TmFtZTogZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogcyAhPSBudWxsICYmIHMucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBjLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBzICE9IG51bGwgJiYgcy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4ubCwgLi4ucy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogbDtcbn0sIHVvID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IHIobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgR29vZ2xlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIHBvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gciA/IGh0LnBhcnNlKHIpIDogbnVsbDtcbn0sIG1vID0gKHQsIHIpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgbiA9IChzID0gKGkgPSByLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaS5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbdSwgLi4ubF0gPSAoKGMgPSAoYSA9IG4ubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcCA9IGwuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIGVbZC5FTUFJTF0gPSBlW2QuRU1BSUxdIHx8IHIuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIGVbZC5BRERSRVNTXSA9IGVbZC5BRERSRVNTXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIGVbZC5DSVRZXSA9IGVbZC5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIGVbZC5aSVBfQ09ERV0gPSBlW2QuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIGVbZC5TVEFURV0gPSBlW2QuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCB1IHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBwIHx8IFwiX09QX1VOS05PV05cIjtcbiAgfVxuICByZXR1cm4gZTtcbn0sIHsgbG9nX186IE0sIGVycl9fOiB0ZSB9ID0gUChcImF3eC1nb29nbGUtcGF5XCIpO1xubGV0IFJlID0gbnVsbDtcbmNvbnN0IFR0ID0gKHQpID0+IHQgPT09IGR0IHx8IHQgPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBNdCA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBUdCh0KTtcbiAgcmV0dXJuIFJlID09PSBudWxsICYmIChSZSA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IGUsXG4gICAgbWVyY2hhbnRJbmZvOiByLm1lcmNoYW50SW5mb1xuICB9KSksIFJlO1xufSwgRHQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIGZvID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIHZhciBhLCBjO1xuICAgIGNvbnN0IGUgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIER0KTtcbiAgICBpZiAoIWUpXG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIE0oXCJHb29nbGUgUGF5IENQTVwiLCBlKTtcbiAgICBjb25zdCBuID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoIW4ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gdGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKE0oXCJMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uXCIpLCBhd2FpdCB1bygpLCAhKChjID0gKGEgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogYS5wYXltZW50cykgIT0gbnVsbCAmJiBjLmFwaSkpXG4gICAgICByZXR1cm4gdGUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKFR0KHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFuLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gdGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgTShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdSA9IFJ0KHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogbi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBuLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHZvaWQgMFxuICAgICAgfSksIHsgcmVzdWx0OiBsIH0gPSBhd2FpdCBNdCh0LmJhc2VVcmwsIHUpLmlzUmVhZHlUb1BheShcbiAgICAgICAgdVxuICAgICAgKTtcbiAgICAgIGlmICghbClcbiAgICAgICAgcmV0dXJuIE0oXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9IH07XG4gICAgfSBjYXRjaCAodSkge1xuICAgICAgcmV0dXJuIHRlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgdSksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgTC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZSh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogdSA/PyB7fVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgdGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbCksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobCA9PSBudWxsID8gdm9pZCAwIDogbC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCB5byA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBmLCBoLCBtLCB5LCBfLCB2LCBFO1xuICAgIE0oXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRHQpLCBhID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgVyhhKSwgdSA9IHMubWV0YWRhdGE7XG4gICAgaWYgKCF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBsID0gUnQoe1xuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiB1LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiB1LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiB1Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhd2FpdCBrZShcbiAgICAgICAgYSxcbiAgICAgICAgYy50b2tlbixcbiAgICAgICAgYy5tb2RlID09PSBcInNldHVwXCIsXG4gICAgICAgIHZvaWQgMFxuICAgICAgKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pLCBwID0gTXQodC5iYXNlVXJsLCBsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgUyA9IGF3YWl0IHAubG9hZFBheW1lbnREYXRhKGwpO1xuICAgICAgTShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIFMpO1xuICAgICAgY29uc3QgUSA9IG1vKGUsIFMpLCBBID0gY2UoXG4gICAgICAgIFEsXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBpID09IG51bGwgPyB2b2lkIDAgOiBpLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKSwgWCA9IChoID0gKGYgPSBTLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghWClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBwZSA9IGF3YWl0IENlKGEsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogQVtkLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IEFbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogQVtkLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgcG9zdGFsX2NvZGU6IEFbZC5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeV9jb2RlOiBBW2QuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSksIGVlID0gcG8ocGUpO1xuICAgICAgTShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIGVlKTtcbiAgICAgIGNvbnN0ICQgPSBhd2FpdCBIKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlZSA9PSBudWxsID8gdm9pZCAwIDogZWUuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogWFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBNKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgJCk7XG4gICAgICBsZXQgRCA9ICh5ID0gKG0gPSAkLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG1bMF0pID09IG51bGwgPyB2b2lkIDAgOiB5LmlkO1xuICAgICAgY29uc3QgSiA9IChfID0gJC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfLmZpbmQoXG4gICAgICAgIChVKSA9PiBVLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKEogJiYgSi5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgTShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIEopO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogVSB9ID0gYXdhaXQgSWUoe1xuICAgICAgICAgIHVybDogSi5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogdC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoTShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7VX1dYCksIFUgPT09IE4uQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoVSA9PT0gTi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEogJiYgIUQpIHtcbiAgICAgICAgY29uc3QgVSA9IGF3YWl0IEgoYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogSi50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogSi5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIFUpLCBEID0gKEUgPSAodiA9IFUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgaWYgKGMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeyBwYXltZW50X21ldGhvZF9pZDogRCB9IH07XG4gICAgICB7XG4gICAgICAgIE0oXCJTdGFydGluZyBvbmUtdGltZSBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgICAgIGNvbnN0IFUgPSB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICEwLFxuICAgICAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IEQsXG4gICAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICAgIGN1c3RvbWVyX2VtYWlsOiBBW2QuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBBW2QuWklQX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IEFbZC5DT1VOVFJZXSxcbiAgICAgICAgICBwcm9tb3Rpb25fY29kZTogQVtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBBW2QuRklSU1RfTkFNRV0sXG4gICAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBBW2QuTEFTVF9OQU1FXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgUGUoYSwgVSkgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChTKSB7XG4gICAgICB0aHJvdyB0ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBTKSwgbmV3IEVycm9yKChTID09IG51bGwgPyB2b2lkIDAgOiBTLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIGhvID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLCBlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBfbyA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSByLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSByLmJpbGxpbmdDb250YWN0LCBpID0gci5zaGlwcGluZ0NvbnRhY3QsIHMgPSB7IC4uLnQgfTtcbiAgcmV0dXJuIChlIHx8IG4gfHwgaSkgJiYgKHNbZC5FTUFJTF0gPSBzW2QuRU1BSUxdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmVtYWlsQWRkcmVzcykgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZW1haWxBZGRyZXNzKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIHNbZC5DT1VOVFJZXSA9IHNbZC5DT1VOVFJZXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jb3VudHJ5Q29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uY291bnRyeUNvZGUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIHNbZC5aSVBfQ09ERV0gPSBzW2QuWklQX0NPREVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnBvc3RhbENvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLnBvc3RhbENvZGUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgc1tkLkZJUlNUX05BTUVdID0gc1tkLkZJUlNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdpdmVuTmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZ2l2ZW5OYW1lKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5naXZlbk5hbWUpIHx8IFwiX09QX1VOS05PV05cIiwgc1tkLkxBU1RfTkFNRV0gPSBzW2QuTEFTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5mYW1pbHlOYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5mYW1pbHlOYW1lKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5mYW1pbHlOYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIpLCBzO1xufSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pLCB3byA9ICh0KSA9PiBnby5zYWZlUGFyc2UodCkuZGF0YSwgYm8gPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgXCJtZXNzYWdlXCIsXG4gICAgKGUpID0+IHtcbiAgICAgIHZhciBpO1xuICAgICAgY29uc3QgbiA9IHdvKGUpO1xuICAgICAgKChpID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaS5tZXNzYWdlVHlwZSkgPT09IFwid2luZG93Y2xvc2luZ1wiICYmICh0KCksIHIuYWJvcnQoKSk7XG4gICAgfSxcbiAgICB7XG4gICAgICBzaWduYWw6IHIuc2lnbmFsXG4gICAgfVxuICApLCB7XG4gICAgY2xlYW51cENhbmNlbExpc3RlbmVyOiAoKSA9PiByLmFib3J0KClcbiAgfTtcbn0sIHsgbG9nX186IGhlIH0gPSBQKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIHZvKHQsIHIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IENlKHIuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiByLm5vbkNkZUZvcm1JbnB1dHNbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogci5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLCBpID0gbi5wYXltZW50X3Nlc3Npb24sIHMgPSBuLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGlmICghcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihpKSwgcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IHIuc2Vzc2lvbi5hYm9ydCgpLCBlO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFbyh0LCByKSB7XG4gIHZhciBpLCBzO1xuICBpZiAoIXQucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgaGUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCB0KTtcbiAgY29uc3QgeyBzdGF0dXM6IGUgfSA9IGF3YWl0IEllKHtcbiAgICB1cmw6IHQucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHIuYmFzZVVybFxuICB9KTtcbiAgaWYgKGhlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtlfV1gKSwgZSA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChlID09PSBOLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCBIKHIuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogci5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IHQudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdC5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgKHMgPSAoaSA9IG4ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQ7XG59XG5hc3luYyBmdW5jdGlvbiBTbyh0LCByLCBlKSB7XG4gIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShlLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGUucHJlZmlsbC50b2tlbixcbiAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICBwcm92aWRlcl90eXBlOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH0sXG4gICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdCxcbiAgICBsaW5lX2l0ZW1zOiBlLnByZWZpbGwubGluZV9pdGVtcyxcbiAgICB0b3RhbF9hbW91bnRfYXRvbTogZS5wcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBjdXN0b21lcl9lbWFpbDogcltkLkVNQUlMXSxcbiAgICBjdXN0b21lcl96aXBfY29kZTogcltkLlpJUF9DT0RFXSxcbiAgICBjdXN0b21lcl9jb3VudHJ5OiByW2QuQ09VTlRSWV0sXG4gICAgcHJvbW90aW9uX2NvZGU6IHJbZC5QUk9NT1RJT05fQ09ERV1cbiAgfSkgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIENvKHQsIHIsIGUpIHtcbiAgdmFyIG4sIGksIHM7XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgYyA9IF9vKHIubm9uQ2RlRm9ybUlucHV0cywgYSksIHUgPSBjZShcbiAgICAgIGMsXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGF3YWl0IHZuKHIuY29ubmVjdGlvbiwge1xuICAgICAgZW1haWw6IHVbZC5FTUFJTF0sXG4gICAgICBmaXJzdF9uYW1lOiB1W2QuRklSU1RfTkFNRV0sXG4gICAgICBsYXN0X25hbWU6IHVbZC5MQVNUX05BTUVdLFxuICAgICAgemlwX2NvZGU6IHVbZC5aSVBfQ09ERV0sXG4gICAgICBjb3VudHJ5OiB1W2QuQ09VTlRSWV0sXG4gICAgICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiAhMFxuICAgIH0pO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBIKHIuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGhlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgbGV0IHAgPSAoaSA9IChuID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZDtcbiAgICBjb25zdCBmID0gKHMgPSBsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmluZChcbiAgICAgIChtKSA9PiBtLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoZiAhPSBudWxsICYmIGYucmVkaXJlY3RfdXJsICYmIGYuY29uc2VudF9pZCAmJiBmLnRoZWlyX3BtX2lkICYmIChwID0gYXdhaXQgRW8oZiwgcikpLCAhcClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGggPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoaCksIHIuaXNTZXR1cE1vZGUgPyB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBwIH0gfSA6IGF3YWl0IFNvKHAsIHUsIHIpO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyByLnNlc3Npb24uY29tcGxldGVQYXltZW50KGMpLCBhO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB6LCBlcnJfXzogRmUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpLCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwga28gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgY29uc3QgZSA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRnQpO1xuICAgIGlmICghZSlcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgeihcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaG8oKSwgeihcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICByZXR1cm4gRmUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIHApLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHooXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKHooXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHooXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgVyhpKSwgYSA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBjID0gYXdhaXQga2UoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgdSA9IGUubWV0YWRhdGE7XG4gICAgaWYgKHooXCJwcm9jZXNzb3JBY2NvdW50XCIsIHUpLCAhdS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jIChwKSA9PiB7XG4gICAgICAgIHZhciBmO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEwuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZSh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICBpc1NldHVwTW9kZTogYSxcbiAgICAgICAgICAgICAgcHJlZmlsbDogcyxcbiAgICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6ICgoZiA9IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYW1vdW50KSA/PyBjLFxuICAgICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwID09IG51bGwgPyB2b2lkIDAgOiBwLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIEZlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBQbyA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBTLCBRO1xuICAgIGNvbnN0IHMgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZ0KSwgeyBpbml0aWFsUHJldmlldzogYSwgaXNTZXR1cE1vZGU6IGMsIHByZWZpbGw6IHUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGwgfSA9IG4sIHAgPSAoKChTID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBTLmN1cnJlbmN5KSA/PyBhLmN1cnJlbmN5ID8/IFwiVVNEXCIpLnRvVXBwZXJDYXNlKCksIGggPSAoKCgoUSA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogUS5hbW91bnRBdG9tKSA/PyBhLmFtb3VudEF0b20gPz8gMCkgLyAxMDApLnRvRml4ZWQoMiksIG0gPSB7XG4gICAgICBsYWJlbDogKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubGFiZWwpID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IGwgIT0gbnVsbCAmJiBsLnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudDogaFxuICAgIH0sIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBwLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWw6IG0sXG4gICAgICAuLi4obCA9PSBudWxsID8gdm9pZCAwIDogbC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH07XG4gICAgeihcIlBheW1lbnQgUmVxdWVzdFwiLCB5KTtcbiAgICBjb25zdCBfID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KTtcbiAgICB6KFwiQXBwbGVQYXlTZXNzaW9uXCIsIF8pO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogdC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHMubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGMsXG4gICAgICBiYXNlVXJsOiB0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBpLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgbGV0IEU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChBLCBYKSA9PiB7XG4gICAgICBjb25zdCBwZSA9ICgpID0+IHtcbiAgICAgICAgeihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIFgobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCB7IGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogZWUgfSA9IGJvKHBlKTtcbiAgICAgIF8ub25jYW5jZWwgPSBwZSwgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoJCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEUgPSBhd2FpdCB2bygkLCB2KTtcbiAgICAgICAgfSBjYXRjaCAoRCkge1xuICAgICAgICAgIFgoRCk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0ICQgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ubSB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKCQpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKCQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgQ28oJCwgdiwgRSk7XG4gICAgICAgICAgZWUoKSwgQShEKTtcbiAgICAgICAgfSBjYXRjaCAoRCkge1xuICAgICAgICAgIFgoRCk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoQSkgPT4ge1xuICAgICAgdGhyb3cgRmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBBKSwgQTtcbiAgICB9KTtcbiAgfVxuKSwgTGUgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gdC5maWx0ZXIoKGkpID0+IHtcbiAgICBjb25zdCBzID0gZSA9PT0gdm9pZCAwID8gITAgOiBpLnByb2Nlc3Nvcl9uYW1lID09PSBlLCBhID0gaS5wcm92aWRlciA9PT0gcjtcbiAgICByZXR1cm4gcyAmJiBhO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAobi5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gblswXTtcbn0sIEwgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogWm5cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogcm8sXG4gICAgcnVuOiBub1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogSW4sXG4gICAgcnVuOiBPblxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBsb1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogZm8sXG4gICAgcnVuOiB5b1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGtvLFxuICAgIHJ1bjogUG9cbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgTmUgPSBmdW5jdGlvbih0LCByKSB7XG4gIHJldHVybiBOZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBlLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIGkgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGkpICYmIChlW2ldID0gbltpXSk7XG4gIH0sIE5lKHQsIHIpO1xufTtcbmZ1bmN0aW9uIFoodCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBOZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gQW8odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBpKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGEpIHtcbiAgICBmdW5jdGlvbiBjKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwobi5uZXh0KHApKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgYShmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsKG4udGhyb3cocCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBhKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHAuZG9uZSA/IHMocC52YWx1ZSkgOiBpKHAudmFsdWUpLnRoZW4oYywgdSk7XG4gICAgfVxuICAgIGwoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBMdCh0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBpLCBzLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyhsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiB1KFtsLCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB1KGwpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCBsWzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGkgJiYgKHMgPSBsWzBdICYgMiA/IGkucmV0dXJuIDogbFswXSA/IGkudGhyb3cgfHwgKChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEocyA9IHMuY2FsbChpLCBsWzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBzICYmIChsID0gW2xbMF0gJiAyLCBzLnZhbHVlXSksIGxbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiBsWzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBpID0gbFsxXSwgbCA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAobFswXSA9PT0gNiB8fCBsWzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxbMF0gPT09IDMgJiYgKCFzIHx8IGxbMV0gPiBzWzBdICYmIGxbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IGxbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2gobCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbCA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICBsID0gWzYsIHBdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAobFswXSAmIDUpIHRocm93IGxbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IGxbMF0gPyBsWzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBpZSh0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gciAmJiB0W3JdLCBuID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgbiA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtuKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihyID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gd2UodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGksIHMgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGkgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBiZSh0LCByLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgaSA9IHIubGVuZ3RoLCBzOyBuIDwgaTsgbisrKVxuICAgIChzIHx8ICEobiBpbiByKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLCAwLCBuKSksIHNbbl0gPSByW25dKTtcbiAgcmV0dXJuIHQuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpO1xufVxuZnVuY3Rpb24gbmUodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG5lID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IG5lKHQpO1xufVxuZnVuY3Rpb24gSW8odCwgciwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGUuYXBwbHkodCwgciB8fCBbXSksIGksIHMgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGEpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuICBmdW5jdGlvbiBhKG0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKG0sIGYpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhtLCB5KSB7XG4gICAgblttXSAmJiAoaVttXSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBFKSB7XG4gICAgICAgIHMucHVzaChbbSwgXywgdiwgRV0pID4gMSB8fCB1KG0sIF8pO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAoaVttXSA9IHkoaVttXSkpKTtcbiAgfVxuICBmdW5jdGlvbiB1KG0sIHkpIHtcbiAgICB0cnkge1xuICAgICAgbChuW21dKHkpKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBoKHNbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBsKG0pIHtcbiAgICBtLnZhbHVlIGluc3RhbmNlb2YgbmUgPyBQcm9taXNlLnJlc29sdmUobS52YWx1ZS52KS50aGVuKHAsIGYpIDogaChzWzBdWzJdLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBwKG0pIHtcbiAgICB1KFwibmV4dFwiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBmKG0pIHtcbiAgICB1KFwidGhyb3dcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gaChtLCB5KSB7XG4gICAgbSh5KSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiB1KHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBPbyh0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiByID8gci5jYWxsKHQpIDogKHQgPSB0eXBlb2YgaWUgPT0gXCJmdW5jdGlvblwiID8gaWUodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gbihzKSB7XG4gICAgZVtzXSA9IHRbc10gJiYgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIHUpIHtcbiAgICAgICAgYSA9IHRbc10oYSksIGkoYywgdSwgYS5kb25lLCBhLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaShzLCBhLCBjLCB1KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oZnVuY3Rpb24obCkge1xuICAgICAgcyh7IHZhbHVlOiBsLCBkb25lOiBjIH0pO1xuICAgIH0sIGEpO1xuICB9XG59XG5mdW5jdGlvbiBrKHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIE9lKHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChyKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgVGUgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiB2ZSh0LCByKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yocik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgZGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgaSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBpZShhKSwgdSA9IGMubmV4dCgpOyAhdS5kb25lOyB1ID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSB1LnZhbHVlO1xuICAgICAgICAgICAgICBsLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB1ICYmICF1LmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgcCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKGsocCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiBUZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgZiA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoZikge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBoID0gaWUoZiksIG0gPSBoLm5leHQoKTsgIW0uZG9uZTsgbSA9IGgubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IG0udmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBYZSh5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIF8gaW5zdGFuY2VvZiBUZSA/IHMgPSBiZShiZShbXSwgd2UocykpLCB3ZShfLmVycm9ycykpIDogcy5wdXNoKF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBfIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG0gJiYgIW0uZG9uZSAmJiAoaSA9IGgucmV0dXJuKSAmJiBpLmNhbGwoaCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBUZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBYZShyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgdmUoZSwgcik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiB2ZShlLCByKSwgciBpbnN0YW5jZW9mIHQgJiYgci5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgdCgpO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICEwLCByO1xuICB9KCksIHQ7XG59KCksIE50ID0gZGUuRU1QVFk7XG5mdW5jdGlvbiBqdCh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgZGUgfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgayh0LnJlbW92ZSkgJiYgayh0LmFkZCkgJiYgayh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIFhlKHQpIHtcbiAgayh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBVdCA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCB4dCA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIGJlKFt0LCByXSwgd2UoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gJHQodCkge1xuICB4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gZXQoKSB7XG59XG5mdW5jdGlvbiBfZSh0KSB7XG4gIHQoKTtcbn1cbnZhciBxZSA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlKSB7XG4gICAgdmFyIG4gPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgZSA/IChuLmRlc3RpbmF0aW9uID0gZSwganQoZSkgJiYgZS5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IERvLCBuO1xuICB9XG4gIHJldHVybiByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gbmV3IGplKGUsIG4sIGkpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihlKSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByO1xufShkZSksIFJvID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBNZSh0LCByKSB7XG4gIHJldHVybiBSby5jYWxsKHQsIHIpO1xufVxudmFyIFRvID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICBlLm5leHQocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIGZlKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgZmUobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgZmUocik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZmUoZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIGplID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChrKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIFV0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIE1lKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIE1lKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBNZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgVG8oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KHFlKTtcbmZ1bmN0aW9uIGZlKHQpIHtcbiAgJHQodCk7XG59XG5mdW5jdGlvbiBNbyh0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgRG8gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGV0LFxuICBlcnJvcjogTW8sXG4gIGNvbXBsZXRlOiBldFxufSwgemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBGbyh0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gTG8odCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyBGbyA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkobik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgSyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICByICYmICh0aGlzLl9zdWJzY3JpYmUgPSByKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IHIsIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMsIHMgPSBqbyhyKSA/IHIgOiBuZXcgamUociwgZSwgbik7XG4gICAgcmV0dXJuIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEgPSBpLCBjID0gYS5vcGVyYXRvciwgdSA9IGEuc291cmNlO1xuICAgICAgcy5hZGQoYyA/IGMuY2FsbChzLCB1KSA6IHUgPyBpLl9zdWJzY3JpYmUocykgOiBpLl90cnlTdWJzY3JpYmUocykpO1xuICAgIH0pLCBzO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHIuZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ociwgZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gZSA9IHR0KGUpLCBuZXcgZShmdW5jdGlvbihpLCBzKSB7XG4gICAgICB2YXIgYSA9IG5ldyBqZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcihjKTtcbiAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICBzKHUpLCBhLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcyxcbiAgICAgICAgY29tcGxldGU6IGlcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUoYSk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZVt6ZV0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICByW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBMbyhyKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gciA9IHR0KHIpLCBuZXcgcihmdW5jdGlvbihuLCBpKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIHMgPSBhO1xuICAgICAgfSwgZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gaShhKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gbmV3IHQocik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiB0dCh0KSB7XG4gIHZhciByO1xuICByZXR1cm4gKHIgPSB0ID8/IFV0LlByb21pc2UpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gTm8odCkge1xuICByZXR1cm4gdCAmJiBrKHQubmV4dCkgJiYgayh0LmVycm9yKSAmJiBrKHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gam8odCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgcWUgfHwgTm8odCkgJiYganQodCk7XG59XG5mdW5jdGlvbiBVbyh0KSB7XG4gIHJldHVybiBrKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiB4byh0KSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgaWYgKFVvKHIpKVxuICAgICAgcmV0dXJuIHIubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiAkbyh0LCByLCBlLCBuLCBpKSB7XG4gIHJldHVybiBuZXcgVm8odCwgciwgZSwgbiwgaSk7XG59XG52YXIgVm8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSwgcywgYSwgYykge1xuICAgIHZhciB1ID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHUub25GaW5hbGl6ZSA9IGEsIHUuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCB1Ll9uZXh0ID0gbiA/IGZ1bmN0aW9uKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4obCk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUuZXJyb3IocCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCB1Ll9lcnJvciA9IHMgPyBmdW5jdGlvbihsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzKGwpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlLmVycm9yKHApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIHUuX2NvbXBsZXRlID0gaSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSgpO1xuICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICBlLmVycm9yKGwpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIHU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCByO1xufShxZSksIEdvID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBWdCA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gbmV3IHJ0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gZSwgbjtcbiAgfSwgci5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgR28oKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gaWUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciB1ID0gYy52YWx1ZTtcbiAgICAgICAgICAgIHUubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogbCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IG4ub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBOdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBkZShmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIHZlKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgci5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gbi5oYXNFcnJvciwgcyA9IG4udGhyb3duRXJyb3IsIGEgPSBuLmlzU3RvcHBlZDtcbiAgICBpID8gZS5lcnJvcihzKSA6IGEgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCByLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBLKCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZTtcbiAgfSwgci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBydChlLCBuKTtcbiAgfSwgcjtcbn0oSyksIHJ0ID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gZSwgaS5zb3VyY2UgPSBuLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuO1xuICAgIChuID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIHJldHVybiAoaSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogTnQ7XG4gIH0sIHI7XG59KFZ0KSwgcW8gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHpvID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByO1xufShkZSksIG50ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBiZShbdCwgcl0sIHdlKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgWW8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuc2NoZWR1bGVyID0gZSwgaS53b3JrID0gbiwgaS5wZW5kaW5nID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gZTtcbiAgICB2YXIgcyA9IHRoaXMuaWQsIGEgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gcyAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBzLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChpID0gdGhpcy5pZCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoYSwgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgbnQuc2V0SW50ZXJ2YWwoZS5mbHVzaC5iaW5kKGUsIHRoaXMpLCBpKTtcbiAgfSwgci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgaWYgKGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBpICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gaSAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIG50LmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIGkgPSB0aGlzLl9leGVjdXRlKGUsIG4pO1xuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIGk7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhlKTtcbiAgICB9IGNhdGNoIChhKSB7XG4gICAgICBpID0gITAsIHMgPSBhIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgcztcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSBlLmlkLCBpID0gZS5zY2hlZHVsZXIsIHMgPSBpLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgdmUocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KHpvKSwgb3QgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSBxby5ub3csIHQ7XG59KCksIEtvID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBvdC5ub3cpO1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyBlID0gbi5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCByO1xufShvdCksIEhvID0gbmV3IEtvKFlvKSwgV28gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBabyh0KSB7XG4gIHJldHVybiBrKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiBKbyh0KSB7XG4gIHJldHVybiBrKHRbemVdKTtcbn1cbmZ1bmN0aW9uIEJvKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGsodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gUW8odCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIFhvKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGVpID0gWG8oKTtcbmZ1bmN0aW9uIHRpKHQpIHtcbiAgcmV0dXJuIGsodCA9PSBudWxsID8gdm9pZCAwIDogdFtlaV0pO1xufVxuZnVuY3Rpb24gcmkodCkge1xuICByZXR1cm4gSW8odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbiwgaSwgcztcbiAgICByZXR1cm4gTHQodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgbmUoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gYS5zZW50KCksIGkgPSBuLnZhbHVlLCBzID0gbi5kb25lLCBzID8gWzQsIG5lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIG5lKGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5pKHQpIHtcbiAgcmV0dXJuIGsodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gb2kodCkge1xuICBpZiAodCBpbnN0YW5jZW9mIEspXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoSm8odCkpXG4gICAgICByZXR1cm4gaWkodCk7XG4gICAgaWYgKFdvKHQpKVxuICAgICAgcmV0dXJuIHNpKHQpO1xuICAgIGlmIChabyh0KSlcbiAgICAgIHJldHVybiBhaSh0KTtcbiAgICBpZiAoQm8odCkpXG4gICAgICByZXR1cm4gR3QodCk7XG4gICAgaWYgKHRpKHQpKVxuICAgICAgcmV0dXJuIGNpKHQpO1xuICAgIGlmIChuaSh0KSlcbiAgICAgIHJldHVybiBsaSh0KTtcbiAgfVxuICB0aHJvdyBRbyh0KTtcbn1cbmZ1bmN0aW9uIGlpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRbemVdKCk7XG4gICAgaWYgKGsoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKHIpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBzaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhci5jbG9zZWQ7IGUrKylcbiAgICAgIHIubmV4dCh0W2VdKTtcbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYWkodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICByLmNsb3NlZCB8fCAoci5uZXh0KGUpLCByLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgJHQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9IGllKHQpLCBzID0gaS5uZXh0KCk7ICFzLmRvbmU7IHMgPSBpLm5leHQoKSkge1xuICAgICAgICB2YXIgYSA9IHMudmFsdWU7XG4gICAgICAgIGlmIChyLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBzICYmICFzLmRvbmUgJiYgKG4gPSBpLnJldHVybikgJiYgbi5jYWxsKGkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBHdCh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdWkodCwgcikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbGkodCkge1xuICByZXR1cm4gR3QocmkodCkpO1xufVxuZnVuY3Rpb24gdWkodCwgcikge1xuICB2YXIgZSwgbiwgaSwgcztcbiAgcmV0dXJuIEFvKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gTHQodGhpcywgZnVuY3Rpb24odSkge1xuICAgICAgc3dpdGNoICh1LmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB1LnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IE9vKHQpLCB1LmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSB1LnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSBuLnZhbHVlLCByLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICB1LmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gdS5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gdS50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChzID0gZS5yZXR1cm4pID8gWzQsIHMuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1LnNlbnQoKSwgdS5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gci5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZGkodCwgciwgZSwgbiwgaSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IHIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBpID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAodC5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gcGkodCwgcikge1xuICB2YXIgZSA9IGsodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIG4gPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBLKG4pO1xufVxudmFyIG1pID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gZmkodCwgcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBzID0gYSwgaSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpID8gZShzKSA6IG4obmV3IG1pKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHlpKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciBoaSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBfaSh0LCByKSB7XG4gIHZhciBlID0geWkodCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCBuID0gZS5maXJzdCwgaSA9IGUuZWFjaCwgcyA9IGUud2l0aCwgYSA9IHMgPT09IHZvaWQgMCA/IGdpIDogcywgYyA9IGUuc2NoZWR1bGVyLCB1ID0gYyA9PT0gdm9pZCAwID8gSG8gOiBjLCBsID0gZS5tZXRhLCBwID0gbCA9PT0gdm9pZCAwID8gbnVsbCA6IGw7XG4gIGlmIChuID09IG51bGwgJiYgaSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHhvKGZ1bmN0aW9uKGYsIGgpIHtcbiAgICB2YXIgbSwgeSwgXyA9IG51bGwsIHYgPSAwLCBFID0gZnVuY3Rpb24oUykge1xuICAgICAgeSA9IGRpKGgsIHUsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG0udW5zdWJzY3JpYmUoKSwgb2koYSh7XG4gICAgICAgICAgICBtZXRhOiBwLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBfLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoaCk7XG4gICAgICAgIH0gY2F0Y2ggKFEpIHtcbiAgICAgICAgICBoLmVycm9yKFEpO1xuICAgICAgICB9XG4gICAgICB9LCBTKTtcbiAgICB9O1xuICAgIG0gPSBmLnN1YnNjcmliZSgkbyhoLCBmdW5jdGlvbihTKSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCB2KyssIGgubmV4dChfID0gUyksIGkgPiAwICYmIEUoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgRShuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gdS5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdpKHQpIHtcbiAgdGhyb3cgbmV3IGhpKHQpO1xufVxuY2xhc3MgZ2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiByIH0sIHRoaXMuX3N1YmplY3QubmV4dChyKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAociwgZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHIsIGVyck1zZzogZSB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHIpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAocikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHIsIHRoaXMuc3Vic2NyaWJlID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCksIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgJGUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0ge1xuICAgICAgICBmaXJzdDogci50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBwaSgoKSA9PiBuZXcgRXJyb3Ioci50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmkodGhpcy5fc3ViamVjdC5waXBlKF9pKGUpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IFZ0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHdpLCBlcnJfXzogYmkgfSA9IFAoXCJpbml0LWZsb3dzXCIpLCB5ZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgZ2UoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHIobik7XG4gICAgICAgIHdpKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCBlLnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgYmkoYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgWShpKSwgXCJEZXRhaWxzOlwiLCBpKSwgZS50aHJvdyhpLCBZKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCB2aSA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiByLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCBFaSA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiB5ZShcIlN0cmlwZSBQUlwiLCBMLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiB5ZShcIlN0cmlwZSBMaW5rXCIsIEwuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHllKFwiQWlyd2FsbGV4IEdQYXlcIiwgTC5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogeWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTC5haXJ3YWxsZXhBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IFNpIH0gPSBQKFwiZm9ybS1jYWxsYmFja3NcIiksIEYgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBpdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBGLFxuICBvbkJsdXI6IEYsXG4gIG9uQ2hhbmdlOiBGLFxuICBvbkxvYWQ6IEYsXG4gIG9uTG9hZEVycm9yOiBGLFxuICBvblZhbGlkYXRpb25FcnJvcjogRixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IEYsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBGLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IEYsXG4gIG9uQ2hlY2tvdXRFcnJvcjogRixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IEZcbn0pLCB4ID0gY2xhc3MgeCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHIpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHguY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBRdChlLCBuID8/IHguTk9PUCwgU2kpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0geC5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xueC5OT09QID0gKCkgPT4ge1xufSwgeC5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoaXQua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgcltlXSA9IHguTk9PUDtcbiAgfSksIHI7XG59LCB4LmZyb21PYmplY3QgPSAocikgPT4ge1xuICBjb25zdCBlID0gbmV3IHgoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGl0LnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgVWUgPSB4O1xuY2xhc3MgQ2kge1xuICBjb25zdHJ1Y3RvcihyLCBlLCBuLCBpKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChzdChzLm9yaWdpbikgIT09IHN0KHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBVcihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBVbmtub3duIGV2ZW50LiBJZ25vcmluZzpcIiwgZik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGEpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogdSwgcGF5bG9hZDogbCB9ID0gYSwgcCA9IGwudHlwZTtcbiAgICAgIHN3aXRjaCAocCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KGwuaGVpZ2h0ID8gYCR7bC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXModSwgbC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIodSwgbC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKHUsIGwuZWxlbWVudFR5cGUsIGwuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW3VdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQobCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihsLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IobC5lbGVtZW50VHlwZSwgbC5lcnJvcnMsIHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgcCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHIsIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpO1xuICB9XG59XG5jb25zdCBzdCA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIGtpKHQsIHIpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiByXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCB4cihuKTtcbiAgaWYgKCEkcihuLCBpKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgUGkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHIsIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChyLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgQWkgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSB0O1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICBpZiAoaS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBpLmxvYWRlZFZhbHVlLCBhID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCB1ID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBhLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgICAgIGEgJiYgYXQoXCJhcHBsZV9wYXlcIiwgcywgciwgZSwgbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jIChsKSA9PiB7XG4gICAgICAgICAgICBjICYmIGF0KFwiZ29vZ2xlX3BheVwiLCBzLCByLCBlLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZCh1KTtcbiAgICB9XG4gIH0pO1xufSwgYXQgPSAodCwgciwgZSwgbiwgaSkgPT4gTC5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IExlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGUuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogdCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHJcbn0pLCBjdCA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IEcsIGVycl9fOiBCIH0gPSBQKFwib3AtZm9ybVwiKSwgcSA9IGNsYXNzIHEge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgZ2UoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IGdlKCksIHRoaXMuY29udGV4dCA9IG5ldyBnZSgpLCB0aGlzLmluaXRGbG93cyA9IEVpKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEcoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgRyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogY3RcbiAgICAgICAgfSk7XG4gICAgICAgIEcoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIEcoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgRyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgRyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IHEuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChpKSwgQWkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIEcoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IHZpKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBHKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBZKGUpO1xuICAgICAgICBCKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBuKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihuKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIG4gJiYgKG4ubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgbiA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgaSA9IFh0LnBhcnNlKGUpLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgYSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhuKTtcbiAgICAgIHMubmFtZSA9IGAke2l9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gYS50b1N0cmluZygpLCBzLnNyYyA9IGMuaHJlZiwgcy5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGksIHMpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogbixcbiAgICAgICAgbW91bnQ6IChzKSA9PiB7XG4gICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgcmV0dXJuIChhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwZW5kQ2hpbGQobik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogaS50eXBlLCBub2RlOiBpLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW3JlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtyZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW3JlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbcmUuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGksIGk7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIGpyKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIGtpKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gQihcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgbikpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBMLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW24sIGldKSA9PiAoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICAuLi5pLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgY2FzZSBcInBvY2t5dC1wYXlwYWxcIjpcbiAgICAgICAgICByZXR1cm4gTC5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGksXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IExlKGkuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZShpLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBuIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgICAgICBzLmlzU3VjY2VzcyAmJiBzLmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlID8gcy5sb2FkZWRWYWx1ZS5zdGFydEZsb3cobikgOiBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgICAgICBzLmlzU3VjY2VzcyAmJiBzLmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlID8gcy5sb2FkZWRWYWx1ZS5zdGFydEZsb3cobikgOiBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgJGUoZSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIEcoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCBxLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi42XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHIuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5yLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gVWUuZnJvbU9iamVjdChyKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSByLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IFBpKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IENpKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xucS5vanNGbG93cyA9IEwsIHEuYXNzaWduQXNTaW5nbGV0b24gPSAocikgPT4ge1xuICBpZiAocS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gcjtcbn0sIHEuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHEuYnVpbGRPanNGbG93Q29udGV4dCA9IChyLCBlLCBuLCBpKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiByLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IGR0KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IGx0ID0gcTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke21lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7bWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHttZS5yZWQuYm9sZChcIm9qcy9cIil9JHttZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKGx0LmdldEluc3RhbmNlKCkpIHtcbiAgICBsdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gbHQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgbHQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQubG9hZGVkVmFsdWUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXhcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiBgJHtiYXNlVXJsfS9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50Lz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxHQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FBQUEsRUFDcEMsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBQ0EsU0FBUztBQUNYLENBQUMsR0FFS2MsS0FBcUIsTUFBTTtBQUMvQixRQUFNQyxJQUFVZCxHQUFXWSxFQUFlO0FBQzFDLE1BQUksQ0FBQ0U7QUFDSCxVQUFNLElBQUksTUFBTSxtRUFBbUU7QUFFckYsU0FBT0E7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b250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAibWUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImR0IiwgInp0IiwgIll0IiwgIkt0IiwgIkh0IiwgIld0IiwgIkRlIiwgIlp0IiwgIkp0IiwgImUiLCAiQnQiLCAiWSIsICJRdCIsICJuIiwgImIiLCAiUiIsICJkIiwgInB0IiwgIm10IiwgImZ0IiwgInl0IiwgInJlIiwgIlh0IiwgIkVlIiwgImVyIiwgImoiLCAidHIiLCAicnIiLCAibnIiLCAib3IiLCAiaXIiLCAic3IiLCAiYXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAibGUiLCAibXIiLCAiZnIiLCAieXIiLCAiaHIiLCAiX3IiLCAiZ3IiLCAid3IiLCAieGUiLCAiYnIiLCAidnIiLCAiRXIiLCAiTiIsICJTciIsICJDciIsICJodCIsICJrciIsICJQciIsICJBciIsICJJciIsICJPciIsICJSciIsICJTZSIsICJZZSIsICJEciIsICJUciIsICJNciIsICJzIiwgImEiLCAiRnIiLCAiTHIiLCAiTnIiLCAiaSIsICJjIiwgImpyIiwgIm9lIiwgIlVyIiwgInhyIiwgIiRyIiwgImciLCAiVnIiLCAiX3QiLCAiZ3QiLCAiR3IiLCAicXIiLCAidWUiLCAienIiLCAiWXIiLCAid3QiLCAiS3IiLCAiSHIiLCAiV3IiLCAiS2UiLCAiYnQiLCAiSGUiLCAidnQiLCAiWnIiLCAiSnIiLCAiQnIiLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAicm4iLCAiRXQiLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiY24iLCAibG4iLCAidW4iLCAiU3QiLCAiVCIsICJwbiIsICJkbiIsICJtbiIsICJXIiwgIkNlIiwgImZuIiwgInluIiwgIkgiLCAiaG4iLCAiX24iLCAia2UiLCAiZ24iLCAiV2UiLCAid24iLCAiUGUiLCAiQ3QiLCAiYm4iLCAidm4iLCAiJGUiLCAic2UiLCAiQWUiLCAiUCIsICJEaSIsICJFbiIsICJWZSIsICJhZSIsICJTbiIsICJrdCIsICJQdCIsICJjZSIsICJDbiIsICJaZSIsICJDIiwgImtuIiwgIlBuIiwgIkFuIiwgIkluIiwgInUiLCAibCIsICJwIiwgImYiLCAiaCIsICJtIiwgIkwiLCAiVG4iLCAiT24iLCAiUm4iLCAiTW4iLCAiRG4iLCAiRm4iLCAiTG4iLCAiSWUiLCAiQXQiLCAiTm4iLCAiam4iLCAiVW4iLCAiSXQiLCAieG4iLCAiJG4iLCAiT3QiLCAiVm4iLCAiR24iLCAicW4iLCAiR2UiLCAiem4iLCAiWW4iLCAiS24iLCAiSG4iLCAiV24iLCAidyIsICJKZSIsICJCZSIsICJabiIsICJFIiwgIl8iLCAiWG4iLCAiUW4iLCAidiIsICJTIiwgIkpuIiwgIkJuIiwgIk8iLCAiZW8iLCAidG8iLCAicm8iLCAibm8iLCAiaW8iLCAib28iLCAic28iLCAiViIsICJRZSIsICJhbyIsICJjbyIsICJsbyIsICJSdCIsICJ1byIsICJwbyIsICJtbyIsICJNIiwgInRlIiwgIlJlIiwgIlR0IiwgIk10IiwgIkR0IiwgImZvIiwgInlvIiwgInkiLCAiUSIsICJBIiwgIlgiLCAicGUiLCAiZWUiLCAiJCIsICJEIiwgIkoiLCAiVSIsICJobyIsICJfbyIsICJnbyIsICJ3byIsICJibyIsICJoZSIsICJ2byIsICJFbyIsICJTbyIsICJDbyIsICJ6IiwgIkZlIiwgIkZ0IiwgImtvIiwgIlBvIiwgIkxlIiwgIk5lIiwgIloiLCAiQW8iLCAiTHQiLCAiaWUiLCAid2UiLCAiYmUiLCAibmUiLCAiSW8iLCAiT28iLCAiayIsICJPZSIsICJUZSIsICJ2ZSIsICJkZSIsICJYZSIsICJOdCIsICJqdCIsICJVdCIsICJ4dCIsICIkdCIsICJldCIsICJfZSIsICJxZSIsICJEbyIsICJqZSIsICJSbyIsICJNZSIsICJUbyIsICJmZSIsICJNbyIsICJ6ZSIsICJGbyIsICJMbyIsICJLIiwgImpvIiwgInR0IiwgIk5vIiwgIlVvIiwgInhvIiwgIiRvIiwgIlZvIiwgIkdvIiwgIlZ0IiwgInJ0IiwgInFvIiwgInpvIiwgIm50IiwgIllvIiwgIm90IiwgIktvIiwgIkhvIiwgIldvIiwgIlpvIiwgIkpvIiwgIkJvIiwgIlFvIiwgIlhvIiwgImVpIiwgInRpIiwgInJpIiwgIm5pIiwgIm9pIiwgImlpIiwgInNpIiwgImFpIiwgIkd0IiwgImNpIiwgImxpIiwgInVpIiwgImRpIiwgInBpIiwgIm1pIiwgImZpIiwgInlpIiwgImhpIiwgIl9pIiwgImdpIiwgImdlIiwgIndpIiwgImJpIiwgInllIiwgInZpIiwgIkVpIiwgIlNpIiwgIkYiLCAiaXQiLCAieCIsICJyIiwgIlVlIiwgIkNpIiwgInN0IiwgImtpIiwgIlBpIiwgIkFpIiwgImF0IiwgImN0IiwgIkciLCAiQiIsICJxIiwgImx0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJBV1hfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|
|
4041
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBmZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgWXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBLdCA9IHokMS5hcnJheShZdCksIEh0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIFd0ID0geiQxLmFycmF5KEh0KSwgWnQgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBadFtyXSA/PyB0O1xufSwgSnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEJ0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUXQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChKdCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEt0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gQnQocikgOiBXdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IFF0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFh0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCB2ID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBSID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIGZ0ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShmdCB8fCB7fSk7XG5jb25zdCBtdCA9IHokMS5uYXRpdmVFbnVtKGZ0KSwgeXQgPSB6JDEudW5pb24oW3B0LCBtdF0pO1xudmFyIHJlID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkocmUgfHwge30pO1xuY29uc3QgZXIgPSB6JDEubmF0aXZlRW51bShyZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHRyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IHYsXG4gIGV4cGlyeTogdixcbiAgY3ZjOiB2XG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHYsXG4gIGNvbG9yOiB2LFxuICBmb250RmFtaWx5OiB2LFxuICBmb250U2l6ZTogdixcbiAgZm9udFdlaWdodDogdixcbiAgbWFyZ2luOiB2LFxuICBwYWRkaW5nOiB2LFxuICBsZXR0ZXJTcGFjaW5nOiB2LFxuICBsaW5lSGVpZ2h0OiB2LFxuICBoaWRlSWNvbjogdlxufSk7XG5jb25zdCBqID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHJyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgbnIgPSB6JDEub2JqZWN0KHsgdHlwZTogcnIgfSksIG9yID0gai5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIGlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG9yLFxuICBlbGVtZW50VHlwZTogbXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIHNyID0gai5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgYXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogc3IsXG4gIG1lc3NhZ2U6IEksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBjciA9IGouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogY3IsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IElcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChqLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB2LFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGZyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBsZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEksXG4gIGxhc3ROYW1lOiBJLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogdixcbiAgbGFzdE5hbWU6IHYsXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiB2LFxuICBhZGRyZXNzOiB2LFxuICBjaXR5OiB2LFxuICBzdGF0ZTogdlxufSksIHlyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBociA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB5cixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChsZS5zaGFwZSksIF9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgZ3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIHdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBucixcbiAgaXIsXG4gIGFyLFxuICBscixcbiAgdXIsXG4gIGRyLFxuICBocixcbiAgX3IsXG4gIGdyLFxuICBwcixcbiAgZnJcbl0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiB3cixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkodnIpXG59KSwgU3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIEVyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgTiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKE4gfHwge30pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBrciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFByID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBBciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheSh0ciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHokMS5hcnJheShodCkpXG59KSwgSXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgT3IgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBUciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgX3QoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIE1yID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgRHIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBUcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBfdCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgb2UgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBici5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIF8gPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBndCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogXyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IF8oeiQxLm51bWJlcigpKVxufSksIHd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBfKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogXyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcXIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogXyhxcilcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogXyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogXyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBfKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IF8oeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBfKHokMS5zdHJpbmcoKSlcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShidCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IGd0XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IF8oeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoYnQpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCB2dCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBfKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KGd0KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkod3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogR3IsXG4gIHN1YnNfcHJldmlldzogXyh2dCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHVlKVxufSksIEV0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW0V0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh3dCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IF8oeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IF8oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IFN0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHVlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogXyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBfKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBfKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IF8oeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IF8oeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogXyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBfKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBDdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IEN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBmbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIHZ0KSwgVyA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBFdCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFN0KSwgbW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIFN0KSwgSCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEFyKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIFByXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBmbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgU3IpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBrdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGt0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQ3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3Qgc2UgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFkoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gayhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogWShlKSB9O1xuICB9XG59LCBrID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtmZS5yZWQuYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IGsoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgYWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzogUHQsIGVycl9fOiBBdCB9ID0gayhcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIFB0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gbGUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gSXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IEF0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBBdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBQdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogUywgZXJyX186IGtuIH0gPSBrKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBTKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgUyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBTKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IE1yKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgUyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIG0gPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBnID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IFMoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKFMoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIG0oKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKFMoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIFMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgUyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKFMoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEwuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogbSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGcsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIFMoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBTKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBjZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgUyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgUyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgbSA9IGF3YWl0IFcocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBTKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGcgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoZykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgUyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBnKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBTKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIGt0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IE4uQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgSXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IE4uU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBrKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShZKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShZKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogT3QgfSA9IGsoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBPdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBSdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IE90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WShyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEl0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBSdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogR24sIGVycl9fOiBxZSB9ID0gayhcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IHFlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBHbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgcWUoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgSXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IHFlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBiLCBlcnJfXzogSmUgfSA9IGsoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBrKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgVyhzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGNlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgYihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke20ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBtIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogbSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgQ3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBiKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBtID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICBiKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBxbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChLbihwLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgV24odC5iYXNlVXJsLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHUuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmID0gYXdhaXQgbW4ocywgdSk7XG4gICAgICAgIGIoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgZik7XG4gICAgICAgIGNvbnN0IHkgPSAoKGwgPSBwLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBsW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBtID8gYihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogeSA/IChiKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgWG4oZikpIDogKGIoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBRbihmLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgaCA9IGYuY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7aH1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEgocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBiKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IFAgPSBWZSh3KTtcbiAgICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke1AucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBQIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHt5ID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBXZShzLCB7XG4gICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGgsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgSmUoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIEplKHApLCBwO1xuICAgIH1cbiAgfVxuKSwgSm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIE9yLnBhcnNlKHIpO1xufSwgQm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGtyLnBhcnNlKHIpO1xufSwgUW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gQm4odCk7XG4gIGlmIChlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiICYmIGUucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEllKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFhuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IEpuKHQpO1xuICBCZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgTnIociksIEJlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogTywgZXJyX186IGVvIH0gPSBrKFwic3RyaXBlLXByXCIpLCB0byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgcm8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgTyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHRvKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCBXKGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQga2UoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IERyKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChlbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKE8oXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIG5vID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoTyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgTyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSksIGlvKGMsIHkuYW1vdW50LCB5LnBlbmRpbmcsIHkuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBPKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCBGcihjKTtcbiAgICBPKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCB1KSwgTyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IG9vKGUsIHUpLCBwID0gY2UobCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIE8oXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBwKTtcbiAgICBjb25zdCBtID0gYXdhaXQgeW4oYSwge1xuICAgICAgZmllbGRzOiBwLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIGcgPSBzbyhtKTtcbiAgICBPKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgTHIoZywgdSk7XG4gICAgY29uc3QgZiA9IGF3YWl0IFcoYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBPKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFZlKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIE8oXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBwW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogcFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBwW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogcFtkLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogcFtkLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGEsIHkpIH07XG4gICAgfVxuICB9XG4pLCBvbyA9ICh0LCByKSA9PiB7XG4gIHZhciB1LCBsLCBwLCBtO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgobCA9ICh1ID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiB1LnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgYSA9IChtID0gKHAgPSByLnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHIuc2hpcHBpbmdBZGRyZXNzO1xuICByZXR1cm4gZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiLCBPKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgaW8gPSAodCwgciwgZSwgbikgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgc28gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gUnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogViwgZXJyX186IFFlIH0gPSBrKFwicG9ja3l0LXBheXBhbFwiKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBjbyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGxvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHksIGg7XG4gICAgVihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBXKHMpO1xuICAgIFYoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhby5wYXJzZShyKTtcbiAgICBWKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncywgbCA9IGNlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdSA9PSBudWxsID8gdm9pZCAwIDogdS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gU24obCk7XG4gICAgVihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgZyA9IGF3YWl0IENlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbSA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoeSA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MpICE9IG51bGwgJiYgeS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH0pO1xuICAgIGlmIChWKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGcpLCAhZy5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgICAgdGhyb3cgUWUoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZXNwb25zZTpcIiwgZyksIG5ldyBFcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjaGVja291dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGNvbnN0IGYgPSBjby5wYXJzZShnLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF07XG4gICAgaWYgKChoID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBoLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZi5wYXlwYWxfaWZyYW1lX3VybCwgYXdhaXQgX3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB7XG4gICAgICBWKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgICAgY29uc3QgdyA9IGF3YWl0IGpuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBzLFxuICAgICAgICBmLnZlcmlmeV90b2tlbixcbiAgICAgICAgZi5wYXlwYWxfaWZyYW1lX3VybFxuICAgICAgKTtcbiAgICAgIFYoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgdyk7XG4gICAgICBjb25zdCBQID0gUnQody5ocmVmKTtcbiAgICAgIFYoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7UH1gKTtcbiAgICAgIGNvbnN0IEUgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogUCxcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbSA/IGcuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBpZiAoVihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBFKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEUucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgaWYgKCFFLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEUpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBFLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKSwgVHQgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogcixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogaSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xufSkgPT4ge1xuICB2YXIgcCwgbTtcbiAgY29uc3QgYSA9ICgocCA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogcC5hbW91bnRBdG9tKSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnRBdG9tKSA/PyAwLCBjID0gTWF0aC5tYXgoYSAvIDEwMCwgMCksIHUgPSAoKChtID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBtLmN1cnJlbmN5KSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jdXJyZW5jeSkgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgbCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBUT0RPOiBhc2FwIGZvciBwcm9kIC0gYWlyd2FsbGV4IGhhcyBubyBkb2NzIGZvciB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbiA/PyBcIlwiLFxuICAgICAgLy8gQkNSMkRONFRYN0kzRlJSSlxuICAgICAgbWVyY2hhbnROYW1lOiBlXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBzICE9IG51bGwgJiYgcy5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IGMudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID8geyAuLi5sLCAuLi5zLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBsO1xufSwgdW8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBHb29nbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgcG8gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiByID8gaHQucGFyc2UocikgOiBudWxsO1xufSwgZm8gPSAodCwgcikgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBuID0gKHMgPSAoaSA9IHIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5sXSA9ICgoYyA9IChhID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBwID0gbC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgci5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgZVtkLkFERFJFU1NdID0gZVtkLkFERFJFU1NdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgZVtkLkNJVFldID0gZVtkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgZVtkLlpJUF9DT0RFXSA9IGVbZC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgZVtkLlNUQVRFXSA9IGVbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHAgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBlO1xufSwgeyBsb2dfXzogTSwgZXJyX186IHRlIH0gPSBrKFwiYXd4LWdvb2dsZS1wYXlcIik7XG5sZXQgUmUgPSBudWxsO1xuY29uc3QgTXQgPSAodCkgPT4gdCA9PT0gZHQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIER0ID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IE10KHQpO1xuICByZXR1cm4gUmUgPT09IG51bGwgJiYgKFJlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IHIubWVyY2hhbnRJbmZvXG4gIH0pKSwgUmU7XG59LCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgbW8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgdmFyIGEsIGM7XG4gICAgY29uc3QgZSA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRnQpO1xuICAgIGlmICghZSlcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgTShcIkdvb2dsZSBQYXkgQ1BNXCIsIGUpO1xuICAgIGNvbnN0IG4gPSBlLm1ldGFkYXRhO1xuICAgIGlmICghbi5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB0ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoTShcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IHVvKCksICEoKGMgPSAoYSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBhLnBheW1lbnRzKSAhPSBudWxsICYmIGMuYXBpKSlcbiAgICAgIHJldHVybiB0ZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoTXQodC5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW4uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiB0ZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBNKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1ID0gVHQoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogbi5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBuLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG4uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICBpbml0aWFsUHJldmlldzogdm9pZCAwXG4gICAgICB9KSwgeyByZXN1bHQ6IGwgfSA9IGF3YWl0IER0KHQuYmFzZVVybCwgdSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB1XG4gICAgICApO1xuICAgICAgaWYgKCFsKVxuICAgICAgICByZXR1cm4gTShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIH0gfTtcbiAgICB9IGNhdGNoICh1KSB7XG4gICAgICByZXR1cm4gdGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB1KSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBMLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB1ID8/IHt9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICB0ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBsKSwgci5nZXQub25DaGVja291dEVycm9yKChsID09IG51bGwgPyB2b2lkIDAgOiBsLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHlvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIGcsIGYsIHksIGgsIHcsIFA7XG4gICAgTShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBGdCksIGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBXKGEpLCB1ID0gcy5tZXRhZGF0YTtcbiAgICBpZiAoIXUucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGwgPSBUdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHUucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHUucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHUuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGF3YWl0IGtlKFxuICAgICAgICBhLFxuICAgICAgICBjLnRva2VuLFxuICAgICAgICBjLm1vZGUgPT09IFwic2V0dXBcIixcbiAgICAgICAgdm9pZCAwXG4gICAgICApLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSksIHAgPSBEdCh0LmJhc2VVcmwsIGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBFID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEobCk7XG4gICAgICBNKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgRSk7XG4gICAgICBjb25zdCBRID0gZm8oZSwgRSksIEEgPSBjZShcbiAgICAgICAgUSxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBYID0gKGcgPSAobSA9IEUucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBnLnRva2VuO1xuICAgICAgaWYgKCFYKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHBlID0gYXdhaXQgQ2UoYSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogQVtkLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5X2NvZGU6IEFbZC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgZWUgPSBwbyhwZSk7XG4gICAgICBNKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgZWUpO1xuICAgICAgY29uc3QgJCA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGVlID09IG51bGwgPyB2b2lkIDAgOiBlZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBYXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE0oXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCAkKTtcbiAgICAgIGxldCBEID0gKHkgPSAoZiA9ICQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogZlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuaWQ7XG4gICAgICBjb25zdCBKID0gKGggPSAkLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGguZmluZChcbiAgICAgICAgKFUpID0+IFUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoSiAmJiBKLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBNKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgSik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBVIH0gPSBhd2FpdCBJZSh7XG4gICAgICAgICAgdXJsOiBKLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChNKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtVfV1gKSwgVSA9PT0gTi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChVID09PSBOLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoSiAmJiAhRCkge1xuICAgICAgICBjb25zdCBVID0gYXdhaXQgSChhLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBKLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBKLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBNKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgVSksIEQgPSAoUCA9ICh3ID0gVS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogUC5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICBpZiAoYy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBEIH0gfTtcbiAgICAgIHtcbiAgICAgICAgTShcIlN0YXJ0aW5nIG9uZS10aW1lIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICAgICAgY29uc3QgVSA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogRCxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgICAgY3VzdG9tZXJfZW1haWw6IEFbZC5FTUFJTF0sXG4gICAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IEFbZC5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogQVtkLkNPVU5UUlldLFxuICAgICAgICAgIHByb21vdGlvbl9jb2RlOiBBW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IEFbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IEFbZC5MQVNUX05BTUVdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShhLCBVKSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgIHRocm93IHRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEUpLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgaG8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsIGUuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIF9vID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHIudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHIuYmlsbGluZ0NvbnRhY3QsIGkgPSByLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4udCB9O1xuICByZXR1cm4gKGUgfHwgbiB8fCBpKSAmJiAoc1tkLkVNQUlMXSA9IHNbZC5FTUFJTF0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1tkLkNPVU5UUlldID0gc1tkLkNPVU5UUlldIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1tkLlpJUF9DT0RFXSA9IHNbZC5aSVBfQ09ERV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBzW2QuRklSU1RfTkFNRV0gPSBzW2QuRklSU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmdpdmVuTmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiLCBzW2QuTEFTVF9OQU1FXSA9IHNbZC5MQVNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmZhbWlseU5hbWUpIHx8IFwiX09QX1VOS05PV05cIiksIHM7XG59LCBnbyA9IHokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSksIHdvID0gKHQpID0+IGdvLnNhZmVQYXJzZSh0KS5kYXRhLCBibyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcIm1lc3NhZ2VcIixcbiAgICAoZSkgPT4ge1xuICAgICAgdmFyIGk7XG4gICAgICBjb25zdCBuID0gd28oZSk7XG4gICAgICAoKGkgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2VUeXBlKSA9PT0gXCJ3aW5kb3djbG9zaW5nXCIgJiYgKHQoKSwgci5hYm9ydCgpKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNpZ25hbDogci5zaWduYWxcbiAgICB9XG4gICksIHtcbiAgICBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6ICgpID0+IHIuYWJvcnQoKVxuICB9O1xufSwgeyBsb2dfXzogaGUgfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gdm8odCwgcikge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgQ2Uoci5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogci5ub25DZGVGb3JtSW5wdXRzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogci5ub25DZGVGb3JtSW5wdXRzW2QuTEFTVF9OQU1FXSxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IHQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiByLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0sIGkgPSBuLnBheW1lbnRfc2Vzc2lvbiwgcyA9IG4uY29uc2VudF9pZDtcbiAgICBpZiAoIWkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgaWYgKCFzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGkpLCBzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgci5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEVvKHQsIHIpIHtcbiAgdmFyIGksIHM7XG4gIGlmICghdC5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBoZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHQpO1xuICBjb25zdCB7IHN0YXR1czogZSB9ID0gYXdhaXQgSWUoe1xuICAgIHVybDogdC5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogci5iYXNlVXJsXG4gIH0pO1xuICBpZiAoaGUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2V9XWApLCBlID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGUgPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogdC50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB0LmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCAocyA9IChpID0gbi5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZDtcbn1cbmFzeW5jIGZ1bmN0aW9uIFNvKHQsIHIsIGUpIHtcbiAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGUuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogZS5wcmVmaWxsLnRva2VuLFxuICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgIHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfSxcbiAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhMCxcbiAgICB1c2VfY29uZmlybWVkX3BtX2lkOiB0LFxuICAgIGxpbmVfaXRlbXM6IGUucHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBlLnByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGN1c3RvbWVyX2VtYWlsOiByW2QuRU1BSUxdLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiByW2QuWklQX0NPREVdLFxuICAgIGN1c3RvbWVyX2NvdW50cnk6IHJbZC5DT1VOVFJZXSxcbiAgICBwcm9tb3Rpb25fY29kZTogcltkLlBST01PVElPTl9DT0RFXVxuICB9KSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gQ28odCwgciwgZSkge1xuICB2YXIgbiwgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gdC5wYXltZW50LCBjID0gX28oci5ub25DZGVGb3JtSW5wdXRzLCBhKSwgdSA9IGNlKFxuICAgICAgYyxcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgYXdhaXQgdm4oci5jb25uZWN0aW9uLCB7XG4gICAgICBlbWFpbDogdVtkLkVNQUlMXSxcbiAgICAgIGZpcnN0X25hbWU6IHVbZC5GSVJTVF9OQU1FXSxcbiAgICAgIGxhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICB6aXBfY29kZTogdVtkLlpJUF9DT0RFXSxcbiAgICAgIGNvdW50cnk6IHVbZC5DT1VOVFJZXSxcbiAgICAgIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6ICEwXG4gICAgfSk7XG4gICAgY29uc3QgbCA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBsZXQgcCA9IChpID0gKG4gPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF0pID09IG51bGwgPyB2b2lkIDAgOiBpLmlkO1xuICAgIGNvbnN0IG0gPSAocyA9IGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogcy5maW5kKFxuICAgICAgKGYpID0+IGYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChtICE9IG51bGwgJiYgbS5yZWRpcmVjdF91cmwgJiYgbS5jb25zZW50X2lkICYmIG0udGhlaXJfcG1faWQgJiYgKHAgPSBhd2FpdCBFbyhtLCByKSksICFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChnKSwgci5pc1NldHVwTW9kZSA/IHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IHAgfSB9IDogYXdhaXQgU28ocCwgdSwgcik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBjID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHosIGVycl9fOiBGZSB9ID0gayhcImF3eC1hcHBsZS1wYXlcIiksIEx0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBrbyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBMdCk7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB6KFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBobygpLCB6KFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHJldHVybiBGZShcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgcCksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4geihcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoeihcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4geihcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBXKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCIsIGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB1ID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoeihcInByb2Nlc3NvckFjY291bnRcIiwgdSksICF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHApID0+IHtcbiAgICAgICAgdmFyIG07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgTC5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGlzU2V0dXBNb2RlOiBhLFxuICAgICAgICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICAgICAgICBpbml0aWFsUHJldmlldzogKChtID0gcCA9PSBudWxsID8gdm9pZCAwIDogcC5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogbS5hbW91bnQpID8/IGMsXG4gICAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgRmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBnKSwgci5nZXQub25DaGVja291dEVycm9yKChnID09IG51bGwgPyB2b2lkIDAgOiBnLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFBvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogaVxuICB9KSA9PiB7XG4gICAgdmFyIEUsIFE7XG4gICAgY29uc3QgcyA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTHQpLCB7IGluaXRpYWxQcmV2aWV3OiBhLCBpc1NldHVwTW9kZTogYywgcHJlZmlsbDogdSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbCB9ID0gbiwgcCA9ICgoKEUgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuY3VycmVuY3kpID8/IGEuY3VycmVuY3kgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgZyA9ICgoKChRID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBRLmFtb3VudEF0b20pID8/IGEuYW1vdW50QXRvbSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKSwgZiA9IHtcbiAgICAgIGxhYmVsOiAobCA9PSBudWxsID8gdm9pZCAwIDogbC5sYWJlbCkgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogbCAhPSBudWxsICYmIGwucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBnXG4gICAgfSwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHAsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogZixcbiAgICAgIC4uLihsID09IG51bGwgPyB2b2lkIDAgOiBsLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfTtcbiAgICB6KFwiUGF5bWVudCBSZXF1ZXN0XCIsIHkpO1xuICAgIGNvbnN0IGggPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpO1xuICAgIHooXCJBcHBsZVBheVNlc3Npb25cIiwgaCk7XG4gICAgY29uc3QgdyA9IHtcbiAgICAgIHNlc3Npb246IGgsXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogcy5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogYyxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGksXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICBsZXQgUDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKEEsIFgpID0+IHtcbiAgICAgIGNvbnN0IHBlID0gKCkgPT4ge1xuICAgICAgICB6KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgWChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIHsgY2xlYW51cENhbmNlbExpc3RlbmVyOiBlZSB9ID0gYm8ocGUpO1xuICAgICAgaC5vbmNhbmNlbCA9IHBlLCBoLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICgkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUCA9IGF3YWl0IHZvKCQsIHcpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgWChEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgJCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5mIH1cbiAgICAgICAgfTtcbiAgICAgICAgaC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oJCk7XG4gICAgICB9LCBoLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoJCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEQgPSBhd2FpdCBDbygkLCB3LCBQKTtcbiAgICAgICAgICBlZSgpLCBBKEQpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgWChEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChBKSA9PiB7XG4gICAgICB0aHJvdyBGZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIEEpLCBBO1xuICAgIH0pO1xuICB9XG4pLCBMZSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSB0LmZpbHRlcigoaSkgPT4ge1xuICAgIGNvbnN0IHMgPSBlID09PSB2b2lkIDAgPyAhMCA6IGkucHJvY2Vzc29yX25hbWUgPT09IGUsIGEgPSBpLnByb3ZpZGVyID09PSByO1xuICAgIHJldHVybiBzICYmIGE7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIHJldHVybiBuWzBdO1xufSwgTCA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBablxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBybyxcbiAgICBydW46IG5vXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBJbixcbiAgICBydW46IE9uXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IGxvXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBtbyxcbiAgICBydW46IHlvXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDoga28sXG4gICAgcnVuOiBQb1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBOZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIE5lID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgaSkgJiYgKGVbaV0gPSBuW2ldKTtcbiAgfSwgTmUodCwgcik7XG59O1xuZnVuY3Rpb24gWih0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIE5lKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiBBbyh0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGkocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgYSkge1xuICAgIGZ1bmN0aW9uIGMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbChuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBhKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGEobSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgcC5kb25lID8gcyhwLnZhbHVlKSA6IGkocC52YWx1ZSkudGhlbihjLCB1KTtcbiAgICB9XG4gICAgbCgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE50KHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGksIHMsIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBhLm5leHQgPSBjKDApLCBhLnRocm93ID0gYygxKSwgYS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBjKGwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHUoW2wsIHBdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHUobCkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYSAmJiAoYSA9IDAsIGxbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgaSAmJiAocyA9IGxbMF0gJiAyID8gaS5yZXR1cm4gOiBsWzBdID8gaS50aHJvdyB8fCAoKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShzID0gcy5jYWxsKGksIGxbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIHMgJiYgKGwgPSBbbFswXSAmIDIsIHMudmFsdWVdKSwgbFswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IGxbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGkgPSBsWzFdLCBsID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbCA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmIChsWzBdID09PSA2IHx8IGxbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobFswXSA9PT0gMyAmJiAoIXMgfHwgbFsxXSA+IHNbMF0gJiYgbFsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gbFsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobFswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSBsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaChsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGwgPSBbNiwgcF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmIChsWzBdICYgNSkgdGhyb3cgbFsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogbFswXSA/IGxbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGllKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiB3ZSh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgaSwgcyA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoaSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGEgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIGJlKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiBuZSh0KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgbmUgPyAodGhpcy52ID0gdCwgdGhpcykgOiBuZXcgbmUodCk7XG59XG5mdW5jdGlvbiBJbyh0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEoZikge1xuICAgIHJldHVybiBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHkpLnRoZW4oZiwgbSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHkpIHtcbiAgICBuW2ZdICYmIChpW2ZdID0gZnVuY3Rpb24oaCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHcsIFApIHtcbiAgICAgICAgcy5wdXNoKFtmLCBoLCB3LCBQXSkgPiAxIHx8IHUoZiwgaCk7XG4gICAgICB9KTtcbiAgICB9LCB5ICYmIChpW2ZdID0geShpW2ZdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIHUoZiwgeSkge1xuICAgIHRyeSB7XG4gICAgICBsKG5bZl0oeSkpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGcoc1swXVszXSwgaCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGwoZikge1xuICAgIGYudmFsdWUgaW5zdGFuY2VvZiBuZSA/IFByb21pc2UucmVzb2x2ZShmLnZhbHVlLnYpLnRoZW4ocCwgbSkgOiBnKHNbMF1bMl0sIGYpO1xuICB9XG4gIGZ1bmN0aW9uIHAoZikge1xuICAgIHUoXCJuZXh0XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIG0oZikge1xuICAgIHUoXCJ0aHJvd1wiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBnKGYsIHkpIHtcbiAgICBmKHkpLCBzLnNoaWZ0KCksIHMubGVuZ3RoICYmIHUoc1swXVswXSwgc1swXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIE9vKHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgZTtcbiAgcmV0dXJuIHIgPyByLmNhbGwodCkgOiAodCA9IHR5cGVvZiBpZSA9PSBcImZ1bmN0aW9uXCIgPyBpZSh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgdSkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCB1LCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIHUpIHtcbiAgICBQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihsKSB7XG4gICAgICBzKHsgdmFsdWU6IGwsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEModCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gT2UodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBUZSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHZlKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciBkZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHIsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBlLCBuLCBpLCBzO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgYSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChhKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShhKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IGllKGEpLCB1ID0gYy5uZXh0KCk7ICF1LmRvbmU7IHUgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgbCA9IHUudmFsdWU7XG4gICAgICAgICAgICAgIGwucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiBoIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHUgJiYgIXUuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBwID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoQyhwKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwKCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBzID0gaCBpbnN0YW5jZW9mIFRlID8gaC5lcnJvcnMgOiBbaF07XG4gICAgICAgIH1cbiAgICAgIHZhciBtID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGcgPSBpZShtKSwgZiA9IGcubmV4dCgpOyAhZi5kb25lOyBmID0gZy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciB5ID0gZi52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFhlKHkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgaCBpbnN0YW5jZW9mIFRlID8gcyA9IGJlKGJlKFtdLCB3ZShzKSksIHdlKGguZXJyb3JzKSkgOiBzLnB1c2goaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZiAmJiAhZi5kb25lICYmIChpID0gZy5yZXR1cm4pICYmIGkuY2FsbChnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IFRlKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIFhlKHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiB2ZShlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIHZlKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwganQgPSBkZS5FTVBUWTtcbmZ1bmN0aW9uIFV0KHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBkZSB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBDKHQucmVtb3ZlKSAmJiBDKHQuYWRkKSAmJiBDKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gWGUodCkge1xuICBDKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIHh0ID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sICR0ID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgYmUoW3QsIHJdLCB3ZShlKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBWdCh0KSB7XG4gICR0LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgdDtcbiAgfSk7XG59XG5mdW5jdGlvbiBldCgpIHtcbn1cbmZ1bmN0aW9uIF9lKHQpIHtcbiAgdCgpO1xufVxudmFyIEdlID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBVdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gRG8sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgamUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KGRlKSwgUm8gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE1lKHQsIHIpIHtcbiAgcmV0dXJuIFJvLmNhbGwodCwgcik7XG59XG52YXIgVG8gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgbWUobik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBtZShuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBtZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtZShlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgamUgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSkge1xuICAgIHZhciBzID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIGE7XG4gICAgaWYgKEMoZSkgfHwgIWUpXG4gICAgICBhID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogaSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgeHQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgTWUoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgTWUoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIE1lKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGEgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBUbyhhKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oR2UpO1xuZnVuY3Rpb24gbWUodCkge1xuICBWdCh0KTtcbn1cbmZ1bmN0aW9uIE1vKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBEbyA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogZXQsXG4gIGVycm9yOiBNbyxcbiAgY29tcGxldGU6IGV0XG59LCB6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIEZvKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBMbyh0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IEZvIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBLID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IGpvKHIpID8gciA6IG5ldyBqZShyLCBlLCBuKTtcbiAgICByZXR1cm4gX2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSA9IGksIGMgPSBhLm9wZXJhdG9yLCB1ID0gYS5zb3VyY2U7XG4gICAgICBzLmFkZChjID8gYy5jYWxsKHMsIHUpIDogdSA/IGkuX3N1YnNjcmliZShzKSA6IGkuX3RyeVN1YnNjcmliZShzKSk7XG4gICAgfSksIHM7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUocik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgci5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihyLCBlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiBlID0gdHQoZSksIG5ldyBlKGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIHZhciBhID0gbmV3IGplKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgIHModSksIGEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBzLFxuICAgICAgICBjb21wbGV0ZTogaVxuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShhKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlW3plXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIHJbZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIExvKHIpKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiByID0gdHQociksIG5ldyByKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHZhciBzO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcyA9IGE7XG4gICAgICB9LCBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBpKGEpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBuZXcgdChyKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIHR0KHQpIHtcbiAgdmFyIHI7XG4gIHJldHVybiAociA9IHQgPz8geHQuUHJvbWlzZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBObyh0KSB7XG4gIHJldHVybiB0ICYmIEModC5uZXh0KSAmJiBDKHQuZXJyb3IpICYmIEModC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBqbyh0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiBHZSB8fCBObyh0KSAmJiBVdCh0KTtcbn1cbmZ1bmN0aW9uIFVvKHQpIHtcbiAgcmV0dXJuIEModCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIHhvKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAoVW8ocikpXG4gICAgICByZXR1cm4gci5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uICRvKHQsIHIsIGUsIG4sIGkpIHtcbiAgcmV0dXJuIG5ldyBWbyh0LCByLCBlLCBuLCBpKTtcbn1cbnZhciBWbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIHUgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gdS5vbkZpbmFsaXplID0gYSwgdS5zaG91bGRVbnN1YnNjcmliZSA9IGMsIHUuX25leHQgPSBuID8gZnVuY3Rpb24obCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihsKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZS5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIHUuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMobCk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgdS5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIGUuZXJyb3IobCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgdTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHI7XG59KEdlKSwgcW8gPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHF0ID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSBuZXcgcnQodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSBlLCBuO1xuICB9LCByLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBxbygpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpLCBzO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBpZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHUgPSBjLnZhbHVlO1xuICAgICAgICAgICAgdS5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiBsIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBpID0gbi5vYnNlcnZlcnM7IGkubGVuZ3RoOyApXG4gICAgICAgICAgaS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gZS5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSB0aGlzLCBzID0gaS5oYXNFcnJvciwgYSA9IGkuaXNTdG9wcGVkLCBjID0gaS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIHMgfHwgYSA/IGp0IDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IGRlKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgdmUoYywgZSk7XG4gICAgfSkpO1xuICB9LCByLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSBuLmhhc0Vycm9yLCBzID0gbi50aHJvd25FcnJvciwgYSA9IG4uaXNTdG9wcGVkO1xuICAgIGkgPyBlLmVycm9yKHMpIDogYSAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIHIucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IEsoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gbmV3IHJ0KGUsIG4pO1xuICB9LCByO1xufShLKSwgcnQgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBlLCBpLnNvdXJjZSA9IG4sIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgcmV0dXJuIChpID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBqdDtcbiAgfSwgcjtcbn0ocXQpLCBHbyA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgem8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KGRlKSwgbnQgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIGJlKFt0LCByXSwgd2UoZSkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBZbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSBlLCBpLndvcmsgPSBuLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBudC5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGkpO1xuICB9LCByLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgbnQuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUoZSwgbik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgci5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IGUuaWQsIGkgPSBlLnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCB2ZShzLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgcjtcbn0oem8pLCBvdCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIsIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHIsIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHIpLnNjaGVkdWxlKG4sIGUpO1xuICB9LCB0Lm5vdyA9IEdvLm5vdywgdDtcbn0oKSwgS28gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IG90Lm5vdyk7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5hY3Rpb25zID0gW10sIGkuX2FjdGl2ZSA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoaSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgaSkge1xuICAgICAgZm9yICg7IGUgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgaTtcbiAgICB9XG4gIH0sIHI7XG59KG90KSwgSG8gPSBuZXcgS28oWW8pLCBXbyA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIFpvKHQpIHtcbiAgcmV0dXJuIEModCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIEpvKHQpIHtcbiAgcmV0dXJuIEModFt6ZV0pO1xufVxuZnVuY3Rpb24gQm8odCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBRbyh0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gWG8oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgZWkgPSBYbygpO1xuZnVuY3Rpb24gdGkodCkge1xuICByZXR1cm4gQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W2VpXSk7XG59XG5mdW5jdGlvbiByaSh0KSB7XG4gIHJldHVybiBJbyh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuLCBpLCBzO1xuICAgIHJldHVybiBOdCh0aGlzLCBmdW5jdGlvbihhKSB7XG4gICAgICBzd2l0Y2ggKGEubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBhLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGEubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBuZShlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBhLnNlbnQoKSwgaSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgbmUodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgbmUoaSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gYS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbmkodCkge1xuICByZXR1cm4gQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBvaSh0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgSylcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmIChKbyh0KSlcbiAgICAgIHJldHVybiBpaSh0KTtcbiAgICBpZiAoV28odCkpXG4gICAgICByZXR1cm4gc2kodCk7XG4gICAgaWYgKFpvKHQpKVxuICAgICAgcmV0dXJuIGFpKHQpO1xuICAgIGlmIChCbyh0KSlcbiAgICAgIHJldHVybiBHdCh0KTtcbiAgICBpZiAodGkodCkpXG4gICAgICByZXR1cm4gY2kodCk7XG4gICAgaWYgKG5pKHQpKVxuICAgICAgcmV0dXJuIGxpKHQpO1xuICB9XG4gIHRocm93IFFvKHQpO1xufVxuZnVuY3Rpb24gaWkodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdFt6ZV0oKTtcbiAgICBpZiAoQyhlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUocik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFyLmNsb3NlZDsgZSsrKVxuICAgICAgci5uZXh0KHRbZV0pO1xuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHIuY2xvc2VkIHx8IChyLm5leHQoZSksIHIuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBWdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY2kodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHZhciBlLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0gaWUodCksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGkucmV0dXJuKSAmJiBuLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEd0KHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB1aSh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsaSh0KSB7XG4gIHJldHVybiBHdChyaSh0KSk7XG59XG5mdW5jdGlvbiB1aSh0LCByKSB7XG4gIHZhciBlLCBuLCBpLCBzO1xuICByZXR1cm4gQW8odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBOdCh0aGlzLCBmdW5jdGlvbih1KSB7XG4gICAgICBzd2l0Y2ggKHUubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHUudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gT28odCksIHUubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IHUuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IG4udmFsdWUsIHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIHUubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSB1LnNlbnQoKSwgaSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiB1LnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUuc2VudCgpLCB1LmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaSh0LCByLCBlLCBuLCBpKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBpID09PSB2b2lkIDAgJiYgKGkgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGkgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWkpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBwaSh0LCByKSB7XG4gIHZhciBlID0gQyh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IEsobik7XG59XG52YXIgZmkgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBtaSh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIHMgPSBhLCBpID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGkgPyBlKHMpIDogbihuZXcgZmkoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geWkodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIGhpID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIF9pKHQsIHIpIHtcbiAgdmFyIGUgPSB5aSh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBpID0gZS5lYWNoLCBzID0gZS53aXRoLCBhID0gcyA9PT0gdm9pZCAwID8gZ2kgOiBzLCBjID0gZS5zY2hlZHVsZXIsIHUgPSBjID09PSB2b2lkIDAgPyBIbyA6IGMsIGwgPSBlLm1ldGEsIHAgPSBsID09PSB2b2lkIDAgPyBudWxsIDogbDtcbiAgaWYgKG4gPT0gbnVsbCAmJiBpID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4geG8oZnVuY3Rpb24obSwgZykge1xuICAgIHZhciBmLCB5LCBoID0gbnVsbCwgdyA9IDAsIFAgPSBmdW5jdGlvbihFKSB7XG4gICAgICB5ID0gZGkoZywgdSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZi51bnN1YnNjcmliZSgpLCBvaShhKHtcbiAgICAgICAgICAgIG1ldGE6IHAsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGgsXG4gICAgICAgICAgICBzZWVuOiB3XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShnKTtcbiAgICAgICAgfSBjYXRjaCAoUSkge1xuICAgICAgICAgIGcuZXJyb3IoUSk7XG4gICAgICAgIH1cbiAgICAgIH0sIEUpO1xuICAgIH07XG4gICAgZiA9IG0uc3Vic2NyaWJlKCRvKGcsIGZ1bmN0aW9uKEUpIHtcbiAgICAgIHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIHcrKywgZy5uZXh0KGggPSBFKSwgaSA+IDAgJiYgUChpKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICB5ICE9IG51bGwgJiYgeS5jbG9zZWQgfHwgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgaCA9IG51bGw7XG4gICAgfSkpLCAhdyAmJiBQKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSB1Lm5vdygpIDogaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2kodCkge1xuICB0aHJvdyBuZXcgaGkodCk7XG59XG5jbGFzcyBnZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiAkZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHBpKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBtaSh0aGlzLl9zdWJqZWN0LnBpcGUoX2koZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgcXQoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogd2ksIGVycl9fOiBiaSB9ID0gayhcImluaXQtZmxvd3NcIiksIHllID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBnZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogZSxcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGUuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBpID0gYXdhaXQgcihuKTtcbiAgICAgICAgd2koYOKclCAke3R9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaSksIGUuc2V0KGkpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICBiaShg8J2ZrSAke3R9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBZKGkpLCBcIkRldGFpbHM6XCIsIGkpLCBlLnRocm93KGksIFkoaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIHZpID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0KS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHIsIGZvcm1DYWxsYmFja3M6IGUgfSkpKTtcbn0sIEVpID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IHllKFwiU3RyaXBlIFBSXCIsIEwuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IHllKFwiU3RyaXBlIExpbmtcIiwgTC5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogeWUoXCJBaXJ3YWxsZXggR1BheVwiLCBMLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiB5ZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBMLmFpcndhbGxleEFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogU2kgfSA9IGsoXCJmb3JtLWNhbGxiYWNrc1wiKSwgRiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGl0ID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IEYsXG4gIG9uQmx1cjogRixcbiAgb25DaGFuZ2U6IEYsXG4gIG9uTG9hZDogRixcbiAgb25Mb2FkRXJyb3I6IEYsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBGLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogRixcbiAgb25DaGVja291dFN1Y2Nlc3M6IEYsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogRixcbiAgb25DaGVja291dEVycm9yOiBGLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogRlxufSksIHggPSBjbGFzcyB4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0geC5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFh0KGUsIG4gPz8geC5OT09QLCBTaSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG54Lk5PT1AgPSAoKSA9PiB7XG59LCB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhpdC5rZXlvZigpLmVudW0pLmZvckVhY2goKGUpID0+IHtcbiAgICByW2VdID0geC5OT09QO1xuICB9KSwgcjtcbn0sIHguZnJvbU9iamVjdCA9IChyKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgeCgpO1xuICByZXR1cm4gZS5zZXRDYWxsYmFja3MoaXQucGFyc2UocikpLCBlO1xufTtcbmxldCBVZSA9IHg7XG5jbGFzcyBDaSB7XG4gIGNvbnN0cnVjdG9yKHIsIGUsIG4sIGkpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAocykgPT4ge1xuICAgICAgaWYgKCFzLnNvdXJjZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgaWYgKHN0KHMub3JpZ2luKSAhPT0gc3QodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnBlbnBhbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IFVyKEpTT04ucGFyc2Uocy5kYXRhKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIFVua25vd24gZXZlbnQuIElnbm9yaW5nOlwiLCBtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiB1LCBwYXlsb2FkOiBsIH0gPSBhLCBwID0gbC50eXBlO1xuICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQobC5oZWlnaHQgPyBgJHtsLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyh1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cih1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UodSwgbC5lbGVtZW50VHlwZSwgbC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbdV0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKGwubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihsLmVsZW1lbnRUeXBlLCBsLmVycm9ycywgdSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBwKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IHN0ID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24ga2kodCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IHhyKG4pO1xuICBpZiAoISRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBQaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBBaSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIHUgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICAgICAgYSAmJiBhdChcImFwcGxlX3BheVwiLCBzLCByLCBlLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgICAgIGMgJiYgYXQoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKHUpO1xuICAgIH1cbiAgfSk7XG59LCBhdCA9ICh0LCByLCBlLCBuLCBpKSA9PiBMLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogb2UoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIGN0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogcSwgZXJyX186IEIgfSA9IGsoXCJvcC1mb3JtXCIpLCBHID0gY2xhc3MgRyB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBnZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgZ2UoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGdlKCksIHRoaXMuaW5pdEZsb3dzID0gRWkoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBxKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgcShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGN0XG4gICAgICAgIH0pO1xuICAgICAgICBxKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBxKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBpID0gRy5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGkpLCBBaSh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgcShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdmkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIHEoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IFkoZSk7XG4gICAgICAgIEIoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBpID0gZXIucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBhID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7aX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBhLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoaSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICByZXR1cm4gKGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBpLnR5cGUsIG5vZGU6IGkubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbcmUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3JlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbcmUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtyZS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gaSwgaTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBuLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIG4uYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgbi5hcHBlbmQoXCJzdHlsZXNcIiwganIoZS5zdHlsZXMpKSwgbi5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgbjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAga2koZS5ub2RlKS50aGVuKChuKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIG4pLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChuKTtcbiAgICAgIH0pLmNhdGNoKChuKSA9PiBCKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEwuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbiwgaV0pID0+ICh7XG4gICAgICAgIG5hbWU6IG4sXG4gICAgICAgIC4uLmkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWkpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZSkge1xuICAgICAgICBjYXNlIFwicG9ja3l0LXBheXBhbFwiOlxuICAgICAgICAgIHJldHVybiBMLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogaSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoaS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGkuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IG4gfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAkZShlKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgcShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcztcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGUpO1xuICAgIH0sIEcuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjhcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBVZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgUGkoKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgQ2kodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5HLm9qc0Zsb3dzID0gTCwgRy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChHLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgRy5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgRy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHIuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gZHQpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgbHQgPSBHO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7ZmUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2ZlLnJlZC5ib2xkKFwib2pzL1wiKX0ke2ZlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAobHQuZ2V0SW5zdGFuY2UoKSkge1xuICAgIGx0LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBsdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBsdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleFxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IGAke2Jhc2VVcmx9L2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50LCBDYXJkRWxlbWVudCwgQ2FyZEV4cGlyeUVsZW1lbnQsIENhcmROdW1iZXJFbGVtZW50LCBFbGVtZW50c0Zvcm0sIEZpZWxkTmFtZSwgdXNlT3BlblBheUVsZW1lbnRzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxpQkFBQUEsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsZUFBQUMsSUFBYSxhQUFBQyxJQUFXLFVBQUFDLElBQVEsV0FBQUMsVUFBZTtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFRO0FBRWYsTUFBTUMsS0FBa0JiLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FBQ1gsQ0FBQyxHQUVLYyxLQUFxQixNQUFNO0FBQy9CLFFBQU1DLElBQVVkLEdBQVdZLEVBQWU7QUFDMUMsTUFBSSxDQUFDRTtBQUNILFVBQU0sSUFBSSxNQUFNLG1FQUFtRTtBQUVyRixTQUFPQTtBQUNULEdBRU1DLEtBQUssOEJBQThCQyxLQUFLUixFQUFJLE9BQU87QUFBQSxFQUN2RCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUMsR0FBR1MsS0FBS1QsRUFBSSxNQUFNUSxFQUFFLEdBQUdFLEtBQUtWLEVBQUksT0FBTztBQUFBLEVBQ3RDLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFNBQVNBLEVBQUksT0FBTztBQUFBLEVBQ3BC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U3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiZmUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImR0IiwgIll0IiwgIkt0IiwgIkh0IiwgIld0IiwgIlp0IiwgIkRlIiwgIkp0IiwgIkJ0IiwgImUiLCAiUXQiLCAiWSIsICJYdCIsICJuIiwgInYiLCAiUiIsICJkIiwgInB0IiwgImZ0IiwgIm10IiwgInl0IiwgInJlIiwgImVyIiwgIkVlIiwgInRyIiwgImoiLCAicnIiLCAibnIiLCAib3IiLCAiaXIiLCAic3IiLCAiYXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAiZnIiLCAibGUiLCAibXIiLCAieXIiLCAiaHIiLCAiX3IiLCAiZ3IiLCAid3IiLCAiYnIiLCAieGUiLCAidnIiLCAiRXIiLCAiU3IiLCAiTiIsICJDciIsICJrciIsICJodCIsICJQciIsICJBciIsICJJciIsICJPciIsICJSciIsICJUciIsICJTZSIsICJZZSIsICJfdCIsICJNciIsICJEciIsICJzIiwgImEiLCAiRnIiLCAiTHIiLCAiTnIiLCAiaSIsICJjIiwgImpyIiwgIm9lIiwgIlVyIiwgInhyIiwgIiRyIiwgIl8iLCAiVnIiLCAiZ3QiLCAid3QiLCAicXIiLCAiR3IiLCAidWUiLCAienIiLCAiWXIiLCAiYnQiLCAiS3IiLCAiSHIiLCAiV3IiLCAiS2UiLCAidnQiLCAiSGUiLCAiRXQiLCAiWnIiLCAiSnIiLCAiQnIiLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAicm4iLCAiU3QiLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiY24iLCAibG4iLCAidW4iLCAiQ3QiLCAiVCIsICJwbiIsICJkbiIsICJmbiIsICJXIiwgIkNlIiwgIm1uIiwgInluIiwgIkgiLCAiaG4iLCAiX24iLCAia2UiLCAiZ24iLCAiV2UiLCAid24iLCAiUGUiLCAia3QiLCAiYm4iLCAidm4iLCAiJGUiLCAic2UiLCAiQWUiLCAiayIsICJEaSIsICJFbiIsICJWZSIsICJhZSIsICJTbiIsICJQdCIsICJBdCIsICJjZSIsICJDbiIsICJaZSIsICJTIiwgImtuIiwgIlBuIiwgIkFuIiwgIkluIiwgInUiLCAibCIsICJwIiwgIm0iLCAiZyIsICJmIiwgIkwiLCAiVG4iLCAiT24iLCAiUm4iLCAiTW4iLCAiRG4iLCAiRm4iLCAiTG4iLCAiSWUiLCAiSXQiLCAiTm4iLCAiam4iLCAiVW4iLCAiT3QiLCAieG4iLCAiJG4iLCAiUnQiLCAiVm4iLCAicW4iLCAiR24iLCAicWUiLCAiem4iLCAiWW4iLCAiS24iLCAiSG4iLCAiV24iLCAiYiIsICJKZSIsICJCZSIsICJabiIsICJ3IiwgInkiLCAiWG4iLCAiUW4iLCAiaCIsICJQIiwgIkpuIiwgIkJuIiwgIk8iLCAiZW8iLCAidG8iLCAicm8iLCAibm8iLCAiaW8iLCAib28iLCAic28iLCAiViIsICJRZSIsICJhbyIsICJjbyIsICJsbyIsICJUdCIsICJ1byIsICJwbyIsICJmbyIsICJNIiwgInRlIiwgIlJlIiwgIk10IiwgIkR0IiwgIkZ0IiwgIm1vIiwgInlvIiwgIlEiLCAiQSIsICJYIiwgInBlIiwgImVlIiwgIiQiLCAiRCIsICJKIiwgIlUiLCAiaG8iLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAiaGUiLCAidm8iLCAiRW8iLCAiU28iLCAiQ28iLCAieiIsICJGZSIsICJMdCIsICJrbyIsICJQbyIsICJFIiwgIkxlIiwgIk5lIiwgIloiLCAiQW8iLCAiTnQiLCAiaWUiLCAid2UiLCAiYmUiLCAibmUiLCAiSW8iLCAiT28iLCAiQyIsICJPZSIsICJUZSIsICJ2ZSIsICJkZSIsICJYZSIsICJqdCIsICJVdCIsICJ4dCIsICIkdCIsICJWdCIsICJldCIsICJfZSIsICJHZSIsICJEbyIsICJqZSIsICJSbyIsICJNZSIsICJUbyIsICJtZSIsICJNbyIsICJ6ZSIsICJGbyIsICJMbyIsICJLIiwgImpvIiwgInR0IiwgIk5vIiwgIlVvIiwgInhvIiwgIiRvIiwgIlZvIiwgInFvIiwgInF0IiwgInJ0IiwgIkdvIiwgInpvIiwgIm50IiwgIllvIiwgIm90IiwgIktvIiwgIkhvIiwgIldvIiwgIlpvIiwgIkpvIiwgIkJvIiwgIlFvIiwgIlhvIiwgImVpIiwgInRpIiwgInJpIiwgIm5pIiwgIm9pIiwgImlpIiwgInNpIiwgImFpIiwgIkd0IiwgImNpIiwgImxpIiwgInVpIiwgImRpIiwgInBpIiwgImZpIiwgIm1pIiwgInlpIiwgImhpIiwgIl9pIiwgImdpIiwgImdlIiwgIndpIiwgImJpIiwgInllIiwgInZpIiwgIkVpIiwgIlNpIiwgIkYiLCAiaXQiLCAieCIsICJyIiwgIlVlIiwgIkNpIiwgInN0IiwgImtpIiwgIlBpIiwgIkFpIiwgImF0IiwgImN0IiwgInEiLCAiQiIsICJHIiwgImx0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJBV1hfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|