@getopenpay/openpay-js 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +613 -553
- package/dist/index.umd.js +11 -10
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { z as o } from "zod";
|
|
2
2
|
import "uuid";
|
|
3
|
-
import { connectToChild as
|
|
4
|
-
import
|
|
5
|
-
const
|
|
3
|
+
import { connectToChild as xe } from "penpal";
|
|
4
|
+
import B from "chalk";
|
|
5
|
+
const mt = "https://cde.getopenpay.com", yt = o.object({
|
|
6
6
|
type: o.string(),
|
|
7
7
|
loc: o.array(o.string()),
|
|
8
8
|
msg: o.string(),
|
|
9
9
|
url: o.string()
|
|
10
|
-
}),
|
|
10
|
+
}), _t = o.array(yt), gt = o.object({
|
|
11
11
|
code: o.string(),
|
|
12
12
|
message: o.string(),
|
|
13
13
|
path: o.array(o.string())
|
|
14
|
-
}),
|
|
14
|
+
}), bt = o.array(gt), vt = {
|
|
15
15
|
"failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
|
|
16
16
|
}, ae = (t) => {
|
|
17
17
|
const r = t.toLowerCase().trim();
|
|
18
|
-
return
|
|
19
|
-
},
|
|
18
|
+
return vt[r] ?? t;
|
|
19
|
+
}, wt = (t) => {
|
|
20
20
|
try {
|
|
21
21
|
return typeof JSON.parse(t) == "object";
|
|
22
22
|
} catch {
|
|
23
23
|
return !1;
|
|
24
24
|
}
|
|
25
|
-
},
|
|
25
|
+
}, Et = (t) => t.length === 1 ? ae(t[0].msg) : `Please fix the following errors:
|
|
26
26
|
${t.map((e) => `• ${ae(e.msg)}`).join(`
|
|
27
|
-
`)}`,
|
|
27
|
+
`)}`, St = (t) => `Encountered the following errors:
|
|
28
28
|
${t.map((e) => `- ${e.path.join("/")}: ${e.message}`).join(`
|
|
29
|
-
`)}`,
|
|
29
|
+
`)}`, N = (t) => {
|
|
30
30
|
if (t instanceof Error)
|
|
31
|
-
if (
|
|
31
|
+
if (wt(t.message)) {
|
|
32
32
|
const r = JSON.parse(t.message);
|
|
33
|
-
return
|
|
33
|
+
return _t.safeParse(r).success ? Et(r) : bt.safeParse(r).success ? St(r) : (console.warn(`Encountered unknown stringified JSON object:
|
|
34
34
|
${t.message}`), t.message);
|
|
35
35
|
} else
|
|
36
36
|
return ae(t.message);
|
|
@@ -42,7 +42,7 @@ ${t.message}`), t.message);
|
|
|
42
42
|
}
|
|
43
43
|
else
|
|
44
44
|
return t + "";
|
|
45
|
-
},
|
|
45
|
+
}, Ct = (t, r, e) => (...n) => {
|
|
46
46
|
try {
|
|
47
47
|
return r(...n);
|
|
48
48
|
} catch (i) {
|
|
@@ -54,12 +54,12 @@ var m = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "last
|
|
|
54
54
|
const Ne = o.nativeEnum(m);
|
|
55
55
|
var Ue = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Ue || {});
|
|
56
56
|
const $e = o.nativeEnum(Ue), Ve = o.union([Ne, $e]);
|
|
57
|
-
var
|
|
58
|
-
const
|
|
57
|
+
var F = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(F || {});
|
|
58
|
+
const kt = o.nativeEnum(F), ee = o.object({
|
|
59
59
|
provider: o.string(),
|
|
60
60
|
processor_name: Z(o.string()),
|
|
61
61
|
metadata: Z(o.record(o.string(), o.any()))
|
|
62
|
-
}),
|
|
62
|
+
}), Pt = o.object({
|
|
63
63
|
id: o.string()
|
|
64
64
|
});
|
|
65
65
|
o.object({
|
|
@@ -99,76 +99,76 @@ const P = o.enum([
|
|
|
99
99
|
"TOKENIZE",
|
|
100
100
|
"CHECKOUT",
|
|
101
101
|
"START_PAYMENT_FLOW"
|
|
102
|
-
]),
|
|
103
|
-
type:
|
|
102
|
+
]), It = P.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Ot = o.object({ type: It }), Rt = P.extract(["BLUR", "FOCUS", "CHANGE"]), At = o.object({
|
|
103
|
+
type: Rt,
|
|
104
104
|
elementType: $e,
|
|
105
105
|
errors: o.array(o.string()).optional()
|
|
106
|
-
}),
|
|
107
|
-
type:
|
|
106
|
+
}), Tt = P.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), jt = o.object({
|
|
107
|
+
type: Tt,
|
|
108
108
|
message: S,
|
|
109
109
|
headers: o.record(o.string(), o.string()).optional()
|
|
110
|
-
}),
|
|
111
|
-
type:
|
|
110
|
+
}), Mt = P.extract(["VALIDATION_ERROR"]), Lt = o.object({
|
|
111
|
+
type: Mt,
|
|
112
112
|
elementType: Ve,
|
|
113
113
|
errors: o.array(o.string())
|
|
114
|
-
}),
|
|
114
|
+
}), Dt = o.object({
|
|
115
115
|
type: o.literal(P.enum.LAYOUT),
|
|
116
116
|
height: S
|
|
117
|
-
}),
|
|
117
|
+
}), Ft = o.object({
|
|
118
118
|
type: o.literal(P.enum.LOADED),
|
|
119
119
|
sessionId: S,
|
|
120
120
|
totalAmountAtoms: o.number(),
|
|
121
121
|
currency: E,
|
|
122
122
|
checkoutPaymentMethods: o.array(ee)
|
|
123
|
-
}),
|
|
123
|
+
}), xt = o.object({
|
|
124
124
|
type: o.literal(P.enum.PAYMENT_FLOW_STARTED),
|
|
125
125
|
nextActionMetadata: o.record(o.string(), o.any()),
|
|
126
126
|
paymentFlowMetadata: o.any().optional(),
|
|
127
127
|
startPFMetadata: o.optional(o.record(o.string(), o.any()))
|
|
128
|
-
}),
|
|
128
|
+
}), Nt = o.object({
|
|
129
129
|
type: o.literal(P.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
130
130
|
paymentMethodId: o.string()
|
|
131
|
-
}),
|
|
131
|
+
}), V = o.object({
|
|
132
132
|
firstName: S,
|
|
133
133
|
lastName: S,
|
|
134
134
|
email: S,
|
|
135
135
|
zipCode: S,
|
|
136
136
|
country: S,
|
|
137
137
|
promotionCode: E
|
|
138
|
-
}),
|
|
138
|
+
}), Ut = o.object({
|
|
139
139
|
email: S,
|
|
140
140
|
zipCode: S,
|
|
141
141
|
country: S,
|
|
142
142
|
promotionCode: E
|
|
143
|
-
}),
|
|
144
|
-
type:
|
|
143
|
+
}), $t = P.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Vt = o.object({
|
|
144
|
+
type: $t,
|
|
145
145
|
sessionId: S,
|
|
146
146
|
checkoutPaymentMethod: ee,
|
|
147
147
|
paymentFlowMetadata: o.any().optional(),
|
|
148
148
|
doNotUseLegacyCCFlow: o.boolean().optional(),
|
|
149
149
|
existingCCPMId: E
|
|
150
|
-
}).extend(
|
|
150
|
+
}).extend(V.shape), qt = o.object({
|
|
151
151
|
type: o.literal(P.enum.TOKENIZE_SUCCESS),
|
|
152
152
|
isReadyForCheckout: o.boolean()
|
|
153
|
-
}),
|
|
153
|
+
}), zt = o.object({
|
|
154
154
|
type: o.literal(P.enum.CHECKOUT_SUCCESS),
|
|
155
155
|
invoiceUrls: o.array(o.string()),
|
|
156
156
|
subscriptionIds: o.array(o.string()),
|
|
157
157
|
customerId: o.string()
|
|
158
|
-
}),
|
|
159
|
-
|
|
160
|
-
It,
|
|
158
|
+
}), Ht = o.discriminatedUnion("type", [
|
|
159
|
+
Ot,
|
|
161
160
|
At,
|
|
162
|
-
Tt,
|
|
163
161
|
jt,
|
|
164
|
-
Mt,
|
|
165
|
-
Nt,
|
|
166
|
-
Ut,
|
|
167
|
-
$t,
|
|
168
162
|
Lt,
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
163
|
+
Dt,
|
|
164
|
+
Ft,
|
|
165
|
+
Vt,
|
|
166
|
+
qt,
|
|
167
|
+
zt,
|
|
168
|
+
xt,
|
|
169
|
+
Nt
|
|
170
|
+
]), Yt = o.object({
|
|
171
|
+
payload: Ht,
|
|
172
172
|
nonce: S,
|
|
173
173
|
formId: S,
|
|
174
174
|
elementId: S
|
|
@@ -186,49 +186,55 @@ o.object({
|
|
|
186
186
|
secure_token: o.string(),
|
|
187
187
|
existing_cc_pm_id: Z(o.string())
|
|
188
188
|
});
|
|
189
|
-
const
|
|
190
|
-
payment_methods: o.array(
|
|
191
|
-
}),
|
|
189
|
+
const Bt = o.object({
|
|
190
|
+
payment_methods: o.array(Pt)
|
|
191
|
+
}), Jt = o.object({
|
|
192
192
|
elementType: o.string(),
|
|
193
193
|
errors: o.array(o.string())
|
|
194
194
|
});
|
|
195
195
|
o.object({
|
|
196
196
|
session_id: o.string()
|
|
197
197
|
});
|
|
198
|
-
const
|
|
198
|
+
const Kt = o.object({
|
|
199
199
|
success: o.literal(!1),
|
|
200
200
|
error_type: o.literal("validation_error"),
|
|
201
|
-
errors: o.array(
|
|
202
|
-
}),
|
|
201
|
+
errors: o.array(Jt)
|
|
202
|
+
}), Gt = o.discriminatedUnion("success", [
|
|
203
203
|
o.object({ success: o.literal(!0) }),
|
|
204
|
-
|
|
204
|
+
Kt
|
|
205
205
|
]);
|
|
206
206
|
o.object({
|
|
207
207
|
session_id: o.string(),
|
|
208
208
|
checkout_payment_method: ee,
|
|
209
|
-
non_cde_form_fields:
|
|
209
|
+
non_cde_form_fields: V,
|
|
210
210
|
do_not_use_legacy_cc_flow: o.boolean().optional(),
|
|
211
211
|
existing_cc_pm_id: Z(o.string())
|
|
212
212
|
});
|
|
213
213
|
o.object({
|
|
214
214
|
session_id: o.string(),
|
|
215
215
|
checkout_payment_method: ee,
|
|
216
|
-
non_cde_form_fields:
|
|
216
|
+
non_cde_form_fields: V,
|
|
217
|
+
extra_metadata: o.record(o.string(), o.any()).optional()
|
|
217
218
|
});
|
|
218
|
-
var
|
|
219
|
-
const
|
|
219
|
+
var D = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(D || {});
|
|
220
|
+
const Zt = o.object({
|
|
220
221
|
status: o.enum([
|
|
221
222
|
"success",
|
|
222
223
|
"failure",
|
|
223
224
|
"cancelled"
|
|
224
225
|
/* CANCELLED */
|
|
225
|
-
])
|
|
226
|
-
|
|
226
|
+
]),
|
|
227
|
+
href: o.string().optional().nullable()
|
|
228
|
+
});
|
|
229
|
+
o.object({
|
|
230
|
+
href: o.string().optional().nullable()
|
|
231
|
+
});
|
|
232
|
+
const Wt = o.object({
|
|
227
233
|
type: o.string(),
|
|
228
234
|
redirect_url: o.string(),
|
|
229
235
|
initial_intent_id: o.string(),
|
|
230
236
|
consent_id: o.string()
|
|
231
|
-
}),
|
|
237
|
+
}), Qt = (t) => {
|
|
232
238
|
const r = {};
|
|
233
239
|
return Object.entries(t).forEach(([e, n]) => {
|
|
234
240
|
try {
|
|
@@ -238,31 +244,31 @@ const Kt = o.object({
|
|
|
238
244
|
return;
|
|
239
245
|
}
|
|
240
246
|
}), r;
|
|
241
|
-
},
|
|
247
|
+
}, Xt = o.object({
|
|
242
248
|
stripe_pk: o.string(),
|
|
243
249
|
client_secret: o.string(),
|
|
244
250
|
stripe_pm_id: o.string()
|
|
245
|
-
}),
|
|
251
|
+
}), er = o.object({
|
|
246
252
|
type: o.string(),
|
|
247
253
|
client_secret: o.string(),
|
|
248
254
|
stripe_pk: o.string()
|
|
249
|
-
}),
|
|
255
|
+
}), tr = {
|
|
250
256
|
usd: "usd",
|
|
251
257
|
brl: "brl"
|
|
252
258
|
}, te = async (t) => {
|
|
253
259
|
for (let e = 0; e < 10; e++)
|
|
254
|
-
ge() || await
|
|
260
|
+
ge() || await or(500);
|
|
255
261
|
if (!ge())
|
|
256
262
|
throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
|
|
257
263
|
return new Stripe(t);
|
|
258
|
-
},
|
|
264
|
+
}, rr = async (t, r) => {
|
|
259
265
|
const e = await te(t);
|
|
260
266
|
return {
|
|
261
267
|
elements: e.elements(r),
|
|
262
268
|
stripe: e
|
|
263
269
|
};
|
|
264
|
-
},
|
|
265
|
-
const s = await te(t), a =
|
|
270
|
+
}, nr = async (t, r, e, n, i) => {
|
|
271
|
+
const s = await te(t), a = tr[e.toLowerCase().trim()];
|
|
266
272
|
return s.paymentRequest({
|
|
267
273
|
// TODO: replace this with stripe account country as soon as we support it
|
|
268
274
|
country: "US",
|
|
@@ -276,9 +282,9 @@ const Kt = o.object({
|
|
|
276
282
|
requestPayerEmail: !0,
|
|
277
283
|
disableWallets: []
|
|
278
284
|
});
|
|
279
|
-
},
|
|
285
|
+
}, or = (t) => new Promise((r) => {
|
|
280
286
|
setTimeout(r, t);
|
|
281
|
-
}), ge = () => "Stripe" in window,
|
|
287
|
+
}), ge = () => "Stripe" in window, ir = async (t) => new Promise((r, e) => {
|
|
282
288
|
try {
|
|
283
289
|
t.on("paymentmethod", async (n) => {
|
|
284
290
|
r(n);
|
|
@@ -288,7 +294,7 @@ const Kt = o.object({
|
|
|
288
294
|
} catch (n) {
|
|
289
295
|
e(n);
|
|
290
296
|
}
|
|
291
|
-
}),
|
|
297
|
+
}), sr = async (t, r) => {
|
|
292
298
|
if (!t.stripe_pk || !t.client_secret)
|
|
293
299
|
throw new Error(`Invalid next action metadata format: ${JSON.stringify(t)}`);
|
|
294
300
|
const n = await (await te(t.stripe_pk)).confirmCardSetup(t.client_secret, {
|
|
@@ -297,7 +303,7 @@ const Kt = o.object({
|
|
|
297
303
|
if (n.error)
|
|
298
304
|
throw r.complete("fail"), new Error(`Payment failed: ${n.error.message ?? "unknown"}`);
|
|
299
305
|
return r.complete("success"), n;
|
|
300
|
-
},
|
|
306
|
+
}, ar = async (t) => {
|
|
301
307
|
var i, s, a, c;
|
|
302
308
|
const e = await (await te(t.stripe_pk)).confirmCardSetup(t.client_secret, {
|
|
303
309
|
payment_method: t.stripe_pm_id
|
|
@@ -307,16 +313,16 @@ const Kt = o.object({
|
|
|
307
313
|
else throw n === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
|
|
308
314
|
`${((s = e.error) == null ? void 0 : s.message) ?? ((c = (a = e.setupIntent) == null ? void 0 : a.last_setup_error) == null ? void 0 : c.message) ?? "Payment failed, please click submit again to pay."}`
|
|
309
315
|
);
|
|
310
|
-
},
|
|
316
|
+
}, cr = (t) => JSON.stringify(t), de = (t, r) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((i, s) => {
|
|
311
317
|
const a = s.getAttribute("data-opid");
|
|
312
318
|
return a ? { ...i, [a]: s.value } : i;
|
|
313
|
-
}, {}),
|
|
319
|
+
}, {}), ur = (t) => {
|
|
314
320
|
try {
|
|
315
|
-
return
|
|
321
|
+
return Yt.parse(t);
|
|
316
322
|
} catch (r) {
|
|
317
323
|
throw console.error("Error parsing event payload:", t, r), r;
|
|
318
324
|
}
|
|
319
|
-
},
|
|
325
|
+
}, lr = async (t) => {
|
|
320
326
|
if (typeof t != "object" || !t) return !1;
|
|
321
327
|
try {
|
|
322
328
|
const r = { type: "ping" }, e = await t.send(r);
|
|
@@ -326,9 +332,9 @@ const Kt = o.object({
|
|
|
326
332
|
} catch (r) {
|
|
327
333
|
return console.error("Invalid CDE connection check:", r), !1;
|
|
328
334
|
}
|
|
329
|
-
},
|
|
335
|
+
}, dr = (t, r) => !!t && r, b = (t) => o.nullable(t.optional());
|
|
330
336
|
o.string().trim().min(1, { message: "Cannot be blank" });
|
|
331
|
-
const
|
|
337
|
+
const fr = o.object({
|
|
332
338
|
cde_response_type: o.literal("error"),
|
|
333
339
|
message: o.string(),
|
|
334
340
|
headers: o.record(o.string(), o.string()).optional()
|
|
@@ -336,73 +342,73 @@ const ur = o.object({
|
|
|
336
342
|
o.enum(["usd", "brl"]);
|
|
337
343
|
const qe = o.object({
|
|
338
344
|
name: o.string(),
|
|
339
|
-
amount_atom_off:
|
|
340
|
-
percent_off:
|
|
341
|
-
currency:
|
|
345
|
+
amount_atom_off: b(o.number()),
|
|
346
|
+
percent_off: b(o.number()),
|
|
347
|
+
currency: b(o.string()),
|
|
342
348
|
duration: o.string(),
|
|
343
|
-
duration_in_months:
|
|
349
|
+
duration_in_months: b(o.number())
|
|
344
350
|
}), ze = o.object({
|
|
345
351
|
amount_subtotal_atom: o.number().int(),
|
|
346
352
|
amount_total_atom: o.number().int(),
|
|
347
353
|
currency: o.string(),
|
|
348
|
-
description:
|
|
354
|
+
description: b(o.string()),
|
|
349
355
|
price_id: o.string(),
|
|
350
|
-
billing_interval:
|
|
351
|
-
billing_interval_count:
|
|
356
|
+
billing_interval: b(o.string()),
|
|
357
|
+
billing_interval_count: b(o.number().int()),
|
|
352
358
|
quantity: o.number().int()
|
|
353
|
-
}),
|
|
359
|
+
}), pr = o.record(o.string(), o.any()), hr = o.object({
|
|
354
360
|
name: o.string(),
|
|
355
|
-
settings:
|
|
356
|
-
}),
|
|
361
|
+
settings: b(pr)
|
|
362
|
+
}), q = o.object({
|
|
357
363
|
provider: o.string(),
|
|
358
|
-
processor_name:
|
|
359
|
-
metadata:
|
|
360
|
-
}),
|
|
364
|
+
processor_name: b(o.string()),
|
|
365
|
+
metadata: b(o.record(o.string(), o.any()))
|
|
366
|
+
}), mr = o.object({
|
|
361
367
|
quantity: o.number()
|
|
362
|
-
}),
|
|
363
|
-
id:
|
|
364
|
-
billing_interval:
|
|
365
|
-
billing_interval_count:
|
|
366
|
-
subscription_items: o.array(
|
|
367
|
-
trial_start:
|
|
368
|
-
trial_end:
|
|
368
|
+
}), yr = o.object({
|
|
369
|
+
id: b(o.string()),
|
|
370
|
+
billing_interval: b(o.string()),
|
|
371
|
+
billing_interval_count: b(o.number().int()),
|
|
372
|
+
subscription_items: o.array(mr),
|
|
373
|
+
trial_start: b(o.string()),
|
|
374
|
+
trial_end: b(o.string())
|
|
369
375
|
}), He = o.object({
|
|
370
376
|
amount_atom: o.number()
|
|
371
|
-
}),
|
|
377
|
+
}), _r = o.object({
|
|
372
378
|
amount_atom: o.number(),
|
|
373
379
|
amount_atom_considering_discount_applied: o.number(),
|
|
374
380
|
currency: o.string(),
|
|
375
381
|
discount_amount_atoms: o.array(He),
|
|
376
382
|
subscription_item_id: o.string()
|
|
377
|
-
}),
|
|
383
|
+
}), gr = o.object({
|
|
378
384
|
coupon: qe
|
|
379
|
-
}),
|
|
385
|
+
}), br = o.object({
|
|
380
386
|
currency: o.string(),
|
|
381
|
-
discounts: o.array(
|
|
382
|
-
hosted_invoice_url:
|
|
383
|
-
lines: o.array(
|
|
387
|
+
discounts: o.array(gr),
|
|
388
|
+
hosted_invoice_url: b(o.string()),
|
|
389
|
+
lines: o.array(_r),
|
|
384
390
|
remaining_amount_atom: o.number(),
|
|
385
391
|
tax_amount_atom: o.number(),
|
|
386
392
|
total_amount_atom: o.number(),
|
|
387
393
|
total_discount_amount_atoms: o.array(He)
|
|
388
394
|
}), be = o.object({
|
|
389
|
-
created: o.array(
|
|
390
|
-
invoices: o.array(
|
|
395
|
+
created: o.array(yr),
|
|
396
|
+
invoices: o.array(br)
|
|
391
397
|
}), Ye = o.object({
|
|
392
398
|
preview: be,
|
|
393
|
-
preview_post_trial:
|
|
399
|
+
preview_post_trial: b(be),
|
|
394
400
|
coupons: o.array(qe)
|
|
395
401
|
}), ve = o.object({
|
|
396
402
|
status: o.literal("open"),
|
|
397
403
|
token: o.string(),
|
|
398
|
-
email:
|
|
404
|
+
email: b(o.string()),
|
|
399
405
|
line_items: o.array(ze),
|
|
400
406
|
amount_subtotal_atom: o.number().int(),
|
|
401
407
|
amount_total_atom: o.number().int(),
|
|
402
|
-
brand:
|
|
403
|
-
subs_preview:
|
|
408
|
+
brand: hr,
|
|
409
|
+
subs_preview: b(Ye),
|
|
404
410
|
// Null in setup mode
|
|
405
|
-
methods_available: o.array(
|
|
411
|
+
methods_available: o.array(q)
|
|
406
412
|
}), Be = o.discriminatedUnion("mode", [
|
|
407
413
|
o.object({
|
|
408
414
|
mode: o.literal("setup"),
|
|
@@ -412,19 +418,19 @@ const qe = o.object({
|
|
|
412
418
|
mode: o.enum(["payment", "subscription"]),
|
|
413
419
|
currency: o.string()
|
|
414
420
|
}).extend(ve.shape)
|
|
415
|
-
]),
|
|
421
|
+
]), vr = o.object({
|
|
416
422
|
status: o.literal("complete")
|
|
417
|
-
}),
|
|
423
|
+
}), wr = o.object({
|
|
418
424
|
status: o.literal("expired")
|
|
419
425
|
});
|
|
420
|
-
o.union([Be,
|
|
426
|
+
o.union([Be, vr, wr]);
|
|
421
427
|
o.object({
|
|
422
428
|
logo: o.string(),
|
|
423
429
|
icon: o.string(),
|
|
424
430
|
primary_color: o.string(),
|
|
425
431
|
secondary_color: o.string()
|
|
426
432
|
});
|
|
427
|
-
const
|
|
433
|
+
const Je = o.object({
|
|
428
434
|
invoice_urls: o.array(o.string()),
|
|
429
435
|
subscription_ids: o.array(o.string()),
|
|
430
436
|
customer_id: o.string()
|
|
@@ -439,60 +445,62 @@ o.object({
|
|
|
439
445
|
line_items: o.array(ze),
|
|
440
446
|
total_amount_atom: o.number().int(),
|
|
441
447
|
cancel_at_end: o.boolean(),
|
|
442
|
-
checkout_payment_method:
|
|
448
|
+
checkout_payment_method: q,
|
|
443
449
|
promotion_code: o.string().optional(),
|
|
444
450
|
do_not_use_legacy_cc_flow: o.boolean().optional()
|
|
445
451
|
});
|
|
446
|
-
const
|
|
452
|
+
const Er = o.object({
|
|
447
453
|
payment_method_id: o.string()
|
|
448
454
|
});
|
|
449
455
|
o.object({
|
|
450
456
|
id: o.string(),
|
|
451
457
|
return_url: o.string()
|
|
452
458
|
});
|
|
453
|
-
const
|
|
459
|
+
const Sr = o.object({
|
|
454
460
|
type: o.string(),
|
|
455
461
|
loc: o.array(o.string()),
|
|
456
462
|
msg: o.string(),
|
|
457
463
|
url: o.string()
|
|
458
464
|
});
|
|
459
|
-
o.array(
|
|
465
|
+
o.array(Sr);
|
|
460
466
|
o.object({
|
|
461
467
|
new_customer_email: o.string().optional(),
|
|
462
468
|
new_customer_address: o.record(o.string(), o.any()).optional(),
|
|
463
469
|
payment_provider: o.string(),
|
|
464
|
-
checkout_payment_method:
|
|
470
|
+
checkout_payment_method: q,
|
|
465
471
|
existing_cc_pm_id: o.string().optional(),
|
|
466
472
|
their_existing_pm_id: o.string().optional()
|
|
467
473
|
});
|
|
468
|
-
const
|
|
474
|
+
const Ke = o.object({
|
|
469
475
|
required_user_actions: o.array(o.record(o.string(), o.any()))
|
|
470
476
|
});
|
|
471
477
|
o.object({
|
|
472
|
-
fields:
|
|
473
|
-
checkoutPaymentMethod:
|
|
478
|
+
fields: Ut,
|
|
479
|
+
checkoutPaymentMethod: q
|
|
474
480
|
});
|
|
475
481
|
o.object({
|
|
476
482
|
session_id: o.string(),
|
|
477
|
-
non_cde_form_fields:
|
|
478
|
-
checkout_payment_method:
|
|
483
|
+
non_cde_form_fields: V,
|
|
484
|
+
checkout_payment_method: q,
|
|
485
|
+
extra_metadata: o.record(o.string(), o.any())
|
|
486
|
+
// This is optional in CDE, but not in OJS moving forward
|
|
479
487
|
});
|
|
480
|
-
const
|
|
488
|
+
const Cr = o.object({
|
|
481
489
|
required_user_actions: o.array(o.record(o.string(), o.any())),
|
|
482
490
|
cc_pm_id: o.string()
|
|
483
491
|
});
|
|
484
492
|
o.record(o.any());
|
|
485
|
-
const
|
|
486
|
-
function
|
|
493
|
+
const kr = (t) => t.reduce((r, e) => r + e, 0);
|
|
494
|
+
function Pr(t, r) {
|
|
487
495
|
var e = Object.setPrototypeOf;
|
|
488
496
|
e ? e(t, r) : t.__proto__ = r;
|
|
489
497
|
}
|
|
490
|
-
function
|
|
498
|
+
function Ir(t, r) {
|
|
491
499
|
r === void 0 && (r = t.constructor);
|
|
492
500
|
var e = Error.captureStackTrace;
|
|
493
501
|
e && e(t, r);
|
|
494
502
|
}
|
|
495
|
-
var
|
|
503
|
+
var Or = /* @__PURE__ */ function() {
|
|
496
504
|
var t = function(e, n) {
|
|
497
505
|
return t = Object.setPrototypeOf || {
|
|
498
506
|
__proto__: []
|
|
@@ -511,19 +519,19 @@ var kr = /* @__PURE__ */ function() {
|
|
|
511
519
|
}
|
|
512
520
|
r.prototype = e === null ? Object.create(e) : (n.prototype = e.prototype, new n());
|
|
513
521
|
};
|
|
514
|
-
}(),
|
|
515
|
-
|
|
522
|
+
}(), Rr = function(t) {
|
|
523
|
+
Or(r, t);
|
|
516
524
|
function r(e, n) {
|
|
517
525
|
var i = this.constructor, s = t.call(this, e, n) || this;
|
|
518
526
|
return Object.defineProperty(s, "name", {
|
|
519
527
|
value: i.name,
|
|
520
528
|
enumerable: !1,
|
|
521
529
|
configurable: !0
|
|
522
|
-
}),
|
|
530
|
+
}), Pr(s, i.prototype), Ir(s), s;
|
|
523
531
|
}
|
|
524
532
|
return r;
|
|
525
533
|
}(Error);
|
|
526
|
-
class
|
|
534
|
+
class Ge extends Rr {
|
|
527
535
|
constructor(r) {
|
|
528
536
|
const e = `${r.message}`;
|
|
529
537
|
super(e), this.response = r;
|
|
@@ -534,59 +542,59 @@ class Ze extends Pr {
|
|
|
534
542
|
}
|
|
535
543
|
const I = async (t, r, e) => {
|
|
536
544
|
const n = await t.send(r);
|
|
537
|
-
if (
|
|
538
|
-
throw new
|
|
539
|
-
if (!
|
|
545
|
+
if (Tr(n))
|
|
546
|
+
throw new Ge(n);
|
|
547
|
+
if (!Ar(n, e)) {
|
|
540
548
|
const i = e.safeParse(n);
|
|
541
549
|
throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", e, "Actual:", n), i.error);
|
|
542
550
|
}
|
|
543
551
|
return n;
|
|
544
|
-
},
|
|
545
|
-
const n = await
|
|
552
|
+
}, Ar = (t, r) => r.safeParse(t).success, Tr = (t) => fr.safeParse(t).success, jr = async (t, r) => await I(t, { type: "get_checkout_preview", payload: r }, Ye), z = async (t) => await I(t, { type: "get_prefill", payload: {} }, Be), Mr = async (t, r) => await I(t, { type: "v2_start_payment_flow", payload: r }, Ke), Lr = async (t, r) => await I(t, { type: "start_payment_flow_for_cc", payload: r }, Cr), Dr = async (t, r) => await I(t, { type: "start_payment_flow_for_pr", payload: r }, Ke), fe = async (t, r) => await I(t, { type: "confirm_payment_flow", payload: r }, Bt), Fr = async (t, r, e) => {
|
|
553
|
+
const n = await jr(t, {
|
|
546
554
|
secure_token: r,
|
|
547
555
|
promotion_code: e
|
|
548
556
|
}), i = new Set(n.preview.invoices.map((c) => c.currency));
|
|
549
557
|
if (i.size !== 1)
|
|
550
558
|
throw new Error(`Expected exactly one currency, got ${i.size}`);
|
|
551
|
-
const s = i.values().next().value ?? "usd", a =
|
|
559
|
+
const s = i.values().next().value ?? "usd", a = kr(n.preview.invoices.map((c) => c.remaining_amount_atom));
|
|
552
560
|
return {
|
|
553
561
|
currency: s,
|
|
554
562
|
amountAtom: a
|
|
555
563
|
};
|
|
556
|
-
},
|
|
564
|
+
}, Ze = async (t, r, e, n) => {
|
|
557
565
|
if (e)
|
|
558
566
|
return { amountAtom: 0, currency: "usd" };
|
|
559
567
|
{
|
|
560
568
|
n = n || void 0;
|
|
561
|
-
const i = await
|
|
569
|
+
const i = await Fr(t, r, n);
|
|
562
570
|
return { amountAtom: i.amountAtom, currency: i.currency };
|
|
563
571
|
}
|
|
564
|
-
},
|
|
572
|
+
}, xr = async (t, r) => {
|
|
565
573
|
if (t.size === 0)
|
|
566
574
|
throw new Error("No CDE connections found");
|
|
567
575
|
return await Promise.all(
|
|
568
576
|
Array.from(t.values()).map(
|
|
569
|
-
(n) => I(n, { type: "tokenize_card", payload: r },
|
|
577
|
+
(n) => I(n, { type: "tokenize_card", payload: r }, Gt)
|
|
570
578
|
)
|
|
571
579
|
);
|
|
572
580
|
}, we = async (t, r) => {
|
|
573
581
|
try {
|
|
574
|
-
return await I(t, { type: "checkout_card_elements", payload: r },
|
|
582
|
+
return await I(t, { type: "checkout_card_elements", payload: r }, Je);
|
|
575
583
|
} catch (e) {
|
|
576
584
|
throw console.error("[cde-client] Error during checkoutCardElements:", e, JSON.stringify(e)), e;
|
|
577
585
|
}
|
|
578
|
-
},
|
|
586
|
+
}, Nr = async (t, r) => await I(t, { type: "setup_payment_method", payload: r }, Er), We = async (t, r) => await I(t, { type: "checkout", payload: r }, Je), Qe = 1e3, Ur = async (t, r) => {
|
|
579
587
|
console.log(r);
|
|
580
|
-
const n = await
|
|
588
|
+
const n = await xe({
|
|
581
589
|
iframe: t,
|
|
582
590
|
debug: !0,
|
|
583
591
|
timeout: Qe,
|
|
584
592
|
childOrigin: "*"
|
|
585
593
|
// TODO: use with proper childOrigin
|
|
586
|
-
}).promise;
|
|
587
|
-
return (
|
|
594
|
+
}).promise, i = await I(n, { type: "ping-3ds-status" }, Zt);
|
|
595
|
+
return console.log("🟢 CDE connection successful! Stopping polling... Result:", i), i;
|
|
588
596
|
};
|
|
589
|
-
function
|
|
597
|
+
function Xe(t) {
|
|
590
598
|
throw new Error(`Unhandled case: ${t}`);
|
|
591
599
|
}
|
|
592
600
|
const pe = (t) => async (r) => {
|
|
@@ -605,20 +613,20 @@ const pe = (t) => async (r) => {
|
|
|
605
613
|
else
|
|
606
614
|
throw new Error(`Unhandled mode: ${i}`);
|
|
607
615
|
} catch (i) {
|
|
608
|
-
r.formCallbacks.get.onCheckoutError(
|
|
616
|
+
r.formCallbacks.get.onCheckoutError(N(i));
|
|
609
617
|
}
|
|
610
|
-
},
|
|
618
|
+
}, et = (t) => async (r) => {
|
|
611
619
|
try {
|
|
612
620
|
return await t(r);
|
|
613
621
|
} catch (e) {
|
|
614
|
-
const { err__: n } =
|
|
615
|
-
return n(e), { isAvailable: !1, reason:
|
|
622
|
+
const { err__: n } = O("init-error-catcher");
|
|
623
|
+
return n(e), { isAvailable: !1, reason: N(e) };
|
|
616
624
|
}
|
|
617
|
-
},
|
|
625
|
+
}, O = (t) => {
|
|
618
626
|
const r = (...n) => {
|
|
619
|
-
window.console.log(`${
|
|
627
|
+
window.console.log(`${B.green.bold("ojs/")}${B.bold.gray(`${t}`)} `, ...n);
|
|
620
628
|
}, e = (...n) => {
|
|
621
|
-
window.console.error(`${
|
|
629
|
+
window.console.error(`${B.red.bold("ojs/")}${B.bold.gray(`${t}`)} `, ...n);
|
|
622
630
|
};
|
|
623
631
|
return {
|
|
624
632
|
log: r,
|
|
@@ -626,62 +634,62 @@ const pe = (t) => async (r) => {
|
|
|
626
634
|
log__: r,
|
|
627
635
|
err__: e
|
|
628
636
|
};
|
|
629
|
-
}, { log__:
|
|
637
|
+
}, { log__: Po, err__: $r } = O("common"), he = (t) => {
|
|
630
638
|
if (t.payment_methods.length !== 1)
|
|
631
639
|
throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
|
|
632
640
|
return { payment_method_id: t.payment_methods[0].id };
|
|
633
|
-
},
|
|
641
|
+
}, tt = (t, r) => {
|
|
634
642
|
const e = t.find((n) => r.safeParse(n).success);
|
|
635
643
|
if (!e)
|
|
636
|
-
throw
|
|
644
|
+
throw $r("No CPMs found for model. All models:", t), new Error("No CPMs found for model");
|
|
637
645
|
return r.parse(e);
|
|
638
|
-
}, { log__:
|
|
639
|
-
const e =
|
|
646
|
+
}, { log__: Vr, err__: rt } = O("common-cc"), me = (t, r) => {
|
|
647
|
+
const e = V.safeParse(t);
|
|
640
648
|
if (!e.success) {
|
|
641
|
-
const n = e.error.format(), i =
|
|
649
|
+
const n = e.error.format(), i = Qt(n);
|
|
642
650
|
for (const [s, a] of Object.entries(i))
|
|
643
651
|
r(s, a, s);
|
|
644
|
-
throw
|
|
652
|
+
throw rt("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
|
|
645
653
|
}
|
|
646
654
|
return e.data;
|
|
647
|
-
},
|
|
655
|
+
}, qr = (t, r) => {
|
|
648
656
|
for (const e of t)
|
|
649
657
|
if (e.success === !1)
|
|
650
658
|
throw e.errors.forEach((n) => {
|
|
651
659
|
const i = Ve.safeParse(n.elementType);
|
|
652
660
|
if (!i.success)
|
|
653
|
-
|
|
661
|
+
rt(`Unknown field name in onValidationError: ${n.elementType}. Error object:`, n);
|
|
654
662
|
else {
|
|
655
663
|
const s = i.data;
|
|
656
664
|
r(s, n.errors);
|
|
657
665
|
}
|
|
658
|
-
}),
|
|
659
|
-
}, Ee = "ojs-stripe-link-btn", { log__: v, err__:
|
|
666
|
+
}), Vr(`Error tokenizing card: got validation errors: ${JSON.stringify(e.errors)}`), new Error("Got validation errors while tokenizing card");
|
|
667
|
+
}, Ee = "ojs-stripe-link-btn", { log__: v, err__: zr } = O("stripe-link"), Hr = o.object({
|
|
660
668
|
provider: o.literal("stripe_link"),
|
|
661
669
|
processor_name: o.literal("stripe"),
|
|
662
670
|
metadata: o.object({
|
|
663
671
|
stripe_pk: o.string()
|
|
664
672
|
})
|
|
665
|
-
}),
|
|
673
|
+
}), Yr = o.array(
|
|
666
674
|
o.object({
|
|
667
675
|
our_existing_pm_id: o.string()
|
|
668
676
|
})
|
|
669
|
-
).length(1),
|
|
677
|
+
).length(1), Br = et(
|
|
670
678
|
async ({ context: t, formCallbacks: r }) => {
|
|
671
679
|
const e = t.customInitParams.stripeLink;
|
|
672
|
-
v("Checking if there are any CPMs for Stripe
|
|
673
|
-
const n =
|
|
680
|
+
v("Checking if there are any CPMs for Stripe Link...");
|
|
681
|
+
const n = tt(t.checkoutPaymentMethods, Hr);
|
|
674
682
|
v("Starting stripe link flow...");
|
|
675
|
-
const i = t.anyCdeConnection, s = await
|
|
683
|
+
const i = t.anyCdeConnection, s = await z(i), a = s.mode === "setup";
|
|
676
684
|
v("Creating stripe elements...");
|
|
677
|
-
const c = await
|
|
685
|
+
const c = await Ze(i, s.token, a, void 0), { elements: l, stripe: u } = await rr(n.metadata.stripe_pk, {
|
|
678
686
|
mode: "setup",
|
|
679
687
|
currency: c.currency,
|
|
680
688
|
setup_future_usage: "off_session",
|
|
681
689
|
paymentMethodCreation: "manual"
|
|
682
690
|
});
|
|
683
691
|
v("Creating express checkout...");
|
|
684
|
-
const
|
|
692
|
+
const d = l.create("expressCheckout", {
|
|
685
693
|
buttonHeight: e == null ? void 0 : e.buttonHeight,
|
|
686
694
|
paymentMethods: {
|
|
687
695
|
amazonPay: "never",
|
|
@@ -690,25 +698,25 @@ const pe = (t) => async (r) => {
|
|
|
690
698
|
paypal: "never"
|
|
691
699
|
}
|
|
692
700
|
}), h = () => {
|
|
693
|
-
|
|
694
|
-
},
|
|
695
|
-
|
|
701
|
+
d.mount(`#${Ee}`);
|
|
702
|
+
}, _ = () => {
|
|
703
|
+
d.unmount();
|
|
696
704
|
};
|
|
697
|
-
return e != null && e.doNotMountOnInit ? v("NOT mounting stripe link button (doNotMountOnInit is true)") : (v("Mounting stripe link button..."), h()),
|
|
705
|
+
return e != null && e.doNotMountOnInit ? v("NOT mounting stripe link button (doNotMountOnInit is true)") : (v("Mounting stripe link button..."), h()), d.on("click", async (f) => {
|
|
698
706
|
if (v("Stripe Link button clicked"), e != null && e.overrideLinkSubmit && !await e.overrideLinkSubmit()) {
|
|
699
707
|
v("Stripe Link submit aborted by overrideLinkSubmit");
|
|
700
708
|
return;
|
|
701
709
|
}
|
|
702
|
-
|
|
703
|
-
}),
|
|
704
|
-
v("Stripe Link window confirmed",
|
|
710
|
+
f.resolve();
|
|
711
|
+
}), d.on("confirm", async (f) => {
|
|
712
|
+
v("Stripe Link window confirmed", f);
|
|
705
713
|
const p = await u.createPaymentMethod({
|
|
706
714
|
elements: l,
|
|
707
715
|
params: {
|
|
708
|
-
billing_details:
|
|
716
|
+
billing_details: f.billingDetails
|
|
709
717
|
}
|
|
710
718
|
});
|
|
711
|
-
p.error ? (
|
|
719
|
+
p.error ? (zr("error", p.error), r.get.onCheckoutError(p.error.message ?? "Stripe Link unknown error")) : (v("paymentMethod", p.paymentMethod), U.stripeLink.run({
|
|
712
720
|
context: t,
|
|
713
721
|
checkoutPaymentMethod: n,
|
|
714
722
|
nonCdeFormInputs: de(t.formDiv),
|
|
@@ -720,12 +728,12 @@ const pe = (t) => async (r) => {
|
|
|
720
728
|
isAvailable: !0,
|
|
721
729
|
controller: {
|
|
722
730
|
mountButton: h,
|
|
723
|
-
dismountButton:
|
|
724
|
-
waitForButtonToMount: async () => await
|
|
731
|
+
dismountButton: _,
|
|
732
|
+
waitForButtonToMount: async () => await Gr(Ee)
|
|
725
733
|
}
|
|
726
734
|
};
|
|
727
735
|
}
|
|
728
|
-
),
|
|
736
|
+
), Jr = pe(
|
|
729
737
|
async ({
|
|
730
738
|
context: t,
|
|
731
739
|
checkoutPaymentMethod: r,
|
|
@@ -733,28 +741,28 @@ const pe = (t) => async (r) => {
|
|
|
733
741
|
formCallbacks: n,
|
|
734
742
|
customParams: i
|
|
735
743
|
}) => {
|
|
736
|
-
v("Running Stripe
|
|
744
|
+
v("Running Stripe Link flow...");
|
|
737
745
|
const s = t.anyCdeConnection;
|
|
738
746
|
v("Merging PM fields with form fields...");
|
|
739
|
-
const a =
|
|
747
|
+
const a = Kr(e, i.stripePM), c = me(a, n.get.onValidationError);
|
|
740
748
|
v("Starting payment flow...");
|
|
741
|
-
const l = await
|
|
749
|
+
const l = await Mr(s, {
|
|
742
750
|
payment_provider: r.provider,
|
|
743
751
|
checkout_payment_method: r,
|
|
744
752
|
their_existing_pm_id: i.stripePM.id
|
|
745
753
|
});
|
|
746
754
|
v("Start payment flow response", l);
|
|
747
|
-
const
|
|
755
|
+
const d = Yr.parse(l.required_user_actions)[0].our_existing_pm_id, h = await z(s);
|
|
748
756
|
if (h.mode === "setup") {
|
|
749
757
|
v("Doing payment setup...");
|
|
750
|
-
const
|
|
758
|
+
const _ = await fe(s, {
|
|
751
759
|
secure_token: h.token,
|
|
752
|
-
existing_cc_pm_id:
|
|
760
|
+
existing_cc_pm_id: d
|
|
753
761
|
});
|
|
754
|
-
return { mode: "setup", result: he(
|
|
762
|
+
return { mode: "setup", result: he(_) };
|
|
755
763
|
} else {
|
|
756
764
|
v("Doing checkout...");
|
|
757
|
-
const
|
|
765
|
+
const _ = {
|
|
758
766
|
secure_token: h.token,
|
|
759
767
|
payment_input: {
|
|
760
768
|
provider_type: r.provider
|
|
@@ -768,25 +776,25 @@ const pe = (t) => async (r) => {
|
|
|
768
776
|
cancel_at_end: !1,
|
|
769
777
|
checkout_payment_method: r
|
|
770
778
|
};
|
|
771
|
-
return { mode: "checkout", result: await We(s,
|
|
779
|
+
return { mode: "checkout", result: await We(s, _) };
|
|
772
780
|
}
|
|
773
781
|
}
|
|
774
|
-
),
|
|
775
|
-
var a, c, l, u,
|
|
782
|
+
), Kr = (t, r) => {
|
|
783
|
+
var a, c, l, u, d;
|
|
776
784
|
const e = { ...t }, [n, ...i] = ((c = (a = r.billing_details.name) == null ? void 0 : a.trim()) == null ? void 0 : c.split(/\s+/)) ?? [], s = i.join(" ") || void 0;
|
|
777
785
|
return e[m.FIRST_NAME] = e[m.FIRST_NAME] || n || "_OP_UNKNOWN", e[m.LAST_NAME] = e[m.LAST_NAME] || s || "_OP_UNKNOWN", e[m.EMAIL] = e[m.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
778
|
-
((l = r.link) == null ? void 0 : l.email) || r.billing_details.email || "op_unfilled@getopenpay.com", e[m.ZIP_CODE] = e[m.ZIP_CODE] || ((u = r.billing_details.address) == null ? void 0 : u.postal_code) || "00000", e[m.COUNTRY] = e[m.COUNTRY] || ((
|
|
779
|
-
},
|
|
786
|
+
((l = r.link) == null ? void 0 : l.email) || r.billing_details.email || "op_unfilled@getopenpay.com", e[m.ZIP_CODE] = e[m.ZIP_CODE] || ((u = r.billing_details.address) == null ? void 0 : u.postal_code) || "00000", e[m.COUNTRY] = e[m.COUNTRY] || ((d = r.billing_details.address) == null ? void 0 : d.country) || "US", v("Final form inputs:", e), e;
|
|
787
|
+
}, Gr = (t) => new Promise((r) => {
|
|
780
788
|
const e = () => {
|
|
781
789
|
const n = document.getElementById(t);
|
|
782
790
|
n ? r(n) : requestAnimationFrame(e);
|
|
783
791
|
};
|
|
784
792
|
e();
|
|
785
|
-
}),
|
|
793
|
+
}), Zr = "@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}", Wr = (t) => {
|
|
786
794
|
const r = document.createElement("template");
|
|
787
795
|
r.innerHTML = `
|
|
788
796
|
<style>
|
|
789
|
-
${
|
|
797
|
+
${Zr}
|
|
790
798
|
</style>
|
|
791
799
|
<div class="overlay">
|
|
792
800
|
<div class="container">
|
|
@@ -800,10 +808,10 @@ const pe = (t) => async (r) => {
|
|
|
800
808
|
const i = n.querySelector("#three-ds-iframe"), s = n.querySelector(".cancel-button");
|
|
801
809
|
return document.body.appendChild(e), { host: e, iframe: i, cancelButton: s };
|
|
802
810
|
};
|
|
803
|
-
function
|
|
811
|
+
function Qr(t, r, e) {
|
|
804
812
|
const n = async () => {
|
|
805
813
|
try {
|
|
806
|
-
const s = await
|
|
814
|
+
const s = await Ur(t, e);
|
|
807
815
|
s && (clearInterval(i), r(s));
|
|
808
816
|
} catch {
|
|
809
817
|
}
|
|
@@ -812,36 +820,79 @@ function Gr(t, r, e) {
|
|
|
812
820
|
const i = setInterval(n, Qe);
|
|
813
821
|
return i;
|
|
814
822
|
}
|
|
815
|
-
function
|
|
823
|
+
function Xr({
|
|
816
824
|
elements: t,
|
|
817
825
|
pollingInterval: r,
|
|
818
826
|
resolve: e
|
|
819
827
|
}) {
|
|
820
828
|
const n = () => {
|
|
821
|
-
clearInterval(r), t.host.remove(), e(
|
|
829
|
+
clearInterval(r), t.host.remove(), e({ status: D.CANCELLED });
|
|
822
830
|
};
|
|
823
831
|
return t.cancelButton.addEventListener("click", n), () => {
|
|
824
832
|
t.cancelButton.removeEventListener("click", n);
|
|
825
833
|
};
|
|
826
834
|
}
|
|
827
|
-
async function
|
|
828
|
-
url: t,
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
const e = Zr(t);
|
|
832
|
-
return new Promise((n) => {
|
|
833
|
-
const i = (c) => {
|
|
835
|
+
async function nt(t) {
|
|
836
|
+
const { url: r, baseUrl: e } = t, n = Wr(r);
|
|
837
|
+
return new Promise((i) => {
|
|
838
|
+
const s = (l) => {
|
|
834
839
|
setTimeout(() => {
|
|
835
|
-
|
|
836
|
-
}, 1e3),
|
|
837
|
-
},
|
|
838
|
-
elements:
|
|
839
|
-
pollingInterval:
|
|
840
|
-
resolve:
|
|
840
|
+
n.host.remove();
|
|
841
|
+
}, 1e3), i(l), c == null || c();
|
|
842
|
+
}, a = Qr(n.iframe, s, new URL(e).origin), c = Xr({
|
|
843
|
+
elements: n,
|
|
844
|
+
pollingInterval: a,
|
|
845
|
+
resolve: i
|
|
841
846
|
});
|
|
842
847
|
});
|
|
843
848
|
}
|
|
844
|
-
const
|
|
849
|
+
const en = async (t) => {
|
|
850
|
+
const r = await nt(t);
|
|
851
|
+
if (r.status === D.CANCELLED)
|
|
852
|
+
throw new Error("3DS verification cancelled");
|
|
853
|
+
if (r.status === D.FAILURE)
|
|
854
|
+
throw new Error("3DS verification failed");
|
|
855
|
+
return r.status !== D.SUCCESS && Xe(r.status), {
|
|
856
|
+
href: r.href
|
|
857
|
+
};
|
|
858
|
+
}, { log__: tn, err__: ot } = O("pockyt-cc"), rn = o.object({
|
|
859
|
+
"op-pockyt-3ds-url": o.string(),
|
|
860
|
+
"op-pockyt-txn-no": o.string(),
|
|
861
|
+
"op-pockyt-ref-no": o.string()
|
|
862
|
+
}), nn = (t) => {
|
|
863
|
+
const r = rn.safeParse(t);
|
|
864
|
+
if (!r.success) {
|
|
865
|
+
const e = "Unable to process your credit card. Please contact support for assistance.", n = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
|
|
866
|
+
throw ot(n), new Error(e);
|
|
867
|
+
}
|
|
868
|
+
return r.data;
|
|
869
|
+
}, on = (t) => {
|
|
870
|
+
try {
|
|
871
|
+
const r = new URL(t ?? "").searchParams.get("vaultId");
|
|
872
|
+
if (!r)
|
|
873
|
+
throw new Error("No vault ID found in 3DS verification result");
|
|
874
|
+
return tn(`3DS verification success. [Vault ID: ${r}]`), r;
|
|
875
|
+
} catch (r) {
|
|
876
|
+
const e = "Error verifying 3DS verification result.";
|
|
877
|
+
throw ot(e, `Resulting URL: ${t}.
|
|
878
|
+
Error: ${N(r)}`), new Error(e);
|
|
879
|
+
}
|
|
880
|
+
}, sn = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, an = async (t, r) => {
|
|
881
|
+
const e = nn(r), n = await en({ url: e["op-pockyt-3ds-url"], baseUrl: t });
|
|
882
|
+
return {
|
|
883
|
+
existing_cc: {
|
|
884
|
+
vault_id: on(n.href ?? ""),
|
|
885
|
+
transaction_no: e["op-pockyt-txn-no"],
|
|
886
|
+
reference_no: e["op-pockyt-ref-no"]
|
|
887
|
+
}
|
|
888
|
+
};
|
|
889
|
+
}, { log__: g, err__: Se } = O("common-cc"), { log__: Ce } = O("stripe-cc");
|
|
890
|
+
o.array(
|
|
891
|
+
o.object({
|
|
892
|
+
our_existing_pm_id: o.string()
|
|
893
|
+
})
|
|
894
|
+
).length(1);
|
|
895
|
+
const cn = pe(
|
|
845
896
|
async ({
|
|
846
897
|
context: t,
|
|
847
898
|
checkoutPaymentMethod: r,
|
|
@@ -849,92 +900,101 @@ const { log__: b, err__: Se } = A("common-cc"), { log__: Ce } = A("stripe-cc"),
|
|
|
849
900
|
formCallbacks: n,
|
|
850
901
|
customParams: i
|
|
851
902
|
}) => {
|
|
852
|
-
var
|
|
853
|
-
|
|
854
|
-
const s = t.anyCdeConnection, a = await
|
|
855
|
-
|
|
856
|
-
const c = me(e, n.get.onValidationError)
|
|
857
|
-
b(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
858
|
-
const l = await Lr(i.currentCdeConnections, {
|
|
859
|
-
session_id: t.elementsSessionId
|
|
860
|
-
});
|
|
861
|
-
$r(l, n.get.onValidationError);
|
|
862
|
-
const u = {
|
|
903
|
+
var u;
|
|
904
|
+
g("├ Running common CC flow...", { checkoutPaymentMethod: r });
|
|
905
|
+
const s = t.anyCdeConnection, a = await z(s);
|
|
906
|
+
g(`├ Validating non-CDE form fields [Mode: ${a.mode}]`);
|
|
907
|
+
const c = me(e, n.get.onValidationError), l = {
|
|
863
908
|
session_id: t.elementsSessionId,
|
|
864
909
|
checkout_payment_method: r,
|
|
865
|
-
non_cde_form_fields: c
|
|
910
|
+
non_cde_form_fields: c,
|
|
911
|
+
extra_metadata: {}
|
|
866
912
|
};
|
|
867
913
|
try {
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
914
|
+
g(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
915
|
+
const d = await xr(i.currentCdeConnections, {
|
|
916
|
+
session_id: t.elementsSessionId
|
|
917
|
+
});
|
|
918
|
+
if (qr(d, n.get.onValidationError), a.mode === "setup") {
|
|
919
|
+
g(`├ Setting up payment method in CDE [Token: ${a.token}]`);
|
|
920
|
+
const h = await Nr(s, l);
|
|
921
|
+
return g(`╰ Setup completed successfully [PM ID: ${h.payment_method_id}]`), { mode: "setup", result: h };
|
|
872
922
|
} else {
|
|
873
|
-
|
|
874
|
-
const h = await we(s,
|
|
875
|
-
return
|
|
923
|
+
g(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
924
|
+
const h = await we(s, l);
|
|
925
|
+
return g("╰ Checkout completed successfully."), { mode: "checkout", result: h };
|
|
876
926
|
}
|
|
877
|
-
} catch (
|
|
878
|
-
if (
|
|
879
|
-
|
|
880
|
-
const
|
|
881
|
-
if (
|
|
882
|
-
|
|
883
|
-
const
|
|
927
|
+
} catch (d) {
|
|
928
|
+
if (d instanceof Ge && d.originalErrorMessage.includes("3DS_REQUIRED")) {
|
|
929
|
+
g("├ Card requires 3DS, starting non-legacy payment flow"), g("Received 3DS error response headers:", d.response.headers);
|
|
930
|
+
const h = sn(d.response.headers);
|
|
931
|
+
if (h) {
|
|
932
|
+
g("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
|
|
933
|
+
const y = await an(t.baseUrl, d.response.headers);
|
|
934
|
+
l.extra_metadata.pockyt = y;
|
|
935
|
+
}
|
|
936
|
+
const _ = await Lr(s, l);
|
|
937
|
+
g("├ Payment flow result:", _);
|
|
938
|
+
const f = ((u = d.response.headers) == null ? void 0 : u["op-should-use-new-flow"]) !== "true";
|
|
939
|
+
h ? g("├ Pockyt 3DS is successful, other 3DS flows will be skipped.") : f ? (g("├ Using stripe 3DS flow"), await fn(_)) : (g("├ Using common 3DS flow"), await dn(_, t.baseUrl));
|
|
940
|
+
const p = _.cc_pm_id;
|
|
941
|
+
if (a.mode === "setup") {
|
|
942
|
+
g(`├ Confirming payment flow [cc_pm_id: ${p}]`);
|
|
943
|
+
const y = await fe(s, {
|
|
884
944
|
secure_token: a.token,
|
|
885
|
-
existing_cc_pm_id:
|
|
945
|
+
existing_cc_pm_id: p
|
|
886
946
|
});
|
|
887
|
-
|
|
888
|
-
const
|
|
889
|
-
return
|
|
947
|
+
g("├ Confirm payment flow result received Result:", y);
|
|
948
|
+
const j = he(y);
|
|
949
|
+
return g(`╰ Setup completed successfully [PM ID: ${j.payment_method_id}]`), { mode: "setup", result: j };
|
|
890
950
|
} else {
|
|
891
|
-
|
|
892
|
-
const
|
|
893
|
-
...
|
|
894
|
-
existing_cc_pm_id:
|
|
895
|
-
do_not_use_legacy_cc_flow:
|
|
951
|
+
g(`├ Checking out after 3DS flow [Flow: ${f ? "legacy" : "new"}]`);
|
|
952
|
+
const y = await we(s, {
|
|
953
|
+
...l,
|
|
954
|
+
existing_cc_pm_id: p,
|
|
955
|
+
do_not_use_legacy_cc_flow: f
|
|
896
956
|
});
|
|
897
|
-
return
|
|
957
|
+
return g("╰ Checkout completed successfully."), { mode: "checkout", result: y };
|
|
898
958
|
}
|
|
899
959
|
}
|
|
900
|
-
throw Se("╰ Error checking out card info in CDE"), Se(
|
|
960
|
+
throw Se("╰ Error checking out card info in CDE"), Se(d), d;
|
|
901
961
|
}
|
|
902
962
|
}
|
|
903
|
-
),
|
|
963
|
+
), un = (t) => {
|
|
904
964
|
const r = t.required_user_actions.find((e) => e.type === "stripe_3ds");
|
|
905
965
|
if (!r)
|
|
906
966
|
throw new Error("No stripe 3DS action found");
|
|
907
|
-
return
|
|
908
|
-
},
|
|
967
|
+
return Xt.parse(r);
|
|
968
|
+
}, ln = (t) => {
|
|
909
969
|
const r = t.required_user_actions.find((e) => e.type === "airwallex_payment_consent");
|
|
910
970
|
if (!r)
|
|
911
971
|
throw new Error("No common 3DS action found");
|
|
912
|
-
return
|
|
913
|
-
},
|
|
914
|
-
const e =
|
|
915
|
-
|
|
916
|
-
const n = await
|
|
917
|
-
if (
|
|
972
|
+
return Wt.parse(r);
|
|
973
|
+
}, dn = async (t, r) => {
|
|
974
|
+
const e = ln(t);
|
|
975
|
+
g(`├ Using common 3DS flow [URL: ${e.redirect_url}]`);
|
|
976
|
+
const { status: n } = await nt({ url: e.redirect_url, baseUrl: r });
|
|
977
|
+
if (g(`╰ 3DS verification completed [Status: ${n}]`), n === D.CANCELLED)
|
|
918
978
|
throw new Error("3DS verification cancelled");
|
|
919
|
-
if (n ===
|
|
979
|
+
if (n === D.FAILURE)
|
|
920
980
|
throw new Error("3DS verification failed");
|
|
921
|
-
},
|
|
922
|
-
const r =
|
|
923
|
-
Ce(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await
|
|
924
|
-
}, { log__: C, err__:
|
|
981
|
+
}, fn = async (t) => {
|
|
982
|
+
const r = un(t);
|
|
983
|
+
Ce(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await ar(r), Ce("╰ Stripe 3DS flow completed successfully");
|
|
984
|
+
}, { log__: C, err__: pn } = O("stripe-pr"), hn = o.object({
|
|
925
985
|
provider: o.union([o.literal("apple_pay"), o.literal("google_pay")]),
|
|
926
986
|
processor_name: o.literal("stripe"),
|
|
927
987
|
metadata: o.object({
|
|
928
988
|
stripe_pk: o.string()
|
|
929
989
|
})
|
|
930
|
-
}),
|
|
990
|
+
}), mn = et(
|
|
931
991
|
async ({ context: t }) => {
|
|
932
992
|
C("Checking if there are any CPMs for Stripe PR...");
|
|
933
|
-
const r =
|
|
993
|
+
const r = tt(t.checkoutPaymentMethods, hn);
|
|
934
994
|
C("Initializing Stripe PR flow...");
|
|
935
|
-
const e = t.anyCdeConnection, n = await
|
|
995
|
+
const e = t.anyCdeConnection, n = await z(e), i = n.mode === "setup";
|
|
936
996
|
C("Getting initial preview amount");
|
|
937
|
-
const s = await
|
|
997
|
+
const s = await Ze(e, n.token, i, void 0), a = await nr(
|
|
938
998
|
r.metadata.stripe_pk,
|
|
939
999
|
s.amountAtom,
|
|
940
1000
|
s.currency,
|
|
@@ -942,7 +1002,7 @@ const { log__: b, err__: Se } = A("common-cc"), { log__: Ce } = A("stripe-cc"),
|
|
|
942
1002
|
);
|
|
943
1003
|
C("Checking if can make payment");
|
|
944
1004
|
const c = await a.canMakePayment();
|
|
945
|
-
return c === null ? (
|
|
1005
|
+
return c === null ? (pn("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (C("Stripe PR flow initialized successfully. Can make payment", c), {
|
|
946
1006
|
isAvailable: !0,
|
|
947
1007
|
pr: a,
|
|
948
1008
|
availableProviders: {
|
|
@@ -951,7 +1011,7 @@ const { log__: b, err__: Se } = A("common-cc"), { log__: Ce } = A("stripe-cc"),
|
|
|
951
1011
|
}
|
|
952
1012
|
});
|
|
953
1013
|
}
|
|
954
|
-
),
|
|
1014
|
+
), yn = pe(
|
|
955
1015
|
async ({
|
|
956
1016
|
context: t,
|
|
957
1017
|
checkoutPaymentMethod: r,
|
|
@@ -965,49 +1025,49 @@ const { log__: b, err__: Se } = A("common-cc"), { log__: Ce } = A("stripe-cc"),
|
|
|
965
1025
|
const a = t.anyCdeConnection, c = s.pr;
|
|
966
1026
|
if (i != null && i.overridePaymentRequest) {
|
|
967
1027
|
const p = i.overridePaymentRequest;
|
|
968
|
-
C("Overriding PR amount with", p),
|
|
1028
|
+
C("Overriding PR amount with", p), gn(c, p.amount, p.pending);
|
|
969
1029
|
}
|
|
970
1030
|
C("Showing PR dialog..."), c.show();
|
|
971
|
-
const l = await
|
|
1031
|
+
const l = await ir(c);
|
|
972
1032
|
C("Stripe PM added event:", l), C("Merging PM fields with form fields...");
|
|
973
|
-
const u =
|
|
1033
|
+
const u = _n(e, l), d = me(u, n.get.onValidationError);
|
|
974
1034
|
C("PR dialog finished. Starting payment flow...");
|
|
975
|
-
const h = await
|
|
976
|
-
fields:
|
|
1035
|
+
const h = await Dr(a, {
|
|
1036
|
+
fields: d,
|
|
977
1037
|
checkoutPaymentMethod: r
|
|
978
|
-
}),
|
|
979
|
-
C("Confirming PR with Stripe..."), await
|
|
980
|
-
const
|
|
981
|
-
if (
|
|
1038
|
+
}), _ = bn(h);
|
|
1039
|
+
C("Confirming PR with Stripe..."), await sr(_, l);
|
|
1040
|
+
const f = await z(a);
|
|
1041
|
+
if (f.mode === "setup") {
|
|
982
1042
|
C("Confirming payment flow for setup...");
|
|
983
1043
|
const p = await fe(a, {
|
|
984
|
-
secure_token:
|
|
1044
|
+
secure_token: f.token
|
|
985
1045
|
});
|
|
986
1046
|
return { mode: "setup", result: he(p) };
|
|
987
1047
|
} else {
|
|
988
1048
|
C("Performing checkout...");
|
|
989
1049
|
const p = {
|
|
990
|
-
secure_token:
|
|
1050
|
+
secure_token: f.token,
|
|
991
1051
|
payment_input: {
|
|
992
1052
|
provider_type: r.provider
|
|
993
1053
|
},
|
|
994
|
-
customer_email:
|
|
995
|
-
customer_zip_code:
|
|
996
|
-
customer_country:
|
|
997
|
-
promotion_code:
|
|
998
|
-
line_items:
|
|
999
|
-
total_amount_atom:
|
|
1054
|
+
customer_email: d[m.EMAIL],
|
|
1055
|
+
customer_zip_code: d[m.ZIP_CODE],
|
|
1056
|
+
customer_country: d[m.COUNTRY],
|
|
1057
|
+
promotion_code: d[m.PROMOTION_CODE],
|
|
1058
|
+
line_items: f.line_items,
|
|
1059
|
+
total_amount_atom: f.amount_total_atom,
|
|
1000
1060
|
cancel_at_end: !1,
|
|
1001
1061
|
checkout_payment_method: r
|
|
1002
1062
|
};
|
|
1003
1063
|
return { mode: "checkout", result: await We(a, p) };
|
|
1004
1064
|
}
|
|
1005
1065
|
}
|
|
1006
|
-
),
|
|
1066
|
+
), _n = (t, r) => {
|
|
1007
1067
|
var a, c, l, u;
|
|
1008
1068
|
const e = { ...t }, [n, ...i] = ((c = (a = r.payerName) == null ? void 0 : a.trim()) == null ? void 0 : c.split(/\s+/)) ?? [], s = i.join(" ") || void 0;
|
|
1009
1069
|
return e[m.FIRST_NAME] = e[m.FIRST_NAME] || n || "_OP_UNKNOWN", e[m.LAST_NAME] = e[m.LAST_NAME] || s || "_OP_UNKNOWN", e[m.EMAIL] = e[m.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", e[m.ZIP_CODE] = e[m.ZIP_CODE] || ((l = r.shippingAddress) == null ? void 0 : l.postalCode) || "00000", e[m.COUNTRY] = e[m.COUNTRY] || ((u = r.shippingAddress) == null ? void 0 : u.country) || "US", C("Final form inputs:", e), e;
|
|
1010
|
-
},
|
|
1070
|
+
}, gn = (t, r, e) => {
|
|
1011
1071
|
t.update({
|
|
1012
1072
|
total: {
|
|
1013
1073
|
amount: r.amountAtom,
|
|
@@ -1016,34 +1076,34 @@ const { log__: b, err__: Se } = A("common-cc"), { log__: Ce } = A("stripe-cc"),
|
|
|
1016
1076
|
},
|
|
1017
1077
|
currency: r.currency
|
|
1018
1078
|
});
|
|
1019
|
-
},
|
|
1079
|
+
}, bn = (t) => {
|
|
1020
1080
|
if (t.required_user_actions.length !== 1)
|
|
1021
1081
|
throw new Error(`Error occurred.
|
|
1022
1082
|
Details: got ${t.required_user_actions.length} required user actions`);
|
|
1023
|
-
return
|
|
1024
|
-
},
|
|
1083
|
+
return er.parse(t.required_user_actions[0]);
|
|
1084
|
+
}, it = (t, r, e) => {
|
|
1025
1085
|
const n = t.filter((i) => i.provider === r);
|
|
1026
1086
|
if (n.length === 0)
|
|
1027
1087
|
throw console.error("CPMs list", t), new Error(`No CPMs found with provider '${r}' and processor '${e}'`);
|
|
1028
1088
|
if (n.length !== 1)
|
|
1029
1089
|
throw console.error("CPMs list", t), new Error(`More than one CPM found with provider '${r}' and processor '${e}'`);
|
|
1030
1090
|
return n[0];
|
|
1031
|
-
},
|
|
1091
|
+
}, U = {
|
|
1032
1092
|
// ✋ Note: For flows that require initialization, please add them to `init-flows.ts`
|
|
1033
1093
|
// Common
|
|
1034
1094
|
commonCC: {
|
|
1035
1095
|
init: async () => {
|
|
1036
1096
|
},
|
|
1037
|
-
run:
|
|
1097
|
+
run: cn
|
|
1038
1098
|
},
|
|
1039
1099
|
// Stripe
|
|
1040
1100
|
stripePR: {
|
|
1041
|
-
init:
|
|
1042
|
-
run:
|
|
1101
|
+
init: mn,
|
|
1102
|
+
run: yn
|
|
1043
1103
|
},
|
|
1044
1104
|
stripeLink: {
|
|
1045
|
-
init:
|
|
1046
|
-
run:
|
|
1105
|
+
init: Br,
|
|
1106
|
+
run: Jr
|
|
1047
1107
|
}
|
|
1048
1108
|
// 👉 Add more flows here
|
|
1049
1109
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1055,7 +1115,7 @@ var ce = function(t, r) {
|
|
|
1055
1115
|
for (var i in n) Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i]);
|
|
1056
1116
|
}, ce(t, r);
|
|
1057
1117
|
};
|
|
1058
|
-
function
|
|
1118
|
+
function L(t, r) {
|
|
1059
1119
|
if (typeof r != "function" && r !== null)
|
|
1060
1120
|
throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
1061
1121
|
ce(t, r);
|
|
@@ -1064,34 +1124,34 @@ function M(t, r) {
|
|
|
1064
1124
|
}
|
|
1065
1125
|
t.prototype = r === null ? Object.create(r) : (e.prototype = r.prototype, new e());
|
|
1066
1126
|
}
|
|
1067
|
-
function
|
|
1127
|
+
function vn(t, r, e, n) {
|
|
1068
1128
|
function i(s) {
|
|
1069
1129
|
return s instanceof e ? s : new e(function(a) {
|
|
1070
1130
|
a(s);
|
|
1071
1131
|
});
|
|
1072
1132
|
}
|
|
1073
1133
|
return new (e || (e = Promise))(function(s, a) {
|
|
1074
|
-
function c(
|
|
1134
|
+
function c(d) {
|
|
1075
1135
|
try {
|
|
1076
|
-
u(n.next(
|
|
1136
|
+
u(n.next(d));
|
|
1077
1137
|
} catch (h) {
|
|
1078
1138
|
a(h);
|
|
1079
1139
|
}
|
|
1080
1140
|
}
|
|
1081
|
-
function l(
|
|
1141
|
+
function l(d) {
|
|
1082
1142
|
try {
|
|
1083
|
-
u(n.throw(
|
|
1143
|
+
u(n.throw(d));
|
|
1084
1144
|
} catch (h) {
|
|
1085
1145
|
a(h);
|
|
1086
1146
|
}
|
|
1087
1147
|
}
|
|
1088
|
-
function u(
|
|
1089
|
-
|
|
1148
|
+
function u(d) {
|
|
1149
|
+
d.done ? s(d.value) : i(d.value).then(c, l);
|
|
1090
1150
|
}
|
|
1091
1151
|
u((n = n.apply(t, r || [])).next());
|
|
1092
1152
|
});
|
|
1093
1153
|
}
|
|
1094
|
-
function
|
|
1154
|
+
function st(t, r) {
|
|
1095
1155
|
var e = { label: 0, sent: function() {
|
|
1096
1156
|
if (s[0] & 1) throw s[1];
|
|
1097
1157
|
return s[1];
|
|
@@ -1100,8 +1160,8 @@ function nt(t, r) {
|
|
|
1100
1160
|
return this;
|
|
1101
1161
|
}), a;
|
|
1102
1162
|
function c(u) {
|
|
1103
|
-
return function(
|
|
1104
|
-
return l([u,
|
|
1163
|
+
return function(d) {
|
|
1164
|
+
return l([u, d]);
|
|
1105
1165
|
};
|
|
1106
1166
|
}
|
|
1107
1167
|
function l(u) {
|
|
@@ -1142,8 +1202,8 @@ function nt(t, r) {
|
|
|
1142
1202
|
continue;
|
|
1143
1203
|
}
|
|
1144
1204
|
u = r.call(t, e);
|
|
1145
|
-
} catch (
|
|
1146
|
-
u = [6,
|
|
1205
|
+
} catch (d) {
|
|
1206
|
+
u = [6, d], i = 0;
|
|
1147
1207
|
} finally {
|
|
1148
1208
|
n = s = 0;
|
|
1149
1209
|
}
|
|
@@ -1151,7 +1211,7 @@ function nt(t, r) {
|
|
|
1151
1211
|
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
1152
1212
|
}
|
|
1153
1213
|
}
|
|
1154
|
-
function
|
|
1214
|
+
function $(t) {
|
|
1155
1215
|
var r = typeof Symbol == "function" && Symbol.iterator, e = r && t[r], n = 0;
|
|
1156
1216
|
if (e) return e.call(t);
|
|
1157
1217
|
if (t && typeof t.length == "number") return {
|
|
@@ -1183,51 +1243,51 @@ function Q(t, r, e) {
|
|
|
1183
1243
|
(s || !(n in r)) && (s || (s = Array.prototype.slice.call(r, 0, n)), s[n] = r[n]);
|
|
1184
1244
|
return t.concat(s || Array.prototype.slice.call(r));
|
|
1185
1245
|
}
|
|
1186
|
-
function
|
|
1187
|
-
return this instanceof
|
|
1246
|
+
function x(t) {
|
|
1247
|
+
return this instanceof x ? (this.v = t, this) : new x(t);
|
|
1188
1248
|
}
|
|
1189
|
-
function
|
|
1249
|
+
function wn(t, r, e) {
|
|
1190
1250
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
1191
1251
|
var n = e.apply(t, r || []), i, s = [];
|
|
1192
1252
|
return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", a), i[Symbol.asyncIterator] = function() {
|
|
1193
1253
|
return this;
|
|
1194
1254
|
}, i;
|
|
1195
|
-
function a(
|
|
1255
|
+
function a(f) {
|
|
1196
1256
|
return function(p) {
|
|
1197
|
-
return Promise.resolve(p).then(
|
|
1257
|
+
return Promise.resolve(p).then(f, h);
|
|
1198
1258
|
};
|
|
1199
1259
|
}
|
|
1200
|
-
function c(
|
|
1201
|
-
n[
|
|
1202
|
-
return new Promise(function(
|
|
1203
|
-
s.push([
|
|
1260
|
+
function c(f, p) {
|
|
1261
|
+
n[f] && (i[f] = function(y) {
|
|
1262
|
+
return new Promise(function(j, Y) {
|
|
1263
|
+
s.push([f, y, j, Y]) > 1 || l(f, y);
|
|
1204
1264
|
});
|
|
1205
|
-
}, p && (i[
|
|
1265
|
+
}, p && (i[f] = p(i[f])));
|
|
1206
1266
|
}
|
|
1207
|
-
function l(
|
|
1267
|
+
function l(f, p) {
|
|
1208
1268
|
try {
|
|
1209
|
-
u(n[
|
|
1210
|
-
} catch (
|
|
1211
|
-
|
|
1269
|
+
u(n[f](p));
|
|
1270
|
+
} catch (y) {
|
|
1271
|
+
_(s[0][3], y);
|
|
1212
1272
|
}
|
|
1213
1273
|
}
|
|
1214
|
-
function u(
|
|
1215
|
-
|
|
1274
|
+
function u(f) {
|
|
1275
|
+
f.value instanceof x ? Promise.resolve(f.value.v).then(d, h) : _(s[0][2], f);
|
|
1216
1276
|
}
|
|
1217
|
-
function f
|
|
1218
|
-
l("next",
|
|
1277
|
+
function d(f) {
|
|
1278
|
+
l("next", f);
|
|
1219
1279
|
}
|
|
1220
|
-
function h(
|
|
1221
|
-
l("throw",
|
|
1280
|
+
function h(f) {
|
|
1281
|
+
l("throw", f);
|
|
1222
1282
|
}
|
|
1223
|
-
function
|
|
1224
|
-
|
|
1283
|
+
function _(f, p) {
|
|
1284
|
+
f(p), s.shift(), s.length && l(s[0][0], s[0][1]);
|
|
1225
1285
|
}
|
|
1226
1286
|
}
|
|
1227
|
-
function
|
|
1287
|
+
function En(t) {
|
|
1228
1288
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
1229
1289
|
var r = t[Symbol.asyncIterator], e;
|
|
1230
|
-
return r ? r.call(t) : (t = typeof
|
|
1290
|
+
return r ? r.call(t) : (t = typeof $ == "function" ? $(t) : t[Symbol.iterator](), e = {}, n("next"), n("throw"), n("return"), e[Symbol.asyncIterator] = function() {
|
|
1231
1291
|
return this;
|
|
1232
1292
|
}, e);
|
|
1233
1293
|
function n(s) {
|
|
@@ -1267,7 +1327,7 @@ function X(t, r) {
|
|
|
1267
1327
|
0 <= e && t.splice(e, 1);
|
|
1268
1328
|
}
|
|
1269
1329
|
}
|
|
1270
|
-
var
|
|
1330
|
+
var H = function() {
|
|
1271
1331
|
function t(r) {
|
|
1272
1332
|
this.initialTeardown = r, this.closed = !1, this._parentage = null, this._finalizers = null;
|
|
1273
1333
|
}
|
|
@@ -1279,12 +1339,12 @@ var z = function() {
|
|
|
1279
1339
|
if (a)
|
|
1280
1340
|
if (this._parentage = null, Array.isArray(a))
|
|
1281
1341
|
try {
|
|
1282
|
-
for (var c =
|
|
1342
|
+
for (var c = $(a), l = c.next(); !l.done; l = c.next()) {
|
|
1283
1343
|
var u = l.value;
|
|
1284
1344
|
u.remove(this);
|
|
1285
1345
|
}
|
|
1286
|
-
} catch (
|
|
1287
|
-
r = { error:
|
|
1346
|
+
} catch (y) {
|
|
1347
|
+
r = { error: y };
|
|
1288
1348
|
} finally {
|
|
1289
1349
|
try {
|
|
1290
1350
|
l && !l.done && (e = c.return) && e.call(c);
|
|
@@ -1294,30 +1354,30 @@ var z = function() {
|
|
|
1294
1354
|
}
|
|
1295
1355
|
else
|
|
1296
1356
|
a.remove(this);
|
|
1297
|
-
var
|
|
1298
|
-
if (w(
|
|
1357
|
+
var d = this.initialTeardown;
|
|
1358
|
+
if (w(d))
|
|
1299
1359
|
try {
|
|
1300
|
-
|
|
1301
|
-
} catch (
|
|
1302
|
-
s =
|
|
1360
|
+
d();
|
|
1361
|
+
} catch (y) {
|
|
1362
|
+
s = y instanceof oe ? y.errors : [y];
|
|
1303
1363
|
}
|
|
1304
1364
|
var h = this._finalizers;
|
|
1305
1365
|
if (h) {
|
|
1306
1366
|
this._finalizers = null;
|
|
1307
1367
|
try {
|
|
1308
|
-
for (var
|
|
1309
|
-
var p =
|
|
1368
|
+
for (var _ = $(h), f = _.next(); !f.done; f = _.next()) {
|
|
1369
|
+
var p = f.value;
|
|
1310
1370
|
try {
|
|
1311
1371
|
ke(p);
|
|
1312
|
-
} catch (
|
|
1313
|
-
s = s ?? [],
|
|
1372
|
+
} catch (y) {
|
|
1373
|
+
s = s ?? [], y instanceof oe ? s = Q(Q([], W(s)), W(y.errors)) : s.push(y);
|
|
1314
1374
|
}
|
|
1315
1375
|
}
|
|
1316
|
-
} catch (
|
|
1317
|
-
n = { error:
|
|
1376
|
+
} catch (y) {
|
|
1377
|
+
n = { error: y };
|
|
1318
1378
|
} finally {
|
|
1319
1379
|
try {
|
|
1320
|
-
|
|
1380
|
+
f && !f.done && (i = _.return) && i.call(_);
|
|
1321
1381
|
} finally {
|
|
1322
1382
|
if (n) throw n.error;
|
|
1323
1383
|
}
|
|
@@ -1355,33 +1415,33 @@ var z = function() {
|
|
|
1355
1415
|
var r = new t();
|
|
1356
1416
|
return r.closed = !0, r;
|
|
1357
1417
|
}(), t;
|
|
1358
|
-
}(),
|
|
1359
|
-
function
|
|
1360
|
-
return t instanceof
|
|
1418
|
+
}(), at = H.EMPTY;
|
|
1419
|
+
function ct(t) {
|
|
1420
|
+
return t instanceof H || t && "closed" in t && w(t.remove) && w(t.add) && w(t.unsubscribe);
|
|
1361
1421
|
}
|
|
1362
1422
|
function ke(t) {
|
|
1363
1423
|
w(t) ? t() : t.unsubscribe();
|
|
1364
1424
|
}
|
|
1365
|
-
var
|
|
1425
|
+
var ut = {
|
|
1366
1426
|
onUnhandledError: null,
|
|
1367
1427
|
onStoppedNotification: null,
|
|
1368
1428
|
Promise: void 0,
|
|
1369
1429
|
useDeprecatedSynchronousErrorHandling: !1,
|
|
1370
1430
|
useDeprecatedNextContext: !1
|
|
1371
|
-
},
|
|
1431
|
+
}, lt = {
|
|
1372
1432
|
setTimeout: function(t, r) {
|
|
1373
1433
|
for (var e = [], n = 2; n < arguments.length; n++)
|
|
1374
1434
|
e[n - 2] = arguments[n];
|
|
1375
1435
|
return setTimeout.apply(void 0, Q([t, r], W(e)));
|
|
1376
1436
|
},
|
|
1377
1437
|
clearTimeout: function(t) {
|
|
1378
|
-
var r =
|
|
1438
|
+
var r = lt.delegate;
|
|
1379
1439
|
return ((r == null ? void 0 : r.clearTimeout) || clearTimeout)(t);
|
|
1380
1440
|
},
|
|
1381
1441
|
delegate: void 0
|
|
1382
1442
|
};
|
|
1383
|
-
function
|
|
1384
|
-
|
|
1443
|
+
function dt(t) {
|
|
1444
|
+
lt.setTimeout(function() {
|
|
1385
1445
|
throw t;
|
|
1386
1446
|
});
|
|
1387
1447
|
}
|
|
@@ -1391,10 +1451,10 @@ function K(t) {
|
|
|
1391
1451
|
t();
|
|
1392
1452
|
}
|
|
1393
1453
|
var ye = function(t) {
|
|
1394
|
-
|
|
1454
|
+
L(r, t);
|
|
1395
1455
|
function r(e) {
|
|
1396
1456
|
var n = t.call(this) || this;
|
|
1397
|
-
return n.isStopped = !1, e ? (n.destination = e,
|
|
1457
|
+
return n.isStopped = !1, e ? (n.destination = e, ct(e) && e.add(n)) : n.destination = Pn, n;
|
|
1398
1458
|
}
|
|
1399
1459
|
return r.create = function(e, n, i) {
|
|
1400
1460
|
return new ue(e, n, i);
|
|
@@ -1421,11 +1481,11 @@ var ye = function(t) {
|
|
|
1421
1481
|
this.unsubscribe();
|
|
1422
1482
|
}
|
|
1423
1483
|
}, r;
|
|
1424
|
-
}(
|
|
1484
|
+
}(H), Sn = Function.prototype.bind;
|
|
1425
1485
|
function ie(t, r) {
|
|
1426
|
-
return
|
|
1486
|
+
return Sn.call(t, r);
|
|
1427
1487
|
}
|
|
1428
|
-
var
|
|
1488
|
+
var Cn = function() {
|
|
1429
1489
|
function t(r) {
|
|
1430
1490
|
this.partialObserver = r;
|
|
1431
1491
|
}
|
|
@@ -1435,7 +1495,7 @@ var yn = function() {
|
|
|
1435
1495
|
try {
|
|
1436
1496
|
e.next(r);
|
|
1437
1497
|
} catch (n) {
|
|
1438
|
-
|
|
1498
|
+
J(n);
|
|
1439
1499
|
}
|
|
1440
1500
|
}, t.prototype.error = function(r) {
|
|
1441
1501
|
var e = this.partialObserver;
|
|
@@ -1443,21 +1503,21 @@ var yn = function() {
|
|
|
1443
1503
|
try {
|
|
1444
1504
|
e.error(r);
|
|
1445
1505
|
} catch (n) {
|
|
1446
|
-
|
|
1506
|
+
J(n);
|
|
1447
1507
|
}
|
|
1448
1508
|
else
|
|
1449
|
-
|
|
1509
|
+
J(r);
|
|
1450
1510
|
}, t.prototype.complete = function() {
|
|
1451
1511
|
var r = this.partialObserver;
|
|
1452
1512
|
if (r.complete)
|
|
1453
1513
|
try {
|
|
1454
1514
|
r.complete();
|
|
1455
1515
|
} catch (e) {
|
|
1456
|
-
|
|
1516
|
+
J(e);
|
|
1457
1517
|
}
|
|
1458
1518
|
}, t;
|
|
1459
1519
|
}(), ue = function(t) {
|
|
1460
|
-
|
|
1520
|
+
L(r, t);
|
|
1461
1521
|
function r(e, n, i) {
|
|
1462
1522
|
var s = t.call(this) || this, a;
|
|
1463
1523
|
if (w(e) || !e)
|
|
@@ -1468,7 +1528,7 @@ var yn = function() {
|
|
|
1468
1528
|
};
|
|
1469
1529
|
else {
|
|
1470
1530
|
var c;
|
|
1471
|
-
s &&
|
|
1531
|
+
s && ut.useDeprecatedNextContext ? (c = Object.create(e), c.unsubscribe = function() {
|
|
1472
1532
|
return s.unsubscribe();
|
|
1473
1533
|
}, a = {
|
|
1474
1534
|
next: e.next && ie(e.next, c),
|
|
@@ -1476,29 +1536,29 @@ var yn = function() {
|
|
|
1476
1536
|
complete: e.complete && ie(e.complete, c)
|
|
1477
1537
|
}) : a = e;
|
|
1478
1538
|
}
|
|
1479
|
-
return s.destination = new
|
|
1539
|
+
return s.destination = new Cn(a), s;
|
|
1480
1540
|
}
|
|
1481
1541
|
return r;
|
|
1482
1542
|
}(ye);
|
|
1483
|
-
function
|
|
1484
|
-
|
|
1543
|
+
function J(t) {
|
|
1544
|
+
dt(t);
|
|
1485
1545
|
}
|
|
1486
|
-
function
|
|
1546
|
+
function kn(t) {
|
|
1487
1547
|
throw t;
|
|
1488
1548
|
}
|
|
1489
|
-
var
|
|
1549
|
+
var Pn = {
|
|
1490
1550
|
closed: !0,
|
|
1491
1551
|
next: Pe,
|
|
1492
|
-
error:
|
|
1552
|
+
error: kn,
|
|
1493
1553
|
complete: Pe
|
|
1494
1554
|
}, _e = function() {
|
|
1495
1555
|
return typeof Symbol == "function" && Symbol.observable || "@@observable";
|
|
1496
1556
|
}();
|
|
1497
|
-
function
|
|
1557
|
+
function In(t) {
|
|
1498
1558
|
return t;
|
|
1499
1559
|
}
|
|
1500
|
-
function
|
|
1501
|
-
return t.length === 0 ?
|
|
1560
|
+
function On(t) {
|
|
1561
|
+
return t.length === 0 ? In : t.length === 1 ? t[0] : function(e) {
|
|
1502
1562
|
return t.reduce(function(n, i) {
|
|
1503
1563
|
return i(n);
|
|
1504
1564
|
}, e);
|
|
@@ -1512,7 +1572,7 @@ var T = function() {
|
|
|
1512
1572
|
var e = new t();
|
|
1513
1573
|
return e.source = this, e.operator = r, e;
|
|
1514
1574
|
}, t.prototype.subscribe = function(r, e, n) {
|
|
1515
|
-
var i = this, s =
|
|
1575
|
+
var i = this, s = An(r) ? r : new ue(r, e, n);
|
|
1516
1576
|
return K(function() {
|
|
1517
1577
|
var a = i, c = a.operator, l = a.source;
|
|
1518
1578
|
s.add(c ? c.call(s, l) : l ? i._subscribe(s) : i._trySubscribe(s));
|
|
@@ -1547,7 +1607,7 @@ var T = function() {
|
|
|
1547
1607
|
}, t.prototype.pipe = function() {
|
|
1548
1608
|
for (var r = [], e = 0; e < arguments.length; e++)
|
|
1549
1609
|
r[e] = arguments[e];
|
|
1550
|
-
return
|
|
1610
|
+
return On(r)(this);
|
|
1551
1611
|
}, t.prototype.toPromise = function(r) {
|
|
1552
1612
|
var e = this;
|
|
1553
1613
|
return r = Ie(r), new r(function(n, i) {
|
|
@@ -1566,20 +1626,20 @@ var T = function() {
|
|
|
1566
1626
|
}();
|
|
1567
1627
|
function Ie(t) {
|
|
1568
1628
|
var r;
|
|
1569
|
-
return (r = t ??
|
|
1629
|
+
return (r = t ?? ut.Promise) !== null && r !== void 0 ? r : Promise;
|
|
1570
1630
|
}
|
|
1571
|
-
function
|
|
1631
|
+
function Rn(t) {
|
|
1572
1632
|
return t && w(t.next) && w(t.error) && w(t.complete);
|
|
1573
1633
|
}
|
|
1574
|
-
function
|
|
1575
|
-
return t && t instanceof ye ||
|
|
1634
|
+
function An(t) {
|
|
1635
|
+
return t && t instanceof ye || Rn(t) && ct(t);
|
|
1576
1636
|
}
|
|
1577
|
-
function
|
|
1637
|
+
function Tn(t) {
|
|
1578
1638
|
return w(t == null ? void 0 : t.lift);
|
|
1579
1639
|
}
|
|
1580
|
-
function
|
|
1640
|
+
function jn(t) {
|
|
1581
1641
|
return function(r) {
|
|
1582
|
-
if (
|
|
1642
|
+
if (Tn(r))
|
|
1583
1643
|
return r.lift(function(e) {
|
|
1584
1644
|
try {
|
|
1585
1645
|
return t(e, this);
|
|
@@ -1590,24 +1650,24 @@ function Cn(t) {
|
|
|
1590
1650
|
throw new TypeError("Unable to lift unknown Observable type");
|
|
1591
1651
|
};
|
|
1592
1652
|
}
|
|
1593
|
-
function
|
|
1594
|
-
return new
|
|
1653
|
+
function Mn(t, r, e, n, i) {
|
|
1654
|
+
return new Ln(t, r, e, n, i);
|
|
1595
1655
|
}
|
|
1596
|
-
var
|
|
1597
|
-
|
|
1656
|
+
var Ln = function(t) {
|
|
1657
|
+
L(r, t);
|
|
1598
1658
|
function r(e, n, i, s, a, c) {
|
|
1599
1659
|
var l = t.call(this, e) || this;
|
|
1600
1660
|
return l.onFinalize = a, l.shouldUnsubscribe = c, l._next = n ? function(u) {
|
|
1601
1661
|
try {
|
|
1602
1662
|
n(u);
|
|
1603
|
-
} catch (
|
|
1604
|
-
e.error(
|
|
1663
|
+
} catch (d) {
|
|
1664
|
+
e.error(d);
|
|
1605
1665
|
}
|
|
1606
1666
|
} : t.prototype._next, l._error = s ? function(u) {
|
|
1607
1667
|
try {
|
|
1608
1668
|
s(u);
|
|
1609
|
-
} catch (
|
|
1610
|
-
e.error(
|
|
1669
|
+
} catch (d) {
|
|
1670
|
+
e.error(d);
|
|
1611
1671
|
} finally {
|
|
1612
1672
|
this.unsubscribe();
|
|
1613
1673
|
}
|
|
@@ -1628,12 +1688,12 @@ var Pn = function(t) {
|
|
|
1628
1688
|
t.prototype.unsubscribe.call(this), !n && ((e = this.onFinalize) === null || e === void 0 || e.call(this));
|
|
1629
1689
|
}
|
|
1630
1690
|
}, r;
|
|
1631
|
-
}(ye),
|
|
1691
|
+
}(ye), Dn = re(function(t) {
|
|
1632
1692
|
return function() {
|
|
1633
1693
|
t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
|
|
1634
1694
|
};
|
|
1635
|
-
}),
|
|
1636
|
-
|
|
1695
|
+
}), ft = function(t) {
|
|
1696
|
+
L(r, t);
|
|
1637
1697
|
function r() {
|
|
1638
1698
|
var e = t.call(this) || this;
|
|
1639
1699
|
return e.closed = !1, e.currentObservers = null, e.observers = [], e.isStopped = !1, e.hasError = !1, e.thrownError = null, e;
|
|
@@ -1643,7 +1703,7 @@ var Pn = function(t) {
|
|
|
1643
1703
|
return n.operator = e, n;
|
|
1644
1704
|
}, r.prototype._throwIfClosed = function() {
|
|
1645
1705
|
if (this.closed)
|
|
1646
|
-
throw new
|
|
1706
|
+
throw new Dn();
|
|
1647
1707
|
}, r.prototype.next = function(e) {
|
|
1648
1708
|
var n = this;
|
|
1649
1709
|
K(function() {
|
|
@@ -1651,7 +1711,7 @@ var Pn = function(t) {
|
|
|
1651
1711
|
if (n._throwIfClosed(), !n.isStopped) {
|
|
1652
1712
|
n.currentObservers || (n.currentObservers = Array.from(n.observers));
|
|
1653
1713
|
try {
|
|
1654
|
-
for (var a =
|
|
1714
|
+
for (var a = $(n.currentObservers), c = a.next(); !c.done; c = a.next()) {
|
|
1655
1715
|
var l = c.value;
|
|
1656
1716
|
l.next(e);
|
|
1657
1717
|
}
|
|
@@ -1699,7 +1759,7 @@ var Pn = function(t) {
|
|
|
1699
1759
|
return this._throwIfClosed(), this._checkFinalizedStatuses(e), this._innerSubscribe(e);
|
|
1700
1760
|
}, r.prototype._innerSubscribe = function(e) {
|
|
1701
1761
|
var n = this, i = this, s = i.hasError, a = i.isStopped, c = i.observers;
|
|
1702
|
-
return s || a ?
|
|
1762
|
+
return s || a ? at : (this.currentObservers = null, c.push(e), new H(function() {
|
|
1703
1763
|
n.currentObservers = null, X(c, e);
|
|
1704
1764
|
}));
|
|
1705
1765
|
}, r.prototype._checkFinalizedStatuses = function(e) {
|
|
@@ -1712,7 +1772,7 @@ var Pn = function(t) {
|
|
|
1712
1772
|
return new Oe(e, n);
|
|
1713
1773
|
}, r;
|
|
1714
1774
|
}(T), Oe = function(t) {
|
|
1715
|
-
|
|
1775
|
+
L(r, t);
|
|
1716
1776
|
function r(e, n) {
|
|
1717
1777
|
var i = t.call(this) || this;
|
|
1718
1778
|
return i.destination = e, i.source = n, i;
|
|
@@ -1728,22 +1788,22 @@ var Pn = function(t) {
|
|
|
1728
1788
|
(n = (e = this.destination) === null || e === void 0 ? void 0 : e.complete) === null || n === void 0 || n.call(e);
|
|
1729
1789
|
}, r.prototype._subscribe = function(e) {
|
|
1730
1790
|
var n, i;
|
|
1731
|
-
return (i = (n = this.source) === null || n === void 0 ? void 0 : n.subscribe(e)) !== null && i !== void 0 ? i :
|
|
1791
|
+
return (i = (n = this.source) === null || n === void 0 ? void 0 : n.subscribe(e)) !== null && i !== void 0 ? i : at;
|
|
1732
1792
|
}, r;
|
|
1733
|
-
}(
|
|
1793
|
+
}(ft), Fn = {
|
|
1734
1794
|
now: function() {
|
|
1735
1795
|
return Date.now();
|
|
1736
1796
|
},
|
|
1737
1797
|
delegate: void 0
|
|
1738
|
-
},
|
|
1739
|
-
|
|
1798
|
+
}, xn = function(t) {
|
|
1799
|
+
L(r, t);
|
|
1740
1800
|
function r(e, n) {
|
|
1741
1801
|
return t.call(this) || this;
|
|
1742
1802
|
}
|
|
1743
1803
|
return r.prototype.schedule = function(e, n) {
|
|
1744
1804
|
return this;
|
|
1745
1805
|
}, r;
|
|
1746
|
-
}(
|
|
1806
|
+
}(H), Re = {
|
|
1747
1807
|
setInterval: function(t, r) {
|
|
1748
1808
|
for (var e = [], n = 2; n < arguments.length; n++)
|
|
1749
1809
|
e[n - 2] = arguments[n];
|
|
@@ -1753,8 +1813,8 @@ var Pn = function(t) {
|
|
|
1753
1813
|
return clearInterval(t);
|
|
1754
1814
|
},
|
|
1755
1815
|
delegate: void 0
|
|
1756
|
-
},
|
|
1757
|
-
|
|
1816
|
+
}, Nn = function(t) {
|
|
1817
|
+
L(r, t);
|
|
1758
1818
|
function r(e, n) {
|
|
1759
1819
|
var i = t.call(this, e, n) || this;
|
|
1760
1820
|
return i.scheduler = e, i.work = n, i.pending = !1, i;
|
|
@@ -1767,11 +1827,11 @@ var Pn = function(t) {
|
|
|
1767
1827
|
var s = this.id, a = this.scheduler;
|
|
1768
1828
|
return s != null && (this.id = this.recycleAsyncId(a, s, n)), this.pending = !0, this.delay = n, this.id = (i = this.id) !== null && i !== void 0 ? i : this.requestAsyncId(a, this.id, n), this;
|
|
1769
1829
|
}, r.prototype.requestAsyncId = function(e, n, i) {
|
|
1770
|
-
return i === void 0 && (i = 0),
|
|
1830
|
+
return i === void 0 && (i = 0), Re.setInterval(e.flush.bind(e, this), i);
|
|
1771
1831
|
}, r.prototype.recycleAsyncId = function(e, n, i) {
|
|
1772
1832
|
if (i === void 0 && (i = 0), i != null && this.delay === i && this.pending === !1)
|
|
1773
1833
|
return n;
|
|
1774
|
-
n != null &&
|
|
1834
|
+
n != null && Re.clearInterval(n);
|
|
1775
1835
|
}, r.prototype.execute = function(e, n) {
|
|
1776
1836
|
if (this.closed)
|
|
1777
1837
|
return new Error("executing a cancelled action");
|
|
@@ -1795,17 +1855,17 @@ var Pn = function(t) {
|
|
|
1795
1855
|
this.work = this.state = this.scheduler = null, this.pending = !1, X(s, this), n != null && (this.id = this.recycleAsyncId(i, n, null)), this.delay = null, t.prototype.unsubscribe.call(this);
|
|
1796
1856
|
}
|
|
1797
1857
|
}, r;
|
|
1798
|
-
}(
|
|
1858
|
+
}(xn), Ae = function() {
|
|
1799
1859
|
function t(r, e) {
|
|
1800
1860
|
e === void 0 && (e = t.now), this.schedulerActionCtor = r, this.now = e;
|
|
1801
1861
|
}
|
|
1802
1862
|
return t.prototype.schedule = function(r, e, n) {
|
|
1803
1863
|
return e === void 0 && (e = 0), new this.schedulerActionCtor(this, r).schedule(n, e);
|
|
1804
|
-
}, t.now =
|
|
1805
|
-
}(),
|
|
1806
|
-
|
|
1864
|
+
}, t.now = Fn.now, t;
|
|
1865
|
+
}(), Un = function(t) {
|
|
1866
|
+
L(r, t);
|
|
1807
1867
|
function r(e, n) {
|
|
1808
|
-
n === void 0 && (n =
|
|
1868
|
+
n === void 0 && (n = Ae.now);
|
|
1809
1869
|
var i = t.call(this, e, n) || this;
|
|
1810
1870
|
return i.actions = [], i._active = !1, i;
|
|
1811
1871
|
}
|
|
@@ -1827,45 +1887,45 @@ var Pn = function(t) {
|
|
|
1827
1887
|
throw i;
|
|
1828
1888
|
}
|
|
1829
1889
|
}, r;
|
|
1830
|
-
}(
|
|
1890
|
+
}(Ae), $n = new Un(Nn), Vn = function(t) {
|
|
1831
1891
|
return t && typeof t.length == "number" && typeof t != "function";
|
|
1832
1892
|
};
|
|
1833
|
-
function
|
|
1893
|
+
function qn(t) {
|
|
1834
1894
|
return w(t == null ? void 0 : t.then);
|
|
1835
1895
|
}
|
|
1836
|
-
function
|
|
1896
|
+
function zn(t) {
|
|
1837
1897
|
return w(t[_e]);
|
|
1838
1898
|
}
|
|
1839
|
-
function
|
|
1899
|
+
function Hn(t) {
|
|
1840
1900
|
return Symbol.asyncIterator && w(t == null ? void 0 : t[Symbol.asyncIterator]);
|
|
1841
1901
|
}
|
|
1842
|
-
function
|
|
1902
|
+
function Yn(t) {
|
|
1843
1903
|
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.");
|
|
1844
1904
|
}
|
|
1845
|
-
function
|
|
1905
|
+
function Bn() {
|
|
1846
1906
|
return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
|
|
1847
1907
|
}
|
|
1848
|
-
var
|
|
1849
|
-
function
|
|
1850
|
-
return w(t == null ? void 0 : t[
|
|
1908
|
+
var Jn = Bn();
|
|
1909
|
+
function Kn(t) {
|
|
1910
|
+
return w(t == null ? void 0 : t[Jn]);
|
|
1851
1911
|
}
|
|
1852
|
-
function
|
|
1853
|
-
return
|
|
1912
|
+
function Gn(t) {
|
|
1913
|
+
return wn(this, arguments, function() {
|
|
1854
1914
|
var e, n, i, s;
|
|
1855
|
-
return
|
|
1915
|
+
return st(this, function(a) {
|
|
1856
1916
|
switch (a.label) {
|
|
1857
1917
|
case 0:
|
|
1858
1918
|
e = t.getReader(), a.label = 1;
|
|
1859
1919
|
case 1:
|
|
1860
1920
|
a.trys.push([1, , 9, 10]), a.label = 2;
|
|
1861
1921
|
case 2:
|
|
1862
|
-
return [4,
|
|
1922
|
+
return [4, x(e.read())];
|
|
1863
1923
|
case 3:
|
|
1864
|
-
return n = a.sent(), i = n.value, s = n.done, s ? [4,
|
|
1924
|
+
return n = a.sent(), i = n.value, s = n.done, s ? [4, x(void 0)] : [3, 5];
|
|
1865
1925
|
case 4:
|
|
1866
1926
|
return [2, a.sent()];
|
|
1867
1927
|
case 5:
|
|
1868
|
-
return [4,
|
|
1928
|
+
return [4, x(i)];
|
|
1869
1929
|
case 6:
|
|
1870
1930
|
return [4, a.sent()];
|
|
1871
1931
|
case 7:
|
|
@@ -1880,29 +1940,29 @@ function Vn(t) {
|
|
|
1880
1940
|
});
|
|
1881
1941
|
});
|
|
1882
1942
|
}
|
|
1883
|
-
function
|
|
1943
|
+
function Zn(t) {
|
|
1884
1944
|
return w(t == null ? void 0 : t.getReader);
|
|
1885
1945
|
}
|
|
1886
|
-
function
|
|
1946
|
+
function Wn(t) {
|
|
1887
1947
|
if (t instanceof T)
|
|
1888
1948
|
return t;
|
|
1889
1949
|
if (t != null) {
|
|
1890
|
-
if (
|
|
1891
|
-
return
|
|
1892
|
-
if (
|
|
1893
|
-
return
|
|
1894
|
-
if (Ln(t))
|
|
1895
|
-
return Bn(t);
|
|
1896
|
-
if (xn(t))
|
|
1897
|
-
return lt(t);
|
|
1898
|
-
if ($n(t))
|
|
1899
|
-
return Kn(t);
|
|
1950
|
+
if (zn(t))
|
|
1951
|
+
return Qn(t);
|
|
1952
|
+
if (Vn(t))
|
|
1953
|
+
return Xn(t);
|
|
1900
1954
|
if (qn(t))
|
|
1901
|
-
return
|
|
1955
|
+
return eo(t);
|
|
1956
|
+
if (Hn(t))
|
|
1957
|
+
return pt(t);
|
|
1958
|
+
if (Kn(t))
|
|
1959
|
+
return to(t);
|
|
1960
|
+
if (Zn(t))
|
|
1961
|
+
return ro(t);
|
|
1902
1962
|
}
|
|
1903
|
-
throw
|
|
1963
|
+
throw Yn(t);
|
|
1904
1964
|
}
|
|
1905
|
-
function
|
|
1965
|
+
function Qn(t) {
|
|
1906
1966
|
return new T(function(r) {
|
|
1907
1967
|
var e = t[_e]();
|
|
1908
1968
|
if (w(e.subscribe))
|
|
@@ -1910,27 +1970,27 @@ function Hn(t) {
|
|
|
1910
1970
|
throw new TypeError("Provided object does not correctly implement Symbol.observable");
|
|
1911
1971
|
});
|
|
1912
1972
|
}
|
|
1913
|
-
function
|
|
1973
|
+
function Xn(t) {
|
|
1914
1974
|
return new T(function(r) {
|
|
1915
1975
|
for (var e = 0; e < t.length && !r.closed; e++)
|
|
1916
1976
|
r.next(t[e]);
|
|
1917
1977
|
r.complete();
|
|
1918
1978
|
});
|
|
1919
1979
|
}
|
|
1920
|
-
function
|
|
1980
|
+
function eo(t) {
|
|
1921
1981
|
return new T(function(r) {
|
|
1922
1982
|
t.then(function(e) {
|
|
1923
1983
|
r.closed || (r.next(e), r.complete());
|
|
1924
1984
|
}, function(e) {
|
|
1925
1985
|
return r.error(e);
|
|
1926
|
-
}).then(null,
|
|
1986
|
+
}).then(null, dt);
|
|
1927
1987
|
});
|
|
1928
1988
|
}
|
|
1929
|
-
function
|
|
1989
|
+
function to(t) {
|
|
1930
1990
|
return new T(function(r) {
|
|
1931
1991
|
var e, n;
|
|
1932
1992
|
try {
|
|
1933
|
-
for (var i =
|
|
1993
|
+
for (var i = $(t), s = i.next(); !s.done; s = i.next()) {
|
|
1934
1994
|
var a = s.value;
|
|
1935
1995
|
if (r.next(a), r.closed)
|
|
1936
1996
|
return;
|
|
@@ -1947,24 +2007,24 @@ function Kn(t) {
|
|
|
1947
2007
|
r.complete();
|
|
1948
2008
|
});
|
|
1949
2009
|
}
|
|
1950
|
-
function
|
|
2010
|
+
function pt(t) {
|
|
1951
2011
|
return new T(function(r) {
|
|
1952
|
-
|
|
2012
|
+
no(t, r).catch(function(e) {
|
|
1953
2013
|
return r.error(e);
|
|
1954
2014
|
});
|
|
1955
2015
|
});
|
|
1956
2016
|
}
|
|
1957
|
-
function
|
|
1958
|
-
return
|
|
2017
|
+
function ro(t) {
|
|
2018
|
+
return pt(Gn(t));
|
|
1959
2019
|
}
|
|
1960
|
-
function
|
|
2020
|
+
function no(t, r) {
|
|
1961
2021
|
var e, n, i, s;
|
|
1962
|
-
return
|
|
2022
|
+
return vn(this, void 0, void 0, function() {
|
|
1963
2023
|
var a, c;
|
|
1964
|
-
return
|
|
2024
|
+
return st(this, function(l) {
|
|
1965
2025
|
switch (l.label) {
|
|
1966
2026
|
case 0:
|
|
1967
|
-
l.trys.push([0, 5, 6, 11]), e =
|
|
2027
|
+
l.trys.push([0, 5, 6, 11]), e = En(t), l.label = 1;
|
|
1968
2028
|
case 1:
|
|
1969
2029
|
return [4, e.next()];
|
|
1970
2030
|
case 2:
|
|
@@ -1995,7 +2055,7 @@ function Zn(t, r) {
|
|
|
1995
2055
|
});
|
|
1996
2056
|
});
|
|
1997
2057
|
}
|
|
1998
|
-
function
|
|
2058
|
+
function oo(t, r, e, n, i) {
|
|
1999
2059
|
n === void 0 && (n = 0), i === void 0 && (i = !1);
|
|
2000
2060
|
var s = r.schedule(function() {
|
|
2001
2061
|
e(), i ? t.add(this.schedule(null, n)) : this.unsubscribe();
|
|
@@ -2003,7 +2063,7 @@ function Gn(t, r, e, n, i) {
|
|
|
2003
2063
|
if (t.add(s), !i)
|
|
2004
2064
|
return s;
|
|
2005
2065
|
}
|
|
2006
|
-
function
|
|
2066
|
+
function io(t, r) {
|
|
2007
2067
|
var e = w(t) ? t : function() {
|
|
2008
2068
|
return t;
|
|
2009
2069
|
}, n = function(i) {
|
|
@@ -2011,12 +2071,12 @@ function Wn(t, r) {
|
|
|
2011
2071
|
};
|
|
2012
2072
|
return new T(n);
|
|
2013
2073
|
}
|
|
2014
|
-
var
|
|
2074
|
+
var so = re(function(t) {
|
|
2015
2075
|
return function() {
|
|
2016
2076
|
t(this), this.name = "EmptyError", this.message = "no elements in sequence";
|
|
2017
2077
|
};
|
|
2018
2078
|
});
|
|
2019
|
-
function
|
|
2079
|
+
function ao(t, r) {
|
|
2020
2080
|
return new Promise(function(e, n) {
|
|
2021
2081
|
var i = !1, s;
|
|
2022
2082
|
t.subscribe({
|
|
@@ -2025,48 +2085,48 @@ function Xn(t, r) {
|
|
|
2025
2085
|
},
|
|
2026
2086
|
error: n,
|
|
2027
2087
|
complete: function() {
|
|
2028
|
-
i ? e(s) : n(new
|
|
2088
|
+
i ? e(s) : n(new so());
|
|
2029
2089
|
}
|
|
2030
2090
|
});
|
|
2031
2091
|
});
|
|
2032
2092
|
}
|
|
2033
|
-
function
|
|
2093
|
+
function co(t) {
|
|
2034
2094
|
return t instanceof Date && !isNaN(t);
|
|
2035
2095
|
}
|
|
2036
|
-
var
|
|
2096
|
+
var uo = re(function(t) {
|
|
2037
2097
|
return function(e) {
|
|
2038
2098
|
e === void 0 && (e = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = e;
|
|
2039
2099
|
};
|
|
2040
2100
|
});
|
|
2041
|
-
function
|
|
2042
|
-
var e =
|
|
2101
|
+
function lo(t, r) {
|
|
2102
|
+
var e = co(t) ? { first: t } : typeof t == "number" ? { each: t } : t, n = e.first, i = e.each, s = e.with, a = s === void 0 ? fo : s, c = e.scheduler, l = c === void 0 ? $n : c, u = e.meta, d = u === void 0 ? null : u;
|
|
2043
2103
|
if (n == null && i == null)
|
|
2044
2104
|
throw new TypeError("No timeout provided.");
|
|
2045
|
-
return
|
|
2046
|
-
var
|
|
2047
|
-
p =
|
|
2105
|
+
return jn(function(h, _) {
|
|
2106
|
+
var f, p, y = null, j = 0, Y = function(ne) {
|
|
2107
|
+
p = oo(_, l, function() {
|
|
2048
2108
|
try {
|
|
2049
|
-
|
|
2050
|
-
meta:
|
|
2051
|
-
lastValue:
|
|
2052
|
-
seen:
|
|
2053
|
-
})).subscribe(
|
|
2054
|
-
} catch (
|
|
2055
|
-
|
|
2109
|
+
f.unsubscribe(), Wn(a({
|
|
2110
|
+
meta: d,
|
|
2111
|
+
lastValue: y,
|
|
2112
|
+
seen: j
|
|
2113
|
+
})).subscribe(_);
|
|
2114
|
+
} catch (ht) {
|
|
2115
|
+
_.error(ht);
|
|
2056
2116
|
}
|
|
2057
2117
|
}, ne);
|
|
2058
2118
|
};
|
|
2059
|
-
|
|
2060
|
-
p == null || p.unsubscribe(),
|
|
2119
|
+
f = h.subscribe(Mn(_, function(ne) {
|
|
2120
|
+
p == null || p.unsubscribe(), j++, _.next(y = ne), i > 0 && Y(i);
|
|
2061
2121
|
}, void 0, void 0, function() {
|
|
2062
|
-
p != null && p.closed || p == null || p.unsubscribe(),
|
|
2063
|
-
})), !
|
|
2122
|
+
p != null && p.closed || p == null || p.unsubscribe(), y = null;
|
|
2123
|
+
})), !j && Y(n != null ? typeof n == "number" ? n : +n - l.now() : i);
|
|
2064
2124
|
});
|
|
2065
2125
|
}
|
|
2066
|
-
function
|
|
2067
|
-
throw new
|
|
2126
|
+
function fo(t) {
|
|
2127
|
+
throw new uo(t);
|
|
2068
2128
|
}
|
|
2069
|
-
class
|
|
2129
|
+
class G {
|
|
2070
2130
|
constructor() {
|
|
2071
2131
|
this.set = (r) => {
|
|
2072
2132
|
if (this._current.status === "success")
|
|
@@ -2097,20 +2157,20 @@ class J {
|
|
|
2097
2157
|
}, this.waitForLoad = (r) => {
|
|
2098
2158
|
if (this._current.status === "success") return Promise.resolve(this._current.loadedValue);
|
|
2099
2159
|
if (this._current.status === "error") return Promise.reject(this._current.error);
|
|
2100
|
-
this._current.status !== "initial" &&
|
|
2160
|
+
this._current.status !== "initial" && Xe(this._current);
|
|
2101
2161
|
const e = {
|
|
2102
2162
|
first: r.timeoutSec * 1e3,
|
|
2103
|
-
with: () =>
|
|
2163
|
+
with: () => io(() => new Error(r.timeoutErrMsg))
|
|
2104
2164
|
};
|
|
2105
|
-
return
|
|
2106
|
-
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new
|
|
2165
|
+
return ao(this._subject.pipe(lo(e)));
|
|
2166
|
+
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new ft();
|
|
2107
2167
|
}
|
|
2108
2168
|
get current() {
|
|
2109
2169
|
return this._current;
|
|
2110
2170
|
}
|
|
2111
2171
|
}
|
|
2112
|
-
const { log__:
|
|
2113
|
-
const e = new
|
|
2172
|
+
const { log__: po, err__: ho } = O("init-flows"), Te = (t, r) => {
|
|
2173
|
+
const e = new G();
|
|
2114
2174
|
return {
|
|
2115
2175
|
publisher: e,
|
|
2116
2176
|
initialize: async (n) => {
|
|
@@ -2118,22 +2178,22 @@ const { log__: oo, err__: io } = A("init-flows"), Te = (t, r) => {
|
|
|
2118
2178
|
if (e.current.isSuccess)
|
|
2119
2179
|
throw new Error("This flow has already been initialized.");
|
|
2120
2180
|
const i = await r(n);
|
|
2121
|
-
|
|
2181
|
+
po(`✔ ${t} flow initialized successfully. Result:`, i), e.set(i);
|
|
2122
2182
|
} catch (i) {
|
|
2123
|
-
|
|
2183
|
+
ho(`𝙭 ${t} flow initialization failed. Error:`, N(i), "Details:", i), e.throw(i, N(i));
|
|
2124
2184
|
}
|
|
2125
2185
|
}
|
|
2126
2186
|
};
|
|
2127
|
-
},
|
|
2187
|
+
}, mo = async (t, r, e) => {
|
|
2128
2188
|
await Promise.all(Object.values(t).map((n) => n.initialize({ context: r, formCallbacks: e })));
|
|
2129
|
-
},
|
|
2189
|
+
}, yo = () => ({
|
|
2130
2190
|
// 💡 Add new init flows here
|
|
2131
2191
|
// Stripe PR
|
|
2132
|
-
stripePR: Te("Stripe PR",
|
|
2192
|
+
stripePR: Te("Stripe PR", U.stripePR.init),
|
|
2133
2193
|
// Stripe Link
|
|
2134
|
-
stripeLink: Te("Stripe Link",
|
|
2194
|
+
stripeLink: Te("Stripe Link", U.stripeLink.init)
|
|
2135
2195
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2136
|
-
}), { err__:
|
|
2196
|
+
}), { err__: _o } = O("form-callbacks"), k = o.function().optional(), je = o.object({
|
|
2137
2197
|
onFocus: k,
|
|
2138
2198
|
onBlur: k,
|
|
2139
2199
|
onChange: k,
|
|
@@ -2145,14 +2205,14 @@ const { log__: oo, err__: io } = A("init-flows"), Te = (t, r) => {
|
|
|
2145
2205
|
onSetupPaymentMethodSuccess: k,
|
|
2146
2206
|
onCheckoutError: k,
|
|
2147
2207
|
onPaymentRequestLoad: k
|
|
2148
|
-
}),
|
|
2208
|
+
}), R = class R {
|
|
2149
2209
|
constructor() {
|
|
2150
2210
|
this.setCallbacks = (r) => {
|
|
2151
|
-
this._callbacks =
|
|
2152
|
-
const i =
|
|
2211
|
+
this._callbacks = R.createEmptyCallbacks(), Object.entries(r).forEach(([e, n]) => {
|
|
2212
|
+
const i = Ct(e, n ?? R.NOOP, _o);
|
|
2153
2213
|
this._callbacks[e] = i;
|
|
2154
2214
|
});
|
|
2155
|
-
}, this._callbacks =
|
|
2215
|
+
}, this._callbacks = R.createEmptyCallbacks();
|
|
2156
2216
|
}
|
|
2157
2217
|
/**
|
|
2158
2218
|
* Returns a read-only version of the callbacks object.
|
|
@@ -2161,28 +2221,28 @@ const { log__: oo, err__: io } = A("init-flows"), Te = (t, r) => {
|
|
|
2161
2221
|
return { ...this._callbacks };
|
|
2162
2222
|
}
|
|
2163
2223
|
};
|
|
2164
|
-
|
|
2165
|
-
},
|
|
2224
|
+
R.NOOP = () => {
|
|
2225
|
+
}, R.createEmptyCallbacks = () => {
|
|
2166
2226
|
const r = {};
|
|
2167
2227
|
return Object.keys(je.keyof().enum).forEach((e) => {
|
|
2168
|
-
r[e] =
|
|
2228
|
+
r[e] = R.NOOP;
|
|
2169
2229
|
}), r;
|
|
2170
|
-
},
|
|
2171
|
-
const e = new
|
|
2230
|
+
}, R.fromObject = (r) => {
|
|
2231
|
+
const e = new R();
|
|
2172
2232
|
return e.setCallbacks(je.parse(r)), e;
|
|
2173
2233
|
};
|
|
2174
|
-
let le =
|
|
2175
|
-
class
|
|
2234
|
+
let le = R;
|
|
2235
|
+
class go {
|
|
2176
2236
|
constructor(r, e, n, i) {
|
|
2177
2237
|
this.handleMessage = (s) => {
|
|
2178
2238
|
if (!s.source)
|
|
2179
2239
|
throw new Error("No source found");
|
|
2180
2240
|
if (Me(s.origin) !== Me(this.baseUrl) || typeof s.data == "object" && s.data.penpal)
|
|
2181
2241
|
return;
|
|
2182
|
-
const a =
|
|
2242
|
+
const a = ur(JSON.parse(s.data));
|
|
2183
2243
|
if (!this.validateEvent(a)) return;
|
|
2184
|
-
const { elementId: l, payload: u } = a,
|
|
2185
|
-
switch (
|
|
2244
|
+
const { elementId: l, payload: u } = a, d = u.type;
|
|
2245
|
+
switch (d) {
|
|
2186
2246
|
case "LAYOUT":
|
|
2187
2247
|
this.internalCallbacks.setFormHeight(u.height ? `${u.height}px` : "100%");
|
|
2188
2248
|
break;
|
|
@@ -2205,23 +2265,23 @@ class uo {
|
|
|
2205
2265
|
this.formCallbacks.get.onValidationError(u.elementType, u.errors, l);
|
|
2206
2266
|
break;
|
|
2207
2267
|
default:
|
|
2208
|
-
console.warn("[form] Unhandled event type:",
|
|
2268
|
+
console.warn("[form] Unhandled event type:", d);
|
|
2209
2269
|
}
|
|
2210
2270
|
}, this.validateEvent = (s) => s.formId !== this.formId || !s.elementId ? (console.log("[OJS] formId", this.formId, s.formId), console.warn("[form] Ignoring unknown event:", s), !1) : this.nonces.has(s.nonce) ? (console.warn("[form] Ignoring duplicate event:", s), !1) : (this.nonces.add(s.nonce), !0), this.eventTargets = {}, this.nonces = /* @__PURE__ */ new Set(), this.formId = r, this.baseUrl = e, this.formCallbacks = n, this.internalCallbacks = i;
|
|
2211
2271
|
}
|
|
2212
2272
|
}
|
|
2213
2273
|
const Me = (t) => new URL(t).origin;
|
|
2214
|
-
async function
|
|
2215
|
-
const n = await
|
|
2274
|
+
async function bo(t, r) {
|
|
2275
|
+
const n = await xe({
|
|
2216
2276
|
iframe: t,
|
|
2217
2277
|
debug: !1,
|
|
2218
2278
|
childOrigin: r
|
|
2219
|
-
}).promise, i = await
|
|
2220
|
-
if (!
|
|
2279
|
+
}).promise, i = await lr(n);
|
|
2280
|
+
if (!dr(n, i))
|
|
2221
2281
|
throw new Error("Got invalid CDE connection object");
|
|
2222
2282
|
return n;
|
|
2223
2283
|
}
|
|
2224
|
-
class
|
|
2284
|
+
class vo {
|
|
2225
2285
|
constructor() {
|
|
2226
2286
|
this.connections = /* @__PURE__ */ new Map();
|
|
2227
2287
|
}
|
|
@@ -2238,7 +2298,7 @@ class fo {
|
|
|
2238
2298
|
return this.connections;
|
|
2239
2299
|
}
|
|
2240
2300
|
}
|
|
2241
|
-
const
|
|
2301
|
+
const wo = (t, r, e) => {
|
|
2242
2302
|
const { stripePR: n } = t;
|
|
2243
2303
|
n.publisher.subscribe((i) => {
|
|
2244
2304
|
if (i.isSuccess) {
|
|
@@ -2261,37 +2321,37 @@ const po = (t, r, e) => {
|
|
|
2261
2321
|
e.get.onPaymentRequestLoad(l);
|
|
2262
2322
|
}
|
|
2263
2323
|
});
|
|
2264
|
-
}, Le = (t, r, e, n, i) =>
|
|
2324
|
+
}, Le = (t, r, e, n, i) => U.stripePR.run({
|
|
2265
2325
|
context: e,
|
|
2266
|
-
checkoutPaymentMethod:
|
|
2326
|
+
checkoutPaymentMethod: it(e.checkoutPaymentMethods, t),
|
|
2267
2327
|
nonCdeFormInputs: de(e.formDiv),
|
|
2268
2328
|
formCallbacks: n,
|
|
2269
2329
|
customParams: { provider: t, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
|
|
2270
2330
|
initResult: r
|
|
2271
|
-
}),
|
|
2331
|
+
}), De = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: M, err__: se } = O("op-form"), A = class A {
|
|
2272
2332
|
constructor(r) {
|
|
2273
|
-
this.cdeLoadEvent = new
|
|
2333
|
+
this.cdeLoadEvent = new G(), this.anyCdeConn = new G(), this.context = new G(), this.initFlows = yo(), this.startFormInit = async () => {
|
|
2274
2334
|
try {
|
|
2275
|
-
|
|
2335
|
+
M("Initializing OpenPay form:"), M("├ Waiting for CDE load event...");
|
|
2276
2336
|
const e = await this.cdeLoadEvent.waitForLoad({
|
|
2277
2337
|
timeoutSec: 120,
|
|
2278
|
-
timeoutErrMsg:
|
|
2338
|
+
timeoutErrMsg: De
|
|
2279
2339
|
});
|
|
2280
|
-
|
|
2340
|
+
M("├ CDE load event received"), M("├ Waiting for CDE connection...");
|
|
2281
2341
|
const n = await this.anyCdeConn.waitForLoad({
|
|
2282
2342
|
timeoutSec: 120,
|
|
2283
|
-
timeoutErrMsg:
|
|
2343
|
+
timeoutErrMsg: De
|
|
2284
2344
|
});
|
|
2285
|
-
|
|
2286
|
-
const i =
|
|
2345
|
+
M("├ CDE connection received"), M("├ Creating OJS context, setting up handlers...");
|
|
2346
|
+
const i = A.buildOjsFlowContext(
|
|
2287
2347
|
this.config,
|
|
2288
2348
|
e,
|
|
2289
2349
|
n,
|
|
2290
2350
|
this.getFormDiv()
|
|
2291
2351
|
);
|
|
2292
|
-
this.context.set(i),
|
|
2352
|
+
this.context.set(i), wo(this.initFlows, i, this.formCallbacks), M("├ Starting OJS init flows..."), await mo(this.initFlows, i, this.formCallbacks), this.formCallbacks.get.onLoad(e.totalAmountAtoms, e.currency), M("╰ Done initializing OJS flows.");
|
|
2293
2353
|
} catch (e) {
|
|
2294
|
-
const n =
|
|
2354
|
+
const n = N(e);
|
|
2295
2355
|
se("╰ Error initializing OP form:", n), this.formCallbacks.get.onLoadError(n);
|
|
2296
2356
|
}
|
|
2297
2357
|
}, this.setFormHeight = (e) => {
|
|
@@ -2304,7 +2364,7 @@ const po = (t, r, e) => {
|
|
|
2304
2364
|
this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(e), e);
|
|
2305
2365
|
}, this.createElement = (e, n = {}) => {
|
|
2306
2366
|
if (!this.config) throw new Error("OpenPay form not initialized");
|
|
2307
|
-
const i =
|
|
2367
|
+
const i = kt.parse(e), s = document.createElement("iframe"), a = this.buildQueryString(n);
|
|
2308
2368
|
s.name = `${i}-element`;
|
|
2309
2369
|
const c = new URL(`/app/v1/${s.name}/`, this.config.baseUrl);
|
|
2310
2370
|
return c.search = a.toString(), s.src = c.href, s.style.border = "none", s.style.width = "100%", this.registerIframe(i, s);
|
|
@@ -2318,16 +2378,16 @@ const po = (t, r, e) => {
|
|
|
2318
2378
|
}
|
|
2319
2379
|
};
|
|
2320
2380
|
return this.connectToElement({ type: i.type, node: i.node }), this.registeredElements || (this.registeredElements = {
|
|
2321
|
-
[
|
|
2322
|
-
[
|
|
2323
|
-
[
|
|
2324
|
-
[
|
|
2381
|
+
[F.CARD]: void 0,
|
|
2382
|
+
[F.CARD_NUMBER]: void 0,
|
|
2383
|
+
[F.CARD_EXPIRY]: void 0,
|
|
2384
|
+
[F.CARD_CVC]: void 0
|
|
2325
2385
|
}), this.registeredElements[e] = i, i;
|
|
2326
2386
|
}, this.buildQueryString = (e) => {
|
|
2327
2387
|
const n = new URLSearchParams();
|
|
2328
|
-
return n.append("referer", this.referrer), n.append("formId", this.formId), e.styles && n.append("styles",
|
|
2388
|
+
return n.append("referer", this.referrer), n.append("formId", this.formId), e.styles && n.append("styles", cr(e.styles)), n.append("secureToken", this.config.checkoutSecureToken), n;
|
|
2329
2389
|
}, this.connectToElement = (e) => {
|
|
2330
|
-
|
|
2390
|
+
bo(e.node).then((n) => {
|
|
2331
2391
|
this.connectionManager.addConnection(e.type, n), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(n);
|
|
2332
2392
|
}).catch((n) => se("[FORM] Error connecting to CDE iframe", n));
|
|
2333
2393
|
}, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
|
|
@@ -2336,9 +2396,9 @@ const po = (t, r, e) => {
|
|
|
2336
2396
|
se("Please wait for the form to finish loading before submitting.");
|
|
2337
2397
|
return;
|
|
2338
2398
|
}
|
|
2339
|
-
|
|
2399
|
+
U.commonCC.run({
|
|
2340
2400
|
context: e,
|
|
2341
|
-
checkoutPaymentMethod:
|
|
2401
|
+
checkoutPaymentMethod: it(e.checkoutPaymentMethods, "credit_card"),
|
|
2342
2402
|
nonCdeFormInputs: de(e.formDiv),
|
|
2343
2403
|
formCallbacks: this.formCallbacks,
|
|
2344
2404
|
customParams: {
|
|
@@ -2351,7 +2411,7 @@ const po = (t, r, e) => {
|
|
|
2351
2411
|
for (const e of Object.values(this.registeredElements ?? {}))
|
|
2352
2412
|
e && e.node.remove();
|
|
2353
2413
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
|
|
2354
|
-
},
|
|
2414
|
+
}, A.assignAsSingleton(this), this.ojsVersion = "0.1.17", this.ojsReleaseVersion = "0.1.17", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = le.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new vo(), this.eventHandler = new go(this.formId, this.baseUrl, this.formCallbacks, {
|
|
2355
2415
|
setFormHeight: this.setFormHeight,
|
|
2356
2416
|
onCdeLoaded: this.onCdeLoaded,
|
|
2357
2417
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -2361,21 +2421,21 @@ const po = (t, r, e) => {
|
|
|
2361
2421
|
return this.config.checkoutSecureToken;
|
|
2362
2422
|
}
|
|
2363
2423
|
};
|
|
2364
|
-
|
|
2365
|
-
if (
|
|
2424
|
+
A.ojsFlows = U, A.assignAsSingleton = (r) => {
|
|
2425
|
+
if (A.getInstance())
|
|
2366
2426
|
throw new Error("OpenPay instance already exists. Only one instance is allowed.");
|
|
2367
2427
|
window.ojs = r;
|
|
2368
|
-
},
|
|
2369
|
-
baseUrl: new URL(r.baseUrl ??
|
|
2428
|
+
}, A.getInstance = () => window.ojs ?? null, A.buildOjsFlowContext = (r, e, n, i) => ({
|
|
2429
|
+
baseUrl: new URL(r.baseUrl ?? mt).origin,
|
|
2370
2430
|
formDiv: i,
|
|
2371
2431
|
elementsSessionId: e.sessionId,
|
|
2372
2432
|
checkoutPaymentMethods: e.checkoutPaymentMethods,
|
|
2373
2433
|
anyCdeConnection: n,
|
|
2374
2434
|
customInitParams: r.customInitParams ?? {}
|
|
2375
2435
|
});
|
|
2376
|
-
let
|
|
2436
|
+
let Fe = A;
|
|
2377
2437
|
export {
|
|
2378
2438
|
m as FieldName,
|
|
2379
|
-
|
|
2439
|
+
Fe as OpenPayForm
|
|
2380
2440
|
};
|
|
2381
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1TdHJpcGVQclBNID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG0pID0+IHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoY29uZmlybVJlc3VsdC5lcnJvcikge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwiZmFpbFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gIH0gZWxzZSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJzdWNjZXNzXCIpO1xuICB9XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufTtcbmNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdFN0YXR1cyA9IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/LnN0YXR1cztcbiAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikge1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZCk7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgY29uZmlybVJlc3VsdC5zZXR1cEludGVudCk7XG4gIH0gZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NvbmZpcm1SZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgPz8gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICBjb25zdCBpbmNsdWRlZElucHV0cyA9IEFycmF5LmZyb20oZm9ybURpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pO1xuICBjb25zdCBleHRyYURhdGEgPSBpbmNsdWRlZElucHV0cy5yZWR1Y2UoKGFjYywgaW5wdXQpID0+IHtcbiAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgaWYgKCFrZXkpIHJldHVybiBhY2M7XG4gICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogaW5wdXQudmFsdWUgfTtcbiAgfSwge30pO1xuICByZXR1cm4gZXh0cmFEYXRhO1xufTtcbmNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBFbGVtZW50RXZlbnQucGFyc2UoZXZlbnREYXRhKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBldmVudERhdGEsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCA9IGFzeW5jIChvYmopID0+IHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgIW9iaikgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHBpbmcgPSB7IHR5cGU6IFwicGluZ1wiIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2JqLnNlbmQocGluZyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOmAsIGUpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGlzUmVzdWx0VmFsaWQgPSAob2JqLCBpc1ZhbGlkKSA9PiB7XG4gIHJldHVybiAhIW9iaiAmJiBpc1ZhbGlkO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgQ0RFUmVzcG9uc2VFcnJvciA9IHoub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHoubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnouZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwcmljZV9pZDogei5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHoubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIHF1YW50aXR5OiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHouYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lczogei5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6LmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHouc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufShFcnJvcik7XG5cbmNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIGNvbnN0IGZyaWVuZGx5TWVzc2FnZSA9IGAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgfVxuICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgcmV0dXJuIHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG59O1xuY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIHJldHVybiBDREVSZXNwb25zZUVycm9yLnNhZmVQYXJzZShyZXNwb25zZSkuc3VjY2Vzcztcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHJlcXVlc3QgfSwgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFBheW1lbnRGb3JtUHJlZmlsbCk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGVycm9yLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICByZXR1cm4gcmVzdWx0LnN0YXR1cztcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5cbmNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdGFydGVkPy4oKTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBlcnJfXyhlcnJvcik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNiwgZXJyX186IGVycl9fJDcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuY29uc3QgcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufTtcbmNvbnN0IGZpbmRDcG1NYXRjaGluZ1R5cGUgPSAoYWxsQ1BNcywgem9kTW9kZWwpID0+IHtcbiAgY29uc3QgY3BtID0gYWxsQ1BNcy5maW5kKChjcG0yKSA9PiB6b2RNb2RlbC5zYWZlUGFyc2UoY3BtMikuc3VjY2Vzcyk7XG4gIGlmICghY3BtKSB7XG4gICAgZXJyX18kNyhgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6YCwgYWxsQ1BNcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbGApO1xuICB9XG4gIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IFJlcXVpcmVkRm9ybUZpZWxkcy5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcGF5bG9hZC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJDYoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZC5kYXRhO1xufTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kNihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kNShgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBPSlNfU1RSSVBFX0xJTktfQlROX0lEID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCI7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbmNvbnN0IFN0cmlwZUxpbmtDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVMaW5rRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IGluaXRQYXJhbXMgPSBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBsb2dfXyQ0KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgbG9nX18kNChgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0obm9uQ2RlRm9ybUlucHV0cywgY3VzdG9tUGFyYW1zLnN0cmlwZVBNKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZFxuICAgIH0pO1xuICAgIGxvZ19fJDQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgbG9nX18kNChgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCBzdHlsZXMgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiO1xuXG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXN9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yM2RzU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4pO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gIHVybCxcbiAgYmFzZVVybFxufSkge1xuICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyk7XG4gICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGVsZW1lbnRzLmlmcmFtZSwgb25TdWNjZXNzLCBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbik7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgeyBsb2dfXzogc3RyaXBlTG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWNjXCIpO1xuY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kMyhg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGxvZ19fJDMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY3VzdG9tUGFyYW1zLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgIH0pO1xuICAgIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHNcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMyhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDMoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMyhg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMyhg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgIGxvZ19fJDMoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQzKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VOZXdGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMyhg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7c2hvdWxkVXNlTmV3Rmxvd31gKTtcbiAgICAgICAgICBsb2dfXyQzKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQzKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMyhg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQzKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDMoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7c2hvdWxkVXNlTmV3RmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhc2hvdWxkVXNlTmV3Rmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQzKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQ0KGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDQoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDMoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQyKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMihgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDIoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDIoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQzKGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kMihgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHByLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlUHJGbG93JDEgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGluaXRSZXN1bHRcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDIoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBpZiAoY3VzdG9tUGFyYW1zLnByb3ZpZGVyICE9PSBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMihgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICB9XG4gICAgbG9nX18kMihgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDIoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDIoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGxvZ19fJDIoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvclBSKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBsb2dfXyQyKGBDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uYCk7XG4gICAgYXdhaXQgY29uZmlybVN0cmlwZVByUE0obmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kMihgQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQyKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbUV2dCkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG1FdnQucGF5ZXJOYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBsb2dfXyQyKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3lcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHRydWUgO1xuICAgIGNvbnN0IG1hdGNoZXNQcm92aWRlciA9IGNwbS5wcm92aWRlciA9PT0gd2l0aFByb3ZpZGVyO1xuICAgIHJldHVybiBtYXRjaGVzUHJvY2Vzc29yICYmIG1hdGNoZXNQcm92aWRlcjtcbiAgfSk7XG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQxKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDIoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB9O1xufTtcblxuY29uc3QgeyBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fJDEpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNsYXNzIE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoZm9ybUlkLCBiYXNlVXJsLCBmb3JtQ2FsbGJhY2tzLCBpbnRlcm5hbENhbGxiYWNrcykge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5zb3VyY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgZm91bmRgKTtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gZXZlbnQuc291cmNlO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBldmVudFR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBldmVudERhdGEuZm9ybUlkKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBmb3JtQ2FsbGJhY2tzO1xuICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpbnRlcm5hbENhbGxiYWNrcztcbiAgfVxufVxuY29uc3QgZ2V0Q2xlYW5PcmlnaW4gPSAodXJsKSA9PiB7XG4gIHJldHVybiBuZXcgVVJMKHVybCkub3JpZ2luO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzID0gKGluaXRQckZsb3dzLCBjb250ZXh0LCBjYWxsYmFja3MpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUiB9ID0gaW5pdFByRmxvd3M7XG4gIHN0cmlwZVBSLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gcmVzdWx0LmxvYWRlZFZhbHVlO1xuICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjYWxsYmFja3MuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGZpbmFsU3RhdHVzKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgY29udGV4dCwgZm9ybUNhbGxiYWNrcywgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICBpbml0UmVzdWx0XG4gIH0pO1xufTtcblxuY29uc3QgR0VORVJJQ19DT05OX0VSUiA9IGBUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5gO1xuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtZm9ybVwiKTtcbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmluaXRGbG93cyA9IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMoKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgY2RlTG9hZGVkID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKTtcbiAgICAgICAgbG9nX18oXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGNkZUxvYWRlZCxcbiAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgIHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgbG9nX18oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIik7XG4gICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjZGVMb2FkZWQudG90YWxBbW91bnRBdG9tcywgY2RlTG9hZGVkLmN1cnJlbmN5KTtcbiAgICAgICAgbG9nX18oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChoZWlnaHQpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGVyck1zZykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZXJyTXNnKSwgZXJyTXNnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBFbGVtZW50VHlwZS5wYXJzZShlbGVtZW50VmFsdWUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnQgPSB0aGlzLnJlZ2lzdGVySWZyYW1lKHR5cGUsIGZyYW1lKTtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkRWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAodHlwZSwgZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpXG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogZWxlbWVudC50eXBlLCBub2RlOiBlbGVtZW50Lm5vZGUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICAgIGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKS50aGVuKChjb25uKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlbGVtZW50LnR5cGUsIGNvbm4pO1xuICAgICAgICBpZiAoIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuYW55Q2RlQ29ubi5zZXQoY29ubik7XG4gICAgICAgIH1cbiAgICAgIH0pLmNhdGNoKChlcnIpID0+IGVycl9fKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBlcnIpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9O1xuICAgIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgZXJyX18oXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgfTtcbiAgICBPcGVuUGF5Rm9ybS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKTtcbiAgICB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS4xNlwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuMS4xNlwiO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfTtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3QoY29uZmlnKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7d2luZG93LmNyeXB0by5yYW5kb21VVUlEKCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IHsgRmllbGROYW1lLCBPcGVuUGF5Rm9ybSB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBQUEsU0FBUztBQUNsQixPQUFPO0FBQ1AsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsT0FBVztBQUVsQixNQUFNQyxLQUFpQiw4QkFFakJDLEtBQTRCSixFQUFFLE9BQU87QUFBQSxFQUN6QyxNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLEtBQUtBLEVBQUUsTUFBTUEsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUN2QixLQUFLQSxFQUFFLE9BQU87QUFBQSxFQUNkLEtBQUtBLEVBQUUsT0FBTztBQUNoQixDQUFDLEdBQ0tLLEtBQWtDTCxFQUFFLE1BQU1JLEVBQXlCLEdBQ25FRSxLQUFnQk4sRUFBRSxPQUFPO0FBQUEsRUFDN0IsTUFB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RixLQUFLLGNBQWM7QUFBQSxFQUNyQjtBQUFBLEVBaUJBLElBQUksc0JBQXNCO0FBQ3hCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFhRjtBQTlCSXVDLEVBQUssV0FBV25ELEdBR2hCbUQsRUFBSyxvQkFBb0IsQ0FBQ2lCLE1BQVM7QUFDakMsTUFBSWpCLEVBQVksWUFBWTtBQUMxQixVQUFNLElBQUksTUFBTSxnRUFBZ0U7QUFFbEYsU0FBTyxNQUFTaUI7QUFDbEIsR0FHQWpCLEVBQUssY0FBYyxNQUNWLE9BQU8sT0FBVSxNQU8xQkEsRUFBSyxzQkFBc0IsQ0FBQ3hPLEdBQVEwUCxHQUFrQkMsR0FBa0JDLE9BQy9EO0FBQUEsRUFDTCxTQUFTLElBQUksSUFBSTVQLEVBQU8sV0FBVzZQLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUFEO0FBQUEsRUFDQSxtQkFBbUJGLEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBQztBQUFBLEVBQ0Esa0JBQWtCM1AsRUFBTyxvQkFBb0IsQ0FBQztBQUNoRDtBQTFMTixJQUFNOFAsS0FBTnRCOyIsCiAgIm5hbWVzIjogWyJ6IiwgImNvbm5lY3RUb0NoaWxkIiwgImNoYWxrIiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAiZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZm4iLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgInZhbHVlIiwgImZpZWxkTmFtZSIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgInJlc29sdmUiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAicmVqZWN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3VtIiwgImFyciIsICJhIiwgImIiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIkNkZUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJnZXRQcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAicGF5bG9hZCIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yM2RzU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJjb25uZWN0aW9uT2JqIiwgImFzc2VydE5ldmVyIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAicGFyYW1zIiwgImZsb3dSZXN1bHQiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAibG9nX18kNiIsICJlcnJfXyQ3IiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQ0IiwgImVycl9fJDUiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiY29udGV4dCIsICJmb3JtQ2FsbGJhY2tzIiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJhbnlDZGVDb25uZWN0aW9uIiwgInByZWZpbGwiLCAiaW5pdGlhbFByZXZpZXciLCAiZWxlbWVudHMiLCAiZXhwcmVzc0NoZWNrb3V0RWxlbWVudCIsICJtb3VudEJ1dHRvbiIsICJkaXNtb3VudEJ1dHRvbiIsICJldmVudCIsICJPanNGbG93cyIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJpZCIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiYmFzZVVybCIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAibG9nX18kMyIsICJlcnJfXyQ0IiwgInN0cmlwZUxvZ19fIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInNob3VsZFVzZU5ld0Zsb3ciLCAic3RhcnRQZlJlc3VsdCIsICJjb21tb25DQzNEU0Zsb3ciLCAic3RyaXBlQ0MzRFNGbG93IiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDIiLCAiZXJyX18kMyIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgInJlamVjdGVkIiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgImxvZ19fJDEiLCAiZXJyX18kMiIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJwdWJsaXNoZXIiLCAiaW5pdFBhcmFtcyIsICJpbml0UmVzdWx0IiwgImdldEVycm9yTWVzc2FnZSIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJjb250ZXh0IiwgImZvcm1DYWxsYmFja3MiLCAiZmxvdyIsICJjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzIiwgIk9qc0Zsb3dzIiwgImVycl9fJDEiLCAiT3B0aW9uYWxGbiIsICJ6IiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJiYXNlVXJsIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImV2ZW50IiwgImdldENsZWFuT3JpZ2luIiwgImV2ZW50RGF0YSIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJldmVudFR5cGUiLCAidXJsIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiY29ubmVjdFRvQ2hpbGQiLCAiaXNWYWxpZE9iamVjdCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgImlzUmVzdWx0VmFsaWQiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAiY29ubmVjdGlvbiIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgInJlc3VsdCIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAicHJvdmlkZXIiLCAicGFyYW1zIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiZXJyX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUxvYWRlZCIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZXJyb3JNZXNzYWdlIiwgImhlaWdodCIsICJlbGVtZW50IiwgImVsZW1lbnRWYWx1ZSIsICJvcHRpb25zIiwgInR5cGUiLCAiRWxlbWVudFR5cGUiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAic2VsZWN0b3IiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiZm9ybSIsICJjZGVMb2FkZWRQYXlsb2FkIiwgImFueUNkZUNvbm5lY3Rpb24iLCAiZm9ybURpdiIsICJGUkFNRV9CQVNFX1VSTCIsICJPcGVuUGF5Rm9ybSJdCn0K
|
|
2441
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnZhciBUaHJlZURTU3RhdHVzID0gLyogQF9fUFVSRV9fICovICgoVGhyZWVEU1N0YXR1czIpID0+IHtcbiAgVGhyZWVEU1N0YXR1czJbXCJTVUNDRVNTXCJdID0gXCJzdWNjZXNzXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiRkFJTFVSRVwiXSA9IFwiZmFpbHVyZVwiO1xuICBUaHJlZURTU3RhdHVzMltcIkNBTkNFTExFRFwiXSA9IFwiY2FuY2VsbGVkXCI7XG4gIHJldHVybiBUaHJlZURTU3RhdHVzMjtcbn0pKFRocmVlRFNTdGF0dXMgfHwge30pO1xuY29uc3QgUGluZzNEU1N0YXR1c1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogei5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHouc3RyaW5nKClcbn0pO1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbnoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gIH1cbiAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgcmVzcG9uc2VTY2hlbWEsIFwiQWN0dWFsOlwiLCByZXNwb25zZSk7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3KGNkZUNvbm4sIHtcbiAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgfSk7XG4gIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2N1cnJlbmNpZXMuc2l6ZX1gKTtcbiAgfVxuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBzdW0oY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeSxcbiAgICBhbW91bnRBdG9tXG4gIH07XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50ID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBpc1NldHVwTW9kZSwgcHJvbW9Db2RlKSA9PiB7XG4gIGlmIChpc1NldHVwTW9kZSkge1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGNoZWNrb3V0UHJldmlldy5hbW91bnRBdG9tLCBjdXJyZW5jeTogY2hlY2tvdXRQcmV2aWV3LmN1cnJlbmN5IH07XG4gIH1cbn07XG5jb25zdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zID0gYXN5bmMgKGFsbENkZUNvbm5lY3Rpb25zLCBwYXlsb2FkKSA9PiB7XG4gIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgIChjZGVDb25uKSA9PiBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkIH0sIFRva2VuaXplQ2FyZFJlc3BvbnNlKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlcztcbn07XG5jb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGNoZWNrb3V0Q2FyZEVsZW1lbnRzOlwiLCBlcnJvciwgSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IHNldHVwQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQgfSwgU2V0dXBDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xufTtcbmNvbnN0IENERV9QT0xMSU5HX0lOVEVSVkFMID0gMWUzO1xuY29uc3QgcGluZ0NkZUZvcjNkc1N0YXR1cyA9IGFzeW5jIChpZnJhbWUsIGNoaWxkT3JpZ2luKSA9PiB7XG4gIGNvbnNvbGUubG9nKGNoaWxkT3JpZ2luKTtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgdGltZW91dDogQ0RFX1BPTExJTkdfSU5URVJWQUwsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjb25uZWN0aW9uT2JqLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGVycl9fKGVycm9yKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0uZXJyb3IoYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ3LCBlcnJfXzogZXJyX18kOCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyQ4KGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gUmVxdWlyZWRGb3JtRmllbGRzLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgIGNvbnN0IGlzc3VlcyA9IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZChmb3JtYXR0ZWQpO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhpc3N1ZXMpKSB7XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kNyhgR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNgLCBpc3N1ZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBwYXlsb2FkLmRhdGE7XG59O1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyQ3KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ2KGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IE9KU19TVFJJUEVfTElOS19CVE5fSUQgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIjtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDUsIGVycl9fOiBlcnJfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1saW5rXCIpO1xuY29uc3QgU3RyaXBlTGlua0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUxpbmtGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgaW5pdFBhcmFtcyA9IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIGxvZ19fJDUoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kNShgQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uYCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgeyBlbGVtZW50cywgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVMaW5rQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBsb2dfXyQ1KGBDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uYCk7XG4gICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGluaXRQYXJhbXM/LmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBtb3VudEJ1dHRvbiA9ICgpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQubW91bnQoYCMke09KU19TVFJJUEVfTElOS19CVE5fSUR9YCk7XG4gICAgfTtcbiAgICBjb25zdCBkaXNtb3VudEJ1dHRvbiA9ICgpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQudW5tb3VudCgpO1xuICAgIH07XG4gICAgaWYgKGluaXRQYXJhbXM/LmRvTm90TW91bnRPbkluaXQpIHtcbiAgICAgIGxvZ19fJDUoYE5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNShgTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uYCk7XG4gICAgICBtb3VudEJ1dHRvbigpO1xuICAgIH1cbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ1KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIik7XG4gICAgICBpZiAoaW5pdFBhcmFtcz8ub3ZlcnJpZGVMaW5rU3VibWl0KSB7XG4gICAgICAgIGNvbnN0IHNob3VsZFN1Ym1pdCA9IGF3YWl0IGluaXRQYXJhbXMub3ZlcnJpZGVMaW5rU3VibWl0KCk7XG4gICAgICAgIGlmICghc2hvdWxkU3VibWl0KSB7XG4gICAgICAgICAgbG9nX18kNShcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY29uZmlybVwiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDUoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGV2ZW50KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZXZlbnQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgIGVycl9fJDYoXCJlcnJvclwiLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kNShcInBheW1lbnRNZXRob2RcIiwgcmVzdWx0LnBheW1lbnRNZXRob2QpO1xuICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUxpbmtDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHJlc3VsdC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b24sXG4gICAgICAgIGRpc21vdW50QnV0dG9uLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZ2V0RWxlbWVudEJ5SWRBc3luYyhPSlNfU1RSSVBFX0xJTktfQlROX0lEKVxuICAgICAgfVxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVMaW5rRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgbG9nX18kNShgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0obm9uQ2RlRm9ybUlucHV0cywgY3VzdG9tUGFyYW1zLnN0cmlwZVBNKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kNShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZFxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNShgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNShgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgbG9nX18kNShgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCBzdHlsZXMgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiO1xuXG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXN9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yM2RzU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4pO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwgfSA9IHBhcmFtcztcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJDUoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJDQoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyQ1KGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5Qb2NreXQzZHNGbG93ID0gYXN5bmMgKGJhc2VVcmwsIGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyhlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdmF1bHRJZCxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB7IGxvZ19fOiBzdHJpcGVMb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDMoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQzKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7fVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJDMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCB0b2tlbml6ZUNhcmRSZXN1bHRzID0gYXdhaXQgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyhjdXN0b21QYXJhbXMuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzKHRva2VuaXplQ2FyZFJlc3VsdHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBsb2dfXyQzKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3ByZWZpbGwudG9rZW59XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXR1cENoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3Jlc3VsdC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQzKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQzKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2RlRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgICAgbG9nX18kMyhg4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd2ApO1xuICAgICAgICAgIGxvZ19fJDMoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQzKGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0YXJ0UGZSZXN1bHQgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICAgIGxvZ19fJDMoYOKUnCBQYXltZW50IGZsb3cgcmVzdWx0OmAsIHN0YXJ0UGZSZXN1bHQpO1xuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyQzKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ19fJDMoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDMoYOKUnCBQb2NreXQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNjUG1JZCA9IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQ7XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQzKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2NjUG1JZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDMoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kMyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQzKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAkeyFzaG91bGRVc2VTdHJpcGVGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcyxcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogc2hvdWxkVXNlU3RyaXBlRmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQzKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQ0KGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDQoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDMoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICBsb2dfXyQzKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG59O1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kMihgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDIoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQyKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQyKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kMyhgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDIoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQyKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDIoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZyk7XG4gICAgfVxuICAgIGxvZ19fJDIoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQyKGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQyKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQyKGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kMihgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDIoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kMihgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgc3RyaXBlUG1FdnQuc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG1FdnQuc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgbG9nX18kMihgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nKSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSxcbiAgICBjdXJyZW5jeTogYW1vdW50LmN1cnJlbmN5XG4gIH0pO1xufTtcbmNvbnN0IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7cmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIH1cbiAgcmV0dXJuIFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59O1xuXG5jb25zdCBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0ID0gKGNwbXMsIHdpdGhQcm92aWRlciwgd2l0aFByb2Nlc3NvcikgPT4ge1xuICBjb25zdCBtYXRjaGVzID0gY3Btcy5maWx0ZXIoKGNwbSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXNQcm9jZXNzb3IgPSB0cnVlIDtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMShg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQyKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQxKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0Q2xlYW5PcmlnaW4oZXZlbnQub3JpZ2luKSAhPT0gZ2V0Q2xlYW5PcmlnaW4odGhpcy5iYXNlVXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInBlbnBhbFwiXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKTtcbiAgICAgIGlmICghaXNWYWxpZCkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQsIHBheWxvYWQgfSA9IGV2ZW50RGF0YTtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IHBheWxvYWQudHlwZTtcbiAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQocGF5bG9hZC5oZWlnaHQgPyBgJHtwYXlsb2FkLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuY29udGV4dCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbml0Rmxvd3MgPSBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzKCk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nX18oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKTtcbiAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBhbnlDZGVDb25uID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBvanNDb250ZXh0ID0gT3BlblBheUZvcm0uYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBjZGVMb2FkZWQsXG4gICAgICAgICAgYW55Q2RlQ29ubixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KG9qc0NvbnRleHQpO1xuICAgICAgICBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgIGxvZ19fKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpO1xuICAgICAgICBhd2FpdCBzdGFydEFsbEluaXRGbG93cyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoY2RlTG9hZGVkLnRvdGFsQW1vdW50QXRvbXMsIGNkZUxvYWRlZC5jdXJyZW5jeSk7XG4gICAgICAgIGxvZ19fKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICAgIGVycl9fKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gICAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZGVkID0gKHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KHBheWxvYWQpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlcnJNc2cpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGVyck1zZyksIGVyck1zZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZWxlbWVudFZhbHVlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke2ZyYW1lLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nLnRvU3RyaW5nKCk7XG4gICAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFbGVtZW50ID0gdGhpcy5yZWdpc3RlcklmcmFtZSh0eXBlLCBmcmFtZSk7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZEVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKHR5cGUsIGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlOiBmcmFtZSxcbiAgICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbm9kZTogZWxlbWVudC5ub2RlIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgICBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSkudGhlbigoY29ubikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmFueUNkZUNvbm4uc2V0KGNvbm4pO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiBlcnJfXyhcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgZXJyKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIGVycl9fKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjEuMTdcIjtcbiAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjEuMTdcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMub2pzRmxvd3MgPSBPanNGbG93cztcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYXNzaWduQXNTaW5nbGV0b24gPSAoZm9ybSkgPT4ge1xuICAgICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgICB9XG4gICAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpbmRvd1tcIm9qc1wiXSA/PyBudWxsO1xuICAgIH07XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAoY29uZmlnLCBjZGVMb2FkZWRQYXlsb2FkLCBhbnlDZGVDb25uZWN0aW9uLCBmb3JtRGl2KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxuICAgICAgfTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB7IEZpZWxkTmFtZSwgT3BlblBheUZvcm0gfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUFBLFNBQVM7QUFDbEIsT0FBTztBQUNQLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLE9BQVc7QUFFbEIsTUFBTUMsS0FBaUIsOEJBRWpCQyxLQUE0QkosRUFBRSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBRSxPQUFPO0FBQUEsRUFDZixLQUFLQSxFQUFFLE1BQU1BLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDdkIsS0FBS0EsRUFBRSxPQUFPO0FBQUEsRUFDZCxLQUFLQSxFQUFFLE9BQU87QUFDaEIsQ0FBQyxHQUNLSyxLQUFrQ0wsRUFBRSxNQUFNSSxFQUF5QixHQUNuRUUsS0FBZ0JOLEVBQUUsT0FBTztBQUFBLEVBQzdCLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2Ys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QUFrQixHQUMvQyxLQUFLLGVBQWUsSUFBSXBCLEdBQXdCLEtBQUssUUFBUSxLQUFLLFNBQVMsS0FBSyxlQUFlO0FBQUEsTUFDN0YsZUFBZSxLQUFLO0FBQUEsTUFDcEIsYUFBYSxLQUFLO0FBQUEsTUFDbEIsZ0JBQWdCLEtBQUs7QUFBQSxJQUN2QixDQUFDLEdBQ0QsT0FBTyxpQkFBaUIsV0FBVyxLQUFLLGFBQWEsY0FBYyxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQzFGLEtBQUssY0FBYztBQUFBLEVBQ3JCO0FBQUEsRUFpQkEsSUFBSSxzQkFBc0I7QUFDeEIsV0FBTyxLQUFLLE9BQU87QUFBQSxFQUNyQjtBQWFGO0FBOUJJdUMsRUFBSyxXQUFXbkQsR0FHaEJtRCxFQUFLLG9CQUFvQixDQUFDaUIsTUFBUztBQUNqQyxNQUFJakIsRUFBWSxZQUFZO0FBQzFCLFVBQU0sSUFBSSxNQUFNLGdFQUFnRTtBQUVsRixTQUFPLE1BQVNpQjtBQUNsQixHQUdBakIsRUFBSyxjQUFjLE1BQ1YsT0FBTyxPQUFVLE1BTzFCQSxFQUFLLHNCQUFzQixDQUFDeE8sR0FBUTBQLEdBQWtCQyxHQUFrQkMsT0FDL0Q7QUFBQSxFQUNMLFNBQVMsSUFBSSxJQUFJNVAsRUFBTyxXQUFXNlAsRUFBYyxFQUFFO0FBQUEsRUFDbkQsU0FBQUQ7QUFBQSxFQUNBLG1CQUFtQkYsRUFBaUI7QUFBQSxFQUNwQyx3QkFBd0JBLEVBQWlCO0FBQUEsRUFDekMsa0JBQUFDO0FBQUEsRUFDQSxrQkFBa0IzUCxFQUFPLG9CQUFvQixDQUFDO0FBQ2hEO0FBMUxOLElBQU04UCxLQUFOdEI7IiwKICAibmFtZXMiOiBbInoiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRlJBTUVfQkFTRV9VUkwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJlIiwgIm9iaiIsICJlMiIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJFbGVtZW50VHlwZSIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkVsZW1lbnRFdmVudCIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgIlRocmVlRFNTdGF0dXMiLCAiVGhyZWVEU1N0YXR1czIiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAidmFsdWUiLCAiZmllbGROYW1lIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpIiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZUVsZW1lbnRzIiwgInN0cmlwZVB1YktleSIsICJlbGVtZW50c09wdGlvbnMiLCAic3RyaXBlIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsQW1vdW50QXRvbSIsICJjdXJyZW5jeSIsICJpc0Ftb3VudFBlbmRpbmciLCAiaXNMaW5rT25seSIsICJzdHJpcGVDdXJyZW5jeSIsICJ0aW1lb3V0TXMiLCAicmVzb2x2ZSIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJyZWplY3QiLCAiZXZ0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbSIsICJjb25maXJtUmVzdWx0IiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAicmVzdWx0U3RhdHVzIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAiaW5wdXQiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdW0iLCAiYXJyIiwgImEiLCAiYiIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiQ2RlRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgImNkZUNvbm4iLCAiZGF0YSIsICJyZXNwb25zZVNjaGVtYSIsICJpc0NERVJlc3BvbnNlRXJyb3IiLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgImdldFByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJhbW91bnRBdG9tIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3IzZHNTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiYXNzZXJ0TmV2ZXIiLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJwYXJhbXMiLCAiZmxvd1Jlc3VsdCIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJsb2dfXyQ3IiwgImVycl9fJDgiLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAibG9nX18kNiIsICJlcnJfXyQ3IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJPSlNfU1RSSVBFX0xJTktfQlROX0lEIiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJTdHJpcGVMaW5rQ3BtIiwgIlN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVMaW5rRmxvdyIsICJjb250ZXh0IiwgImZvcm1DYWxsYmFja3MiLCAiaW5pdFBhcmFtcyIsICJzdHJpcGVMaW5rQ3BtIiwgImFueUNkZUNvbm5lY3Rpb24iLCAicHJlZmlsbCIsICJpbml0aWFsUHJldmlldyIsICJlbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImV2ZW50IiwgIk9qc0Zsb3dzIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImN1c3RvbVBhcmFtcyIsICJtZXJnZWRJbnB1dHMiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJub25DZGVGb3JtRmllbGRzIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJvdXJFeGlzdGluZ1BtSWQiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImZvcm1JbnB1dHMiLCAiX2UiLCAiaW5wdXRzIiwgInBheWVyRmlyc3ROYW1lIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJwYXllckxhc3ROYW1lIiwgImlkIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAic3RhcnRQb2xsaW5nIiwgIm9uU3VjY2VzcyIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAiaGFuZGxlRXZlbnRzIiwgImhhbmRsZUNhbmNlbCIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJiYXNlVXJsIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCIsICJsb2dfXyQ0IiwgImVycl9fJDUiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAiZXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXN1bHQiLCAiZnJpZW5kbHlFcnIiLCAiZGV2RXJyIiwgInBhcnNlVmF1bHRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAidmF1bHRJZCIsICJlcnJNc2ciLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAiaGVhZGVycyIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAic3RyaXBlTG9nX18iLCAicnVuQ29tbW9uQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJzdGFydFBmUmVzdWx0IiwgInNob3VsZFVzZVN0cmlwZUZsb3ciLCAic3RyaXBlQ0MzRFNGbG93IiwgImNvbW1vbkNDM0RTRmxvdyIsICJjY1BtSWQiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlQWN0aW9uIiwgImFjdGlvbiIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjb21tb25BY3Rpb24iLCAibG9nX18kMiIsICJlcnJfXyQzIiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbUV2dCIsICJhbW91bnQiLCAiaXNQZW5kaW5nIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAiaSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAibG9nX18kMSIsICJlcnJfXyQyIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJpbml0UGFyYW1zIiwgImluaXRSZXN1bHQiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImNvbnRleHQiLCAiZm9ybUNhbGxiYWNrcyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiT2pzRmxvd3MiLCAiZXJyX18kMSIsICJPcHRpb25hbEZuIiwgInoiLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImJhc2VVcmwiLCAiaW50ZXJuYWxDYWxsYmFja3MiLCAiZXZlbnQiLCAiZ2V0Q2xlYW5PcmlnaW4iLCAiZXZlbnREYXRhIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImVsZW1lbnRJZCIsICJwYXlsb2FkIiwgImV2ZW50VHlwZSIsICJ1cmwiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJjb25uZWN0VG9DaGlsZCIsICJpc1ZhbGlkT2JqZWN0IiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAiaXNSZXN1bHRWYWxpZCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJjb25uZWN0aW9uIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAicmVzdWx0IiwgImNhbkFwcGxlUGF5IiwgImNhbkdvb2dsZVBheSIsICJmaW5hbFN0YXR1cyIsICJ1c2VyUGFyYW1zIiwgInJ1blN0cmlwZVByRmxvdyIsICJwcm92aWRlciIsICJwYXJhbXMiLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJlcnJfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlTG9hZGVkIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlcnJvck1lc3NhZ2UiLCAiaGVpZ2h0IiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgIm9wdGlvbnMiLCAidHlwZSIsICJFbGVtZW50VHlwZSIsICJmcmFtZSIsICJxdWVyeVN0cmluZyIsICJzZWxlY3RvciIsICJFbGVtZW50VHlwZUVudW0iLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAiY29ubiIsICJmb3JtIiwgImNkZUxvYWRlZFBheWxvYWQiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJmb3JtRGl2IiwgIkZSQU1FX0JBU0VfVVJMIiwgIk9wZW5QYXlGb3JtIl0KfQo=
|