picocode 0.9.208 → 0.9.210
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/daemon.js +12 -5
- package/dist/pico-dictate +0 -0
- package/dist/pico.js +68 -38
- package/package.json +2 -2
package/dist/pico.js
CHANGED
|
@@ -11,6 +11,8 @@ var __export = (target, all) => {
|
|
|
11
11
|
// src/model-runtime.js
|
|
12
12
|
import { discoverKeys, applyKeys, keyHint } from "picocode-core/keys.js";
|
|
13
13
|
import { loadCatalog, extractModels, adhocModel } from "picocode-core/catalog.js";
|
|
14
|
+
import { loadXAIModels } from "picocode-core/xai-models.js";
|
|
15
|
+
import { xaiConnected, xaiCredentials } from "picocode-core/xai-auth.js";
|
|
14
16
|
import { loadCodexModels } from "picocode-core/codex-models.js";
|
|
15
17
|
import { loadOpenRouterModels } from "picocode-core/openrouter-models.js";
|
|
16
18
|
import { openaiConnected, openaiCredentials } from "picocode-core/openai-auth.js";
|
|
@@ -23,10 +25,12 @@ function codexContext(catalogData, model) {
|
|
|
23
25
|
async function buildModels({ providers: providers2, force }) {
|
|
24
26
|
const has = (provider) => providers2.includes(provider);
|
|
25
27
|
const codexCredentials = has("codex") ? await openaiCredentials().catch(() => null) : null;
|
|
26
|
-
const
|
|
28
|
+
const subscriptionCredentials = has("grok") ? await xaiCredentials().catch(() => null) : null;
|
|
29
|
+
const [catalogData, codex, openrouter, grok] = await Promise.all([
|
|
27
30
|
loadCatalog({ force }),
|
|
28
31
|
loadCodexModels(codexCredentials, { force }),
|
|
29
|
-
has("openrouter") ? loadOpenRouterModels({ force }) : []
|
|
32
|
+
has("openrouter") ? loadOpenRouterModels({ force }) : [],
|
|
33
|
+
loadXAIModels(subscriptionCredentials, { force })
|
|
30
34
|
]);
|
|
31
35
|
return [
|
|
32
36
|
...extractModels(catalogData, CATALOG_PROVIDERS).map((model) => ({
|
|
@@ -40,15 +44,18 @@ async function buildModels({ providers: providers2, force }) {
|
|
|
40
44
|
available: has("codex"),
|
|
41
45
|
keyHint: "/connect"
|
|
42
46
|
})),
|
|
47
|
+
...grok.map((model) => ({ ...model, available: has("grok"), keyHint: "/connect" })),
|
|
43
48
|
...openrouter.map((model) => ({ ...model, available: true, keyHint: keyHint("openrouter") }))
|
|
44
49
|
];
|
|
45
50
|
}
|
|
46
51
|
async function loadModelRuntime() {
|
|
47
52
|
const chatgpt = await openaiConnected();
|
|
48
|
-
const
|
|
53
|
+
const grok = await xaiConnected();
|
|
54
|
+
const providers2 = [...applyKeys(discoverKeys()), ...chatgpt ? ["codex"] : [], ...grok.connected ? ["grok"] : []];
|
|
49
55
|
const codexCredentials = chatgpt ? await openaiCredentials().catch(() => null) : null;
|
|
50
56
|
const loadModels = ({ force = false } = {}) => buildModels({ providers: providers2, force });
|
|
51
|
-
|
|
57
|
+
const subscriptionCredentials = grok.connected ? await xaiCredentials().catch(() => null) : null;
|
|
58
|
+
return { providers: providers2, models: await loadModels(), codexCredentials, xaiCredentials: subscriptionCredentials, loadModels };
|
|
52
59
|
}
|
|
53
60
|
function resolveModel(models, providers2, name) {
|
|
54
61
|
if (!name) return null;
|
|
@@ -102,7 +109,7 @@ async function runHeadless(opts) {
|
|
|
102
109
|
} : (line) => process.stderr.write(line + "\n");
|
|
103
110
|
onSessionWriteError((err, file) => process.stderr.write(`pico: could not write ${file}: ${err.message}
|
|
104
111
|
`));
|
|
105
|
-
const { providers: providers2, models, codexCredentials: codexCreds } = await loadModelRuntime();
|
|
112
|
+
const { providers: providers2, models, codexCredentials: codexCreds, xaiCredentials: xaiCreds } = await loadModelRuntime();
|
|
106
113
|
if (providers2.length === 0) {
|
|
107
114
|
process.stderr.write("pico: no credentials found (set a provider key or run pico --connect)\n");
|
|
108
115
|
return 1;
|
|
@@ -161,10 +168,10 @@ ${stdinData}` : opts.prompt;
|
|
|
161
168
|
maxToolCalls: opts.maxToolCalls ?? 50
|
|
162
169
|
});
|
|
163
170
|
let auth = null;
|
|
164
|
-
if (model.provider === "codex") {
|
|
165
|
-
auth = codexCreds;
|
|
171
|
+
if (model.provider === "codex" || model.provider === "grok") {
|
|
172
|
+
auth = model.provider === "codex" ? codexCreds : xaiCreds;
|
|
166
173
|
if (!auth) {
|
|
167
|
-
process.stderr.write("pico:
|
|
174
|
+
process.stderr.write("pico: subscription models need a sign-in (run pico --connect)\n");
|
|
168
175
|
await session.flush();
|
|
169
176
|
return 1;
|
|
170
177
|
}
|
|
@@ -266,8 +273,8 @@ async function runShell(opts, dependencies = {}) {
|
|
|
266
273
|
throw new Error(`no usable model${requestedName ? ` matching "${requestedName}"` : ""}`);
|
|
267
274
|
}
|
|
268
275
|
if (opts.speed === "fast" && !model.speed) throw new Error(`${model.name} does not support speed control`);
|
|
269
|
-
const auth = model.provider === "codex" ? runtime.codexCredentials : null;
|
|
270
|
-
if (model.provider
|
|
276
|
+
const auth = model.provider === "codex" ? runtime.codexCredentials : model.provider === "grok" ? runtime.xaiCredentials : null;
|
|
277
|
+
if (["codex", "grok"].includes(model.provider) && !auth) throw new Error("subscription models need a sign-in (run pico --connect)");
|
|
271
278
|
const result = await (dependencies.runTurn || runTurn2)({
|
|
272
279
|
history: [{ role: "user", content: opts.prompt }],
|
|
273
280
|
tools: [],
|
|
@@ -336,7 +343,7 @@ command flags:
|
|
|
336
343
|
--max-tool-calls <n> stop the agent after n tool calls (default 50)
|
|
337
344
|
-q, --quiet no progress output on stderr
|
|
338
345
|
|
|
339
|
-
--connect
|
|
346
|
+
--connect [openai|xai] sign in with a ChatGPT or SuperGrok subscription
|
|
340
347
|
update, --update update pico to the latest release from npm
|
|
341
348
|
-h, --help show this help
|
|
342
349
|
-v, --version show version`;
|
|
@@ -388,8 +395,13 @@ function parseArgs(argv) {
|
|
|
388
395
|
throw new Error("--max-tool-calls requires a positive integer");
|
|
389
396
|
}
|
|
390
397
|
i++;
|
|
391
|
-
} else if (arg === "--connect")
|
|
392
|
-
|
|
398
|
+
} else if (arg === "--connect") {
|
|
399
|
+
opts.mode = "connect";
|
|
400
|
+
if (argv[i + 1] && !argv[i + 1].startsWith("-")) {
|
|
401
|
+
opts.connectProvider = argv[++i];
|
|
402
|
+
if (!["openai", "xai"].includes(opts.connectProvider)) throw new Error("--connect provider must be openai or xai");
|
|
403
|
+
}
|
|
404
|
+
} else if (arg === "update" || arg === "--update") opts.mode = "update";
|
|
393
405
|
else if (arg === "-q" || arg === "--quiet") opts.quiet = true;
|
|
394
406
|
else if (arg === "-h" || arg === "--help") opts.mode = "help";
|
|
395
407
|
else if (arg === "-v" || arg === "--version") opts.mode = "version";
|
|
@@ -722,7 +734,7 @@ function ModelPanel({ models, current, defaultName, focused, onPick, onPickDefau
|
|
|
722
734
|
m.name === current && /* @__PURE__ */ jsx2("text", { style: { color: selected ? "black" : accent() }, children: " \u2713" }),
|
|
723
735
|
m.name === defaultName && /* @__PURE__ */ jsx2("text", { style: { color: selected ? "black" : MUTED }, children: " default" }),
|
|
724
736
|
/* @__PURE__ */ jsx2("box", { style: { flexGrow: 1 } }),
|
|
725
|
-
/* @__PURE__ */ jsx2("text", { style: { color: selected ? "black" : MUTED }, children: off ? `needs ${m.keyHint}` : m.price ? `$${m.price.in} in $${m.price.out} out` : m.provider
|
|
737
|
+
/* @__PURE__ */ jsx2("text", { style: { color: selected ? "black" : MUTED }, children: off ? `needs ${m.keyHint}` : m.price ? `$${m.price.in} in $${m.price.out} out` : ["codex", "grok"].includes(m.provider) ? "subscription" : "price unknown" })
|
|
726
738
|
] }),
|
|
727
739
|
/* @__PURE__ */ jsx2("text", { style: { color: selected ? "black" : MUTED }, children: m.desc })
|
|
728
740
|
] });
|
|
@@ -1227,11 +1239,16 @@ function ConnectPanel({ providers: providers2, focused, onConnect, onDisconnect,
|
|
|
1227
1239
|
vimKeys: true,
|
|
1228
1240
|
onSubmit: (p) => onConnect(p),
|
|
1229
1241
|
onCancel: onClose,
|
|
1230
|
-
renderItem: (p, { active }) => /* @__PURE__ */ jsxs("box", { style: { flexDirection: "
|
|
1231
|
-
/* @__PURE__ */
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1242
|
+
renderItem: (p, { active }) => /* @__PURE__ */ jsxs("box", { style: { flexDirection: "column" }, children: [
|
|
1243
|
+
/* @__PURE__ */ jsxs("box", { style: { flexDirection: "row" }, children: [
|
|
1244
|
+
/* @__PURE__ */ jsx2("text", { style: { color: accent() }, children: active ? "\u203A " : " " }),
|
|
1245
|
+
/* @__PURE__ */ jsx2("text", { style: { color: p.connected ? accent() : MUTED }, children: p.connected ? "\u25AA" : "\u25AB" }),
|
|
1246
|
+
/* @__PURE__ */ jsx2("text", { style: { color: active ? accent() : FG }, children: ` ${p.label} ` }),
|
|
1247
|
+
/* @__PURE__ */ jsx2("box", { style: { flexGrow: 1, height: 1 }, children: /* @__PURE__ */ jsx2("text", { style: { overflow: "truncate", color: MUTED }, children: p.connected ? `connected${p.email ? ` as ${p.email}` : ""}` : "not connected" }) })
|
|
1248
|
+
] }),
|
|
1249
|
+
(p.usage?.windows || []).map((window) => /* @__PURE__ */ jsx2("text", { style: { color: MUTED }, children: ` ${window.label.toLowerCase()} ${Math.round(window.usedPercent)}% used${window.resetAt ? ` resets ${new Date(window.resetAt).toLocaleString()}` : ""}` })),
|
|
1250
|
+
p.url && /* @__PURE__ */ jsx2("text", { style: { color: accent() }, children: p.url }),
|
|
1251
|
+
p.code && /* @__PURE__ */ jsx2("text", { style: { color: FG }, children: p.code })
|
|
1235
1252
|
] })
|
|
1236
1253
|
}
|
|
1237
1254
|
) }) });
|
|
@@ -2188,6 +2205,7 @@ import { implicitRewindTarget } from "picocode-core/rewind.js";
|
|
|
2188
2205
|
import { checkForUpdate, fetchLatestVersion, newerVersion, isDevInstall, runUpdate } from "picocode-core/update.js";
|
|
2189
2206
|
import { STEER_ROLES, steerableTranscript } from "picocode-core/steer.js";
|
|
2190
2207
|
import { writeConfig } from "picocode-core/config.js";
|
|
2208
|
+
import { xaiConnected as xaiConnected2, xaiUsage } from "picocode-core/xai-auth.js";
|
|
2191
2209
|
import { openaiStatus } from "picocode-core/openai-auth.js";
|
|
2192
2210
|
import { EFFORT_LEVELS, SPEED_LEVELS, SESSION_COLORS as SESSION_COLORS2 } from "picocode-core/controller.js";
|
|
2193
2211
|
import { agentTranscript } from "picocode-core/agent-transcript.js";
|
|
@@ -3220,7 +3238,7 @@ The agent can run long-lived processes (dev servers, watchers) with \`bash backg
|
|
|
3220
3238
|
|
|
3221
3239
|
## Subscriptions
|
|
3222
3240
|
|
|
3223
|
-
\`/connect\` lists subscription providers you can sign in with instead of API keys. OpenAI (ChatGPT / Codex plan)
|
|
3241
|
+
\`/connect\` lists subscription providers you can sign in with instead of API keys. OpenAI (ChatGPT / Codex plan) and Grok (SuperGrok) sign in through your browser via OAuth; tokens are stored in \`~/.pico/auth.json\` and refreshed automatically, so you sign in once. Once connected, subscription models appear in \`/model\`, billed to your plan. \`ctrl+x\` twice in the panel disconnects. Grok weekly quota appears in the connection picker; subscription requests never fall back to paid API keys.
|
|
3224
3242
|
|
|
3225
3243
|
## Memory
|
|
3226
3244
|
|
|
@@ -3270,7 +3288,7 @@ import { Fragment, jsx as jsx10, jsxs as jsxs9 } from "@trendr/core/jsx-runtime"
|
|
|
3270
3288
|
var COMMANDS = [
|
|
3271
3289
|
{ name: "model", desc: "Switch the active model for this session" },
|
|
3272
3290
|
{ name: "refresh-models", desc: "Refresh available models from providers" },
|
|
3273
|
-
{ name: "connect", desc: "Sign in with ChatGPT
|
|
3291
|
+
{ name: "connect", desc: "Sign in with ChatGPT or SuperGrok" },
|
|
3274
3292
|
{ name: "effort", desc: "Set the thinking effort for this session" },
|
|
3275
3293
|
{ name: "speed", desc: "Speed" },
|
|
3276
3294
|
{ name: "resume", desc: "Pick up a previous session where you left off" },
|
|
@@ -4100,32 +4118,43 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4100
4118
|
}
|
|
4101
4119
|
}
|
|
4102
4120
|
async function refreshAuthProviders() {
|
|
4103
|
-
const openai = await
|
|
4121
|
+
const [openai, grok] = await Promise.all([
|
|
4122
|
+
openaiStatus().catch(() => ({ connected: false, email: null })),
|
|
4123
|
+
xaiConnected2().catch(() => ({ connected: false, email: null }))
|
|
4124
|
+
]);
|
|
4125
|
+
const usage2 = grok.connected ? await xaiUsage().catch(() => null) : null;
|
|
4104
4126
|
setAuthProviders([
|
|
4105
|
-
{ id: "openai", label: "OpenAI ChatGPT / Codex plan", connected: openai.connected, email: openai.email }
|
|
4127
|
+
{ id: "openai", label: "OpenAI ChatGPT / Codex plan", connected: openai.connected, email: openai.email },
|
|
4128
|
+
{ id: "xai", label: "Grok / SuperGrok", connected: grok.connected, email: grok.email, usage: usage2, url: grok.connected ? null : authProviders().find((p) => p.id === "xai")?.url, code: grok.connected ? null : authProviders().find((p) => p.id === "xai")?.code }
|
|
4106
4129
|
]);
|
|
4107
4130
|
}
|
|
4108
4131
|
function openConnectPanel() {
|
|
4109
4132
|
setShowConnectPanel(true);
|
|
4110
4133
|
refreshAuthProviders();
|
|
4111
4134
|
}
|
|
4135
|
+
useInterval4(() => {
|
|
4136
|
+
if (showConnectPanel()) void refreshAuthProviders();
|
|
4137
|
+
}, 3e4);
|
|
4112
4138
|
function connectProvider(provider) {
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4139
|
+
const grok = provider.id === "xai";
|
|
4140
|
+
flash(`signing in to ${grok ? "Grok" : "ChatGPT"}`);
|
|
4141
|
+
const task = grok ? ctl.connectXAI({ onUrl: (url, code) => setAuthProviders(authProviders().map((p) => p.id === "xai" ? { ...p, url, code } : p)) }) : ctl.connectProvider();
|
|
4142
|
+
task.then(({ email, count }) => {
|
|
4143
|
+
flash(`connected${email ? ` as ${email}` : ""} ${count} models`);
|
|
4144
|
+
refreshAuthProviders();
|
|
4145
|
+
}).catch((err) => flash(`connect failed: ${String(err.message || err).slice(0, 120)}`));
|
|
4117
4146
|
}
|
|
4118
4147
|
async function disconnectProvider(provider) {
|
|
4119
|
-
if (provider.id !== "openai") return;
|
|
4120
4148
|
const armed = refs.disconnectArm;
|
|
4121
4149
|
if (!armed || armed.id !== provider.id || Date.now() - armed.at > 3e3) {
|
|
4122
4150
|
refs.disconnectArm = { id: provider.id, at: Date.now() };
|
|
4123
|
-
return flash(`ctrl+x again to disconnect ${provider.label}
|
|
4151
|
+
return flash(`ctrl+x again to disconnect ${provider.label}`);
|
|
4124
4152
|
}
|
|
4125
4153
|
refs.disconnectArm = null;
|
|
4126
|
-
await ctl.
|
|
4154
|
+
if (provider.id === "xai") await ctl.disconnectXAI();
|
|
4155
|
+
else await ctl.disconnectProvider();
|
|
4127
4156
|
refreshAuthProviders();
|
|
4128
|
-
flash(
|
|
4157
|
+
flash(`disconnected from ${provider.id === "xai" ? "Grok" : "ChatGPT"}`);
|
|
4129
4158
|
}
|
|
4130
4159
|
function openResumePanel() {
|
|
4131
4160
|
const request = ++refs.resumeOpen;
|
|
@@ -5692,12 +5721,13 @@ ${result.output}`);
|
|
|
5692
5721
|
process.exit(1);
|
|
5693
5722
|
}
|
|
5694
5723
|
if (cli.mode === "connect") {
|
|
5695
|
-
const
|
|
5724
|
+
const grok = cli.connectProvider === "xai";
|
|
5725
|
+
const connect = grok ? (await import("picocode-core/xai-auth.js")).connectXAI : (await import("picocode-core/openai-auth.js")).connectOpenAI;
|
|
5696
5726
|
try {
|
|
5697
|
-
console.error(
|
|
5698
|
-
const { email } = await
|
|
5699
|
-
${
|
|
5700
|
-
console.log(`connected as ${email || "your ChatGPT account"}`);
|
|
5727
|
+
console.error(`opening your browser for ${grok ? "SuperGrok" : "ChatGPT"} sign-in...`);
|
|
5728
|
+
const { email } = await connect({ onUrl: (url, code) => console.error(`${url}${code ? `
|
|
5729
|
+
${code}` : ""}`) });
|
|
5730
|
+
console.log(`connected as ${email || (grok ? "your SuperGrok account" : "your ChatGPT account")}`);
|
|
5701
5731
|
process.exit(0);
|
|
5702
5732
|
} catch (err) {
|
|
5703
5733
|
console.error(`connect failed: ${err.message}`);
|
|
@@ -5716,7 +5746,7 @@ var { providers } = await loadModelRuntime();
|
|
|
5716
5746
|
if (providers.length === 0) {
|
|
5717
5747
|
console.error("pico: no credentials found.");
|
|
5718
5748
|
console.error("set one of: GEMINI_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY, XAI_API_KEY, OPENROUTER_API_KEY");
|
|
5719
|
-
console.error("or sign in
|
|
5749
|
+
console.error("or sign in: pico --connect openai | pico --connect xai");
|
|
5720
5750
|
process.exit(1);
|
|
5721
5751
|
}
|
|
5722
5752
|
var config = await readConfig3();
|
|
@@ -5739,4 +5769,4 @@ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, () => {
|
|
|
5739
5769
|
process.on("exit", () => connection.close());
|
|
5740
5770
|
var app = mount(() => /* @__PURE__ */ jsx11(App, { boot, controller }), { title: `pico ${boot.root.split("/").pop()}`, theme });
|
|
5741
5771
|
boot.setTheme = app.setTheme;
|
|
5742
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvYWN0aXZpdHktc3RyaXAuanMiLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IFtjYXRhbG9nRGF0YSwgY29kZXgsIG9wZW5yb3V0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRDYXRhbG9nKHsgZm9yY2UgfSksXG4gICAgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gICAgaGFzKCdvcGVucm91dGVyJykgPyBsb2FkT3BlblJvdXRlck1vZGVscyh7IGZvcmNlIH0pIDogW10sXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4ub3BlbnJvdXRlci5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiB0cnVlLCBrZXlIaW50OiBrZXlIaW50KCdvcGVucm91dGVyJykgfSkpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzOiBhd2FpdCBsb2FkTW9kZWxzKCksIGNvZGV4Q3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIiwgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBmaW5kTW9kZWwsIHVzYWdlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgeyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFsczogY29kZXhDcmVkcyB9ID0gYXdhaXQgbG9hZE1vZGVsUnVudGltZSgpXG4gIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZDogb3B0cy5tb2RlbCwgY29uZmlndXJlZDogY29uZmlnLmRlZmF1bHRNb2RlbCB9KVxuICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogbm8gdXNhYmxlIG1vZGVsJHtvcHRzLm1vZGVsID8gYCBtYXRjaGluZyBcIiR7b3B0cy5tb2RlbH1cImAgOiAnJ31cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xcXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgY29uc3QgZWZmb3J0ID0gb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdhdXRvJyA6IG51bGwpXG5cbiAgY29uc3QgYm9vdCA9IGF3YWl0IGJ1aWxkUHJvamVjdEJvb3QocHJvY2Vzcy5jd2QoKSlcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtib290Lm1jcC5jb25uZWN0QWxsKCksIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDAwKSldKVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoKVxuXG4gIGxldCBzZXNzaW9uXG4gIGxldCBldmVudHMgPSBbXVxuICBpZiAob3B0cy5yZXN1bWUpIHtcbiAgICBjb25zdCBmaWxlID0gb3B0cy5yZXN1bWUuaW5jbHVkZXMoJy8nKSA/IG9wdHMucmVzdW1lIDogam9pbihzZXNzaW9uc0Rpcihib290LnJvb3QpLCBgJHtvcHRzLnJlc3VtZX0uanNvbmxgKVxuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uKGZpbGUpXG4gICAgc2Vzc2lvbiA9IG9wZW5TZXNzaW9uKHsgZmlsZSwgaGVhZGVyOiBsb2FkZWQuaGVhZGVyIH0pXG4gICAgZXZlbnRzID0gbG9hZGVkLmV2ZW50c1xuICB9IGVsc2Uge1xuICAgIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHsgY3dkOiBib290LmN3ZCwgcm9vdDogYm9vdC5yb290IH0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gICAgc2Vzc2lvbi5hcHBlbmQoZXZlbnQpXG4gICAgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXZlbnQpICsgJ1xcbicpXG4gIH1cblxuICBjb25zdCByZXN0b3JlZFNwZWVkID0gZGVyaXZlU3RhdGUoZXZlbnRzKS5zcGVlZFxuICBjb25zdCBzcGVlZCA9IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gKG9wdHMucmVzdW1lID8gcmVzdG9yZWRTcGVlZCA/PyAnc3RhbmRhcmQnIDogY29uZmlnLnNwZWVkRGVmYXVsdHM/Llttb2RlbC5uYW1lXSkgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdzcGVlZCcsIHsgdG86IHNwZWVkIH0pKVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gY29kZXhDcmVkc1xuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke21vZGVsLnNwZWVkICYmIHNwZWVkID09PSAnZmFzdCcgPyAnICBGYXN0JyA6ICcnfSR7ZWZmb3J0ID8gYCAgJHtlZmZvcnR9YCA6ICcnfSAgc2Vzc2lvbiAke3Nlc3Npb24uaWR9YClcbiAgbGV0IHRob3VnaHRzID0gJydcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVHVybih7XG4gICAgaGlzdG9yeTogZGVyaXZlZC5wcm92aWRlckhpc3RvcnksXG4gICAgdG9vbHMsXG4gICAgcmVjb3JkZXIsXG4gICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgIGVmZm9ydCxcbiAgICAuLi4obW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgeyBzcGVlZCB9KSxcbiAgICBhdXRoLFxuICAgIHN5c3RlbTogYnVpbGRTeXN0ZW1Qcm9tcHQoe1xuICAgICAgY3dkOiBib290LmN3ZCxcbiAgICAgIGNvbnRleHRGaWxlczogYm9vdC5zdGFydHVwQ29udGV4dC5maWxlcyxcbiAgICAgIHNraWxsczogYm9vdC5za2lsbHMubGlzdCgpLFxuICAgICAgbWVtb3J5SW5kZXhUZXh0OiBtZW1vcnlJbmRleChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pLCBib290LnJvb3QpLFxuICAgIH0pLFxuICAgIG9uU3RyZWFtOiAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndGhpbmtpbmcnKSB0aG91Z2h0cyArPSBldmVudC5jb250ZW50XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfY29tcGxldGUnKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVjb3JkZXIuZW50cmllcy5hdCgtMSlcbiAgICAgICAgbG9nKGAgIFx1MjcxMyAke2VudHJ5Py5uYW1lID8/IGV2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZW50cnk/LnRpdGxlID8/ICcnfWApXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfZXJyb3InKSBsb2coYCAgXHUyNzE3ICR7ZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtldmVudC5lcnJvci5zbGljZSgwLCAxMjApfWApXG4gICAgfSxcbiAgfSlcblxuICBpZiAodGhvdWdodHMpIHBlcnNpc3QobWFrZUV2ZW50KCd0aG91Z2h0cycsIHsgdGV4dDogdGhvdWdodHMgfSkpXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiByZXN1bHQubWVzc2FnZXMpIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlIH0pKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZGVyLmVudHJpZXMpIHBlcnNpc3QobWFrZUV2ZW50KCd0b29sX21ldGEnLCBlbnRyeSkpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBib290LnRyYWNrZXIubG9hZGVkKSB7XG4gICAgaWYgKCFsb2FkZWRCZWZvcmUuaGFzKHBhdGgpKSBwZXJzaXN0KG1ha2VFdmVudCgnY29udGV4dF9maWxlJywgeyBwYXRoIH0pKVxuICB9XG4gIGlmIChyZXN1bHQudXNhZ2UpIHBlcnNpc3QobWFrZUV2ZW50KCd1c2FnZScsIHsgbW9kZWw6IG1vZGVsLm5hbWUsIHVzYWdlOiByZXN1bHQudXNhZ2UsIGxhc3RQcm9tcHQ6IHJlc3VsdC5sYXN0UHJvbXB0VG9rZW5zIH0pKVxuICBpZiAocmVzdWx0LmludGVycnVwdGVkKSBwZXJzaXN0KG1ha2VFdmVudCgnaW50ZXJydXB0Jywge30pKVxuXG4gIGNvbnN0IHJ1bm5pbmcgPSBzaGVsbHMucnVubmluZygpXG4gIGlmIChydW5uaW5nID4gMCkgbG9nKGAgIGtpbGxpbmcgJHtydW5uaW5nfSBiYWNrZ3JvdW5kIHNoZWxsJHtydW5uaW5nID09PSAxID8gJycgOiAncyd9YClcbiAgc2hlbGxzLmtpbGxBbGwoKVxuICBhd2FpdCBib290Lm1jcC5jbG9zZUFsbCgpLmNhdGNoKCgpID0+IHt9KVxuICAvLyB0aGUgY2FsbGVyIGV4aXRzIHRoZSBwcm9jZXNzIHRoZSBtb21lbnQgdGhpcyByZXR1cm5zLCB3aGljaCB3b3VsZCBkaXNjYXJkXG4gIC8vIGV2ZXJ5IGFwcGVuZCBzdGlsbCBpbiBmbGlnaHRcbiAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG5cbiAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG0uY29udGVudCA9PT0gJ3N0cmluZycgJiYgbS5jb250ZW50KS5hdCgtMSk/LmNvbnRlbnQgPz8gJydcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICB0ZXh0LFxuICAgIHNlc3Npb246IHNlc3Npb24uaWQsXG4gICAgc2Vzc2lvbkZpbGU6IHNlc3Npb24uZmlsZSxcbiAgICBtb2RlbDogbW9kZWwubmFtZSxcbiAgICB1c2FnZTogcmVzdWx0LnVzYWdlLFxuICAgIGNvc3Q6IHVzYWdlQ29zdChmaW5kTW9kZWwobW9kZWxzLCBtb2RlbC5uYW1lKSwgcmVzdWx0LnVzYWdlKSxcbiAgICB0b29sQ2FsbHM6IHJlY29yZGVyLmVudHJpZXMubGVuZ3RoLFxuICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfVxuXG4gIGlmIChvcHRzLmpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHN1bW1hcnkpICsgJ1xcbicpXG4gIGVsc2UgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncmVzdWx0JywgLi4uc3VtbWFyeSwgdGV4dDogdW5kZWZpbmVkLCBhdDogRGF0ZS5ub3coKSB9KSArICdcXG4nKVxuICBlbHNlIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRleHQgKyAnXFxuJylcblxuICByZXR1cm4gcmVzdWx0LmludGVycnVwdGVkID8gMSA6IDBcbn1cbiIsICJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmNvbnN0IFNZU1RFTSA9ICh7IHBsYXRmb3JtLCBzaGVsbCwgY3dkIH0pID0+IGBHZW5lcmF0ZSBleGFjdGx5IG9uZSBzaGVsbCBjb21tYW5kIHRoYXQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgcmVxdWVzdC4gVGhlIG91dHB1dCBtdXN0IGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZCB3aXRob3V0IE1hcmtkb3duIGZvcm1hdHRpbmcuIElmIG11bHRpcGxlIHN0ZXBzIGFyZSByZXF1aXJlZCwgdHJ5IHRvIGNvbWJpbmUgdGhlbSB0b2dldGhlciB1c2luZyAmJi5cblxuRW52aXJvbm1lbnQ6XG4tIG9wZXJhdGluZyBzeXN0ZW06ICR7cGxhdGZvcm19XG4tIHNoZWxsOiAke3NoZWxsfVxuLSBjdXJyZW50IGRpcmVjdG9yeTogJHtjd2R9XG5cbk91dHB1dCBvbmx5IHRoZSBjb21tYW5kIGFzIG9uZSBsaW5lLiBEbyBub3QgdXNlIE1hcmtkb3duIGZvcm1hdHRpbmcgc3VjaCBhcyBcXGBcXGBcXGAuIERvIG5vdCBleHBsYWluIHRoZSBjb21tYW5kLiBEbyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZC5gXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpIHtcbiAgY29uc3QgY29tbWFuZCA9IHRleHQudHJpbSgpXG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgYW4gZW1wdHkgY29tbWFuZCcpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdcXDAnKSB8fCAvW1xcclxcbl0vLnRlc3QoY29tbWFuZCkpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgbGluZScpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdgYGAnKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgTWFya2Rvd24gaW5zdGVhZCBvZiBhIGNvbW1hbmQnKVxuICByZXR1cm4gY29tbWFuZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGwob3B0cywgZGVwZW5kZW5jaWVzID0ge30pIHtcbiAgY29uc3Qgc3RkZXJyID0gZGVwZW5kZW5jaWVzLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyclxuICBjb25zdCBzdGRvdXQgPSBkZXBlbmRlbmNpZXMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgKGRlcGVuZGVuY2llcy5yZWFkQ29uZmlnIHx8IHJlYWRDb25maWcpKClcbiAgICBjb25zdCBydW50aW1lID0gYXdhaXQgKGRlcGVuZGVuY2llcy5sb2FkTW9kZWxSdW50aW1lIHx8IGxvYWRNb2RlbFJ1bnRpbWUpKClcbiAgICBpZiAocnVudGltZS5wcm92aWRlcnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCBjb25maWd1cmVkTW9kZWwgPSBjb25maWcubW9kZWxzPy5zaGVsbFxuICAgIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoe1xuICAgICAgbW9kZWxzOiBydW50aW1lLm1vZGVscyxcbiAgICAgIHByb3ZpZGVyczogcnVudGltZS5wcm92aWRlcnMsXG4gICAgICByZXF1ZXN0ZWQ6IG9wdHMubW9kZWwsXG4gICAgICBjb25maWd1cmVkOiBjb25maWd1cmVkTW9kZWwgfHwgY29uZmlnLmRlZmF1bHRNb2RlbCxcbiAgICB9KVxuICAgIGNvbnN0IHJlcXVlc3RlZE5hbWUgPSBvcHRzLm1vZGVsIHx8IGNvbmZpZ3VyZWRNb2RlbFxuICAgIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB1c2FibGUgbW9kZWwke3JlcXVlc3RlZE5hbWUgPyBgIG1hdGNoaW5nIFwiJHtyZXF1ZXN0ZWROYW1lfVwiYCA6ICcnfWApXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHRocm93IG5ldyBFcnJvcihgJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuXG4gICAgY29uc3QgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gcnVudGltZS5jb2RleENyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiAhYXV0aCkgdGhyb3cgbmV3IEVycm9yKCdjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkOiBtb2RlbC5zcGVlZCA/IChvcHRzLnNwZWVkID8/ICdzdGFuZGFyZCcpIDogJ3N0YW5kYXJkJyB9KSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgZW5zdXJlRGFlbW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9kYWVtb24tdHJhbnNwb3J0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmVtb3RlLWNvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHBhcnNlQXJncywgVVNBR0UgfSBmcm9tICcuL2NsaS1hcmdzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGRldGVjdFRlcm1pbmFsVGhlbWUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rlcm1pbmFsLXRoZW1lLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBzZXRUZXJtaW5hbEJhY2tncm91bmQsIHBhbGV0dGVMaXN0IH0gZnJvbSAnLi91aS90aGVtZS5qcydcblxuY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSwgJ3V0Zi04JykpXG5cbmxldCBjbGlcbnRyeSB7XG4gIGNsaSA9IHBhcnNlQXJncyhwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpXG59IGNhdGNoIChlcnIpIHtcbiAgY29uc29sZS5lcnJvcihgcGljbzogJHtlcnIubWVzc2FnZX1gKVxuICBjb25zb2xlLmVycm9yKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlbHAnKSB7XG4gIGNvbnNvbGUubG9nKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3ZlcnNpb24nKSB7XG4gIGNvbnNvbGUubG9nKHBrZy52ZXJzaW9uKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3VwZGF0ZScpIHtcbiAgY29uc3QgeyBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24gfSA9IGF3YWl0IGltcG9ydCgncGljb2NvZGUtY29yZS91cGRhdGUuanMnKVxuICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHtcbiAgICBjb25zb2xlLmVycm9yKCd0aGlzIHBpY28gcnVucyBmcm9tIGEgc291cmNlIGNoZWNrb3V0OyB1cGRhdGUgaXQgd2l0aCBnaXQsIG5vdCBucG0nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gIGlmIChsYXRlc3QgJiYgIW5ld2VyVmVyc2lvbihwa2cudmVyc2lvbiwgbGF0ZXN0KSkge1xuICAgIGNvbnNvbGUubG9nKGBwaWNvIHYke3BrZy52ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0aW5nIHBpY29jb2RlICR7bGF0ZXN0ID8gYHRvIHYke2xhdGVzdH0gYCA6ICcnfXZpYSBucG0uLi5gKVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5VcGRhdGUoKVxuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgY29uc29sZS5sb2coYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0ZSBmYWlsZWQ6XFxuJHtyZXN1bHQub3V0cHV0fWApXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuaWYgKGNsaS5tb2RlID09PSAnY29ubmVjdCcpIHtcbiAgY29uc3QgeyBjb25uZWN0T3BlbkFJIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnKVxuICB0cnkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ29wZW5pbmcgeW91ciBicm93c2VyIGZvciBDaGF0R1BUIHNpZ24taW4uLi4nKVxuICAgIGNvbnN0IHsgZW1haWwgfSA9IGF3YWl0IGNvbm5lY3RPcGVuQUkoeyBvblVybDogKHVybCkgPT4gY29uc29sZS5lcnJvcihgaWYgdGhlIGJyb3dzZXIgZGlkIG5vdCBvcGVuLCB2aXNpdDpcXG4ke3VybH1gKSB9KVxuICAgIGNvbnNvbGUubG9nKGBjb25uZWN0ZWQgYXMgJHtlbWFpbCB8fCAneW91ciBDaGF0R1BUIGFjY291bnQnfWApXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoYGNvbm5lY3QgZmFpbGVkOiAke2Vyci5tZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlYWRsZXNzJykge1xuICBjb25zdCB7IHJ1bkhlYWRsZXNzIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGVhZGxlc3MuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuSGVhZGxlc3MoY2xpKSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3NoZWxsJykge1xuICBjb25zdCB7IHJ1blNoZWxsIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2hlbGwuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuU2hlbGwoY2xpKSlcbn1cblxuY29uc3QgeyBwcm92aWRlcnMgfSA9IGF3YWl0IGxvYWRNb2RlbFJ1bnRpbWUoKVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWSwgT1BFTlJPVVRFUl9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuOiBwaWNvIC0tY29ubmVjdCcpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5jb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuY29uc3QgeyB0aGVtZTogZGV0ZWN0ZWRUaGVtZSwgYmFja2dyb3VuZDogdGVybWluYWxCYWNrZ3JvdW5kIH0gPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0VGVybWluYWxCYWNrZ3JvdW5kKHRlcm1pbmFsQmFja2dyb3VuZClcbnNldFBhbGV0dGUodGhlbWVPdmVycmlkZSB8fCBkZXRlY3RlZFRoZW1lKVxuY29uc3QgdGhlbWUgPSB7IGFjY2VudDogREVGQVVMVF9BQ0NFTlQsIG11dGVkOiBNVVRFRCB9XG5cbmNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCBlbnN1cmVEYWVtb24oeyBlbnRyeTogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL2RhZW1vbi5qcycsIGltcG9ydC5tZXRhLnVybCkpIH0pXG5jb25zdCBjb250cm9sbGVyID0gYXdhaXQgY3JlYXRlUmVtb3RlQ29udHJvbGxlcihjb25uZWN0aW9uLCB7XG4gIG9wdGlvbnM6IHsgY3dkOiBwcm9jZXNzLmN3ZCgpLCB2ZXJzaW9uOiBwa2cudmVyc2lvbiwgdGhlbWUsIGRldGVjdGVkVGhlbWUsIHRoZW1lUHJlZjogdGhlbWVPdmVycmlkZSB8fCAnYXV0bycgfSxcbiAgbG9jYWxCb290OiB7IHJlZnM6IHt9IH0sXG59KVxuY29uc3QgYm9vdCA9IGNvbnRyb2xsZXIuYm9vdFxuaWYgKGNsaS5zcGVlZCkgYXdhaXQgY29udHJvbGxlci5zcGVlZENvbW1hbmQoY2xpLnNwZWVkKVxuZm9yIChjb25zdCBzaWduYWwgb2YgWydTSUdJTlQnLCAnU0lHVEVSTScsICdTSUdIVVAnXSkgcHJvY2Vzcy5vbihzaWduYWwsICgpID0+IHtcbiAgY29ubmVjdGlvbi5jbG9zZSgpXG4gIHByb2Nlc3MuZXhpdCgwKVxufSlcbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiBjb25uZWN0aW9uLmNsb3NlKCkpXG5jb25zdCBhcHAgPSBtb3VudCgoKSA9PiA8QXBwIGJvb3Q9e2Jvb3R9IGNvbnRyb2xsZXI9e2NvbnRyb2xsZXJ9IC8+LCB7IHRpdGxlOiBgcGljbyAgJHtib290LnJvb3Quc3BsaXQoJy8nKS5wb3AoKX1gLCB0aGVtZSB9KVxuYm9vdC5zZXRUaGVtZSA9IGFwcC5zZXRUaGVtZVxuIiwgImV4cG9ydCBjb25zdCBVU0FHRSA9IGBwaWNvIC0gYSBjb2RpbmcgYWdlbnQgaW4geW91ciB0ZXJtaW5hbFxuXG51c2FnZTpcbiAgcGljbyAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgcGljbyAtcCBcInByb21wdFwiICAgICAgICAgICBoZWFkbGVzczogcnVuIG9uZSBhZ2VudGljIHR1cm4sIHByaW50IHRoZSBhbnN3ZXJcbiAgcGljbyAtcyBcInJlcXVlc3RcIiAgICAgICAgICBnZW5lcmF0ZSBvbmUgc2hlbGwgY29tbWFuZCwgd2l0aG91dCBydW5uaW5nIGl0XG4gIGNhdCBsb2cgfCBwaWNvIC1wIFwiLi4uXCIgICAgc3RkaW4gaXMgYXBwZW5kZWQgdG8gdGhlIHByb21wdCBhcyBjb250ZXh0XG5cbmNvbW1hbmQgZmxhZ3M6XG4gIC1wLCAtLXByaW50IDxwcm9tcHQ+ICAgICAgIHJ1biBvbmUgYWdlbnRpYyB0dXJuIGFuZCBwcmludCB0aGUgYW5zd2VyXG4gIC1zLCAtLXNoZWxsIDxyZXF1ZXN0PiAgICAgIHByaW50IG9uZSBnZW5lcmF0ZWQgc2hlbGwgY29tbWFuZFxuICAtLWpzb24gICAgICAgICAgICAgICAgICAgICBwcmludCBhIHNpbmdsZSBKU09OIHJlc3VsdCBvYmplY3QgdG8gc3Rkb3V0XG4gIC0tc3RyZWFtLWpzb24gICAgICAgICAgICAgIHN0cmVhbSBzZXNzaW9uIGV2ZW50cyB0byBzdGRvdXQgYXMganNvbmxcbiAgLW0sIC0tbW9kZWwgPG5hbWU+ICAgICAgICAgbW9kZWwgdG8gdXNlIChmdXp6eSBtYXRjaGVkLCBvciByYXcgcHJvdmlkZXIvbW9kZWwpXG4gIC0tc3BlZWQgPGxldmVsPiAgICAgICAgICAgIHNwZWVkOiBzdGFuZGFyZHxmYXN0XG4gIC0tZWZmb3J0IDxsZXZlbD4gICAgICAgICAgIHRoaW5raW5nIGVmZm9ydDogYXV0b3xsb3d8bWVkaXVtfGhpZ2h8bWF4XG4gIC0tcmVzdW1lIDxzZXNzaW9uLWlkPiAgICAgIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHNlc3Npb24gZnJvbSB0aGlzIHByb2plY3RcbiAgLS1tYXgtdG9vbC1jYWxscyA8bj4gICAgICAgc3RvcCB0aGUgYWdlbnQgYWZ0ZXIgbiB0b29sIGNhbGxzIChkZWZhdWx0IDUwKVxuICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICBubyBwcm9ncmVzcyBvdXRwdXQgb24gc3RkZXJyXG5cbiAgLS1jb25uZWN0ICAgICAgICAgICAgICAgICAgc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuIChPQXV0aCBpbiB5b3VyIGJyb3dzZXIpXG4gIHVwZGF0ZSwgLS11cGRhdGUgICAgICAgICAgIHVwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbVxuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscFxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBzaG93IHZlcnNpb25gXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFyZ3MoYXJndikge1xuICBjb25zdCBvcHRzID0geyBtb2RlOiAnaW50ZXJhY3RpdmUnIH1cbiAgY29uc3QgdGFrZVZhbHVlID0gKG5hbWUsIGkpID0+IHtcbiAgICBpZiAoaSArIDEgPj0gYXJndi5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSByZXF1aXJlcyBhIHZhbHVlYClcbiAgICByZXR1cm4gYXJndltpICsgMV1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV1cbiAgICBpZiAoYXJnID09PSAnLXAnIHx8IGFyZyA9PT0gJy0tcHJpbnQnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnaGVhZGxlc3MnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy1zJyB8fCBhcmcgPT09ICctLXNoZWxsJykge1xuICAgICAgaWYgKG9wdHMubW9kZSAhPT0gJ2ludGVyYWN0aXZlJykgdGhyb3cgbmV3IEVycm9yKGAke2FyZ30gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tYW5kIG1vZGVgKVxuICAgICAgb3B0cy5tb2RlID0gJ3NoZWxsJ1xuICAgICAgb3B0cy5wcm9tcHQgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWpzb24nKSBvcHRzLmpzb24gPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLS1zdHJlYW0tanNvbicpIG9wdHMuc3RyZWFtSnNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctbScgfHwgYXJnID09PSAnLS1tb2RlbCcpIHtcbiAgICAgIG9wdHMubW9kZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWVmZm9ydCcpIHtcbiAgICAgIGNvbnN0IGxldmVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghWydhdXRvJywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXS5pbmNsdWRlcyhsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGVmZm9ydCBcIiR7bGV2ZWx9XCI6IHVzZSBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhgKVxuICAgICAgfVxuICAgICAgb3B0cy5lZmZvcnQgPSBsZXZlbFxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLXNwZWVkJykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ3N0YW5kYXJkJywgJ2Zhc3QnXS5pbmNsdWRlcyhsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNwZWVkIFwiJHtsZXZlbH1cIjogdXNlIHN0YW5kYXJkfGZhc3RgKVxuICAgICAgfVxuICAgICAgb3B0cy5zcGVlZCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tcmVzdW1lJykge1xuICAgICAgb3B0cy5yZXN1bWUgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLW1heC10b29sLWNhbGxzJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKCctLW1heC10b29sLWNhbGxzIHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICBvcHRzLm1heFRvb2xDYWxscyA9IE51bWJlcih2YWx1ZSlcbiAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIob3B0cy5tYXhUb29sQ2FsbHMpIHx8IG9wdHMubWF4VG9vbENhbGxzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIH1cbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1jb25uZWN0Jykgb3B0cy5tb2RlID0gJ2Nvbm5lY3QnXG4gICAgZWxzZSBpZiAoYXJnID09PSAndXBkYXRlJyB8fCBhcmcgPT09ICctLXVwZGF0ZScpIG9wdHMubW9kZSA9ICd1cGRhdGUnXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLXEnIHx8IGFyZyA9PT0gJy0tcXVpZXQnKSBvcHRzLnF1aWV0ID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1oJyB8fCBhcmcgPT09ICctLWhlbHAnKSBvcHRzLm1vZGUgPSAnaGVscCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctdicgfHwgYXJnID09PSAnLS12ZXJzaW9uJykgb3B0cy5tb2RlID0gJ3ZlcnNpb24nXG4gICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gYXJndW1lbnQgXCIke2FyZ31cImApXG4gIH1cblxuICBpZiAob3B0cy5tb2RlID09PSAnaGVhZGxlc3MnICYmICFvcHRzLnByb21wdD8udHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJy1wIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHByb21wdCcpXG4gIGlmIChvcHRzLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgICBpZiAoIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXMgcmVxdWlyZXMgYSBub24tZW1wdHkgcmVxdWVzdCcpXG4gICAgY29uc3QgaW5jb21wYXRpYmxlID0gW29wdHMuanNvbiAmJiAnLS1qc29uJywgb3B0cy5zdHJlYW1Kc29uICYmICctLXN0cmVhbS1qc29uJywgb3B0cy5yZXN1bWUgJiYgJy0tcmVzdW1lJywgb3B0cy5tYXhUb29sQ2FsbHMgJiYgJy0tbWF4LXRvb2wtY2FsbHMnXS5maW5kKEJvb2xlYW4pXG4gICAgaWYgKGluY29tcGF0aWJsZSkgdGhyb3cgbmV3IEVycm9yKGAke2luY29tcGF0aWJsZX0gY2Fubm90IGJlIHVzZWQgd2l0aCAtLXNoZWxsYClcbiAgfVxuICByZXR1cm4gb3B0c1xufVxuIiwgImltcG9ydCB7IFNjcm9sbEJveCwgdXNlRm9jdXMsIHVzZUxheW91dCwgdXNlSW50ZXJ2YWwsIGNyZWF0ZVNpZ25hbCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgU0VTU0lPTl9DT0xPUlMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBERUZBVUxUX0FDQ0VOVCwgRkdfU09GVCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgdGltZUFnbyB9IGZyb20gJy4vcGFuZWxzLmpzeCdcblxuZnVuY3Rpb24gU2Vzc2lvblJvdyh7IHJvdywgc2VsZWN0ZWQsIGZvY3VzLCBub3cgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKHJvdy5pZCwgbGF5b3V0KVxuICBjb25zdCBjb2xvciA9IFNFU1NJT05fQ09MT1JTW3Jvdy5jb2xvcl0gfHwgcm93LmNvbG9yIHx8IERFRkFVTFRfQUNDRU5UXG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMSwgaGVpZ2h0OiAyLCBmbGV4U2hyaW5rOiAwLCBiZzogc2VsZWN0ZWQgPyBjb2xvciA6IHVuZGVmaW5lZCB9fT5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogY29sb3IsIGJvbGQ6IHRydWUsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgJHtyb3cuc3RhdHVzID09PSAnYnVzeScgPyAnXHUyNUNGJyA6ICdcdTI1Q0InfSAke3Jvdy5uYW1lfSR7cm93LnJ1bm5pbmdTaGVsbHMgPyBgICAke3Jvdy5ydW5uaW5nU2hlbGxzfSAke3Jvdy5ydW5uaW5nU2hlbGxzID09PSAxID8gJ3NoZWxsJyA6ICdzaGVsbHMnfWAgOiAnJ31gfTwvdGV4dD5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e3Jvdy5zdGF0dXMgPT09ICdidXN5JyA/IHJvdy5hY3Rpdml0eSB8fCAnd29ya2luZycgOiByb3cucnVubmluZ1NoZWxscyA/IHJvdy5zaGVsbEFjdGl2aXR5IHx8ICdzaGVsbCBydW5uaW5nJyA6IHJvdy5sYXN0TWVzc2FnZUF0ID8gYExhc3QgbWVzc2FnZSAke3RpbWVBZ28ocm93Lmxhc3RNZXNzYWdlQXQpfWAgOiAnaWRsZSd9PC90ZXh0PlxuICA8L2JveD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdvcmtzcGFjZVNpZGViYXIoeyBncm91cHMsIHNlbGVjdGVkLCB3aWR0aCwgbG9hZGluZywgZXJyb3IsIG9uSGVpZ2h0IH0pIHtcbiAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGFjdGl2ZTogZmFsc2UgfSlcbiAgY29uc3QgW25vdywgc2V0Tm93XSA9IGNyZWF0ZVNpZ25hbChEYXRlLm5vdygpKVxuICB1c2VJbnRlcnZhbCgoKSA9PiBzZXROb3coRGF0ZS5ub3coKSksIDEwMDAwKVxuICBpZiAoc2VsZWN0ZWQpIGZvY3VzLmZvY3VzKHNlbGVjdGVkKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IHdpZHRoLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6ICcxMDAlJywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJvcmRlcjogJ3NpbmdsZScsIGJvcmRlckVkZ2VzOiB7IHJpZ2h0OiB0cnVlIH0sIGJvcmRlckNvbG9yOiBNVVRFRCB9fT5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSwgcGFkZGluZ1g6IDEgfX0+U2Vzc2lvbnM8L3RleHQ+XG4gICAge2xvYWRpbmcgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmc8L3RleHQ+fVxuICAgIHtlcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntlcnJvcn08L3RleHQ+fVxuICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9sbG93Rm9jdXM9e2ZvY3VzfSBmb2N1c1BhZGRpbmc9ezF9IG9uTWV0cmljcz17KG1ldHJpY3MpID0+IG9uSGVpZ2h0KG1ldHJpY3MudmlzaWJsZUhlaWdodCl9PlxuICAgICAge2dyb3Vwcy5tYXAoKGdyb3VwLCBpbmRleCkgPT4gPGJveCBrZXk9e2dyb3VwLmN3ZH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaW5kZXggPiAwID8gMSA6IDAgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIHBhZGRpbmdYOiAxIH19Pntncm91cC5jd2QgPT09IGhvbWUgPyAnficgOiBncm91cC5jd2Quc3RhcnRzV2l0aChob21lICsgJy8nKSA/ICd+JyArIGdyb3VwLmN3ZC5zbGljZShob21lLmxlbmd0aCkgOiBncm91cC5jd2R9PC90ZXh0PlxuICAgICAgICB7Z3JvdXAuc2Vzc2lvbnMubWFwKChyb3cpID0+IDxTZXNzaW9uUm93IGtleT17cm93LmlkfSByb3c9e3Jvd30gc2VsZWN0ZWQ9e3Jvdy5pZCA9PT0gc2VsZWN0ZWR9IGZvY3VzPXtmb2N1c30gbm93PXtub3coKX0gLz4pfVxuICAgICAgPC9ib3g+KX1cbiAgICA8L1Njcm9sbEJveD5cbiAgPC9ib3g+XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5jb25zdCBQQUxFVFRFUyA9IHtcbiAgZGFyazoge1xuICAgIGRlc2M6ICdsaWdodCB0ZXh0IGZvciBkYXJrIHRlcm1pbmFscycsXG4gICAgYWNjZW50OiAnI2E3OGJmYScsXG4gICAgZmc6ICcjZTVlN2ViJyxcbiAgICBmZ1NvZnQ6ICcjOWNhM2FmJyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjMWUxZTIyJyxcbiAgICBzZWxlY3RCZzogJyMzNzQxNTEnLFxuICAgIHJlZDogJyNmODcxNzEnLFxuICAgIGdyZWVuOiAnIzRhZGU4MCcsXG4gICAgcGVlcjogJyNjNGI1ZmQnLFxuICAgIGhpZ2hsaWdodDogJyNmZmZmZmYnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG4gIGxpZ2h0OiB7XG4gICAgZGVzYzogJ2RhcmsgdGV4dCBmb3IgbGlnaHQgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjN2MzYWVkJyxcbiAgICBmZzogJyMxZjI0MzAnLFxuICAgIGZnU29mdDogJyM0YjU1NjMnLFxuICAgIG11dGVkOiAnIzRiNTU2MycsXG4gICAgcGFuZWxCZzogJyNlOWU5ZWUnLFxuICAgIHNlbGVjdEJnOiAnI2Q0ZDRkYycsXG4gICAgcmVkOiAnI2RjMjYyNicsXG4gICAgZ3JlZW46ICcjMTZhMzRhJyxcbiAgICBwZWVyOiAnIzZkMjhkOScsXG4gICAgaGlnaGxpZ2h0OiAnIzExMTgyNycsXG4gICAgc2hpa2k6ICdnaXRodWItbGlnaHQnLFxuICB9LFxuICBub3JkOiB7XG4gICAgZGVzYzogJ2FyY3RpYyBibHVlcyBvbiBwb2xhciBuaWdodCcsXG4gICAgYWNjZW50OiAnIzg4YzBkMCcsXG4gICAgZmc6ICcjZDhkZWU5JyxcbiAgICBmZ1NvZnQ6ICcjYWFiMmM0JyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjM2I0MjUyJyxcbiAgICBzZWxlY3RCZzogJyM0MzRjNWUnLFxuICAgIHJlZDogJyNiZjYxNmEnLFxuICAgIGdyZWVuOiAnI2EzYmU4YycsXG4gICAgcGVlcjogJyNkOGI0ZmUnLFxuICAgIGhpZ2hsaWdodDogJyNlY2VmZjQnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG59XG5cbi8vIHRoZSBkYXJrIGFuZCBsaWdodCBwYWxldHRlcyBzaXQgb24gdGhlIHRlcm1pbmFsJ3Mgb3duIGJhY2tncm91bmQsIGFuZCBhbnlcbi8vIGZpeGVkIHBhbmVsIGNvbG9yIGNvbGxpZGVzIHdpdGggc29tZSB0ZXJtaW5hbCB0aGVtZS4gd2hlbiB0aGUgYmFja2dyb3VuZCBpc1xuLy8ga25vd24sIHBhbmVsIGFuZCBzZWxlY3Rpb24gY29sb3JzIGFyZSBtaXhlZCBmcm9tIGl0IGluc3RlYWQ6IHRvd2FyZCB3aGl0ZVxuLy8gb24gZGFyayBiYWNrZ3JvdW5kcywgdG93YXJkIGJsYWNrIG9uIGxpZ2h0IG9uZXNcbmNvbnN0IERFUklWRURfU1VSRkFDRVMgPSB7XG4gIGRhcms6IHsgdG93YXJkOiAyNTUsIHBhbmVsOiAwLjA4LCBzZWxlY3Q6IDAuMiB9LFxuICBsaWdodDogeyB0b3dhcmQ6IDAsIHBhbmVsOiAwLjA2LCBzZWxlY3Q6IDAuMTQgfSxcbn1cblxubGV0IHRlcm1pbmFsQmFja2dyb3VuZCA9IG51bGxcblxuZnVuY3Rpb24gaGV4VG9SZ2IoaGV4KSB7XG4gIGNvbnN0IG0gPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoaGV4IHx8ICcnKVxuICBpZiAoIW0pIHJldHVybiBudWxsXG4gIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxNilcbiAgcmV0dXJuIFtuID4+IDE2LCAobiA+PiA4KSAmIDI1NSwgbiAmIDI1NV1cbn1cblxuZnVuY3Rpb24gbWl4KHJnYiwgdG93YXJkLCBhbW91bnQpIHtcbiAgcmV0dXJuICcjJyArIHJnYi5tYXAoKGMpID0+IE1hdGgucm91bmQoYyArICh0b3dhcmQgLSBjKSAqIGFtb3VudCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGRlcml2ZWRTdXJmYWNlcyhuYW1lKSB7XG4gIGNvbnN0IHJ1bGUgPSBERVJJVkVEX1NVUkZBQ0VTW25hbWVdXG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKHRlcm1pbmFsQmFja2dyb3VuZClcbiAgaWYgKCFydWxlIHx8ICFyZ2IpIHJldHVybiBudWxsXG4gIC8vIGEgcGFsZXR0ZSBmb3JjZWQgb250byB0aGUgb3Bwb3NpdGUga2luZCBvZiBiYWNrZ3JvdW5kIGtlZXBzIGl0cyBjb25zdGFudHNcbiAgY29uc3QgW3IsIGcsIGJdID0gcmdiXG4gIGNvbnN0IHNpZGUgPSAoMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiKSAvIDI1NSA+IDAuNSA/ICdsaWdodCcgOiAnZGFyaydcbiAgaWYgKHNpZGUgIT09IG5hbWUpIHJldHVybiBudWxsXG4gIHJldHVybiB7IHBhbmVsQmc6IG1peChyZ2IsIHJ1bGUudG93YXJkLCBydWxlLnBhbmVsKSwgc2VsZWN0Qmc6IG1peChyZ2IsIHJ1bGUudG93YXJkLCBydWxlLnNlbGVjdCkgfVxufVxuXG5leHBvcnQgbGV0IERFRkFVTFRfQUNDRU5UID0gUEFMRVRURVMuZGFyay5hY2NlbnRcbmV4cG9ydCBsZXQgRkcgPSBQQUxFVFRFUy5kYXJrLmZnXG5leHBvcnQgbGV0IEZHX1NPRlQgPSBQQUxFVFRFUy5kYXJrLmZnU29mdFxuZXhwb3J0IGxldCBNVVRFRCA9IFBBTEVUVEVTLmRhcmsubXV0ZWRcbmV4cG9ydCBsZXQgUEFORUxfQkcgPSBQQUxFVFRFUy5kYXJrLnBhbmVsQmdcbmV4cG9ydCBsZXQgU0VMRUNUX0JHID0gUEFMRVRURVMuZGFyay5zZWxlY3RCZ1xuZXhwb3J0IGxldCBSRUQgPSBQQUxFVFRFUy5kYXJrLnJlZFxuZXhwb3J0IGxldCBHUkVFTiA9IFBBTEVUVEVTLmRhcmsuZ3JlZW5cbmV4cG9ydCBsZXQgUEVFUiA9IFBBTEVUVEVTLmRhcmsucGVlclxuZXhwb3J0IGxldCBISUdITElHSFQgPSBQQUxFVFRFUy5kYXJrLmhpZ2hsaWdodFxuXG5sZXQgY3VycmVudFBhbGV0dGUgPSAnZGFyaydcbmxldCBleHBsaWNpdEFjY2VudCA9IG51bGxcblxuY29uc3QgW2FjY2VudFZhbHVlLCBzZXRBY2NlbnRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoREVGQVVMVF9BQ0NFTlQpXG5cbmV4cG9ydCBjb25zdCBhY2NlbnQgPSBhY2NlbnRWYWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWNjZW50KGNvbG9yKSB7XG4gIGV4cGxpY2l0QWNjZW50ID0gY29sb3IgfHwgbnVsbFxuICBzZXRBY2NlbnRWYWx1ZShleHBsaWNpdEFjY2VudCB8fCBERUZBVUxUX0FDQ0VOVClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFBhbGV0dGUobmFtZSkge1xuICBjdXJyZW50UGFsZXR0ZSA9IFBBTEVUVEVTW25hbWVdID8gbmFtZSA6ICdkYXJrJ1xuICBjb25zdCBwID0gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdXG4gIERFRkFVTFRfQUNDRU5UID0gcC5hY2NlbnRcbiAgRkcgPSBwLmZnXG4gIEZHX1NPRlQgPSBwLmZnU29mdFxuICBNVVRFRCA9IHAubXV0ZWRcbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZWRTdXJmYWNlcyhjdXJyZW50UGFsZXR0ZSlcbiAgUEFORUxfQkcgPSBkZXJpdmVkPy5wYW5lbEJnID8/IHAucGFuZWxCZ1xuICBTRUxFQ1RfQkcgPSBkZXJpdmVkPy5zZWxlY3RCZyA/PyBwLnNlbGVjdEJnXG4gIFJFRCA9IHAucmVkXG4gIEdSRUVOID0gcC5ncmVlblxuICBQRUVSID0gcC5wZWVyXG4gIEhJR0hMSUdIVCA9IHAuaGlnaGxpZ2h0XG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IHAuYWNjZW50KVxufVxuXG4vLyB0aGUgdGVybWluYWwncyBiYWNrZ3JvdW5kIGFzICcjcnJnZ2JiJywgb3IgbnVsbCB3aGVuIHVua25vd24uIHJlLWFwcGxpZXNcbi8vIHRoZSBjdXJyZW50IHBhbGV0dGUgc28gZGVyaXZlZCBzdXJmYWNlcyBmb2xsb3cgaXRcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZXJtaW5hbEJhY2tncm91bmQoaGV4KSB7XG4gIHRlcm1pbmFsQmFja2dyb3VuZCA9IGhleFRvUmdiKGhleCkgPyBoZXgudG9Mb3dlckNhc2UoKSA6IG51bGxcbiAgc2V0UGFsZXR0ZShjdXJyZW50UGFsZXR0ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmFsQmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIHRlcm1pbmFsQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZU5hbWUoKSB7XG4gIHJldHVybiBjdXJyZW50UGFsZXR0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZUxpc3QoKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhQQUxFVFRFUykubWFwKChba2V5LCBwXSkgPT4gKHsga2V5LCBkZXNjOiBwLmRlc2MgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlraVRoZW1lKCkge1xuICByZXR1cm4gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdLnNoaWtpXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIENoZWNrYm94LCBlYXNlLCBGaWVsZCwgRmllbGRMaXN0LCBNZW51LCBOdW1iZXJJbnB1dCwgUGlja0xpc3QsIFJhZGlvLCBTY3JvbGxCb3gsIFRleHRJbnB1dCwgdXNlQW5pbWF0ZWQsIHVzZUZvY3VzLCB1c2VJbnB1dCwgdXNlSW50ZXJ2YWwsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBmdXp6eVNjb3JlLCByYW5rRnV6enkgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgZm9ybWF0SHR0cFNlcnZlclNwZWMsIHBhcnNlU2VydmVyU3BlYywgcmVkYWN0U2VydmVyU3BlYywgUkVEQUNURURfSEVBREVSIH0gZnJvbSAncGljb2NvZGUtY29yZS9tY3AuanMnXG5cbmZ1bmN0aW9uIHNob3J0ZW5Ib21lKHBhdGgpIHtcbiAgY29uc3QgdmFsdWUgPSBTdHJpbmcocGF0aClcbiAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICByZXR1cm4gdmFsdWUgPT09IGhvbWUgfHwgdmFsdWUuc3RhcnRzV2l0aChgJHtob21lfS9gKSA/IGB+JHt2YWx1ZS5zbGljZShob21lLmxlbmd0aCl9YCA6IHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lQWdvKGF0KSB7XG4gIGNvbnN0IHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gYXQpIC8gMTAwMCkpXG4gIGlmIChzIDwgNjApIHJldHVybiBgJHtzfXMgYWdvYFxuICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApXG4gIGlmIChtIDwgNjApIHJldHVybiBgJHttfW0gYWdvYFxuICBjb25zdCBoID0gTWF0aC5mbG9vcihtIC8gNjApXG4gIGlmIChoIDwgMjQpIHJldHVybiBgJHtofWggYWdvYFxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihoIC8gMjQpfWQgYWdvYFxufVxuXG5mdW5jdGlvbiBQYW5lbERpdmlkZXIoKSB7XG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogU0VMRUNUX0JHLCBvdmVyZmxvdzogJ2NsaXAnIH19PnsnXHUyNTAwJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCl9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBQYW5lbEZyYW1lKHsgdGl0bGUsIGhpbnQsIHJpZ2h0LCBmdWxsU2NyZWVuID0gZmFsc2UsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIGhlaWdodDogZnVsbFNjcmVlbiA/ICcxMDAlJyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57dGl0bGV9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICB7cmlnaHR9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2hpbnR9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogZnVsbFNjcmVlbiA/IDAgOiAyLCBwYWRkaW5nQm90dG9tOiAxLCBmbGV4R3JvdzogZnVsbFNjcmVlbiA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maXJtUGFuZWwoeyB0aXRsZSwgbWVzc2FnZSwgY29uZmlybUxhYmVsID0gJ0NvbmZpcm0nLCBmb2N1c2VkLCBvbkNvbmZpcm0sIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBvbkNvbmZpcm0oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT17dGl0bGV9IGhpbnQ9e2BlbnRlcjogJHtjb25maXJtTGFiZWwudG9Mb3dlckNhc2UoKX0gIGVzYzogY2FuY2VsYH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57bWVzc2FnZX08L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQsIGJvbGQ6IHRydWUgfX0+VGhpcyBjYW5ub3QgYmUgdW5kb25lLjwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdGaWVsZCh7IGZpZWxkLCB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxDaGVja2JveCBjaGVja2VkPXt2YWx1ZX0gbGFiZWw9e2ZpZWxkLmxhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntmaWVsZC5wYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7ZmllbGQuZGVzY31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdOdW1iZXJGaWVsZCh7IHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPE51bWJlcklucHV0IGZvY3VzZWQ9e2ZvY3VzZWR9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBtaW49ezF9IG1heD17MTAwfSB3aWR0aD17NX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PiBQYXJhbGxlbCBhZ2VudCBsaW1pdDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+cmVzZWFyY2guYWdlbnRMaW1pdDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PiAgICBNYXhpbXVtIGFnZW50cyBwZXIgcGFyYWxsZWwgcnVuICgxLTEwMCk8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnTW9kZWxGaWVsZCh7IG1vZGVsLCBsYWJlbCwgcGF0aCwgZm9jdXNlZCwgb25QaWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPXtsYWJlbH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17b25QaWNrfSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGF0aH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgICAke21vZGVsIHx8ICdOb3QgY29uZmlndXJlZCd9YH08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpZ1BhbmVsKHsgdmFsdWVzLCBmb2N1c2VkLCBvbkNoYW5nZSwgb25QaWNrUmVzZWFyY2hNb2RlbCwgb25QaWNrU2hlbGxNb2RlbCwgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWwsIG9uUGlja1BhcnRpY2lwYW50TW9kZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBmaWVsZHMgPSBbXG4gICAgeyBuYW1lOiAnY2xvdWRzJywgbGFiZWw6ICdDbG91ZCBhbmltYXRpb24nLCBkZXNjOiAnU2hvdyBhbmltYXRlZCBjbG91ZHMgb24gdGhlIGVtcHR5IHNjcmVlbicsIHBhdGg6ICdhbmltYXRpb24uY2xvdWRzJyB9LFxuICAgIHsgbmFtZTogJ2NvbXBhY3RUb29scycsIGxhYmVsOiAnQ29tcGFjdCB0b29sIGhpc3RvcnknLCBkZXNjOiAnU3VtbWFyaXplIGNvbnNlY3V0aXZlIHRvb2wgY2FsbHMgaW4gb25lIHJvdycsIHBhdGg6ICdkaXNwbGF5LmNvbXBhY3RUb29sSGlzdG9yeScgfSxcbiAgICB7IG5hbWU6ICdnaXRTdGF0dXMnLCBsYWJlbDogJ0dpdCBpbmZvcm1hdGlvbicsIGRlc2M6ICdTaG93IGJyYW5jaCBhbmQgY2hhbmdlZCBsaW5lIGNvdW50cycsIHBhdGg6ICdkaXNwbGF5LmdpdFN0YXR1cycgfSxcbiAgICB7IG5hbWU6ICd3aWRlU2lkZWJhcicsIGxhYmVsOiAnV2lkZSBzaWRlYmFyJywgZGVzYzogJ01vdmUgcGFuZWxzIGFuZCBzdGF0dXMgZGV0YWlscyB0byBhIHJpZ2h0IHNpZGViYXIgd2hlbiB0aGUgdGVybWluYWwgaXMgd2lkZXIgdGhhbiAxNjAgY29sdW1ucycsIHBhdGg6ICdkaXNwbGF5LndpZGVTaWRlYmFyJyB9LFxuICBdXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiQ29uZmlndXJhdGlvblwiIGhpbnQ9XCJ0YWI6IG5leHQgc2V0dGluZyAgc3BhY2UvZW50ZXI6IGNoYW5nZSAgZXNjOiBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8RmllbGRMaXN0IGZvY3VzZWQ9e2ZvY3VzZWR9IGluaXRpYWxGb2N1cz1cImNsb3Vkc1wiIHNjcm9sbGJhciBmb2N1c1BhZGRpbmc9ezF9PlxuICAgICAgICAgIHtmaWVsZHMubWFwKChmaWVsZCkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIGtleT17ZmllbGQubmFtZX0gbmFtZT17ZmllbGQubmFtZX0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxDb25maWdGaWVsZCBmaWVsZD17ZmllbGR9IHZhbHVlPXt2YWx1ZXNbZmllbGQubmFtZV19IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoZmllbGQubmFtZSwgdmFsdWUpfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5yZXNlYXJjaE1vZGVsfSBsYWJlbD1cIlBhcmFsbGVsIHdvcmtlciBtb2RlbFwiIHBhdGg9XCJtb2RlbHMucmVzZWFyY2hXb3JrZXJcIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrUmVzZWFyY2hNb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInNoZWxsTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5zaGVsbE1vZGVsfSBsYWJlbD1cIlNoZWxsIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5zaGVsbFwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tTaGVsbE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIHtbJ3BhcnRpY2lwYW50QScsICdwYXJ0aWNpcGFudEInXS5tYXAoKHJvbGUpID0+IChcbiAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtgJHtyb2xlfU1vZGVsYH0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlc1tgJHtyb2xlfU1vZGVsYF19IGxhYmVsPXtgUGFydGljaXBhbnQgJHtyb2xlID09PSAncGFydGljaXBhbnRBJyA/ICdBJyA6ICdCJ30gbW9kZWxgfSBwYXRoPXtgbW9kZWxzLiR7cm9sZX1gfSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17KCkgPT4gb25QaWNrUGFydGljaXBhbnRNb2RlbChyb2xlKX0gLz59XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwiZGVsaWJlcmF0aW9uTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5kZWxpYmVyYXRpb25Nb2RlbH0gbGFiZWw9XCJTeW50aGVzaXMgbW9kZWxcIiBwYXRoPVwibW9kZWxzLmRlbGliZXJhdGlvblwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tEZWxpYmVyYXRpb25Nb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoQWdlbnRMaW1pdFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTnVtYmVyRmllbGQgdmFsdWU9e3ZhbHVlcy5yZXNlYXJjaEFnZW50TGltaXR9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoJ3Jlc2VhcmNoQWdlbnRMaW1pdCcsIHZhbHVlKX0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgPC9GaWVsZExpc3Q+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjb3BlVGFicyh7IHNjb3BlcywgYWN0aXZlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAge3Njb3Blcy5tYXAoKHMsIGkpID0+IChcbiAgICAgICAgPHRleHQga2V5PXtzfSBzdHlsZT17eyBjb2xvcjogaSA9PT0gYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogaSA9PT0gYWN0aXZlIH19PntgJHtpID4gMCA/ICcgICcgOiAnJ30ke3MgPT09ICdjaGVja291dCcgPyAndGhpcyBjaGVja291dCcgOiBzfWB9PC90ZXh0PlxuICAgICAgKSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsUGFuZWwoeyBtb2RlbHMsIGN1cnJlbnQsIGRlZmF1bHROYW1lLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UsIHRpdGxlID0gJ1NlbGVjdCBtb2RlbCcsIGhpbnQgPSAnZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZScgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKG1vZGVsc1swXSB8fCBudWxsKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgcmFua2VkTW9kZWxzID0gcmFua0Z1enp5KG1vZGVscywgcXVlcnkoKSwgKHEsIG1vZGVsKSA9PiBmdXp6eVNjb3JlKHEsIG1vZGVsLm5hbWUpKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgY3Vyc29yKCkpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoY3Vyc29yKCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17aGludH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDEyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cmFua2VkTW9kZWxzfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbW9kZWxzLi4uXCJcbiAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3J9XG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBzY3JvbGxvZmY9ezF9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2ZmID0gbS5hdmFpbGFibGUgPT09IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiAhb2ZmLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogb2ZmID8gTVVURUQgOiBGRyB9fT57bS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGRlZmF1bHROYW1lICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57JyAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAge29mZiA/IGBuZWVkcyAke20ua2V5SGludH1gIDogbS5wcmljZSA/IGAkJHttLnByaWNlLmlufSBpbiAgJCR7bS5wcmljZS5vdXR9IG91dGAgOiBtLnByb3ZpZGVyID09PSAnY29kZXgnID8gJ3N1YnNjcmlwdGlvbicgOiAncHJpY2UgdW5rbm93bid9XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnttLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIaXN0b3J5UGFuZWwoeyBwcm9tcHRzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uUGljaywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChwcm9tcHRzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBhbnlNYXRjaCA9IHByb21wdHMuc29tZSgocCkgPT4gZnV6enlTY29yZShxdWVyeSgpLCBwLnRleHQpID49IDApXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJTZWFyY2ggcHJvbXB0c1wiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gZWRpdCAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17cHJvbXB0c31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9tcHRzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIHApID0+IGZ1enp5U2NvcmUocSwgcC50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhwKSA9PiBzZXRQcmV2aWV3KHApfVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvblBpY2socC50ZXh0KX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsocCwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cC50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhwLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7YW55TWF0Y2ggJiYgcHJldmlldygpID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBwcm9tcHRzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRQaWNrUGFuZWwoeyBlbnRyaWVzLCBzdGF0cywgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKGVudHJpZXNbMF0gfHwgbnVsbClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiUmV3aW5kIHRvIGEgbWVzc2FnZVwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgZW50ZXIgdG8gY2hvb3NlICBlc2MgdG8gY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17ZW50cmllc31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZXNzYWdlcy4uLlwiXG4gICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIG0udGV4dCkgPj0gMH1cbiAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsobSkgPT4gc2V0UHJldmlldyhtKX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e20udGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3N0YXRzKG0uaW5kZXgpLm1zZ3N9IGFmdGVyYH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKSA/IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YHJld2luZGluZyBoZXJlIGRyb3BzICR7c3RhdHMocHJldmlldygpLmluZGV4KS5tc2dzfSBlbnRyaWVzYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLmVkaXRzLm1hcCgobSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICBcdTIxQTkgJHttLnRpdGxlfWB9PC90ZXh0PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIG1lc3NhZ2VzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRBY3Rpb25QYW5lbCh7IHRhcmdldCwgb3B0aW9ucywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQmFjayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXdpbmQgb3B0aW9uczwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J3RvOiAnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dGFyZ2V0LnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17b3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezR9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICBvbkNhbmNlbD17b25CYWNrfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhvLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e28ubGFiZWx9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke28uZGVzY31gfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlciB0byBjb25maXJtICBlc2MgdG8gcGljayBhIGRpZmZlcmVudCBtZXNzYWdlPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZUVzY2FwZShmb2N1c2VkLCBvbkNsb3NlKSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCgpKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VtZVBhbmVsKHsgc2Vzc2lvbnMsIHNjb3Blcywgc2NvcGVJbmRleCwgbG9hZGluZywgZm9jdXNlZCwgY3VycmVudElkLCBvblBpY2ssIG9uRGVsZXRlLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHNlc3Npb25zWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRTZXNzaW9ucyA9IHJhbmtGdXp6eShzZXNzaW9ucywgcXVlcnkoKSwgKHEsIHNlc3Npb24pID0+IHtcbiAgICBjb25zdCBjdXN0b21TY29yZSA9IHNlc3Npb24uY3VzdG9tVGl0bGUgPyBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY3VzdG9tVGl0bGUpIDogLTFcbiAgICBpZiAoY3VzdG9tU2NvcmUgPj0gMCkgcmV0dXJuIDIwXzAwMCArIGN1c3RvbVNjb3JlXG4gICAgcmV0dXJuIE1hdGgubWF4KGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5hdXRvbWF0aWNUaXRsZSB8fCBzZXNzaW9uLnRpdGxlKSwgZnV6enlTY29yZShxLCBzZXNzaW9uLmNoZWNrb3V0IHx8ICcnKSlcbiAgfSlcbiAgY29uc3Qgc2hvd0NoZWNrb3V0cyA9IG5ldyBTZXQoc2Vzc2lvbnMubWFwKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNoZWNrb3V0KS5maWx0ZXIoQm9vbGVhbikpLnNpemUgPiAxXG4gIGNvbnN0IHNlbGVjdGVkU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZiAobG9hZGluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBzZWxlY3RlZCA9IHByZXZpZXcoKVxuICAgIHJldHVybiBzZXNzaW9ucy5pbmNsdWRlcyhzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IG51bGxcbiAgfVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ2xpc3QnID8gJ3ByZXZpZXcnIDogJ2xpc3QnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkU2Vzc2lvbigpXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgc2VsZWN0ZWQpIHtcbiAgICAgIG9uRGVsZXRlKHNlbGVjdGVkKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJSZXN1bWUgYSBzZXNzaW9uXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGVudGVyIHRvIHJlc3VtZSAgY3RybCt4IGRlbGV0ZSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZyBzZXNzaW9ucy4uLjwvdGV4dD5cbiAgICAgICAgICApIDogc2Vzc2lvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cmFua2VkU2Vzc2lvbnN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnbGlzdCcgJiYgIWxvYWRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsocykgPT4gc2V0UHJldmlldyhzKX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IChzaG93Q2hlY2tvdXRzID8gcy5jb2xvciA6IG51bGwpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIHtzaG93Q2hlY2tvdXRzICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCwgYmc6IHNlbGVjdGVkID8gbnVsbCA6IHMuY29sb3IgfX0+e2Ake3MuY2hlY2tvdXR9ICBgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcsIGJnOiBzZWxlY3RlZCB8fCBzaG93Q2hlY2tvdXRzID8gbnVsbCA6IHMuY29sb3IgfX0+e3MudGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICB7cy5oZWFkZXIuaWQgPT09IGN1cnJlbnRJZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+IGN1cnJlbnQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3RpbWVBZ28ocy5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtzZWxlY3RlZFNlc3Npb24oKSA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcmV2aWV3J30gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnN9ICR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlbGVjdGVkU2Vzc2lvbigpLmF0KX0gICR7c2hvcnRlbkhvbWUoc2VsZWN0ZWRTZXNzaW9uKCkuaGVhZGVyLnJvb3QpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgeyhzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3IHx8IFtdKS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgPiBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3TWVzc2FnZUNvdW50IC0gc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldy5sZW5ndGh9IGVhcmxpZXIgbWVzc2FnZXMgb21pdHRlZGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxib3gga2V5PXtgJHttZXNzYWdlLnJvbGV9LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWVzc2FnZS5yb2xlID09PSAndXNlcicgPyBGRyA6IE1VVEVEIH19PnttZXNzYWdlLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdHJhbnNjcmlwdCBwcmV2aWV3PC90ZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVtb3J5UGFuZWwoeyBtZW1vcmllcywgc2NvcGVzLCBzY29wZUluZGV4LCBmb2N1c2VkLCBvblRvZ2dsZURpc2FibGVkLCBvbkZvcmdldCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3JJdGVtLCBzZXRDdXJzb3JJdGVtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ2xpc3QnKVxuICBjb25zdCBwcmV2aWV3ID0gbWVtb3JpZXMuaW5jbHVkZXMoY3Vyc29ySXRlbSgpKSA/IGN1cnNvckl0ZW0oKSA6IG1lbW9yaWVzWzBdIHx8IG51bGxcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIHNldFBhbmUoKHApID0+IChwID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwcmV2aWV3KSB7XG4gICAgICBvbkZvcmdldChwcmV2aWV3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNZW1vcnlcIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlcjogZW5hYmxlL2Rpc2FibGUgIHRhYjogcHJldmlldyAgY3RybCtzIHNjb3BlICBjdHJsK3ggZm9yZ2V0ICh0d2ljZSkgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQwJScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHttZW1vcmllcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWVtb3JpZXMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXttZW1vcmllc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0J31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbWVtb3JpZXMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIGAke20ubmFtZX0gJHttLmRlc2NyaXB0aW9ufWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3JJdGVtfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25Ub2dnbGVEaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgaXRhbGljOiBtLmRpc2FibGVkLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogKG0uZGlzYWJsZWQgPyBNVVRFRCA6IEZHKSB9fT57YCR7bS5kaXNhYmxlZCA/ICcgICAnIDogJyd9JHttLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHttLmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT4gIHN1cHByZXNzZWQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke20uc2NvcGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtwcmV2aWV3ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtwcmV2aWV3LmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT5TVVBQUkVTU0VEPC90ZXh0Pn1cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e3ByZXZpZXcuZGVzY3JpcHRpb24gfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwcmV2aWV3LmJvZHl9PC90ZXh0PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRWZmb3J0UGFuZWwoeyBsZXZlbHMsIGN1cnJlbnQsIGRlZmF1bHRMZXZlbCwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBpdGVtcyA9IGxldmVsc1xuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoaXRlbXNbY3Vyc29yKCldKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgbGFiZWwgPSAobCkgPT4gKGwua2V5ID09PSBudWxsID8gJ2RlZmF1bHQnIDogbC5rZXkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoaW5raW5nIGVmZm9ydFwiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRDdXJzb3J9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhsLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57bGFiZWwobCkucGFkRW5kKE1hdGgubWF4KDEwLCBsYWJlbChsKS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2wuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU3BlZWRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIGxldmVscy5maW5kSW5kZXgoKGwpID0+IGwua2V5ID09PSBjdXJyZW50KSkpXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiBsLmtleSA9PT0gJ2Zhc3QnID8gJ0Zhc3QnIDogJ1N0YW5kYXJkJ1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTcGVlZFwiIGhpbnQ9XCJlbnRlcjogc2Vzc2lvbiAgY3RybCtzOiBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bC51c2FnZS5yZXBsYWNlKC8gdXNhZ2UkLywgJycpfSBpbmNsdWRlZCB1c2FnZWB9PC90ZXh0PlxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+eycgIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAge2wua2V5ID09PSBkZWZhdWx0TGV2ZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lUGFuZWwoeyB0aGVtZXMsIHByZWYsIGZvY3VzZWQsIG9uUGljaywgb25QcmV2aWV3LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbChNYXRoLm1heCgwLCB0aGVtZXMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gcHJlZikpKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJUaGVtZVwiIGhpbnQ9XCJqL2sgdG8gbW92ZSBhbmQgcHJldmlldyAgZW50ZXIgdG8gYXBwbHkgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBpdGVtcz17dGhlbWVzfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17KGkpID0+IHtcbiAgICAgICAgICAgIHNldEN1cnNvcihpKVxuICAgICAgICAgICAgb25QcmV2aWV3KHRoZW1lc1tpXSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsodCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e3Qua2V5LnBhZEVuZChNYXRoLm1heCgxMCwgdC5rZXkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnt0LmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICB7dC5rZXkgPT09IHByZWYgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+eycgIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29udGV4dE92ZXJ2aWV3KHsgb3ZlcnZpZXcgfSkge1xuICBjb25zdCByZXZlYWwgPSB1c2VBbmltYXRlZCgwLCBlYXNlKDcwMCkpXG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHJldmVhbC5zZXQoMSlcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBsYXlvdXQud2lkdGggfHwgMSlcbiAgY29uc3QgdmlzaWJsZSA9IE1hdGgucm91bmQod2lkdGggKiByZXZlYWwoKSlcbiAgY29uc3QgdXNhZ2VXaWR0aCA9IE1hdGgubWF4KDEsIHdpZHRoIC0gNSlcbiAgY29uc3QgdG90YWwgPSBvdmVydmlldy5zZWdtZW50cy5yZWR1Y2UoKHN1bSwgc2VnbWVudCkgPT4gc3VtICsgc2VnbWVudC50b2tlbnMsIDApXG4gIGNvbnN0IHVzZWQgPSBvdmVydmlldy5tZWFzdXJlZCB8fCB0b3RhbFxuICBjb25zdCBwZXJjZW50ID0gdXNlZCAmJiBvdmVydmlldy5saW1pdCA/IE1hdGgubWluKDEwMCwgdXNlZCAvIG92ZXJ2aWV3LmxpbWl0ICogMTAwKSA6IDBcbiAgbGV0IGJvdW5kYXJ5ID0gMFxuICBjb25zdCBjZWxscyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IG92ZXJ2aWV3LnNlZ21lbnRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgIGJvdW5kYXJ5ICs9IGl0ZW0udG9rZW5zIC8gdG90YWwgKiB3aWR0aFxuICAgICAgcmV0dXJuIGkgPCBib3VuZGFyeVxuICAgIH0pXG4gICAgYm91bmRhcnkgPSAwXG4gICAgY2VsbHMucHVzaChcbiAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IGkgPj0gdmlzaWJsZSA/IFBBTkVMX0JHIDogc2VnbWVudD8uY29sb3IgfHwgTVVURUQgfX0+XG4gICAgICAgIHtpID49IHZpc2libGUgPyAnICcgOiBzZWdtZW50ID8gJ1x1MjU4OCcgOiAnXHUyNTkxJ31cbiAgICAgIDwvdGV4dD4sXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZm9ybWF0VG9rZW5zID0gKHRva2VucykgPT4gdG9rZW5zIDwgMTAwMCA/IGAke01hdGgucm91bmQodG9rZW5zKX0gdG9rYCA6IGAkeyh0b2tlbnMgLyAxMDAwKS50b0ZpeGVkKDEpfWtgXG4gIGNvbnN0IGxlZ2VuZFJvd3MgPSAoKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9IFtbXV1cbiAgICBsZXQgdXNlZCA9IDBcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb3ZlcnZpZXcuc2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IHNlZ21lbnQubGFiZWwubGVuZ3RoICsgZm9ybWF0VG9rZW5zKHNlZ21lbnQudG9rZW5zKS5sZW5ndGggKyA1XG4gICAgICBpZiAodXNlZCA+IDAgJiYgdXNlZCArIGl0ZW1XaWR0aCA+IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKSkge1xuICAgICAgICByb3dzLnB1c2goW10pXG4gICAgICAgIHVzZWQgPSAwXG4gICAgICB9XG4gICAgICByb3dzLmF0KC0xKS5wdXNoKHNlZ21lbnQpXG4gICAgICB1c2VkICs9IGl0ZW1XaWR0aFxuICAgIH1cbiAgICByZXR1cm4gcm93c1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7cGVyY2VudCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e3BlcmNlbnR9IGluaXRpYWw9ezB9IGR1cmF0aW9uPXsxMDAwfSBjb2xvcj17cGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGJhY2tncm91bmQ9e1NFTEVDVF9CR30gZm9ybWF0PXsodmFsdWUpID0+IGNvbnRleHRCYXIodmFsdWUsIHVzYWdlV2lkdGgpfSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwZXJjZW50ID49IDgwID8gUkVEIDogTVVURUQgfX0+e2Ake292ZXJ2aWV3Lm1lYXN1cmVkID8gJycgOiAnfid9JHtNYXRoLnJvdW5kKHBlcmNlbnQpfSVgLnBhZFN0YXJ0KDUpfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT57Y2VsbHN9PC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7bGVnZW5kUm93cygpLm1hcCgocm93LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgIDxib3gga2V5PXtyb3dJbmRleH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7cm93Lm1hcCgoc2VnbWVudCkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IGtleT17c2VnbWVudC5sYWJlbH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpblJpZ2h0OiAyIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWdtZW50LmNvbG9yIH19Plx1MjVBMDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgJHtzZWdtZW50LmxhYmVsfSBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlZ21lbnQudG9rZW5zfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17MH1cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPXsyMDAwfVxuICAgICAgICAgICAgICAgICAgY29sb3I9e01VVEVEfVxuICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0PXthY2NlbnQoKX1cbiAgICAgICAgICAgICAgICAgIGZvcm1hdD17Zm9ybWF0VG9rZW5zfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEluZm9MaXN0UGFuZWwoeyB0aXRsZSwgcm93cywgb3ZlcnZpZXcsIGZvY3VzZWQsIG9uQ2xvc2UgfSkge1xuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgY2xvc2VcIj5cbiAgICAgIHtvdmVydmlldyAmJiA8Q29udGV4dE92ZXJ2aWV3IG92ZXJ2aWV3PXtvdmVydmlld30gLz59XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDE0LCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIHtyb3dzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm90aGluZyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtgJHtyb3cubmFtZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pntyb3cubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICB7cm93Lm5vdGUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cubm90ZX08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cm93LmRlc2MgfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb2plY3RQYW5lbCh7IHByb2plY3RzLCBsb2FkaW5nLCBmb2N1c2VkLCBvblBpY2tDaGVja291dCwgb25QaWNrU2Vzc2lvbiwgb25BZGRXb3JrdHJlZSwgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCByb3dzID0gcHJvamVjdHMuZmxhdE1hcCgocHJvamVjdCkgPT4gcHJvamVjdC5jaGVja291dHMubWFwKChjaGVja291dCwgaW5kZXgpID0+ICh7XG4gICAgLi4uY2hlY2tvdXQsXG4gICAgcHJvamVjdFBhdGg6IHByb2plY3QucGF0aCxcbiAgICBncm91cGVkOiBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggPiAxLFxuICAgIGZpcnN0OiBpbmRleCA9PT0gMCxcbiAgICBsYXN0OiBpbmRleCA9PT0gcHJvamVjdC5jaGVja291dHMubGVuZ3RoIC0gMSxcbiAgfSkpKVxuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwocm93c1swXSB8fCBudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ3Byb2plY3RzJylcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIGlmIChwcmV2aWV3KCk/LnNlc3Npb25zLmxlbmd0aCkgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ3Byb2plY3RzJyA/ICdzZXNzaW9ucycgOiAncHJvamVjdHMnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkFkZFdvcmt0cmVlKHByZXZpZXcoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHBhbmUoKSA9PT0gJ3Byb2plY3RzJyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcoKSkge1xuICAgICAgb25EZWxldGUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY2hlY2tvdXRMYWJlbCA9IChyb3cpID0+IGAke3Jvdy5sYXN0ID8gJ1x1MjUxNFx1MjUwMCcgOiAnXHUyNTFDXHUyNTAwJ30gJHtyb3cuYnJhbmNoIHx8IChyb3cud29ya3RyZWUgPyByb3cucGF0aCA6ICdtYWluJyl9YFxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTd2l0Y2ggcHJvamVjdFwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgbW92ZSAgdGFiIHN3aXRjaCBwYW5lICBlbnRlciBvcGVuICBjdHJsK3QgbmV3IHdvcmt0cmVlICBjdHJsK3ggZGVsZXRlICBlc2MgY2xvc2VcIiBmdWxsU2NyZWVuPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0NCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHByb2plY3RzLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiByb3dzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBrbm93biBwcm9qZWN0cyB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyb3dzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Byb2plY3RzJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgcHJvamVjdHMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgcm93KSA9PiBmdXp6eVNjb3JlKHF1ZXJ5LCBgJHtyb3cucHJvamVjdFBhdGh9ICR7cm93LmJyYW5jaCB8fCAnJ31gKSA+PSAwfVxuICAgICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17c2V0UHJldmlld31cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja0NoZWNrb3V0fVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHJvdywgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAge3Jvdy5ncm91cGVkICYmIHJvdy5maXJzdCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2BcdTI1QkUgJHtyb3cucHJvamVjdFBhdGh9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGFjdGl2ZSA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cm93Lmdyb3VwZWQgPyBgICAke2NoZWNrb3V0TGFiZWwocm93KX1gIDogcm93LnByb2plY3RQYXRofTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtyb3cuY3VycmVudCA/ICdjdXJyZW50ICAnIDogJyd9JHtyb3cubGF0ZXN0ID8gdGltZUFnbyhyb3cubGF0ZXN0LmF0KSA6ICdubyBzZXNzaW9ucyd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoID8gKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGtleT17cHJldmlldygpLnJvb3R9XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3ByZXZpZXcoKS5zZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdzZXNzaW9ucyd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsocXVlcnksIHNlc3Npb24pID0+IGZ1enp5U2NvcmUocXVlcnksIHNlc3Npb24udGl0bGUpID49IDB9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2tTZXNzaW9ufVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHNlc3Npb24sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGFjdGl2ZSA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e3Nlc3Npb24udGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c2Vzc2lvbi50dXJuc30gJHtzZXNzaW9uLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhzZXNzaW9uLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29ubmVjdFBhbmVsKHsgcHJvdmlkZXJzLCBmb2N1c2VkLCBvbkNvbm5lY3QsIG9uRGlzY29ubmVjdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gcHJvdmlkZXJzW01hdGgubWluKGluZGV4KCksIHByb3ZpZGVycy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgcCA9IHNlbGVjdGVkKClcbiAgICBpZiAocCAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHAuY29ubmVjdGVkKSB7XG4gICAgICBvbkRpc2Nvbm5lY3QocClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25uZWN0IGEgc3Vic2NyaXB0aW9uXCIgaGludD1cImVudGVyIHNpZ24gaW4gIGN0cmwreCBkaXNjb25uZWN0ICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cHJvdmlkZXJzfVxuICAgICAgICAgIHNlbGVjdGVkPXtpbmRleCgpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXsocCkgPT4gb25Db25uZWN0KHApfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogcC5jb25uZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntwLmNvbm5lY3RlZCA/ICdcdTI1QUEnIDogJ1x1MjVBQid9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3AubGFiZWx9ICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICB7cC5jb25uZWN0ZWQgPyBgY29ubmVjdGVkJHtwLmVtYWlsID8gYCBhcyAke3AuZW1haWx9YCA6ICcnfWAgOiAnbm90IGNvbm5lY3RlZCd9XG4gICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdha2V1cHNQYW5lbCh7IHdha2V1cHMsIGZvY3VzZWQsIG9uQ2FuY2VsLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3RpY2ssIHNldFRpY2tdID0gY3JlYXRlU2lnbmFsKDApXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnRlcnZhbCgoKSA9PiBzZXRUaWNrKCh0KSA9PiB0ICsgMSksIDEwMDApXG4gIHZvaWQgdGljaygpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiB3YWtldXBzW01hdGgubWluKGluZGV4KCksIHdha2V1cHMubGVuZ3RoIC0gMSldIHx8IG51bGxcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGNvbnN0IHcgPSBzZWxlY3RlZCgpXG4gICAgaWYgKHcgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25DYW5jZWwodylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGNvdW50ZG93biA9IChhdCkgPT4ge1xuICAgIGNvbnN0IHNlY3MgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChhdCAtIERhdGUubm93KCkpIC8gMTAwMCkpXG4gICAgaWYgKHNlY3MgPCA2MCkgcmV0dXJuIGBpbiAke3NlY3N9c2BcbiAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihzZWNzIC8gNjApXG4gICAgaWYgKG1pbnMgPCA2MCkgcmV0dXJuIGBpbiAke21pbnN9bSAke3NlY3MgJSA2MH1zYFxuICAgIHJldHVybiBgaW4gJHtNYXRoLmZsb29yKG1pbnMgLyA2MCl9aCAke21pbnMgJSA2MH1tYFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNjaGVkdWxlZCB3YWtlLXVwc1wiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXIgb3IgY3RybCt4IGNhbmNlbCAodHdpY2UpICBlc2MgY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3dha2V1cHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBwZW5kaW5nIHdha2UtdXBzICB0aGUgYWdlbnQgc2NoZWR1bGVzIHRoZW0gd2l0aCBzY2hlZHVsZV93YWtldXA8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXt3YWtldXBzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgICBvblN1Ym1pdD17KHcpID0+IG9uQ2FuY2VsKHcpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsodywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2BcdTIzRjAgJHt3LmlkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntjb3VudGRvd24ody5hdCl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke25ldyBEYXRlKHcuYXQpLnRvTG9jYWxlVGltZVN0cmluZygpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSwgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHX1NPRlQgfX0+e3cubm90ZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIG1jcFN0YXR1cyhzdGF0dXMpIHtcbiAgY29uc3QgcGFsZXR0ZSA9IHtcbiAgICBjb25uZWN0ZWQ6IHsgaWNvbjogJ1x1MjVBQScsIGNvbG9yOiBhY2NlbnQoKSB9LFxuICAgIGNvbm5lY3Rpbmc6IHsgaWNvbjogJ1x1MjVDQycsIGNvbG9yOiAnI2ZiYmYyNCcgfSxcbiAgICBlcnJvcjogeyBpY29uOiAnXHUyNzE3JywgY29sb3I6IFJFRCB9LFxuICAgIGRpc2FibGVkOiB7IGljb246ICdcdTI1QUInLCBjb2xvcjogTVVURUQgfSxcbiAgICBpZGxlOiB7IGljb246ICdcdTI1QUInLCBjb2xvcjogTVVURUQgfSxcbiAgfVxuICByZXR1cm4gcGFsZXR0ZVtzdGF0dXNdIHx8IHBhbGV0dGUuaWRsZVxufVxuXG5mdW5jdGlvbiBGb3JtRmllbGQoeyBsYWJlbCwgYWN0aXZlLCBjaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntsYWJlbH08L3RleHQ+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcFNlcnZlckZvcm0oeyBmb2N1c2VkLCBzZXJ2ZXIsIG9uU2F2ZSwgb25JbnZhbGlkLCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IGluaXRpYWwgPSBzZXJ2ZXIgPyBwYXJzZVNlcnZlclNwZWMoc2VydmVyLmNvbW1hbmQpIDogbnVsbFxuICBjb25zdCBlZGl0aW5nID0gISFzZXJ2ZXJcbiAgY29uc3QgW25hbWUsIHNldE5hbWVdID0gY3JlYXRlU2lnbmFsKHNlcnZlcj8ubmFtZSB8fCAnJylcbiAgY29uc3QgW3Njb3BlLCBzZXRTY29wZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5zY29wZSB8fCAnZ2xvYmFsJylcbiAgY29uc3QgW3RyYW5zcG9ydCwgc2V0VHJhbnNwb3J0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlIHx8ICdzdGRpbycpXG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldF0gPSBjcmVhdGVTaWduYWwoaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnID8gaW5pdGlhbC51cmwgOiBzZXJ2ZXI/LmNvbW1hbmQgfHwgJycpXG4gIGNvbnN0IGluaXRpYWxIZWFkZXJzID0gaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmtleXMoaW5pdGlhbC5oZWFkZXJzKS5tYXAoKG5hbWUpID0+IFtuYW1lLCBSRURBQ1RFRF9IRUFERVJdKSlcbiAgICA6IHt9XG4gIGNvbnN0IFtoZWFkZXJzLCBzZXRIZWFkZXJzXSA9IGNyZWF0ZVNpZ25hbChmb3JtYXRIdHRwU2VydmVyU3BlYygnJywgaW5pdGlhbEhlYWRlcnMpLnRyaW0oKSlcblxuICBjb25zdCBmbSA9IHVzZUZvY3VzKHsgaW5pdGlhbDogZWRpdGluZyA/ICd0cmFuc3BvcnQnIDogJ25hbWUnIH0pXG4gIGlmICghZWRpdGluZykge1xuICAgIGZtLml0ZW0oJ25hbWUnKVxuICAgIGZtLml0ZW0oJ3Njb3BlJylcbiAgfVxuICBmbS5pdGVtKCd0cmFuc3BvcnQnKVxuICBmbS5pdGVtKCd0YXJnZXQnKVxuICBpZiAodHJhbnNwb3J0KCkgPT09ICdodHRwJykgZm0uaXRlbSgnaGVhZGVycycpXG4gIGZtLml0ZW0oJ3NhdmUnKVxuICBmbS5pdGVtKCdjYW5jZWwnKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGh0dHAgPSB0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnXG5cbiAgY29uc3Qgc3VibWl0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlck5hbWUgPSBuYW1lKCkudHJpbSgpXG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQoKS50cmltKClcbiAgICBpZiAoIXNlcnZlck5hbWUgfHwgL1xccy8udGVzdChzZXJ2ZXJOYW1lKSkgcmV0dXJuIG9uSW52YWxpZCgnbmFtZSBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGNvbnRhaW4gc3BhY2VzJylcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gb25JbnZhbGlkKGh0dHAgPyAndXJsIGlzIHJlcXVpcmVkJyA6ICdjb21tYW5kIGlzIHJlcXVpcmVkJylcbiAgICBpZiAoaHR0cCAmJiAhL15odHRwcz86XFwvXFwvLy50ZXN0KHZhbHVlKSkgcmV0dXJuIG9uSW52YWxpZCgndXJsIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vJylcbiAgICBpZiAoIWh0dHAgJiYgL15odHRwcz86XFwvXFwvLy50ZXN0KHZhbHVlKSkgcmV0dXJuIG9uSW52YWxpZCgnYSBzdGRpbyBjb21tYW5kIGNhbm5vdCBzdGFydCB3aXRoIGEgdXJsOyBwaWNrIHRoZSBodHRwIHRyYW5zcG9ydCcpXG4gICAgY29uc3QgZXh0cmEgPSBoZWFkZXJzKCkudHJpbSgpXG4gICAgbGV0IHNwZWMgPSBodHRwICYmIGV4dHJhID8gYCR7dmFsdWV9ICR7ZXh0cmF9YCA6IHZhbHVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2VydmVyU3BlYyhzcGVjKVxuICAgICAgaWYgKHBhcnNlZC50eXBlID09PSAnaHR0cCcgJiYgaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2hlYWRlciwgaGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZC5oZWFkZXJzKSkge1xuICAgICAgICAgIGlmIChoZWFkZXJWYWx1ZSA9PT0gUkVEQUNURURfSEVBREVSICYmIGluaXRpYWwuaGVhZGVyc1toZWFkZXJdICE9PSB1bmRlZmluZWQpIHBhcnNlZC5oZWFkZXJzW2hlYWRlcl0gPSBpbml0aWFsLmhlYWRlcnNbaGVhZGVyXVxuICAgICAgICB9XG4gICAgICAgIHNwZWMgPSBmb3JtYXRIdHRwU2VydmVyU3BlYyhwYXJzZWQudXJsLCBwYXJzZWQuaGVhZGVycylcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBvbkludmFsaWQoZXJyLm1lc3NhZ2UpXG4gICAgfVxuICAgIG9uU2F2ZShzZXJ2ZXJOYW1lLCBzcGVjLCBzY29wZSgpKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7IWVkaXRpbmcgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwibmFtZVwiIGFjdGl2ZT17Zm0uaXMoJ25hbWUnKX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCduYW1lJyl9IHBsYWNlaG9sZGVyPVwibGluZWFyXCIgb25DaGFuZ2U9e3NldE5hbWV9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJzY29wZVwiIGFjdGl2ZT17Zm0uaXMoJ3Njb3BlJyl9PlxuICAgICAgICAgIDxSYWRpbyBvcHRpb25zPXtbJ2dsb2JhbCcsICdwcm9qZWN0J119IHNlbGVjdGVkPXtzY29wZSgpfSBvbkNoYW5nZT17c2V0U2NvcGV9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3Njb3BlJyl9IC8+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJ0cmFuc3BvcnRcIiBhY3RpdmU9e2ZtLmlzKCd0cmFuc3BvcnQnKX0+XG4gICAgICAgIDxSYWRpbyBvcHRpb25zPXtbJ3N0ZGlvJywgJ2h0dHAnXX0gc2VsZWN0ZWQ9e3RyYW5zcG9ydCgpfSBvbkNoYW5nZT17c2V0VHJhbnNwb3J0fSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCd0cmFuc3BvcnQnKX0gLz5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD17aHR0cCA/ICd1cmwnIDogJ2NvbW1hbmQnfSBhY3RpdmU9e2ZtLmlzKCd0YXJnZXQnKX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCd0YXJnZXQnKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtodHRwID8gJ2h0dHBzOi8vbWNwLmxpbmVhci5hcHAvbWNwJyA6ICducHggLXkgQG1vZGVsY29udGV4dHByb3RvY29sL3NlcnZlci1maWxlc3lzdGVtIC90bXAnfVxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0YXJnZXQoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRUYXJnZXR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgIHtodHRwICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cImhlYWRlcnMgIG9wdGlvbmFsXCIgYWN0aXZlPXtmbS5pcygnaGVhZGVycycpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ2hlYWRlcnMnKX0gcGxhY2Vob2xkZXI9J0F1dGhvcml6YXRpb249XCJCZWFyZXIgLi4uXCIgWC1UZWFtPVwiY29yZVwiJyBpbml0aWFsVmFsdWU9e2hlYWRlcnMoKX0gb25DaGFuZ2U9e3NldEhlYWRlcnN9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2VkaXRpbmcgPyAnc2F2ZScgOiAnYWRkJ30gb25QcmVzcz17c3VibWl0fSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCdzYXZlJyl9IC8+XG4gICAgICAgIDx0ZXh0PiAgPC90ZXh0PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPVwiY2FuY2VsXCIgb25QcmVzcz17b25DYW5jZWx9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ2NhbmNlbCcpfSB2YXJpYW50PVwiZGltXCIgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNY3BQYW5lbCh7IHNlcnZlcnMsIGZvY3VzZWQsIG9uVG9nZ2xlLCBvblJlY29ubmVjdCwgb25SZW1vdmUsIG9uQWRkLCBvbkVkaXQsIG9uSW52YWxpZCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtmb3JtLCBzZXRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdmlld2luZywgc2V0Vmlld2luZ10gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQgJiYgIWZvcm0oKSwgKCkgPT4gKHZpZXdpbmcoKSA/IHNldFZpZXdpbmcobnVsbCkgOiBvbkNsb3NlKCkpKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gc2VydmVyc1tNYXRoLm1pbihpbmRleCgpLCBzZXJ2ZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG4gIGNvbnN0IHZpZXdlZCA9ICgpID0+IHNlcnZlcnMuZmluZCgocykgPT4gcy5uYW1lID09PSB2aWV3aW5nKCkpIHx8IG51bGxcblxuICBpZiAodmlld2luZygpICYmIHZpZXdlZCgpKSB7XG4gICAgY29uc3Qgc2VydmVyID0gdmlld2VkKClcbiAgICBjb25zdCBkZXNjcmliZSA9ICh0KSA9PiB0LmRlc2NyaXB0aW9uLnJlcGxhY2UoL15cXFtbXlxcXV0qXFxdXFxzKi8sICcnKS50cmltKCkgfHwgJ25vIGRlc2NyaXB0aW9uJ1xuICAgIHJldHVybiAoXG4gICAgICA8UGFuZWxGcmFtZVxuICAgICAgICB0aXRsZT17YE1DUCBzZXJ2ZXJzICAke3NlcnZlci5uYW1lfSAgJHtzZXJ2ZXIudG9vbHMubGVuZ3RofSAke3NlcnZlci50b29scy5sZW5ndGggPT09IDEgPyAndG9vbCcgOiAndG9vbHMnfWB9XG4gICAgICAgIGhpbnQ9XCJqL2sgb3IgXHUyMTkxXHUyMTkzIHRvIHNjcm9sbCAgZXNjIGJhY2sgdG8gc2VydmVyc1wiXG4gICAgICAgIGZ1bGxTY3JlZW5cbiAgICAgID5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge3NlcnZlci50b29scy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdG9vbHMgcmVwb3J0ZWQgIGlzIHRoZSBzZXJ2ZXIgY29ubmVjdGVkPzwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtzZXJ2ZXIudG9vbHMubWFwKCh0LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBrZXk9e3QubmFtZX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pnt0Lm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkZXNjcmliZSh0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L1BhbmVsRnJhbWU+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNQ1Agc2VydmVyc1wiXG4gICAgICBoaW50PXtmb3JtKClcbiAgICAgICAgPyAndGFiIG1vdmVzIGJldHdlZW4gZmllbGRzICBqL2sgKyBzcGFjZSBwaWNrcyBhIHJhZGlvIG9wdGlvbiAgZXNjIGNhbmNlbHMnXG4gICAgICAgIDogJ2VudGVyIGVuYWJsZS9kaXNhYmxlICB0IHRvb2xzICBlIGVkaXQgIHIgcmVjb25uZWN0ICBhIGFkZCAgY3RybCt4IHJlbW92ZSAodHdpY2UpICBlc2MgY2xvc2UnfVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICB7Zm9ybSgpID8gKFxuICAgICAgICAgIDxNY3BTZXJ2ZXJGb3JtXG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgc2VydmVyPXtmb3JtKCkgPT09ICdhZGQnID8gbnVsbCA6IGZvcm0oKX1cbiAgICAgICAgICAgIG9uU2F2ZT17KG5hbWUsIHNwZWMsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb3JtKCkgPT09ICdhZGQnKSBvbkFkZChuYW1lLCBzcGVjLCBzY29wZSlcbiAgICAgICAgICAgICAgZWxzZSBvbkVkaXQobmFtZSwgc3BlYylcbiAgICAgICAgICAgICAgc2V0Rm9ybShudWxsKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uSW52YWxpZD17b25JbnZhbGlkfVxuICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldEZvcm0obnVsbCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IHNlcnZlcnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBNQ1Agc2VydmVycyBjb25maWd1cmVkICBwcmVzcyBhIHRvIGFkZCBvbmU8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtzZXJ2ZXJzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHMpID0+IG9uVG9nZ2xlKHMubmFtZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IGFjdGl2ZSB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ID0gbWNwU3RhdHVzKHMuc3RhdHVzKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc3QuY29sb3IgfX0+e3N0Lmljb259PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3MubmFtZS5wYWRFbmQoTWF0aC5tYXgoMTQsIHMubmFtZS5sZW5ndGggKyAxKSl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHMuc3RhdHVzID09PSAnZXJyb3InID8gUkVEIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdlcnJvcicgPyBzLmVycm9yIDogcy5zdGF0dXMgPT09ICdjb25uZWN0ZWQnID8gYCR7cy50b29sQ291bnR9IHRvb2xzYCA6IHMuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQ+eycgICAgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57c2hvcnRlbkhvbWUocmVkYWN0U2VydmVyU3BlYyhzLmNvbW1hbmQpKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7cy5zY29wZSA9PT0gJ3Byb2plY3QnID8gJ3Byb2plY3QnIDogJ2dsb2JhbCd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICB7IWZvcm0oKSAmJiAoXG4gICAgICAgIDxNY3BLZXlzXG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBvbktleT17KGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHNlbGVjdGVkKClcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdhJykgc2V0Rm9ybSgnYWRkJylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAnZScpIHNldEZvcm0ocylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncicpIG9uUmVjb25uZWN0KHMubmFtZSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncmVtb3ZlJykgb25SZW1vdmUocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICd0Jykgc2V0Vmlld2luZyhzLm5hbWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcEtleXMoeyBmb2N1c2VkLCBvbktleSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIG9uS2V5KCdyZW1vdmUnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgWydhJywgJ2UnLCAncicsICd0J10uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgb25LZXkoZXZlbnQua2V5KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiBudWxsXG59XG4iLCAiaW1wb3J0IHsgZWFzZSwgbGluZWFyLCB1c2VBbmltYXRlZCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcblxuZnVuY3Rpb24gdG9SZ2IoY29sb3IpIHtcbiAgaWYgKGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoNSwgNyksIDE2KSxcbiAgICBdXG4gIH1cbiAgcmV0dXJuIFsxMjcsIDEyNywgMTI3XVxufVxuXG5mdW5jdGlvbiBtaXhDb2xvcihmcm9tLCB0bywgYW1vdW50KSB7XG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIGZyb21cbiAgY29uc3QgYSA9IHRvUmdiKGZyb20pXG4gIGNvbnN0IGIgPSB0b1JnYih0bylcbiAgY29uc3QgY2hhbm5lbHMgPSBhLm1hcCgodmFsdWUsIGkpID0+IE1hdGgucm91bmQodmFsdWUgKyAoYltpXSAtIHZhbHVlKSAqIGFtb3VudCkpXG4gIHJldHVybiBgIyR7Y2hhbm5lbHMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFuaW1hdGVkVmFsdWUoeyB2YWx1ZSwgaW5pdGlhbCA9IHZhbHVlLCBkdXJhdGlvbiA9IDEwMDAsIGNvbG9yLCBoaWdobGlnaHQsIGJhY2tncm91bmQsIGZvcm1hdCA9IFN0cmluZyB9KSB7XG4gIGNvbnN0IGRpc3BsYXllZCA9IHVzZUFuaW1hdGVkKGluaXRpYWwsIGVhc2UoZHVyYXRpb24pKVxuICBjb25zdCBnbG93ID0gdXNlQW5pbWF0ZWQoMCwgZWFzZShkdXJhdGlvbiwgbGluZWFyKSlcblxuICBpZiAodmFsdWUgIT09IGRpc3BsYXllZC5fYW5pbS50YXJnZXQpIHtcbiAgICBkaXNwbGF5ZWQuc2V0KHZhbHVlKVxuICAgIGdsb3cuc25hcCgxKVxuICAgIGdsb3cuc2V0KDApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihjb2xvciwgaGlnaGxpZ2h0LCBnbG93KCkpLCBiZzogYmFja2dyb3VuZCB9fT5cbiAgICAgIHtmb3JtYXQoZGlzcGxheWVkKCkpfVxuICAgIDwvdGV4dD5cbiAgKVxufVxuIiwgImNvbnN0IExFVkVMUyA9IFsnICcsICdcdTI1OEYnLCAnXHUyNThFJywgJ1x1MjU4RCcsICdcdTI1OEMnLCAnXHUyNThCJywgJ1x1MjU4QScsICdcdTI1ODknLCAnXHUyNTg4J11cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHRCYXIocGVyY2VudCwgd2lkdGggPSA0KSB7XG4gIGNvbnN0IGVpZ2h0aHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcGVyY2VudCkpICogd2lkdGggKiA4IC8gMTAwKVxuICBjb25zdCBmdWxsID0gTWF0aC5mbG9vcihlaWdodGhzIC8gOClcbiAgY29uc3QgcGFydGlhbCA9IGVpZ2h0aHMgJSA4XG4gIHJldHVybiAnXHUyNTg4Jy5yZXBlYXQoZnVsbCkgKyAocGFydGlhbCA/IExFVkVMU1twYXJ0aWFsXSA6ICcnKSArICcgJy5yZXBlYXQod2lkdGggLSBmdWxsIC0gKHBhcnRpYWwgPyAxIDogMCkpXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUdyb3Vwcyhyb3dzKSB7XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgaWYgKCFyb3cubmFtZT8udHJpbSgpKSBjb250aW51ZVxuICAgIGlmICghZ3JvdXBzLmhhcyhyb3cuY3dkKSkgZ3JvdXBzLnNldChyb3cuY3dkLCBbXSlcbiAgICBncm91cHMuZ2V0KHJvdy5jd2QpLnB1c2gocm93KVxuICB9XG4gIHJldHVybiBbLi4uZ3JvdXBzXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKS5tYXAoKFtjd2QsIHNlc3Npb25zXSkgPT4gKHsgY3dkLCBzZXNzaW9ucyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZVNlbGVjdGlvbihyb3dzLCBzZWxlY3RlZCwgcHJldmlvdXMgPSBbXSkge1xuICBpZiAocm93cy5zb21lKChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKSByZXR1cm4gc2VsZWN0ZWRcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCBwcmV2aW91cy5maW5kSW5kZXgoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpXG4gIHJldHVybiByb3dzW01hdGgubWluKGluZGV4LCByb3dzLmxlbmd0aCAtIDEpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlTmF2aWdhdGUocm93cywgc2VsZWN0ZWQsIGV2ZW50LCBoZWlnaHQpIHtcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCByb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgY29uc3QgaGFsZiA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gNikpXG4gIGxldCBuZXh0XG4gIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gaW5kZXggKyBoYWxmXG4gIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBpbmRleCAtIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCB8fCBldmVudC5tZXRhIHx8IGV2ZW50LmFsdCkgcmV0dXJuIHVuZGVmaW5lZFxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IGluZGV4ICsgMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSBpbmRleCAtIDFcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gcm93cy5sZW5ndGggLSAxXG4gIGVsc2UgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gcm93c1tNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dzLmxlbmd0aCAtIDEsIG5leHQpKV0/LmlkID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHModGV4dCwgYXR0YWNobWVudHMpIHtcbiAgcmV0dXJuIFsuLi50ZXh0Lm1hdGNoQWxsKC9cXFsoPzpJbWFnZXxGaWxlKSAjXFxkK1xcXS9nKV0uZmlsdGVyKG1hdGNoID0+IGF0dGFjaG1lbnRzLmhhcyhtYXRjaFswXSkpLmxlbmd0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7IHRleHQsIGF0dGFjaG1lbnRzLCBkaWN0YXRpb24sIGNhcHR1cmUsIHBlbmRpbmcsIGhpc3RvcnksIGNvbXBsZXRpb24sIGNvbW1hbmQsIHF1ZXN0aW9uLCBzdGVlciB9KSB7XG4gIHJldHVybiB0ZXh0ID09PSAnJyAmJiBhdHRhY2htZW50cyA9PT0gMCAmJiBkaWN0YXRpb24gPT09ICdpZGxlJyAmJiBjYXB0dXJlID09PSAnaWRsZScgJiYgIXBlbmRpbmcgJiYgaGlzdG9yeSA8IDAgJiYgIWNvbXBsZXRpb24gJiYgIWNvbW1hbmQgJiYgIXF1ZXN0aW9uICYmICFzdGVlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlQWN0aW9uKHJvdykge1xuICByZXR1cm4gcm93Py5zdGF0dXMgPT09ICdidXN5JyA/ICdpbnRlcnJ1cHQnIDogcm93Py5zdGF0dXMgPT09ICdpZGxlJyA/ICdkZW1vdGUnIDogbnVsbFxufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNpZGViYXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzeCdcbmltcG9ydCB7IHdvcmtzcGFjZUdyb3Vwcywgd29ya3NwYWNlU2VsZWN0aW9uLCB3b3Jrc3BhY2VOYXZpZ2F0ZSwgd29ya3NwYWNlQWN0aW9uLCB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzLCBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyIH0gZnJvbSAnLi93b3Jrc3BhY2Utc2lkZWJhci5qcydcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NraWxscy5qcydcbmltcG9ydCB7IGV4cGFuZENvbW1hbmQsIHBhcnNlQ29tbWFuZEFyZ3VtZW50cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBjb21tYW5kQXQsIHJlcGxhY2VDb21tYW5kLCBjb21tYW5kRmllbGRzIH0gZnJvbSAnLi9jb21wb3Nlci1jb21tYW5kcy5qcydcbmltcG9ydCB7IENvbW1hbmRGb3JtIH0gZnJvbSAnLi9jb21tYW5kLWZvcm0uanN4J1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb24gfSBmcm9tICcuLi9kaWN0YXRpb24uanMnXG5pbXBvcnQgeyByZWFkQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi9jbGlwYm9hcmQuanMnXG5pbXBvcnQgeyBjcmVhdGVDbGlwYm9hcmRJbnB1dCB9IGZyb20gJy4vY2xpcGJvYXJkLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uSW5wdXQgfSBmcm9tICcuL2RpY3RhdGlvbi1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCB9IGZyb20gJy4vc2NyZWVuLWNhcHR1cmUtaW5wdXQuanMnXG5pbXBvcnQgeyBjYXB0dXJlUmVnaW9uIH0gZnJvbSAnLi4vc2NyZWVuLWNhcHR1cmUuanMnXG5pbXBvcnQgeyBjcmVhdGVDb21wb3NlckZpbGVzIH0gZnJvbSAnLi9jb21wb3Nlci1maWxlcy5qcydcbmltcG9ydCB7IGRpY3RhdGlvbkluZGljYXRvciwgYXBwZW5kTGV2ZWwgfSBmcm9tICcuL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMnXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCBvbkNsZWFudXAsIE1lbnUsIFByb2dyZXNzQmFyLCBTY3JvbGxCb3gsIFNoaW1tZXIsIFNwaW5uZXIsIFRleHRBcmVhLCB1c2VGb2N1cywgdXNlRm9jdXNUcmFwLCB1c2VGcmFtZVN0YXRzLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTGF5b3V0LCB1c2VNb3VzZSwgdXNlUmVzaXplLCB1c2VDb2xvclNjaGVtZSwgdXNlU2VsZWN0aW9uLCB1c2VUb2FzdCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IG1ha2VFdmVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZXZlbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdFNlc3Npb25zLCBkZWxldGVTZXNzaW9uLCBkZWxldGVQcm9qZWN0RGF0YSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2Vzc2lvbi5qcydcbmltcG9ydCB7IHVzZXJFbnRyaWVzLCByZXdpbmRTdGF0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgbG9hZFByb2plY3RQcm9tcHRzLCBsb2FkR2xvYmFsUHJvbXB0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvaGlzdG9yeS5qcydcbmltcG9ydCB7IGltcGxpY2l0UmV3aW5kVGFyZ2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS9yZXdpbmQuanMnXG5pbXBvcnQgeyBjaGVja0ZvclVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24sIGlzRGV2SW5zdGFsbCwgcnVuVXBkYXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS91cGRhdGUuanMnXG5pbXBvcnQgeyBTVEVFUl9ST0xFUywgc3RlZXJhYmxlVHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3RlZXIuanMnXG5pbXBvcnQgeyB3cml0ZUNvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgb3BlbmFpU3RhdHVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcydcbmltcG9ydCB7IEVGRk9SVF9MRVZFTFMsIFNQRUVEX0xFVkVMUywgU0VTU0lPTl9DT0xPUlMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBhZ2VudFRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LXRyYW5zY3JpcHQuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGNvbXBsZXRpb25Db250ZXh0LCBhcHBseUNvbXBsZXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbXBsZXRpb24uanMnXG5pbXBvcnQgeyBleHRyYWN0SW1hZ2VQYXRocywgcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzIH0gZnJvbSAncGljb2NvZGUtY29yZS9hdHRhY2htZW50cy5qcydcbmltcG9ydCB7IGxpc3RGaWxlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZmlsZXMuanMnXG5pbXBvcnQgeyBsaXN0V29ya3RyZWVzIH0gZnJvbSAncGljb2NvZGUtY29yZS93b3JrdHJlZXMuanMnXG5pbXBvcnQgeyBvd25lclJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0VmVyc2lvbiB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBhY3Rpdml0eVJvd3MsIGFjdGl2aXR5U3RyaXBTaXplcywgc3RyaXBXaW5kb3dTdGFydCB9IGZyb20gJy4vYWN0aXZpdHktc3RyaXAuanMnXG5pbXBvcnQgeyBBbmltYXRlZFZhbHVlIH0gZnJvbSAnLi9hbmltYXRlZC12YWx1ZS5qc3gnXG5pbXBvcnQgeyBEZWxpYmVyYXRpb25FeGNoYW5nZSwgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZWFyY2hCYXIsIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSwgY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoIH0gZnJvbSAnLi9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4J1xuaW1wb3J0IHsgY29tcGFjdFRyYW5zY3JpcHRSdW5zLCB0cmFuc2NyaXB0V2luZG93IH0gZnJvbSAnLi90cmFuc2NyaXB0LXdpbmRvdy5qcydcbmltcG9ydCB7IFF1ZXN0aW9uRm9ybSB9IGZyb20gJy4vcXVlc3Rpb24tZm9ybS5qc3gnXG5pbXBvcnQgeyBFbXB0eVN0YXRlIH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS5qc3gnXG5pbXBvcnQgeyBIZWxwIH0gZnJvbSAnLi9oZWxwLmpzeCdcbmltcG9ydCB7IE1vZGVsUGFuZWwsIEVmZm9ydFBhbmVsLCBTcGVlZFBhbmVsLCBUaGVtZVBhbmVsLCBDb25maWdQYW5lbCwgQ29uZmlybVBhbmVsLCBIaXN0b3J5UGFuZWwsIFJld2luZFBpY2tQYW5lbCwgUmV3aW5kQWN0aW9uUGFuZWwsIFJlc3VtZVBhbmVsLCBQcm9qZWN0UGFuZWwsIE1jcFBhbmVsLCBNZW1vcnlQYW5lbCwgSW5mb0xpc3RQYW5lbCwgV2FrZXVwc1BhbmVsLCBDb25uZWN0UGFuZWwsIHRpbWVBZ28gfSBmcm9tICcuL3BhbmVscy5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIHNldEFjY2VudCwgc2V0UGFsZXR0ZSwgc2V0VGVybWluYWxCYWNrZ3JvdW5kLCBnZXRUZXJtaW5hbEJhY2tncm91bmQsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdyZWZyZXNoLW1vZGVscycsIGRlc2M6ICdSZWZyZXNoIGF2YWlsYWJsZSBtb2RlbHMgZnJvbSBwcm92aWRlcnMnIH0sXG4gIHsgbmFtZTogJ2Nvbm5lY3QnLCBkZXNjOiAnU2lnbiBpbiB3aXRoIENoYXRHUFQgdG8gdXNlIGEgQ29kZXggc3Vic2NyaXB0aW9uJyB9LFxuICB7IG5hbWU6ICdlZmZvcnQnLCBkZXNjOiAnU2V0IHRoZSB0aGlua2luZyBlZmZvcnQgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAnc3BlZWQnLCBkZXNjOiAnU3BlZWQnIH0sXG4gIHsgbmFtZTogJ3Jlc3VtZScsIGRlc2M6ICdQaWNrIHVwIGEgcHJldmlvdXMgc2Vzc2lvbiB3aGVyZSB5b3UgbGVmdCBvZmYnIH0sXG4gIHsgbmFtZTogJ25ldycsIGRlc2M6ICdTdGFydCBhIG5ldyBzZXNzaW9uIGluIHRoaXMgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnZm9yaycsIGRlc2M6ICdGb3JrIGNvbnZlcnNhdGlvbicgfSxcbiAgeyBuYW1lOiAnZGVsZXRlJywgZGVzYzogJ1Blcm1hbmVudGx5IGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBzdGFydCBmcmVzaCcgfSxcbiAgeyBuYW1lOiAncHJvamVjdCcsIGRlc2M6ICdTd2l0Y2ggcHJvamVjdHM6IGp1bXAgdG8gYW5vdGhlciBwcm9qZWN0LCBzYW1lIGFzIGN0cmwrcCcgfSxcbiAgeyBuYW1lOiAnY3dkJywgZGVzYzogJ1Nob3cgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHByb2plY3Qgcm9vdCcgfSxcbiAgeyBuYW1lOiAnc2tpbGxzJywgZGVzYzogJ0xpc3QgZXZlcnkgc2tpbGw6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2NvbW1hbmRzJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnaW5pdCcsIGRlc2M6ICdDcmVhdGUgb3IgaW1wcm92ZSByZXBvc2l0b3J5IEFHRU5UUy5tZCBndWlkYW5jZScgfSxcbiAgeyBuYW1lOiAndG9vbHMnLCBkZXNjOiAnTGlzdCBidWlsdGluIGFuZCB1c2VyLWRlZmluZWQgdG9vbHM7IE1DUCB0b29scyBsaXZlIGluIC9tY3AnIH0sXG4gIHsgbmFtZTogJ3Jld2luZCcsIGRlc2M6ICdSZXN0b3JlIHRoZSBjb252ZXJzYXRpb24gdG8gYSBwcmV2aW91cyBtZXNzYWdlJyB9LFxuICB7IG5hbWU6ICdzdGVlcicsIGRlc2M6ICdFZGl0IG9yIGFkZCBjb252ZXJzYXRpb24gbWVzc2FnZXMgd2l0aG91dCBzZW5kaW5nJyB9LFxuICB7IG5hbWU6ICdoaXN0b3J5JywgZGVzYzogJ1NlYXJjaCBwcm9tcHRzIHlvdSBwcmV2aW91c2x5IHNlbnQnIH0sXG4gIHsgbmFtZTogJ3JlbmFtZScsIGRlc2M6ICdOYW1lIHRoaXMgc2Vzc2lvbjsgb21pdCB0aGUgbmFtZSB0byByZXN0b3JlIGl0cyBhdXRvbWF0aWMgdGl0bGUnIH0sXG4gIHsgbmFtZTogJ2NvbG9yJywgZGVzYzogJ0NvbG9yIHRoaXMgc2Vzc2lvbjogL2NvbG9yIDxuYW1lIG9yICNoZXg+LCAvY29sb3Igbm9uZSB0byBjbGVhcicgfSxcbiAgeyBuYW1lOiAndGhlbWUnLCBkZXNjOiAnUGljayBhIGNvbG9yIHRoZW1lOyAvdGhlbWUgPG5hbWU+IGFwcGxpZXMgb25lIGRpcmVjdGx5JyB9LFxuICB7IG5hbWU6ICdjb25maWcnLCBkZXNjOiAnQ29uZmlndXJlIHBpY28gZGlzcGxheSBhbmQgYmVoYXZpb3InIH0sXG4gIHsgbmFtZTogJ21jcCcsIGRlc2M6ICdNYW5hZ2UgTUNQIHNlcnZlcnM6IGFkZCwgdG9nZ2xlLCByZWNvbm5lY3QnIH0sXG4gIHsgbmFtZTogJ3BhcmFsbGVsJywgZGVzYzogJ1J1biBhIHRhc2sgd2l0aCBwYXJhbGxlbCBhZ2VudHM6IC9wYXJhbGxlbCA8dGFzaz4nIH0sXG4gIHsgbmFtZTogJ2RlbGliZXJhdGUnLCBkZXNjOiAnRGVsaWJlcmF0ZSBvbiBhIGRlY2lzaW9uOiAvZGVsaWJlcmF0ZSA8ZGVjaXNpb24+JyB9LFxuICB7IG5hbWU6ICd3YWtldXBzJywgZGVzYzogJ1ZpZXcgYW5kIGNhbmNlbCBzY2hlZHVsZWQgd2FrZS11cHMnIH0sXG4gIHsgbmFtZTogJ21lbW9yeScsIGRlc2M6ICdCcm93c2UgYW5kIG1hbmFnZSBzYXZlZCBtZW1vcmllczogcHJvamVjdCBhbmQgZ2xvYmFsJyB9LFxuICB7IG5hbWU6ICdjb21wYWN0JywgZGVzYzogJ1N1bW1hcml6ZSB0aGUgY29udmVyc2F0aW9uIHRvIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjbGVhcicsIGRlc2M6ICdDbGVhciB0aGUgY29udmVyc2F0aW9uIGFuZCBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY29zdCcsIGRlc2M6ICdTaG93IHRva2VuIHVzYWdlIGFuZCBlc3RpbWF0ZWQgY29zdCBzbyBmYXInIH0sXG4gIHsgbmFtZTogJ2NvbnRleHQnLCBkZXNjOiBcIlNob3cgd2hhdCdzIGluIHRoZSBtb2RlbCdzIGNvbnRleHQgYW5kIGhvdyBiaWcgZWFjaCBwaWVjZSBpc1wiIH0sXG4gIHsgbmFtZTogJ2V4cG9ydCcsIGRlc2M6ICdTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiB0byBhIG1hcmtkb3duIGZpbGUnIH0sXG4gIHsgbmFtZTogJ3VwZGF0ZScsIGRlc2M6ICdVcGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG0nIH0sXG4gIHsgbmFtZTogJ2hlbHAnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kIGFuZCB3aGF0IGl0IGRvZXMnIH0sXG5dXG5cbmNvbnN0IEhJU1RPUllfU0NPUEVTID0gWydzZXNzaW9uJywgJ3Byb2plY3QnLCAnZXZlcnl3aGVyZSddXG5jb25zdCBNRU1PUllfU0NPUEVTID0gWydhbGwnLCAncHJvamVjdCcsICdnbG9iYWwnXVxuXG5cbmZ1bmN0aW9uIGFnZW50RWxhcHNlZChhZ2VudCwgbm93ID0gRGF0ZS5ub3coKSkge1xuICBpZiAoIWFnZW50LnN0YXJ0ZWRBdCkgcmV0dXJuICd3YWl0aW5nJ1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoKGFnZW50LmVuZGVkQXQgfHwgbm93KSAtIGFnZW50LnN0YXJ0ZWRBdCkgLyAxMDAwKSlcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKVxuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKVxuICBpZiAoaG91cnMpIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlcyAlIDYwfW1gXG4gIGlmIChtaW51dGVzKSByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kcyAlIDYwfXNgXG4gIHJldHVybiBgJHtzZWNvbmRzfXNgXG59XG5cbmZ1bmN0aW9uIGFnZW50U3RhdHVzKGFnZW50KSB7XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIHsgaWNvbjogJycsIGxhYmVsOiAnJywgY29sb3I6IGFjY2VudCgpIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0MnLCBsYWJlbDogJ3F1ZXVlZCcsIGNvbG9yOiBNVVRFRCB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNGJywgbGFiZWw6ICcnLCBjb2xvcjogR1JFRU4gfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnZmFpbGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MDBENycsIGxhYmVsOiAnZmFpbGVkJywgY29sb3I6IFJFRCB9XG4gIHJldHVybiB7IGljb246ICdcdTI1QTAnLCBsYWJlbDogJ2NhbmNlbGxlZCcsIGNvbG9yOiBNVVRFRCB9XG59XG5cbmZ1bmN0aW9uIFN0ZWVyTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNlbGVjdGVkLCBmb2N1cyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0oaXRlbS5tZXNzYWdlSWQsIGxheW91dClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IHNob3dMb2NrZWQgLz5cbn1cblxuZnVuY3Rpb24gRGljdGF0aW9uS2V5cyh7IGlucHV0IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGlucHV0LmhhbmRsZShldmVudCkpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIE1vdXNlRm9jdXNSZWdpb24oeyBjaGlsZHJlbiwgb25QcmVzcywgLi4ucHJvcHMgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSkgb25QcmVzcygpXG4gIH0pXG4gIHJldHVybiA8Ym94IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvYm94PlxufVxuXG5mdW5jdGlvbiBDb21wb3NlckFjdGlvbih7IGljb24sIGFjdGl2ZUljb24sIGFjdGl2ZSA9IGZhbHNlLCBvblByZXNzLCBvbkhvdmVyIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScgJiYgaW5zaWRlICE9PSBob3ZlcmVkKCkpIHtcbiAgICAgIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgICAgb25Ib3Zlcj8uKGluc2lkZSlcbiAgICB9XG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGhpZ2hsaWdodGVkID0gaG92ZXJlZCgpIHx8IGFjdGl2ZVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgYmc6IGhpZ2hsaWdodGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBoaWdobGlnaHRlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAke2hpZ2hsaWdodGVkID8gYWN0aXZlSWNvbiA6IGljb259IGB9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBBZ2VudFN0cmlwUm93KHsgc2VsZWN0ZWQsIGZvY3VzZWQsIGNoaWxkcmVuLCBvblByZXNzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScpIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBmb2N1c2VkID8gYWNjZW50KCkgOiBudWxsLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBob3ZlcmVkKCkgPyBGR19TT0ZUIDogTVVURUQgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHNlbGVjdGVkIH19PntzZWxlY3RlZCA/ICdcdTI3NkYgJyA6ICcgICd9PC90ZXh0PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYm94PlxuICApXG59XG5cbi8vIG9ubHkgdGhlIG5ld2VzdCBzbGljZSBvZiBhIGxvbmcgdHJhbnNjcmlwdCByZW5kZXJzOyBvbGRlciBpdGVtcyBsb2FkIGluXG4vLyBiYXRjaGVzIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyB0byB0aGUgdG9wLiByZW5kZXIgY29zdCBpcyBwZXItaXRlbSwgc28gdGhpc1xuLy8ga2VlcHMgZGF5LWxvbmcgc2Vzc2lvbnMgYXMgZmFzdCBhcyBmcmVzaCBvbmVzXG5jb25zdCBISVNUT1JZX1dJTkRPVyA9IDUwXG5cbmZ1bmN0aW9uIGNvbGxhcHNlU3RlZXJUb29scyhpdGVtcykge1xuICBjb25zdCBjb2xsYXBzZWQgPSBbXVxuICBsZXQgaGlkZGVuID0gMFxuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoIWhpZGRlbikgcmV0dXJuXG4gICAgY29sbGFwc2VkLnB1c2goeyBraW5kOiAnc3RlZXItdG9vbHMnLCBjb3VudDogaGlkZGVuIH0pXG4gICAgaGlkZGVuID0gMFxuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyB8fCBpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGhpZGRlbiArPSBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyA/IGl0ZW0uaXRlbXMubGVuZ3RoIDogMVxuICAgIH0gZWxzZSB7XG4gICAgICBmbHVzaCgpXG4gICAgICBjb2xsYXBzZWQucHVzaChpdGVtKVxuICAgIH1cbiAgfVxuICBmbHVzaCgpXG4gIHJldHVybiBjb2xsYXBzZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7IGJvb3QsIGNvbnRyb2xsZXI6IGN0bCB9KSB7XG4gIGNvbnN0IHsgY3dkLCByb290LCB2ZXJzaW9uLCBza2lsbHMsIG1jcCB9ID0gYm9vdFxuICBjb25zdCBzdGF0ZSA9IGN0bC5zdGF0ZVxuICBjb25zdCBbd29ya3NwYWNlT3Blbiwgc2V0V29ya3NwYWNlT3Blbl0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VSb3dzLCBzZXRXb3Jrc3BhY2VSb3dzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3dvcmtzcGFjZVNlbGVjdGVkLCBzZXRXb3Jrc3BhY2VTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3dvcmtzcGFjZUxvYWRpbmcsIHNldFdvcmtzcGFjZUxvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbd29ya3NwYWNlRXJyb3IsIHNldFdvcmtzcGFjZUVycm9yXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3dvcmtzcGFjZUhlaWdodCwgc2V0V29ya3NwYWNlSGVpZ2h0XSA9IGNyZWF0ZVNpZ25hbCgyMClcbiAgY29uc3QgW3dvcmtzcGFjZVBlbmRpbmcsIHNldFdvcmtzcGFjZVBlbmRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCB3b3Jrc3BhY2VHcm91cHNOb3cgPSB3b3Jrc3BhY2VHcm91cHMod29ya3NwYWNlUm93cygpKVxuICBjb25zdCB3b3Jrc3BhY2VTZXNzaW9ucyA9IHdvcmtzcGFjZUdyb3Vwc05vdy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hXb3Jrc3BhY2UoKSB7XG4gICAgaWYgKCFib290LndvcmtzcGFjZSB8fCBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZykgcmV0dXJuXG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBib290LndvcmtzcGFjZS5saXN0KClcbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VHcm91cHMocm93cykuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLnNlc3Npb25zKVxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB3b3Jrc3BhY2VTZWxlY3Rpb24obmV4dCwgd29ya3NwYWNlU2VsZWN0ZWQoKSwgd29ya3NwYWNlU2Vzc2lvbnMpXG4gICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChzZWxlY3RlZClcbiAgICAgIHNldFdvcmtzcGFjZVJvd3Mocm93cylcbiAgICAgIHNldFdvcmtzcGFjZUVycm9yKCcnKVxuICAgICAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgYXdhaXQgYm9vdC53b3Jrc3BhY2UucHJldmlldyhzZWxlY3RlZClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHNlc3Npb25zIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nID0gZmFsc2VcbiAgICAgIHNldFdvcmtzcGFjZUxvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG4gIGJvb3QucmVmcy5yZWZyZXNoV29ya3NwYWNlID0gcmVmcmVzaFdvcmtzcGFjZVxuICB1c2VJbnRlcnZhbCgoKSA9PiB7IGlmICh3b3Jrc3BhY2VPcGVuKCkpIHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSB9LCAxMDAwKVxuICBpZiAoYm9vdC53b3Jrc3BhY2UgJiYgIWJvb3QucmVmcy53b3Jrc3BhY2VTdWJzY3JpYmVkKSB7XG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSB0cnVlXG4gICAgY29uc3QgY2xlYW51cCA9IGJvb3Qud29ya3NwYWNlLnN1YnNjcmliZT8uKCgpID0+IHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSlcbiAgICBvbkNsZWFudXAoKCkgPT4geyBjbGVhbnVwPy4oKTsgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSBmYWxzZSB9KVxuICB9XG4gIGNvbnN0IFttb2RlbHMsIHNldE1vZGVsc10gPSBjcmVhdGVTaWduYWwoYm9vdC5tb2RlbHMpXG4gIGNvbnN0IFtyZWZyZXNoaW5nTW9kZWxzLCBzZXRSZWZyZXNoaW5nTW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcblxuICBjb25zdCBbZGVyaXZlZCwgc2V0RGVyaXZlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVyaXZlZClcbiAgY29uc3QgW3Rlcm1pbmFsV2lkdGgsIHNldFRlcm1pbmFsV2lkdGhdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApXG4gIGNvbnN0IFt0ZXJtaW5hbEhlaWdodCwgc2V0VGVybWluYWxIZWlnaHRdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQpXG4gIHVzZVJlc2l6ZSgoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IHsgc2V0VGVybWluYWxXaWR0aCh3aWR0aCk7IHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgfSlcbiAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gY3JlYXRlU2lnbmFsKHN0YXRlLm92ZXJsYXkpXG4gIGNvbnN0IFtzdHJlYW1pbmcsIHNldFN0cmVhbWluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RyZWFtaW5nKVxuICBjb25zdCBbbGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmxpdmVVc2FnZSlcbiAgY29uc3QgW3R1cm5QaGFzZSwgc2V0VHVyblBoYXNlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS50dXJuUGhhc2UpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5idXN5KVxuICBjb25zdCBbY29tcGFjdGluZywgc2V0Q29tcGFjdGluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdGluZylcbiAgY29uc3QgW2NvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXNdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gIGNvbnN0IFtzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RhcnRlZEF0KVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0VmFsdWVdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBjb21wb3NlckZpbGVzID0gYm9vdC5yZWZzLmNvbXBvc2VyRmlsZXMgPz89IGNyZWF0ZUNvbXBvc2VyRmlsZXMoKVxuICBjb25zdCBbaW5wdXRDdXJzb3IsIHNldElucHV0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY29tbWFuZEZvcm0sIHNldENvbW1hbmRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBzZXRJbnB1dCA9ICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICBib290LnJlZnMuZHJhZnRSZXZpc2lvbiA9IChib290LnJlZnMuZHJhZnRSZXZpc2lvbiA/PyAwKSArIDFcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIHNldElucHV0VmFsdWUodmFsdWUpXG4gICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yID8/IHZhbHVlLmxlbmd0aClcbiAgfVxuICBjb25zdCBbZGljdGF0aW9uU3RhdHVzLCBzZXREaWN0YXRpb25TdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2RpY3RhdGlvbkxldmVscywgc2V0RGljdGF0aW9uTGV2ZWxzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2NhcHR1cmVTdGF0dXMsIHNldENhcHR1cmVTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2NvbXBvc2VyQWN0aW9uTGFiZWwsIHNldENvbXBvc2VyQWN0aW9uTGFiZWxdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5tb2RlbClcbiAgY29uc3QgW2RlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gIGNvbnN0IFtlZmZvcnQsIHNldEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZWZmb3J0KVxuICBjb25zdCBbZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgY29uc3QgW3NwZWVkLCBzZXRTcGVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3BlZWQpXG4gIGNvbnN0IFtzcGVlZERlZmF1bHRzLCBzZXRTcGVlZERlZmF1bHRzXSA9IGNyZWF0ZVNpZ25hbCh7IC4uLnN0YXRlLnNwZWVkRGVmYXVsdHMgfSlcbiAgY29uc3QgW3Nob3dTcGVlZFBhbmVsLCBzZXRTaG93U3BlZWRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RWZmb3J0UGFuZWwsIHNldFNob3dFZmZvcnRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhlbWVQYW5lbCwgc2V0U2hvd1RoZW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0NvbmZpZ1BhbmVsLCBzZXRTaG93Q29uZmlnUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2Nsb3Vkcywgc2V0Q2xvdWRzXSA9IGNyZWF0ZVNpZ25hbChib290LmNsb3VkcylcbiAgY29uc3QgW2NvbXBhY3RUb29sSGlzdG9yeSwgc2V0Q29tcGFjdFRvb2xIaXN0b3J5XSA9IGNyZWF0ZVNpZ25hbChib290LmNvbXBhY3RUb29sSGlzdG9yeSlcbiAgY29uc3QgW2dpdEZvb3Rlciwgc2V0R2l0Rm9vdGVyXSA9IGNyZWF0ZVNpZ25hbChib290LmdpdEZvb3RlcilcbiAgY29uc3QgW3dpZGVTaWRlYmFyLCBzZXRXaWRlU2lkZWJhcl0gPSBjcmVhdGVTaWduYWwoYm9vdC53aWRlU2lkZWJhcilcbiAgY29uc3QgW3Jlc2VhcmNoQWdlbnRMaW1pdCwgc2V0UmVzZWFyY2hBZ2VudExpbWl0XSA9IGNyZWF0ZVNpZ25hbChib290LnJlc2VhcmNoQWdlbnRMaW1pdClcbiAgY29uc3QgW3F1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWVzdGlvbilcbiAgY29uc3QgW3Nob3dNZW1vcnlQYW5lbCwgc2V0U2hvd01lbW9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21lbVNjb3BlLCBzZXRNZW1TY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW21lbW9yeUxpc3QsIHNldE1lbW9yeUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbdGhlbWVQcmVmLCBzZXRUaGVtZVByZWZdID0gY3JlYXRlU2lnbmFsKGJvb3QudGhlbWVQcmVmIHx8ICdhdXRvJylcbiAgY29uc3QgW2RldGVjdGVkVGhlbWUsIHNldERldGVjdGVkVGhlbWVdID0gY3JlYXRlU2lnbmFsKGJvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyaycpXG4gIGNvbnN0IFtxdWV1ZWQsIHNldFF1ZXVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUucXVldWVkKVxuICBjb25zdCBbZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmV4cGVkaXRlZClcbiAgY29uc3QgW3NlbnQsIHNldFNlbnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnNlbnQpXG4gIGNvbnN0IFtoaXN0SWR4LCBzZXRIaXN0SWR4XSA9IGNyZWF0ZVNpZ25hbCgtMSlcbiAgY29uc3QgW2NtZEluZGV4LCBzZXRDbWRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2NtZEN5Y2xlLCBzZXRDbWRDeWNsZV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2ZpbGVJbmRleCwgc2V0RmlsZUluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZmlsZUxpc3QsIHNldEZpbGVMaXN0XSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2ZpbGVzRGlzbWlzc2VkLCBzZXRGaWxlc0Rpc21pc3NlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3U2lnbmFsXSA9IGNyZWF0ZVNpZ25hbCgnY2hhdCcpXG4gIGNvbnN0IFt2ZXJib3NlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RlbFBhbmVsLCBzZXRTaG93TW9kZWxQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UmVzZWFyY2hNb2RlbFBhbmVsLCBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jlc2VhcmNoTW9kZWxSZXR1cm4sIHNldFJlc2VhcmNoTW9kZWxSZXR1cm5dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCwgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0aW5nU2hlbGxNb2RlbCwgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0LCBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGVuZGluZ1Jlc2VhcmNoLCBzZXRQZW5kaW5nUmVzZWFyY2hdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nRGVsaWJlcmF0aW9uLCBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICBjb25zdCBbdmlld2VkQWdlbnRJZCwgc2V0Vmlld2VkQWdlbnRJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2FnZW50V2luZG93T2Zmc2V0LCBzZXRBZ2VudFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dIaXN0b3J5UGFuZWwsIHNldFNob3dIaXN0b3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaGlzdFNjb3BlLCBzZXRIaXN0U2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtoaXN0UHJvbXB0cywgc2V0SGlzdFByb21wdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hvd1Jlc3VtZVBhbmVsLCBzZXRTaG93UmVzdW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzdW1lU2NvcGVzLCBzZXRSZXN1bWVTY29wZXNdID0gY3JlYXRlU2lnbmFsKFsncmVwb3NpdG9yeScsICdldmVyeXdoZXJlJ10pXG4gIGNvbnN0IFtyZXN1bWVTY29wZSwgc2V0UmVzdW1lU2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXN1bWVTZXNzaW9ucywgc2V0UmVzdW1lU2Vzc2lvbnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcmVzdW1lTG9hZGluZywgc2V0UmVzdW1lTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TWNwUGFuZWwsIHNldFNob3dNY3BQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UHJvamVjdFBhbmVsLCBzZXRTaG93UHJvamVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZm9QYW5lbCwgc2V0SW5mb1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbdmlld2VkU2hlbGxJZCwgc2V0Vmlld2VkU2hlbGxJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NoZWxsV2luZG93T2Zmc2V0LCBzZXRTaGVsbFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dXYWtldXBzUGFuZWwsIHNldFNob3dXYWtldXBzUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0Nvbm5lY3RQYW5lbCwgc2V0U2hvd0Nvbm5lY3RQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFthdXRoUHJvdmlkZXJzLCBzZXRBdXRoUHJvdmlkZXJzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3NoZWxsc1ZlcnNpb24sIHNldFNoZWxsc1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtnaXRWZXJzaW9uLCBzZXRHaXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcHJvamVjdHMsIHNldFByb2plY3RzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Byb2plY3RzTG9hZGluZywgc2V0UHJvamVjdHNMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21jcFNlcnZlcnMsIHNldE1jcFNlcnZlcnNdID0gY3JlYXRlU2lnbmFsKG1jcC5saXN0KCkpXG4gIGNvbnN0IFtjb21wbGV0aW5nLCBzZXRDb21wbGV0aW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbXBJbmRleCwgc2V0Q29tcEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcmV3aW5kU3RlcCwgc2V0UmV3aW5kU3RlcF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3Jld2luZFRhcmdldCwgc2V0UmV3aW5kVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmb2xsb3csIHNldEZvbGxvd10gPSBjcmVhdGVTaWduYWwodHJ1ZSlcbiAgY29uc3QgW2hpc3RXaW5kb3csIHNldEhpc3RXaW5kb3ddID0gY3JlYXRlU2lnbmFsKEhJU1RPUllfV0lORE9XKVxuICBjb25zdCBbdHJhbnNjcmlwdE1ldHJpY3MsIHNldFRyYW5zY3JpcHRNZXRyaWNzXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXIsIHNldFN0ZWVyXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXJUZXh0LCBzZXRTdGVlclRleHRdID0gY3JlYXRlU2lnbmFsKCcnKVxuXG4gIGNvbnN0IHJlZnMgPSBib290LnJlZnNcbiAgcmVmcy5xdWl0QXQgPz89IDBcbiAgcmVmcy5yZXN1bWVPcGVuID8/PSAwXG5cbiAgZnVuY3Rpb24gc2V0VmlldyhuZXh0KSB7XG4gICAgc2V0Vmlld1NpZ25hbChuZXh0KVxuICAgIGN0bC5ob2xkKG5leHQgIT09ICdjaGF0JylcbiAgfVxuXG4gIC8vIHRoZSBjb250cm9sbGVyIG93bnMgZXZlcnkgcGllY2Ugb2YgY29udmVyc2F0aW9uIHN0YXRlOyB0aGVzZSBzaWduYWxzXG4gIC8vIG1pcnJvciBpdCBzbyB0aGUgcmVuZGVyIHRyZWUgYmVsb3cgc3RheXMgcmVhY3RpdmUgd2l0aG91dCBrbm93aW5nIHRoYXRcbiAgY29uc3QgbWlycm9yID0gKGdldCwgc2V0LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChnZXQoKSAhPT0gdmFsdWUpIHNldCh2YWx1ZSlcbiAgfVxuICBjb25zdCBbcGVlclN0YXR1cywgc2V0UGVlclN0YXR1c10gPSBjcmVhdGVTaWduYWwoJycpXG4gIC8vIHRoZSBuYW1lIHBlZXJzIHJlYWNoIHRoaXMgc2Vzc2lvbiBieTogdGhlIHVzZXIncywgb3IgdGhlIGF1dG9tYXRpYyBvbmVcbiAgY29uc3QgW3Nlc3Npb25OYW1lLCBzZXRTZXNzaW9uTmFtZV0gPSBjcmVhdGVTaWduYWwobnVsbClcblxuICBmdW5jdGlvbiBzeW5jRnJvbUNvbnRyb2xsZXIoKSB7XG4gICAgc2V0U2Vzc2lvbk5hbWUoc3RhdGUuZGVyaXZlZC50aXRsZSB8fCBzdGF0ZS5wZWVyQ29ubmVjdGlvbj8ubmFtZSB8fCBudWxsKVxuICAgIHNldFBlZXJTdGF0dXMoc3RhdGUucGVlckVycm9yID8gYHBlZXIgZGlzY29ubmVjdGVkOiAke3N0YXRlLnBlZXJFcnJvcn1gIDogc3RhdGUucGVlclBhdXNlZCAmJiBzdGF0ZS5wZWVyQ29ubmVjdGlvbiA/ICdwZWVyIHJlc3BvbnNlcyBwYXVzZWQnIDogJycpXG4gICAgbWlycm9yKGRlcml2ZWQsIHNldERlcml2ZWQsIHN0YXRlLmRlcml2ZWQpXG4gICAgbWlycm9yKG92ZXJsYXksIHNldE92ZXJsYXksIHN0YXRlLm92ZXJsYXkpXG4gICAgbWlycm9yKHN0cmVhbWluZywgc2V0U3RyZWFtaW5nLCBzdGF0ZS5zdHJlYW1pbmcpXG4gICAgbWlycm9yKGxpdmVVc2FnZSwgc2V0TGl2ZVVzYWdlLCBzdGF0ZS5saXZlVXNhZ2UpXG4gICAgbWlycm9yKHR1cm5QaGFzZSwgc2V0VHVyblBoYXNlLCBzdGF0ZS50dXJuUGhhc2UpXG4gICAgbWlycm9yKGJ1c3ksIHNldEJ1c3ksIHN0YXRlLmJ1c3kpXG4gICAgbWlycm9yKGNvbXBhY3RpbmcsIHNldENvbXBhY3RpbmcsIHN0YXRlLmNvbXBhY3RpbmcpXG4gICAgbWlycm9yKGNvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXMsIHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gICAgbWlycm9yKHN0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0LCBzdGF0ZS5zdGFydGVkQXQpXG4gICAgbWlycm9yKG1vZGVsLCBzZXRNb2RlbCwgc3RhdGUubW9kZWwpXG4gICAgbWlycm9yKGRlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsLCBzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gICAgbWlycm9yKHNwZWVkLCBzZXRTcGVlZCwgc3RhdGUuc3BlZWQpXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHNwZWVkRGVmYXVsdHMoKSkgIT09IEpTT04uc3RyaW5naWZ5KHN0YXRlLnNwZWVkRGVmYXVsdHMpKSBzZXRTcGVlZERlZmF1bHRzKHsgLi4uc3RhdGUuc3BlZWREZWZhdWx0cyB9KVxuICAgIG1pcnJvcihlZmZvcnQsIHNldEVmZm9ydCwgc3RhdGUuZWZmb3J0KVxuICAgIG1pcnJvcihkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0LCBzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICAgIG1pcnJvcihxdWVzdGlvblJlcXVlc3QsIHNldFF1ZXN0aW9uUmVxdWVzdCwgc3RhdGUucXVlc3Rpb24pXG4gICAgbWlycm9yKHF1ZXVlZCwgc2V0UXVldWVkLCBzdGF0ZS5xdWV1ZWQpXG4gICAgbWlycm9yKGV4cGVkaXRlZCwgc2V0RXhwZWRpdGVkLCBzdGF0ZS5leHBlZGl0ZWQpXG4gICAgbWlycm9yKHNlbnQsIHNldFNlbnQsIHN0YXRlLnNlbnQpXG4gICAgbWlycm9yKGFnZW50c1ZlcnNpb24sIHNldEFnZW50c1ZlcnNpb24sIHN0YXRlLmFjdGl2aXR5VmVyc2lvbilcbiAgfVxuXG4gIC8vIHRyZW5kIHJlLXJ1bnMgdGhpcyBjb21wb25lbnQgb24gZXZlcnkgc2lnbmFsIGNoYW5nZSwgc28gdGhlIGNvbnRyb2xsZXJcbiAgLy8gaXMgc3Vic2NyaWJlZCBvbmNlIGFuZCBlYWNoIGhhbmRsZXIgcmVhY2hlcyB0aGUgbmV3ZXN0IHJlbmRlciB0aHJvdWdoXG4gIC8vIHJlZnMudWksIHdoaWNoIGlzIHJlcGxhY2VkIGJlbG93IG9uIGV2ZXJ5IHBhc3NcbiAgcmVmcy51aSA9IHtcbiAgICBzeW5jOiBzeW5jRnJvbUNvbnRyb2xsZXIsXG4gICAgZmxhc2g6IChtZXNzYWdlKSA9PiBmbGFzaChtZXNzYWdlKSxcbiAgICBkZXJpdmVkOiAobmV4dCkgPT4ge1xuICAgICAgc2V0QWNjZW50KG5leHQuY29sb3IpXG4gICAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IG5leHQuY29sb3IgfHwgREVGQVVMVF9BQ0NFTlQsIG11dGVkOiBNVVRFRCB9KVxuICAgIH0sXG4gICAgcXVlc3Rpb246ICgpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBmbS5mb2N1cygncXVlc3Rpb24nKVxuICAgIH0sXG4gICAgdHVybjogKCkgPT4ge1xuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH0sXG4gICAgaW5wdXQ6ICh0ZXh0KSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgc2V0SW5wdXQodGV4dClcbiAgICB9LFxuICAgIHNlc3Npb246ICgpID0+IHtcbiAgICAgIHNldENvbW1hbmRGb3JtKG51bGwpXG4gICAgICByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsXG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9LFxuICAgIHJlc3VtZWQ6IChtZXRhKSA9PiBmbGFzaChgcmVzdW1lZCAgJHttZXRhLnR1cm5zfSAke21ldGEudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKG1ldGEuYXQpfWApLFxuICAgIHByb2plY3Q6IChuZXh0KSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxceDFiXTA7cGljbyAgJHtuZXh0LnJvb3Quc3BsaXQoJy8nKS5wb3AoKX1cXHgwN2ApXG4gICAgICBzZXRNY3BTZXJ2ZXJzKG5leHQubWNwLmxpc3QoKSlcbiAgICAgIHNldEZpbGVMaXN0KFtdKVxuICAgIH0sXG4gICAgbWNwOiAoc2VydmVycykgPT4gc2V0TWNwU2VydmVycyhzZXJ2ZXJzKSxcbiAgICBzaGVsbHM6ICgpID0+IHNldFNoZWxsc1ZlcnNpb24oKHYpID0+IHYgKyAxKSxcbiAgICBnaXQ6ICgpID0+IHNldEdpdFZlcnNpb24oKHYpID0+IHYgKyAxKSxcbiAgfVxuICBpZiAoIXJlZnMuc3Vic2NyaWJlZCkge1xuICAgIHJlZnMuc3Vic2NyaWJlZCA9IHRydWVcbiAgICBjdGwub24oJ2NoYW5nZScsICgpID0+IHJlZnMudWkuc3luYygpKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBbJ2ZsYXNoJywgJ2Rlcml2ZWQnLCAncXVlc3Rpb24nLCAndHVybicsICdpbnB1dCcsICdzZXNzaW9uJywgJ3Jlc3VtZWQnLCAncHJvamVjdCcsICdtY3AnLCAnc2hlbGxzJywgJ2dpdCddKSB7XG4gICAgICBjdGwub24odHlwZSwgKHBheWxvYWQpID0+IHJlZnMudWlbdHlwZV0ocGF5bG9hZCkpXG4gICAgfVxuICB9XG4gIHN5bmNGcm9tQ29udHJvbGxlcigpXG5cbiAgY29uc3Qgc2tpbGxDb21tYW5kcyA9IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IGBza2lsbCAgJHtzLmRlc2NyaXB0aW9uIHx8IHMuc291cmNlfWAsIHNraWxsOiB0cnVlIH0pKVxuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBib290LmNvbW1hbmRzLmxpc3QoKS5tYXAoKGMpID0+ICh7IG5hbWU6IGMubmFtZSwgZGVzYzogYGNvbW1hbmQgICR7Yy5kZXNjcmlwdGlvbiB8fCBjLnNvdXJjZX1gLCBjb21tYW5kOiB0cnVlIH0pKVxuICBjb25zdCBieU5hbWUgPSBuZXcgTWFwKClcbiAgY29uc3Qgc2hhZG93ZWQgPSBbXVxuICBmb3IgKGNvbnN0IGMgb2YgWy4uLkNPTU1BTkRTLCAuLi5za2lsbENvbW1hbmRzLCAuLi51c2VyQ29tbWFuZHNdKSB7XG4gICAgaWYgKGJ5TmFtZS5oYXMoYy5uYW1lKSkgc2hhZG93ZWQucHVzaChgJHtjLnNraWxsID8gJ3NraWxsJyA6ICdjb21tYW5kJ30gXCIke2MubmFtZX1cImApXG4gICAgZWxzZSBieU5hbWUuc2V0KGMubmFtZSwgYylcbiAgfVxuICBjb25zdCBhbGxDb21tYW5kcyA9IFsuLi5ieU5hbWUudmFsdWVzKCldXG4gIGlmIChzaGFkb3dlZC5sZW5ndGggJiYgIXJlZnMud2FybmVkU2hhZG93ZWQpIHtcbiAgICByZWZzLndhcm5lZFNoYWRvd2VkID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4gZmxhc2goYHNoYWRvd2VkIGJ5IGFuIGVhcmxpZXIgbmFtZSwgcmVuYW1lIHRvIHVzZTogJHtzaGFkb3dlZC5qb2luKCcsICcpfWApLCAwKVxuICB9XG5cbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCh7XG4gICAgZHVyYXRpb246IDM1MDAsXG4gICAgcG9zaXRpb246ICd0b3AtcmlnaHQnLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IDx0ZXh0IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycsIGJvbGQ6IHRydWUgfX0+e2AgJHttZXNzYWdlfSBgfTwvdGV4dD4sXG4gIH0pXG5cbiAgY29uc3QgdXBkYXRlVG9hc3QgPSB1c2VUb2FzdCh7XG4gICAgZHVyYXRpb246IDgwMDAsXG4gICAgcG9zaXRpb246ICd0b3AtY2VudGVyJyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSB9fT5cbiAgICAgICAgPFNoaW1tZXIgY29sb3I9XCJibGFja1wiIGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0+e2AgJHttZXNzYWdlfSBgfTwvU2hpbW1lcj5cbiAgICAgIDwvYm94PlxuICAgICksXG4gIH0pXG5cbiAgZnVuY3Rpb24gZmxhc2gobXNnKSB7XG4gICAgdG9hc3QobXNnKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaE1vZGVscygpIHtcbiAgICBpZiAocmVmcmVzaGluZ01vZGVscygpKSByZXR1cm5cbiAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKHRydWUpXG4gICAgZmxhc2goJ3JlZnJlc2hpbmcgbW9kZWxzJylcbiAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgYm9vdC5yZWZyZXNoTW9kZWxzKClcbiAgICAgIGJvb3QubW9kZWxzID0gcmVmcmVzaGVkXG4gICAgICBzZXRNb2RlbHMocmVmcmVzaGVkKVxuICAgICAgY29uc3QgZWxhcHNlZCA9IE1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkKVxuICAgICAgZmxhc2goYG1vZGVscyByZWZyZXNoZWQgICR7cmVmcmVzaGVkLmxlbmd0aH0gbW9kZWxzICAke2VsYXBzZWR9bXNgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1vZGVsIHJlZnJlc2ggZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEyMCl9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVmcmVzaGluZ01vZGVscyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZWZzLnBhc3RlSW1hZ2UgPz89IGNyZWF0ZUNsaXBib2FyZElucHV0KHtcbiAgICByZWFkSW1hZ2U6IHJlYWRDbGlwYm9hcmRJbWFnZSxcbiAgICBnZXREcmFmdDogKCkgPT4gKHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSwgc2Vzc2lvbjogc3RhdGUuc2Vzc2lvbiwgcmV2aXNpb246IHJlZnMuZHJhZnRSZXZpc2lvbiB9KSxcbiAgICBhdHRhY2hJbWFnZTogY3RsLmF0dGFjaEltYWdlLFxuICAgIHNldElucHV0LFxuICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKG1lc3NhZ2UpLFxuICB9KVxuICByZWZzLmNhcHR1cmVJbWFnZSA/Pz0gY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0KHtcbiAgICBjYXB0dXJlUmVnaW9uLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gICAgb25TdGF0dXM6IHNldENhcHR1cmVTdGF0dXMsXG4gIH0pXG5cbiAgaWYgKCFyZWZzLmRpY3RhdGlvbikge1xuICAgIHJlZnMuZGljdGF0aW9uID0gY3JlYXRlRGljdGF0aW9uKHtcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIHNldERpY3RhdGlvblN0YXR1cyhzdGF0dXMpXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSBzZXREaWN0YXRpb25MZXZlbHMoW10pXG4gICAgICB9LFxuICAgICAgb25MZXZlbDogKGxldmVsKSA9PiBzZXREaWN0YXRpb25MZXZlbHMoYXBwZW5kTGV2ZWwoZGljdGF0aW9uTGV2ZWxzKCksIGxldmVsKSksXG4gICAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChgZGljdGF0aW9uIGZhaWxlZDogJHttZXNzYWdlfWApLFxuICAgIH0pXG4gICAgcmVmcy5kaWN0YXRpb25JbnB1dCA9IGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uOiByZWZzLmRpY3RhdGlvbiwgZ2V0SW5wdXQ6IGlucHV0LCBzZXRJbnB1dCB9KVxuICAgIGNvbnN0IHByZWxvYWQgPSBzZXRJbW1lZGlhdGUoKCkgPT4gcmVmcy5kaWN0YXRpb24ucHJlbG9hZCgpKVxuICAgIHByZWxvYWQudW5yZWYoKVxuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGNsZWFySW1tZWRpYXRlKHByZWxvYWQpXG4gICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICB9KVxuICAgIGZvciAoY29uc3QgW3NpZ25hbCwgY29kZV0gb2YgW1snU0lHVEVSTScsIDE0M10sIFsnU0lHSFVQJywgMTI5XV0pIHtcbiAgICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHtcbiAgICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlZnMudXBkYXRlQ2hlY2tlZCkge1xuICAgIHJlZnMudXBkYXRlQ2hlY2tlZCA9IHRydWVcbiAgICBjaGVja0ZvclVwZGF0ZSh2ZXJzaW9uKS50aGVuKChmb3VuZCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuXG4gICAgICB1cGRhdGVUb2FzdChgcGljbyB2JHtmb3VuZC52ZXJzaW9ufSBhdmFpbGFibGUgIC91cGRhdGVgKVxuICAgICAgZm91bmQubWFya05vdGlmaWVkKClcbiAgICB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgfVxuXG4gIGNvbnN0IHBlcmZvcm1Db21wYWN0aW9uID0gY3RsLmNvbXBhY3RcblxuICBmdW5jdGlvbiBjb21wbGV0aW9uU291cmNlKG5hbWUpIHtcbiAgICBpZiAobmFtZSA9PT0gJ3NwZWVkJykgcmV0dXJuIFNQRUVEX0xFVkVMUy5tYXAoKGwpID0+IGwua2V5KVxuICAgIGlmIChuYW1lID09PSAnY29sb3InKSByZXR1cm4gT2JqZWN0LmtleXMoU0VTU0lPTl9DT0xPUlMpXG4gICAgaWYgKG5hbWUgPT09ICd0aGVtZScpIHJldHVybiBbLi4ucGFsZXR0ZUxpc3QoKS5tYXAoKHApID0+IHAua2V5KSwgJ2F1dG8nXVxuICAgIGlmIChuYW1lID09PSAnZWZmb3J0JykgcmV0dXJuIFsnZGVmYXVsdCcsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J11cbiAgICBpZiAobmFtZSA9PT0gJ21vZGVsJykgcmV0dXJuIG1vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKS5tYXAoKG0pID0+IG0ubmFtZSlcbiAgICBjb25zdCBjbWQgPSBhbGxDb21tYW5kcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGNtZD8uc2tpbGwgfHwgY21kPy5jb21tYW5kKSByZXR1cm4gZmlsZUxpc3QoKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzQ29tcGxldGlvbigpIHtcbiAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgIHNldENvbXBJbmRleCgwKVxuICB9XG5cbiAgZnVuY3Rpb24gYWNjZXB0Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpIHtcbiAgICBzZXRJbnB1dChhcHBseUNvbXBsZXRpb24odmFsdWUsIGN0eCwgY2FuZGlkYXRlKSlcbiAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gIH1cblxuICBmdW5jdGlvbiBzZW5kKHRleHQpIHtcbiAgICBpZiAodmlld2VkQWdlbnRJZCgpIHx8IHZpZXdlZFNoZWxsSWQoKSkgcmV0dXJuXG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGlmICghdmFsdWUpIHJldHVyblxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgLi4ucmVzdF0gPSB2YWx1ZS5zbGljZSgxKS5zcGxpdCgvXFxzKy8pXG4gICAgICBjb25zdCBtYXRjaCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChtYXRjaCwgeyBzdGFydDogdGV4dC5pbmRleE9mKCcvJyksIGVuZDogdGV4dC5sZW5ndGggfSwgcmVzdC5qb2luKCcgJykpXG4gICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICBydW5Db21tYW5kKG1hdGNoLCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHNldEhpc3RJZHgoLTEpXG4gICAgY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgY3RsLnNlbmQoY29tcG9zZXJGaWxlcy5jb250ZW50KCkudHJpbSgpKVxuICAgIHNldElucHV0KCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJydXB0KCkge1xuICAgIGlmICghYnVzeSgpKSByZXR1cm5cbiAgICBpZiAoc3RhdGUucXVlc3Rpb24pIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgY3RsLmludGVycnVwdCgpXG4gIH1cblxuICBjb25zdCBmbXRUb2tlbnMgPSAobikgPT4gKG4gPj0gMTAwMCA/IGAkeyhuIC8gMTAwMCkudG9GaXhlZCgxKX1rYCA6IFN0cmluZyhuKSlcblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTWVtb3JpZXMoKSB7XG4gICAgc2V0TWVtb3J5TGlzdChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTWVtb3J5RGlzYWJsZWQobSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5zZXREaXNhYmxlZChtLCAhbS5kaXNhYmxlZClcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgJHttLmRpc2FibGVkID8gJ2VuYWJsZWQnIDogJ3N1cHByZXNzZWQnfSAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtZW1vcnkgdXBkYXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZm9yZ2V0TWVtb3J5KG0pIHtcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZm9yZ2V0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5mb3JnZXRBcm0gPSB7IGZpbGU6IG0uZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZm9yZ2V0IFwiJHttLm5hbWV9XCJgKVxuICAgIH1cbiAgICByZWZzLmZvcmdldEFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYm9vdC5tZW1vcnkuZm9yZ2V0KG0pXG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgZmxhc2goYGZvcmdvdCAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBmb3JnZXQgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5Db250ZXh0UGFuZWwoKSB7XG4gICAgY29uc3QgdG9rID0gKG4pID0+IGB+JHtmbXRUb2tlbnMobil9IHRva2BcbiAgICBjb25zdCBicmVha2Rvd24gPSBhd2FpdCBjdGwuY29udGV4dEJyZWFrZG93bigpXG4gICAgY29uc3Qgcm93cyA9IGJyZWFrZG93bi5yb3dzLm1hcCgocm93KSA9PiAoeyBuYW1lOiByb3cubmFtZSwgZGVzYzogcm93LmRlc2MsIG5vdGU6IHRvayhyb3cudG9rZW5zKSB9KSlcbiAgICBpZiAoYnJlYWtkb3duLm1lYXN1cmVkKSB7XG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBuYW1lOiAnbGFzdCBtZWFzdXJlZCByZXF1ZXN0JyxcbiAgICAgICAgZGVzYzogJ3Byb3ZpZGVyLXJlcG9ydGVkIGlucHV0IHRva2VucywgdGhlIG51bWJlciBiZWhpbmQgY3R4ICUnLFxuICAgICAgICBub3RlOiBgJHticmVha2Rvd24ubWVhc3VyZWQudG9Mb2NhbGVTdHJpbmcoKX0gdG9rYCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEluZm9QYW5lbCh7XG4gICAgICB0aXRsZTogYENvbnRleHQgICR7YnJlYWtkb3duLm1vZGVsfWAsXG4gICAgICByb3dzLFxuICAgICAgb3ZlcnZpZXc6IGJyZWFrZG93bi5zZWdtZW50cy5sZW5ndGggPyB7IHNlZ21lbnRzOiBicmVha2Rvd24uc2VnbWVudHMsIG1lYXN1cmVkOiBicmVha2Rvd24ubWVhc3VyZWQsIGxpbWl0OiBicmVha2Rvd24ubGltaXQgPz8gbW9kZWwoKS5jb250ZXh0IH0gOiBudWxsLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB0aGVtZUl0ZW1zID0gKCkgPT4gW1xuICAgIC4uLnBhbGV0dGVMaXN0KCksXG4gICAgeyBrZXk6ICdhdXRvJywgZGVzYzogYGZvbGxvdyB0aGUgdGVybWluYWwgKGRldGVjdGVkOiAke2RldGVjdGVkVGhlbWUoKX0pYCB9LFxuICBdXG5cbiAgZnVuY3Rpb24gcGFsZXR0ZUZvcihwcmVmKSB7XG4gICAgcmV0dXJuIHByZWYgPT09ICdhdXRvJyA/IGRldGVjdGVkVGhlbWUoKSA6IHByZWZcbiAgfVxuXG4gIC8vIHRoZSB0ZXJtaW5hbCByZXBvcnRzIGxpZ2h0L2Rhcmsgc3dpdGNoZXMgd2hpbGUgcGljbyBydW5zOyBhdXRvIGZvbGxvd3NcbiAgLy8gdGhlbSwgYnV0IG5ldmVyIG92ZXIgYSBwYWxldHRlIHRoZSB0aGVtZSBwaWNrZXIgaXMgcHJldmlld2luZy4gYSBuZXdcbiAgLy8gYmFja2dyb3VuZCBjb2xvciByZS1kZXJpdmVzIHBhbmVsIHN1cmZhY2VzIHVuZGVyIHdoYXRldmVyIHBhbGV0dGUgaXMgdXBcbiAgY29uc3QgcmVjaGVja1RoZW1lID0gdXNlQ29sb3JTY2hlbWUoKHNjaGVtZSwgeyBiYWNrZ3JvdW5kIH0gPSB7fSkgPT4ge1xuICAgIGlmIChiYWNrZ3JvdW5kICYmIGJhY2tncm91bmQgIT09IGdldFRlcm1pbmFsQmFja2dyb3VuZCgpKSB7XG4gICAgICBzZXRUZXJtaW5hbEJhY2tncm91bmQoYmFja2dyb3VuZClcbiAgICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICAgIH1cbiAgICBpZiAoc2NoZW1lID09PSBkZXRlY3RlZFRoZW1lKCkpIHJldHVyblxuICAgIHNldERldGVjdGVkVGhlbWUoc2NoZW1lKVxuICAgIGlmICh0aGVtZVByZWYoKSA9PT0gJ2F1dG8nICYmICFzaG93VGhlbWVQYW5lbCgpKSBwcmV2aWV3UGFsZXR0ZSgnYXV0bycpXG4gIH0pXG5cbiAgZnVuY3Rpb24gcHJldmlld1BhbGV0dGUocHJlZikge1xuICAgIHNldFBhbGV0dGUocGFsZXR0ZUZvcihwcmVmKSlcbiAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IGFjY2VudCgpLCBtdXRlZDogTVVURUQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGhlbWVQcmVmKHByZWYpIHtcbiAgICBzZXRUaGVtZVByZWYocHJlZilcbiAgICBwcmV2aWV3UGFsZXR0ZShwcmVmKVxuICAgIGlmIChwcmVmID09PSAnYXV0bycpIHJlY2hlY2tUaGVtZSgpXG4gICAgd3JpdGVDb25maWcoeyB0aGVtZTogcHJlZiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogcHJlZiB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICBmbGFzaChwcmVmID09PSAnYXV0bycgPyBgdGhlbWU6IGF1dG8gIGZvbGxvd2luZyB0aGUgdGVybWluYWwgKCR7cGFsZXR0ZUZvcignYXV0bycpfSlgIDogYHRoZW1lOiAke3ByZWZ9YClcbiAgfVxuXG4gIGNvbnN0IFtzdGVlckRlcml2ZWQsIHNldFN0ZWVyRGVyaXZlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgbGV0IHN0ZWVyUHJldmlld1JlcXVlc3QgPSAwXG4gIGZ1bmN0aW9uIHN0ZWVyUHJldmlldygpIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gc3RlZXIoKT8uY2hhbmdlc1xuICAgIGlmICghY2hhbmdlcz8ubGVuZ3RoKSByZXR1cm4gZGVyaXZlZCgpXG4gICAgaWYgKHJlZnMuc3RlZXJQcmV2aWV3Q2hhbmdlcyAhPT0gY2hhbmdlcykge1xuICAgICAgcmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzID0gY2hhbmdlc1xuICAgICAgY29uc3QgcmVxdWVzdCA9ICsrc3RlZXJQcmV2aWV3UmVxdWVzdFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGN0bC5wcmV2aWV3U3RlZXIoY2hhbmdlcykpLnRoZW4obmV4dCA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0ID09PSBzdGVlclByZXZpZXdSZXF1ZXN0KSBzZXRTdGVlckRlcml2ZWQobmV4dClcbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgIH1cbiAgICByZXR1cm4gc3RlZXJEZXJpdmVkKCkgfHwgZGVyaXZlZCgpXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZEZ1bGxIaXN0b3J5KCkge1xuICAgIGlmIChjdGwubG9hZEhpc3RvcnkgJiYgKHN0YXRlLmRlcml2ZWQudHJhbnNjcmlwdE9mZnNldCB8fCAwKSA+IDApIGF3YWl0IGN0bC5sb2FkSGlzdG9yeShJbmZpbml0eSlcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBsb2FkT2xkZXJIaXN0b3J5KCkge1xuICAgIGlmICghY3RsLmxvYWRIaXN0b3J5IHx8IHJlZnMuaGlzdG9yeUxvYWRpbmcgfHwgIShzdGF0ZS5kZXJpdmVkLnRyYW5zY3JpcHRPZmZzZXQgPiAwKSkgcmV0dXJuXG4gICAgcmVmcy5oaXN0b3J5TG9hZGluZyA9IHRydWVcbiAgICB0cnkgeyBhd2FpdCBjdGwubG9hZEhpc3Rvcnkoc3RhdGUuZGVyaXZlZC50cmFuc2NyaXB0Lmxlbmd0aCArIEhJU1RPUllfV0lORE9XKSB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGZsYXNoKGVycm9yLm1lc3NhZ2UpIH1cbiAgICBmaW5hbGx5IHsgcmVmcy5oaXN0b3J5TG9hZGluZyA9IGZhbHNlIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUm93cygpIHtcbiAgICByZXR1cm4gc3RlZXJhYmxlVHJhbnNjcmlwdChzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0KVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYmVnaW5TdGVlcigpIHtcbiAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGF3YWl0IGxvYWRGdWxsSGlzdG9yeSgpXG4gICAgc2V0U3RlZXJEZXJpdmVkKG51bGwpXG4gICAgcmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzID0gbnVsbFxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgIHNldFN0ZWVyKHsgc2VsZWN0ZWQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiAndXNlcicsIGNoYW5nZXM6IFtdIH0pXG4gICAgaWYgKHJvd3Nbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gICAgc2V0SGlzdFdpbmRvdyhJbmZpbml0eSlcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBmbS5mb2N1cygnc3RlZXInKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTdGVlcihhcHBsaWVkID0gZmFsc2UpIHtcbiAgICBzZXRTdGVlcihudWxsKVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgaWYgKGFwcGxpZWQpIGZsYXNoKCdjb252ZXJzYXRpb24gc3RlZXJpbmcgYXBwbGllZCAgbm90aGluZyBzZW50JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U3RlZXIoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCFkcmFmdD8uY2hhbmdlcy5sZW5ndGgpIHJldHVybiBjbG9zZVN0ZWVyKClcbiAgICBjdGwuYXBwbHlTdGVlcihkcmFmdC5jaGFuZ2VzKVxuICAgIGNsb3NlU3RlZXIodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJFZGl0KCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvdyA9IHN0ZWVyUm93cygpW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghcm93KSByZXR1cm4gc3RhcnRTdGVlckFkZCgpXG4gICAgaWYgKHJvdy5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgc2V0U3RlZXJUZXh0KHJvdy50ZXh0KVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogZmFsc2UsIHJvbGU6IHJvdy5yb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyQWRkKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBwcmV2aW91c1JvbGUgPSBzZWxlY3RlZD8ucm9sZVxuICAgIGNvbnN0IHJvbGUgPSBwcmV2aW91c1JvbGUgPT09ICd1c2VyJyA/ICdhc3Npc3RhbnQnIDogU1RFRVJfUk9MRVNbMF1cbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiB0cnVlLCByb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyVGV4dCh0ZXh0KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBmbGFzaCgnbWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgY2hhbmdlID0gZHJhZnQuYWRkaW5nXG4gICAgICA/IHsgb3A6ICdpbnNlcnQnLCBpZDogbWFrZUV2ZW50KCdtZXNzYWdlJykuaWQsIGFmdGVyOiB0YXJnZXQ/Lm1lc3NhZ2VJZCA/PyBudWxsLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgICAgOiB7IG9wOiAncmVwbGFjZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgY2hhbmdlczogWy4uLmRyYWZ0LmNoYW5nZXMsIGNoYW5nZV0gfSlcbiAgICBzZXRTdGVlclRleHQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyRGVsZXRlKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgIGlmICh0YXJnZXQubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIGNvbnN0IGNoYW5nZXMgPSBbLi4uZHJhZnQuY2hhbmdlcywgeyBvcDogJ2RlbGV0ZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCB9XVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5tZXNzYWdlSWQgIT09IHRhcmdldC5tZXNzYWdlSWQpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihkcmFmdC5zZWxlY3RlZCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nLmxlbmd0aCAtIDEpKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkLCBjaGFuZ2VzIH0pXG4gICAgaWYgKHJlbWFpbmluZ1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJlbWFpbmluZ1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q29tbWFuZChjb21tYW5kLCByYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKSwgYXJncyA9ICcnKSB7XG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuXG4gICAgY29uc3QgZHJhZnQgPSBpbnB1dCgpXG4gICAgY29uc3QgdG9rZW4gPSB7fVxuICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IHRva2VuXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBib290LmNvbW1hbmRzLmxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbW1hbmQubmFtZSlcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VGcm9udG1hdHRlcihhd2FpdCByZWFkRmlsZShtZXRhZGF0YS5maWxlLCAndXRmLTgnKSlcbiAgICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IHRva2VuIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgIGNvbnN0IGZvcm0gPSB7IG5hbWU6IGNvbW1hbmQubmFtZSwgYm9keTogYm9keS50cmltKCksIGRyYWZ0LCByYW5nZSwgYXJncywgdG9rZW4gfVxuICAgICAgY29uc3QgZmllbGRzID0gY29tbWFuZEZpZWxkcyh7IGFyZ3VtZW50czogcGFyc2VDb21tYW5kQXJndW1lbnRzKGJvZHkpIH0sIGJvZHksIGFyZ3MpXG4gICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBzZXRDb21tYW5kRm9ybSh7IC4uLmZvcm0sIGZpZWxkcyB9KVxuICAgICAgICBpZiAoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSAncGF0aCcpKSB7XG4gICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbihzZXRGaWxlTGlzdCkuY2F0Y2goKGVycm9yKSA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZpbmlzaENvbW1hbmQoZm9ybSwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGBjb3VsZCBub3QgbG9hZCAvJHtjb21tYW5kLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hDb21tYW5kKGZvcm0sIHZhbHVlcykge1xuICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IGZvcm0udG9rZW4gfHwgaW5wdXQoKSAhPT0gZm9ybS5kcmFmdCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBleHBhbmRDb21tYW5kKGZvcm0uYm9keSwgdmFsdWVzWyckYXJncyddID8/IGZvcm0uYXJncywgdmFsdWVzKVxuICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGZvcm0uZHJhZnQsIGZvcm0ucmFuZ2UsIGJvZHkpXG4gICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcnVuQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICByZXR1cm4gZXhlY3V0ZUNvbW1hbmQoYywgYXJncykuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleGVjdXRlQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICdzdHJpbmcnKSBhcmdzID0gJydcbiAgICBpZiAoYy5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChjKVxuICAgIHNldElucHV0KCcnKVxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2ZvcmsnKSB7XG4gICAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgcmV0dXJuIGN0bC5mb3JrKGFyZ3MudHJpbSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZWZyZXNoLW1vZGVscycpIHJldHVybiByZWZyZXNoTW9kZWxzKClcbiAgICBpZiAoYy5uYW1lID09PSAnc3BlZWQnKSB7XG4gICAgICBpZiAoIXNwZWVkQXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1NwZWVkUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3BlZWRDb21tYW5kKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2VmZm9ydCcpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dFZmZvcnRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zZXRFZmZvcnRCeU5hbWUoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSByZXR1cm4gZmxhc2goJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQgIHVwZGF0ZSBpdCB3aXRoIGdpdCcpXG4gICAgICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHZlcnNpb24sIGxhdGVzdCkpIHJldHVybiBmbGFzaChgcGljbyB2JHt2ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgICAgZmxhc2goYHVwZGF0aW5nJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9Li4uYClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gZmxhc2goYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30gIHJlc3RhcnQgcGljbyB0byB1c2UgaXRgKVxuICAgICAgcmV0dXJuIGZsYXNoKGB1cGRhdGUgZmFpbGVkOiAke3Jlc3VsdC5vdXRwdXQuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc3RlZXInKSByZXR1cm4gYmVnaW5TdGVlcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbnRleHQnKSByZXR1cm4gb3BlbkNvbnRleHRQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hpc3RvcnknKSByZXR1cm4gb3Blbkhpc3RvcnlTZWFyY2goKVxuICAgIGlmIChjLm5hbWUgPT09ICdoZWxwJykgcmV0dXJuIHNldFZpZXcoJ2hlbHAnKVxuICAgIGlmIChjLm5hbWUgPT09ICdtY3AnKSByZXR1cm4gc2V0U2hvd01jcFBhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3dha2V1cHMnKSByZXR1cm4gc2V0U2hvd1dha2V1cHNQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICdtZW1vcnknKSB7XG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgcmV0dXJuIHNldFNob3dNZW1vcnlQYW5lbCh0cnVlKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVzdW1lJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdwcm9qZWN0JykgcmV0dXJuIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjd2QnKSB7XG4gICAgICBjb25zdCByb290Tm90ZSA9IGJvb3Qucm9vdCAhPT0gYm9vdC5jd2QgPyBgICBwcm9qZWN0IHJvb3QgJHtzaG9ydGVuUGF0aChib290LnJvb3QpfWAgOiAnJ1xuICAgICAgcmV0dXJuIGZsYXNoKGAke2Jvb3QuZGlzcGxheUN3ZH0ke3Jvb3ROb3RlfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdza2lsbHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdTa2lsbHMnLFxuICAgICAgICByb3dzOiBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBzLmRlc2NyaXB0aW9uLCBub3RlOiBzLnNvdXJjZSB9KSksXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdDb21tYW5kcycsXG4gICAgICAgIHJvd3M6IFtcbiAgICAgICAgICAuLi5DT01NQU5EUy5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjLCBub3RlOiAnYnVpbHRpbicgfSkpLFxuICAgICAgICAgIC4uLmJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2NyaXB0aW9uLCBub3RlOiBjbWQuc291cmNlIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0b29scycpIHtcbiAgICAgIGNvbnN0IHsgcm93cywgbWNwQ291bnQgfSA9IGF3YWl0IGN0bC5kZXNjcmliZVRvb2xzKClcbiAgICAgIHNldEluZm9QYW5lbCh7IHRpdGxlOiBgVG9vbHMke21jcENvdW50ID8gYCAgcGx1cyAke21jcENvdW50fSBNQ1AgKHNlZSAvbWNwKWAgOiAnJ31gLCByb3dzIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ25ldycpIHJldHVybiBjdGwubmV3U2Vzc2lvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAoIXN0YXRlLnNlc3Npb24pIHJldHVybiBmbGFzaCgnbm8gY3VycmVudCBzZXNzaW9uIHRvIGRlbGV0ZScpXG4gICAgICBzZXRTaG93RGVsZXRlQ29uZmlybSh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXdpbmQnKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5SZXN1bWVQYW5lbCgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gKytyZWZzLnJlc3VtZU9wZW5cbiAgICBjb25zdCBzY29wZXMgPSBbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddXG4gICAgc2V0UmVzdW1lU2NvcGVzKHNjb3BlcylcbiAgICBzZXRSZXN1bWVTY29wZSgwKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hTZXNzaW9ucygwLCBzY29wZXMpXG4gICAgbGlzdFdvcmt0cmVlcyhvd25lclJvb3QoYm9vdC5yb290KSkudGhlbigodHJlZXMpID0+IHtcbiAgICAgIGlmICh0cmVlcy5sZW5ndGggPCAyIHx8ICFzaG93UmVzdW1lUGFuZWwoKSB8fCByZXF1ZXN0ICE9PSByZWZzLnJlc3VtZU9wZW4pIHJldHVyblxuICAgICAgc2V0UmVzdW1lU2NvcGVzKFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ10pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4LCBzY29wZXMgPSByZXN1bWVTY29wZXMoKSkge1xuICAgIHNldFJlc3VtZUxvYWRpbmcodHJ1ZSlcbiAgICBjdGwubGlzdFJlc3VtZVNlc3Npb25zKHNjb3Blc1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93U3BlZWRQYW5lbCgpIHx8IHNob3dFZmZvcnRQYW5lbCgpIHx8IHNob3dUaGVtZVBhbmVsKCkgfHwgc2hvd0NvbmZpZ1BhbmVsKCkgfHwgc2hvd0RlbGV0ZUNvbmZpcm0oKSB8fCBzaG93TWVtb3J5UGFuZWwoKSB8fCBzaG93SGlzdG9yeVBhbmVsKCkgfHwgc2hvd1Jlc3VtZVBhbmVsKCkgfHwgc2hvd01jcFBhbmVsKCkgfHxcbiAgICBzaG93UHJvamVjdFBhbmVsKCkgfHwgc2hvd1dha2V1cHNQYW5lbCgpIHx8IHNob3dDb25uZWN0UGFuZWwoKSB8fFxuICAgIGNvbW1hbmRGb3JtKCkgIT09IG51bGwgfHwgaW5mb1BhbmVsKCkgIT09IG51bGwgfHwgcmV3aW5kU3RlcCgpICE9PSBudWxsXG5cbiAgLy8gZXZlcnkgZm9jdXMtdGFraW5nIHBhbmVsIGRpbXMgdGhlIGNvbnZlcnNhdGlvbiBiZWhpbmQgaXQ7IHRoZSB0aGVtZVxuICAvLyBwaWNrZXIgaXMgdGhlIG9uZSBleGVtcHRpb24sIHNpbmNlIGl0cyBqb2IgaXMgcHJldmlld2luZyBwYWxldHRlcyBvblxuICAvLyB0aGUgdW5kaW1tZWQgdWlcbiAgY29uc3QgZGltbWluZ1BhbmVsID0gKCkgPT4gYW55UGFuZWwoKSAmJiAhc2hvd1RoZW1lUGFuZWwoKVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFnZW50KGFnZW50KSB7XG4gICAgY3RsLmNhbmNlbEFnZW50KGFnZW50LmlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0FnZW50KGFnZW50KSB7XG4gICAgaWYgKCFhd2FpdCBjdGwuZGlzbWlzc0FnZW50KGFnZW50LmlkKSkgcmV0dXJuXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gYWdlbnQuaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0bC5kaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0uZGVsaWJlcmF0aW9uSWQpXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gaXRlbS5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc1NoZWxsKHNoZWxsKSB7XG4gICAgYm9vdC5zaGVsbHMuZGlzbWlzcyhzaGVsbC5pZClcbiAgICBpZiAodmlld2VkU2hlbGxJZCgpID09PSBzaGVsbC5pZCkgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24ga2lsbFNoZWxsKHNoZWxsKSB7XG4gICAgaWYgKHNoZWxsLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm4gZmxhc2goYHNoZWxsICR7c2hlbGwuaWR9IGFscmVhZHkgZXhpdGVkYClcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuc2hlbGxLaWxsQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gc2hlbGwuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5zaGVsbEtpbGxBcm0gPSB7IGlkOiBzaGVsbC5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8ga2lsbCBcIiR7c2hlbGwuZGVzY3JpcHRpb24gfHwgYHNoZWxsICR7c2hlbGwuaWR9YH1cImApXG4gICAgfVxuICAgIHJlZnMuc2hlbGxLaWxsQXJtID0gbnVsbFxuICAgIGJvb3Quc2hlbGxzLmtpbGwoc2hlbGwuaWQsICd1c2VyJylcbiAgfVxuXG4gIGNvbnN0IHNwZWVkQXBwbGllcyA9IGN0bC5zcGVlZEFwcGxpZXNcbiAgY29uc3QgZWZmb3J0QXBwbGllcyA9IGN0bC5lZmZvcnRBcHBsaWVzXG4gIGNvbnN0IHNldFNlc3Npb25FZmZvcnQgPSBjdGwuc2V0RWZmb3J0XG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6ICdpbnB1dCcgfSlcbiAgY29uc3Qgc3RlZXJMaXN0Rm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGN5Y2xlOiAnbm9uZScsIGFjdGl2ZTogZmFsc2UgfSlcbiAgZm0uaXRlbSgnZmVlZCcpXG4gIGlmIChzdGVlcigpKSB7XG4gICAgZm0uaXRlbSgnc3RlZXInKVxuICAgIGlmICghZm0uaXMoJ3N0ZWVyJykpIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cbiAgY29uc3QgY29udmVyc2F0aW9uU2VhcmNoID0gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pXG4gIGNvbnZlcnNhdGlvblNlYXJjaC5yZWdpc3RlckZvY3VzKClcbiAgbGV0IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBbXVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgYWdlbnRSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5hY3Rpdml0eSgpKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5zaGVsbFJvd3MoKSlcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSAmJiAhYW55UGFuZWwoKSAmJiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4JylcbiAgY29uc3QgYWN0aXZpdHlNYXJnaW4gPSAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHx8ICFzaG93Q29tcG9zZXJBY3Rpb25zID8gMSA6IDBcbiAgY29uc3QgW3NoZWxsU3RyaXBTaXplLCBhZ2VudFN0cmlwU2l6ZV0gPSBhY3Rpdml0eVN0cmlwU2l6ZXModGVybWluYWxIZWlnaHQoKSwgW3NoZWxsUm93cy5sZW5ndGgsIGFnZW50Um93cy5sZW5ndGhdLCBhY3Rpdml0eU1hcmdpbilcbiAgaWYgKHF1ZXN0aW9uUmVxdWVzdCgpKSB7XG4gICAgZm0uaXRlbSgncXVlc3Rpb24nKVxuICAgIGlmICghZm0uaXMoJ3F1ZXN0aW9uJykpIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkgZm0uaXRlbSgnaW5wdXQnKVxuICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgZm0uZ3JvdXAoJ2FjdGl2aXR5LXN0cmlwJywgeyBpdGVtczogWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnc2hlbGwtc3RyaXAnLCB7IGl0ZW1zOiBbJ3NoZWxsLW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgICAgaWYgKGFnZW50Um93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnYWdlbnQtc3RyaXAnLCB7IGl0ZW1zOiBbJ2FnZW50LW1haW4nLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiAmJiAhdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIHtcbiAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSBmYWxzZVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9XG4gIH1cbiAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgeyBmbS5pdGVtKCd3b3Jrc3BhY2UnKTsgZm0uZm9jdXMoJ3dvcmtzcGFjZScpIH1cbiAgZWxzZSBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UpIHtcbiAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IGZhbHNlXG4gICAgZm0uZm9jdXMocXVlc3Rpb25SZXF1ZXN0KCkgPyAncXVlc3Rpb24nIDogJ2lucHV0JylcbiAgfVxuICB1c2VGb2N1c1RyYXAod29ya3NwYWNlT3BlbigpIHx8IGFueVBhbmVsKCkgfHwgdmlldygpID09PSAnaGVscCcpXG4gIHVzZVNlbGVjdGlvbih7XG4gICAgb25Db3B5OiAodGV4dCkgPT4gZmxhc2goYGNvcGllZCAke3RleHQubGVuZ3RofSAke3RleHQubGVuZ3RoID09PSAxID8gJ2NoYXJhY3RlcicgOiAnY2hhcmFjdGVycyd9YCksXG4gIH0pXG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzaGVsbCkgPT4gYHNoZWxsLSR7c2hlbGwuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGFnZW50KSA9PiBgYWdlbnQtJHthZ2VudC5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgY29uc3QgcGFnZVNpemUgPSBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFN0cmlwU2l6ZSA6IGFnZW50U3RyaXBTaXplXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwYWdlU2l6ZSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gTWF0aC5tYXgoMCwgY3VycmVudCAtIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFnZVNpemUgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCBwcmVmaXgsIHJvd3MsIHsgbWFpbiA9IGZhbHNlLCBwcmV2aWV3QWdlbnQgPSBmYWxzZSwgcHJldmlld1NoZWxsID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uKG1haW4gPyBbYCR7cHJlZml4fS1tYWluYF0gOiBbXSksIC4uLnJvd3MubWFwKChyb3cpID0+IGAke3ByZWZpeH0tJHtyb3cuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoKHByZWZpeCA9PT0gJ3NoZWxsJyA/IHNoZWxsU3RyaXBTaXplIDogYWdlbnRTdHJpcFNpemUpIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcigocHJlZml4ID09PSAnc2hlbGwnID8gc2hlbGxTdHJpcFNpemUgOiBhZ2VudFN0cmlwU2l6ZSkgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgaWYgKHByZXZpZXdBZ2VudCkge1xuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9XG4gICAgaWYgKHByZXZpZXdTaGVsbCkge1xuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1c2VJbnB1dChhc3luYyAoZXZlbnQpID0+IHtcbiAgICBpZiAod29ya3NwYWNlT3BlbigpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlUGVuZGluZyh0cnVlKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlLmNhbmNlbFByZXZpZXcoKVxuICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlID0gdHJ1ZVxuICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4oZmFsc2UpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHJldHVybiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgICAgICB9IGZpbmFsbHkgeyBzZXRXb3Jrc3BhY2VQZW5kaW5nKGZhbHNlKSB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHdvcmtzcGFjZVBlbmRpbmcoKSkgcmV0dXJuXG4gICAgICBjb25zdCBuZXh0ID0gd29ya3NwYWNlTmF2aWdhdGUod29ya3NwYWNlU2Vzc2lvbnMsIHdvcmtzcGFjZVNlbGVjdGVkKCksIGV2ZW50LCB3b3Jrc3BhY2VIZWlnaHQoKSlcbiAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQobmV4dClcbiAgICAgICAgdm9pZCBib290LndvcmtzcGFjZS5wcmV2aWV3KG5leHQpLmNhdGNoKGVycm9yID0+IHNldFdvcmtzcGFjZUVycm9yKGBwcmV2aWV3IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzcGFjZVNlc3Npb25zLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSB3b3Jrc3BhY2VTZWxlY3RlZCgpKVxuICAgICAgaWYgKCFyb3cpIHJldHVyblxuICAgICAgY29uc3QgYXR0YWNoID0gIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEgJiYgIWV2ZW50LmFsdCAmJiAoZXZlbnQua2V5ID09PSAncmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ2wnIHx8IGV2ZW50LmtleSA9PT0gJ3JldHVybicpXG4gICAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnID8gd29ya3NwYWNlQWN0aW9uKHJvdykgOiBudWxsXG4gICAgICBpZiAoIWF0dGFjaCAmJiAhYWN0aW9uKSByZXR1cm5cbiAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRhY2gpIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5zZWxlY3Qocm93LmlkKVxuICAgICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgc2V0T2Zmc2V0KDApXG4gICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobnVsbClcbiAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICBjb252ZXJzYXRpb25TZWFyY2guY2xvc2UoKVxuICAgICAgICAgIHJlZnMudWkuc2Vzc2lvbigpXG4gICAgICAgICAgcmVmcy51aS5zeW5jKClcbiAgICAgICAgICByZWZzLnVpLmRlcml2ZWQoc3RhdGUuZGVyaXZlZClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlW2FjdGlvbl0ocm93LmlkKVxuICAgICAgICAgIGF3YWl0IHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgJHthdHRhY2ggPyAnYXR0YWNoJyA6IGFjdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgY29udmVyc2F0aW9uU2VhcmNoLm9wZW4oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdyJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgZWxzZSBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgZWxzZSBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBlbHNlIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3QnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdwJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgb3BlblByb2plY3RQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoIWVmZm9ydEFwcGxpZXMoKSkgZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBvcmRlciA9IFtudWxsLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgICAgIGNvbnN0IG5leHQgPSBvcmRlclsob3JkZXIuaW5kZXhPZihlZmZvcnQoKSA/PyBudWxsKSArIDEpICUgb3JkZXIubGVuZ3RoXVxuICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KG5leHQpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dIaXN0b3J5UGFuZWwoKSkge1xuICAgICAgc3dpdGNoSGlzdFNjb3BlKChoaXN0U2NvcGUoKSArIDEpICUgSElTVE9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgICAgc2V0TWVtU2NvcGUoKHMpID0+IChzICsgMSkgJSBNRU1PUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAocmVzdW1lU2NvcGUoKSArIDEpICUgcmVzdW1lU2NvcGVzKCkubGVuZ3RoXG4gICAgICBzZXRSZXN1bWVTY29wZShuZXh0KVxuICAgICAgcmVmcmVzaFNlc3Npb25zKG5leHQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3onICYmIHN0YXRlLnJld2luZFVuZG8gJiYgIWJ1c3koKSAmJiB2aWV3KCkgPT09ICdjaGF0Jykge1xuICAgICAgdW5kb1Jld2luZCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmbXRFbGFwc2VkID0gKHMpID0+IChzIDwgNjAgPyBgJHtzfXNgIDogYCR7TWF0aC5mbG9vcihzIC8gNjApfW0gJHtzICUgNjB9c2ApXG4gIGNvbnN0IGVsYXBzZWQgPSBmbXRFbGFwc2VkKGJ1c3koKSA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydGVkQXQoKSkgLyAxMDAwKSkgOiAwKVxuXG4gIGNvbnN0IHNsYXNoUmFuZ2UgPSBjb21tYW5kQXQoaW5wdXQoKSwgaW5wdXRDdXJzb3IoKSlcbiAgY29uc3Qgc2xhc2hRdWVyeSA9IHNsYXNoUmFuZ2U/LnF1ZXJ5ID8/IG51bGxcbiAgY29uc3Qgc2hvd0NvbW1hbmRzID0gc2xhc2hSYW5nZSAhPT0gbnVsbCAmJiAhYW55UGFuZWwoKVxuICBjb25zdCBtYXRjaGVkQ29tbWFuZHMgPSAhc2hvd0NvbW1hbmRzXG4gICAgPyBbXVxuICAgIDogY21kQ3ljbGUoKVxuICAgICAgPyBjbWRDeWNsZSgpLm1hdGNoZXNcbiAgICAgIDogYWxsQ29tbWFuZHMuZmlsdGVyKChjKSA9PiAoYy5jb21tYW5kIHx8IChzbGFzaFJhbmdlLnN0YXJ0ID09PSAwICYmIHNsYXNoUmFuZ2UuZW5kID09PSBpbnB1dCgpLmxlbmd0aCkpICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2xhc2hRdWVyeS50b0xvd2VyQ2FzZSgpKSlcblxuICBjb25zdCBhdE1hdGNoID0gaW5wdXQoKS5tYXRjaCgvKF58W1xccyhdKUAoW15cXHNAXSopJC8pXG4gIGNvbnN0IHNob3dGaWxlcyA9IGF0TWF0Y2ggIT09IG51bGwgJiYgIXNob3dDb21tYW5kcyAmJiAhZmlsZXNEaXNtaXNzZWQoKSAmJiAhYW55UGFuZWwoKVxuICBpZiAoc2hvd0ZpbGVzKSB7XG4gICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgfSlcbiAgfVxuICBjb25zdCBtYXRjaGVkRmlsZXMgPSBzaG93RmlsZXNcbiAgICA/IGZpbGVMaXN0KClcbiAgICAgICAgLm1hcCgoZikgPT4gW2Z1enp5U2NvcmUoYXRNYXRjaFsyXSwgZiksIGZdKVxuICAgICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pXG4gICAgICAgIC5tYXAoKFssIGZdKSA9PiBmKVxuICAgIDogW11cblxuICBhc3luYyBmdW5jdGlvbiBwaWNrRmlsZShmKSB7XG4gICAgY29uc3QgdiA9IGlucHV0KClcbiAgICBjb25zdCBhdCA9IHYubGFzdEluZGV4T2YoJ0AnKVxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYXdhaXQgY3RsLmF0dGFjaFByb2plY3RGaWxlKGYpXG4gICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVyICsgJyAnKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0ICsgMSkgKyBmICsgJyAnKVxuICAgIH1cbiAgICBzZXRGaWxlSW5kZXgoMClcbiAgfVxuXG4gIGNvbnN0IGNvbXBDdHggPSBjb21wbGV0aW5nKCkgPyBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBpbnB1dCgpLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pIDogbnVsbFxuICBjb25zdCBzaG93Q29tcGxldGlvbiA9ICEhY29tcEN0eCAmJiBjb21wQ3R4Lm1hdGNoZXMubGVuZ3RoID4gMCAmJiAhc2hvd0NvbW1hbmRzICYmICFzaG93RmlsZXMgJiYgIWFueVBhbmVsKClcblxuICBjb25zdCByZXdpbmRFbnRyaWVzID0gKCkgPT4gdXNlckVudHJpZXMoZGVyaXZlZCgpKVxuICBjb25zdCByZXdpbmRPcHRpb25zID0gKCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSByZXdpbmRUYXJnZXQoKVxuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gW11cbiAgICBjb25zdCB7IG1zZ3MsIGVkaXRzIH0gPSByZXdpbmRTdGF0cyhkZXJpdmVkKCksIHRhcmdldC5pbmRleClcbiAgICBjb25zdCBlID0gZWRpdHMubGVuZ3RoXG4gICAgY29uc3QgZWRpdHNMYWJlbCA9IGAke2V9ICR7ZSA9PT0gMSA/ICdlZGl0JyA6ICdlZGl0cyd9YFxuICAgIGNvbnN0IG9wdHMgPSBbXVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnYm90aCcsIGxhYmVsOiAncmVzdG9yZSBjb2RlIGFuZCBjb252ZXJzYXRpb24nLCBkZXNjOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goe1xuICAgICAga2V5OiAnY2hhdCcsXG4gICAgICBsYWJlbDogZSA+IDAgPyAncmVzdG9yZSBjb252ZXJzYXRpb24gb25seScgOiAncmVzdG9yZSBjb252ZXJzYXRpb24nLFxuICAgICAgZGVzYzogZSA+IDAgPyAnY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZmlsZSBjaGFuZ2VzIGtlcHQnIDogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGRyb3BzICR7bXNnc30gZW50cmllc2AsXG4gICAgfSlcbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2NvZGUnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBvbmx5JywgZGVzYzogYGNvbnZlcnNhdGlvbiBrZXB0ICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7IGtleTogJ3N1bW1hcnknLCBsYWJlbDogJ3Jld2luZCBhbmQga2VlcCBhIHN1bW1hcnknLCBkZXNjOiAnZHJvcHBlZCBlbnRyaWVzIGNvbGxhcHNlIGludG8gYSBvbmUtbGluZSBub3RlJyB9KVxuICAgIHJldHVybiBvcHRzXG4gIH0pKClcblxuICBjb25zdCB1c2FnZSA9IGxpdmVVc2FnZSgpIHx8IGRlcml2ZWQoKS51c2FnZUFjdGl2ZVxuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IG1vZGVsKCkuY29udGV4dCA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0TW9kZWwgPT09IG1vZGVsKCkubmFtZVxuICAgID8gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyAvIG1vZGVsKCkuY29udGV4dCkgKiAxMDApKVxuICAgIDogMFxuICBjb25zdCB2aXNpYmxlU2hlbGxzID0gc2hlbGxSb3dzXG4gIGNvbnN0IHZpZXdlZFNoZWxsID0gdmlld2VkU2hlbGxJZCgpID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSB2aWV3ZWRTaGVsbElkKCkpIDogbnVsbFxuICBjb25zdCBjb21iaW5lZEFjdGl2aXR5ID0gdmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwXG4gIGNvbnN0IHNoZWxsU3RyaXBGb2N1cyA9IGZtLmlzKCdzaGVsbC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGxJZCA9IHNoZWxsU3RyaXBGb2N1cyAmJiBzaGVsbFN0cmlwRm9jdXMgIT09ICdzaGVsbC1tYWluJyA/IHNoZWxsU3RyaXBGb2N1cy5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGwgPSBmb2N1c2VkU2hlbGxJZCA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gZm9jdXNlZFNoZWxsSWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRTaGVsbCA9IGZvY3VzZWRTaGVsbCB8fCB2aWV3ZWRTaGVsbFxuICBjb25zdCBzaGVsbEFjdGlvbkhpbnQgPSBoaW50ZWRTaGVsbCA/IGBjdHJsK3ggJHtoaW50ZWRTaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICdraWxsJyA6ICdkaXNtaXNzJ31gIDogJydcbiAgY29uc3Qgc2hlbGxXaW5kb3dUYXJnZXQgPSBzaGVsbFN0cmlwRm9jdXMgPT09ICdzaGVsbC1tYWluJyA/IDAgOiB2aXNpYmxlU2hlbGxzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gKGZvY3VzZWRTaGVsbElkIHx8IHZpZXdlZFNoZWxsSWQoKSkpXG4gIGNvbnN0IHNoZWxsV2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KHNoZWxsV2luZG93T2Zmc2V0KCksIHNoZWxsV2luZG93VGFyZ2V0LCB2aXNpYmxlU2hlbGxzLmxlbmd0aCwgc2hlbGxTdHJpcFNpemUpXG4gIGlmIChzaGVsbFdpbmRvd1N0YXJ0ICE9PSBzaGVsbFdpbmRvd09mZnNldCgpKSBzZXRTaGVsbFdpbmRvd09mZnNldChzaGVsbFdpbmRvd1N0YXJ0KVxuICBjb25zdCBzaGVsbFdpbmRvdyA9IHZpc2libGVTaGVsbHMuc2xpY2Uoc2hlbGxXaW5kb3dTdGFydCwgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsU3RyaXBTaXplKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgYWdlbnRTdHJpcFNpemUpXG4gIGlmIChhZ2VudFdpbmRvd1N0YXJ0ICE9PSBhZ2VudFdpbmRvd09mZnNldCgpKSBzZXRBZ2VudFdpbmRvd09mZnNldChhZ2VudFdpbmRvd1N0YXJ0KVxuICBjb25zdCBhZ2VudFdpbmRvdyA9IHZpc2libGVBZ2VudHMuc2xpY2UoYWdlbnRXaW5kb3dTdGFydCwgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50U3RyaXBTaXplKVxuICBjb25zdCBwZW5kaW5nV2FrZXVwcyA9IGJvb3Qud2FrZXVwcy5wZW5kaW5nKClcbiAgZ2l0VmVyc2lvbigpXG4gIGNvbnN0IGdpdEluZm8gPSBnaXRGb290ZXIoKSA/IGJvb3QuZ2l0LnN0YXR1cygpIDogbnVsbFxuXG4gIGlmICh2aWV3KCkgPT09ICdoZWxwJykge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Q09NTUFORFN9IG9uQ2xvc2U9eygpID0+IHNldFZpZXcoJ2NoYXQnKX0gLz5cbiAgfVxuXG4gIGhpZ2hsaWdodFZlcnNpb24oKVxuXG4gIGNvbnN0IG1haW5UcmFuc2NyaXB0ID0gc3RlZXIoKSA/IHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQgOiBkZXJpdmVkKCkudHJhbnNjcmlwdFxuICBjb25zdCBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkID0gc3RlZXJSb3dzKClbc3RlZXIoKT8uc2VsZWN0ZWRdPy5tZXNzYWdlSWRcbiAgY29uc3QgZGVjb3JhdGVkVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBtYWluVHJhbnNjcmlwdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgLi4uaXRlbSxcbiAgICBzdGVlclNlbGVjdGVkOiBpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCxcbiAgfSkpIDogbWFpblRyYW5zY3JpcHRcbiAgY29uc3QgYWN0aXZlU2hlbGwgPSBzaGVsbFN0cmlwRm9jdXMgPyBmb2N1c2VkU2hlbGwgOiBhZ2VudFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkU2hlbGxcbiAgY29uc3QgYWN0aXZlQWdlbnQgPSBhZ2VudFN0cmlwRm9jdXMgPyBmb2N1c2VkQWdlbnQgOiBzaGVsbFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkQWdlbnRcbiAgbGV0IHNoZWxsT3V0cHV0ID0gbnVsbFxuICBpZiAoYWN0aXZlU2hlbGwpIHtcbiAgICB0cnkgeyBzaGVsbE91dHB1dCA9IGJvb3Quc2hlbGxzLm91dHB1dChhY3RpdmVTaGVsbC5pZCwgeyB0YWlsOiAyMDAwIH0pIH0gY2F0Y2gge31cbiAgfVxuICBjb25zdCBzaGVsbFRyYW5zY3JpcHQgPSBhY3RpdmVTaGVsbCA/IFtcbiAgICB7IGtpbmQ6ICdzaGVsbC1jb21tYW5kJywgdGV4dDogYWN0aXZlU2hlbGwuY29tbWFuZCB9LFxuICAgIHsga2luZDogJ3NoZWxsLW91dHB1dCcsIHRleHQ6IHNoZWxsT3V0cHV0Py5vdXRwdXQgfHwgJ25vIG91dHB1dCB5ZXQnIH0sXG4gIF0gOiBudWxsXG4gIGNvbnN0IHRyYW5zY3JpcHRTb3VyY2UgPSBhY3RpdmVTaGVsbCA/IGBzaGVsbDoke2FjdGl2ZVNoZWxsLmlkfWAgOiBhY3RpdmVBZ2VudCA/IGBhZ2VudDoke2FjdGl2ZUFnZW50LmlkfWAgOiAnbWFpbidcbiAgY29uc3QgbGl2ZVBlZXJJZHMgPSBuZXcgU2V0KG92ZXJsYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInKS5tYXAoKGl0ZW0pID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdW5yZWFkUGVlcnMgPSBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcihpdGVtID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInICYmIGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnICYmICFpdGVtLnJlYWQpXG4gIGNvbnN0IHVucmVhZFBlZXJJZHMgPSBuZXcgU2V0KHVucmVhZFBlZXJzLm1hcChpdGVtID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdHJhbnNjcmlwdCA9IHNoZWxsVHJhbnNjcmlwdCB8fCAoYWN0aXZlQWdlbnQgPyBhZ2VudFRyYW5zY3JpcHQoYWN0aXZlQWdlbnQpIDogZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3BlZXInIHx8ICghbGl2ZVBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSAmJiAhdW5yZWFkUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpKSkpXG4gIGNvbnN0IGRlbGliZXJhdGlvblZpZXcgPSBhY3RpdmVBZ2VudD8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbidcbiAgY29uc3QgaXNvbGF0ZWRUcmFuc2NyaXB0ID0gYWN0aXZlQWdlbnQgfHwgYWN0aXZlU2hlbGxcbiAgY29uc3QgZ3JvdXBJdGVtcyA9IChzb3VyY2UsIGFjdGl2ZSA9IGZhbHNlKSA9PiBzdGVlcigpXG4gICAgPyBjb2xsYXBzZVN0ZWVyVG9vbHMoc291cmNlKVxuICAgIDogY29tcGFjdFRvb2xIaXN0b3J5KClcbiAgICAgID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKHNvdXJjZSwgYWN0aXZlKVxuICAgICAgOiBzb3VyY2VcbiAgY29uc3QgdHJhbnNjcmlwdEl0ZW1zID0gZ3JvdXBJdGVtcyh0cmFuc2NyaXB0LCBhY3RpdmVBZ2VudD8uc3RhdHVzID09PSAncnVubmluZycpXG4gIGNvbnN0IHdpbmRvd2VkID0gZGVsaWJlcmF0aW9uVmlldyA/IHsgaXRlbXM6IHRyYW5zY3JpcHRJdGVtcywgaGlkZGVuSXRlbXM6IDAsIGhpZGRlbkNvdW50OiAwIH0gOiB0cmFuc2NyaXB0V2luZG93KHRyYW5zY3JpcHRJdGVtcywgaGlzdFdpbmRvdygpKVxuICBjb25zdCBoaWRkZW5Db3VudCA9IHdpbmRvd2VkLmhpZGRlbkNvdW50ICsgKCFhY3RpdmVBZ2VudCAmJiAhYWN0aXZlU2hlbGwgPyBkZXJpdmVkKCkudHJhbnNjcmlwdE9mZnNldCB8fCAwIDogMClcbiAgY29uc3QgdmlzaWJsZUl0ZW1zID0gaXNvbGF0ZWRUcmFuc2NyaXB0ID8gd2luZG93ZWQuaXRlbXMgOiBbLi4ud2luZG93ZWQuaXRlbXMsIC4uLmdyb3VwSXRlbXMob3ZlcmxheSgpLCB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyksIC4uLihzdHJlYW1pbmcoKSA/IFt7IGtpbmQ6ICdhc3Npc3RhbnQnLCB0ZXh0OiBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIH1dIDogW10pLCAuLi51bnJlYWRQZWVyc11cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3b3Jrc3BhY2VXaWR0aCA9IE1hdGgubWluKDM4LCBNYXRoLm1heCgxOCwgTWF0aC5mbG9vcih0ZXJtaW5hbFdpZHRoKCkgLyAzKSkpXG4gIGNvbnN0IHdpZGVMYXlvdXQgPSB3aWRlU2lkZWJhcigpICYmIHRlcm1pbmFsV2lkdGgoKSAtICh3b3Jrc3BhY2VPcGVuKCkgPyB3b3Jrc3BhY2VXaWR0aCA6IDApID4gMTYwXG5cbiAgaWYgKHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZW1vcnlQYW5lbFxuICAgICAgICBtZW1vcmllcz17bWVtb3J5TGlzdCgpLmZpbHRlcigobSkgPT4gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSA9PT0gJ2FsbCcgfHwgbS5zY29wZSA9PT0gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSl9XG4gICAgICAgIHNjb3Blcz17TUVNT1JZX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17bWVtU2NvcGUoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZURpc2FibGVkPXt0b2dnbGVNZW1vcnlEaXNhYmxlZH1cbiAgICAgICAgb25Gb3JnZXQ9e2ZvcmdldE1lbW9yeX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01lbW9yeVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dNY3BQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNY3BQYW5lbFxuICAgICAgICBzZXJ2ZXJzPXttY3BTZXJ2ZXJzKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGU9eyhuYW1lKSA9PiBtY3AudG9nZ2xlKG5hbWUpfVxuICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5tY3BSZW1vdmVBcm1cbiAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7bmFtZX1cIiBhbmQgaXRzIGNvbmZpZ2ApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgIG1jcC5yZW1vdmUobmFtZSlcbiAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkFkZD17KG5hbWUsIGNvbW1hbmQsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgfX1cbiAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICBmbGFzaChgdXBkYXRlZCAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01jcFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXN1bWVQYW5lbFxuICAgICAgICBzZXNzaW9ucz17cmVzdW1lU2Vzc2lvbnMoKX1cbiAgICAgICAgc2NvcGVzPXtyZXN1bWVTY29wZXMoKX1cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZ2l0Rm9vdGVyOiB2YWx1ZSB9KVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyB3aWRlU2lkZWJhcjogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyB3aWRlU2lkZWJhcjogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Jlc2VhcmNoQWdlbnRMaW1pdCcpIHtcbiAgICAgICAgICAgIHNldFJlc2VhcmNoQWdlbnRMaW1pdCh2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QucmVzZWFyY2hBZ2VudExpbWl0ID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoQWdlbnRMaW1pdDogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgcmVzZWFyY2g6IHsgYWdlbnRMaW1pdDogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDb21wYWN0VG9vbEhpc3RvcnkodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgY29tcGFjdFRvb2xIaXN0b3J5OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAge3dvcmtzcGFjZU9wZW4oKSAmJiA8V29ya3NwYWNlU2lkZWJhciBncm91cHM9e3dvcmtzcGFjZUdyb3Vwc05vd30gc2VsZWN0ZWQ9e3dvcmtzcGFjZVNlbGVjdGVkKCl9IHdpZHRoPXt3b3Jrc3BhY2VXaWR0aH0gbG9hZGluZz17d29ya3NwYWNlTG9hZGluZygpfSBlcnJvcj17d29ya3NwYWNlRXJyb3IoKX0gb25IZWlnaHQ9eyhoZWlnaHQpID0+IHsgaWYgKHdvcmtzcGFjZUhlaWdodCgpICE9PSBoZWlnaHQpIHNldFdvcmtzcGFjZUhlaWdodChoZWlnaHQpIH19IC8+fVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiB3aWRlTGF5b3V0ID8gJ3JvdycgOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGZsZXhCYXNpczogMCwgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIHtidXN5KClcbiAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e1BBTkVMX0JHfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgLSR7Z2l0SW5mby5yZW1vdmVkfWB9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyAmJiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3VzZXInKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06cHJvbXB0OiR7aXRlbS5tZXNzYWdlSWQgfHwgaX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIsIHBhZGRpbmdSaWdodDogNCwgcGFkZGluZ0JvdHRvbTogMSwgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fVxuICAgICAgICAgIGZvY3VzZWQ9eyFkZWxpYmVyYXRpb25WaWV3ICYmIChmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpfVxuICAgICAgICAgIGZvbGxvd0ZvY3VzPXtzdGVlcigpID8gc3RlZXJMaXN0Rm9jdXMgOiBudWxsfVxuICAgICAgICAgIGZvY3VzUGFkZGluZz17MX1cbiAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgb25NZXRyaWNzPXsobWV0cmljcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0cmFuc2NyaXB0TWV0cmljcygpXG4gICAgICAgICAgICBpZiAocHJldmlvdXM/LnZpc2libGVIZWlnaHQgPT09IG1ldHJpY3MudmlzaWJsZUhlaWdodCAmJiBwcmV2aW91cz8uY29udGVudEhlaWdodCA9PT0gbWV0cmljcy5jb250ZW50SGVpZ2h0KSByZXR1cm5cbiAgICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG1ldHJpY3MpXG4gICAgICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwICYmIG1ldHJpY3MudmlzaWJsZUhlaWdodCA+IDAgJiYgbWV0cmljcy5jb250ZW50SGVpZ2h0IDw9IG1ldHJpY3MudmlzaWJsZUhlaWdodCkge1xuICAgICAgICAgICAgICBpZiAod2luZG93ZWQuaGlkZGVuQ291bnQgPT09IDApIHZvaWQgbG9hZE9sZGVySGlzdG9yeSgpXG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGlmICh3aW5kb3dlZC5oaWRkZW5Db3VudCA9PT0gMCkgdm9pZCBsb2FkT2xkZXJIaXN0b3J5KClcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zIHx8IEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPERlbGliZXJhdGlvbkV4Y2hhbmdlIHR1cm5zPXtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJyl9IHZlcmJvc2U9e3ZlcmJvc2UoKX0gd2lkZT17dGVybWluYWxXaWR0aCgpID49IDExMH0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3RvcnkoKX0gdmlld3BvcnRIZWlnaHQ9e3RyYW5zY3JpcHRNZXRyaWNzKCk/LnZpc2libGVIZWlnaHR9IGZvY3VzZWQ9e2ZtLmlzKCdmZWVkJyl9IG9uRm9jdXM9eygpID0+IGZtLmZvY3VzKCdmZWVkJyl9IC8+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICd1c2VyJyAmJiBpdGVtLmtpbmQgIT09ICdkZWxpYmVyYXRpb24tdHVybicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnRhaWw6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBpfWB9IGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogaXRlbXMubWFwKChpdGVtLCBpKSA9PiBzdGVlcigpICYmIGl0ZW0ubWVzc2FnZUlkID8gKFxuICAgICAgICAgIDxTdGVlck1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBzZWxlY3RlZD17aXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWR9XG4gICAgICAgICAgICBmb2N1cz17c3RlZXJMaXN0Rm9jdXN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIGN1cnJlbnRNYXRjaD17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0/Lml0ZW1JbmRleCA9PT0gaSA/IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldIDogbnVsbH1cbiAgICAgICAgICAgIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAge2NvbnZlcnNhdGlvblNlYXJjaC5hY3RpdmUoKSA/IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoQmFyIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofSBtYXRjaGVzPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzfSAvPlxuICAgICAgICApIDogZm0uaXMoJ2ZlZWQnKSAmJiAhYW55UGFuZWwoKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogJ2JsYWNrJyB9fT57J2ovayAgXHUyMTkxL1x1MjE5MyBzY3JvbGwgICBnL0cgZW5kcyAgIC8gc2VhcmNoICAgY3RybC11L2QgcGFnZSd9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+fVxuXG4gICAgICB7KGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtleHBlZGl0ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgZXhwZWRpdGVkLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnsnXHUyMUEwICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBhY2NlbnQoKSB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycgIGFmdGVyIG5leHQgdG9vbCAgXHUyMTkxIHRvIGVkaXQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7cXVldWVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YHBlbmRpbmctJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIwM0EgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIGV4cGVkaXRlZCgpLmxlbmd0aCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgIHBlbmRpbmcgIFx1MjE5MSBlZGl0ICBcdTIxOTIgc2VuZCBhZnRlciBuZXh0IHRvb2wnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7Y29tbWFuZEZvcm0oKSAmJiA8Q29tbWFuZEZvcm1cbiAgICAgICAgbmFtZT17Y29tbWFuZEZvcm0oKS5uYW1lfVxuICAgICAgICBmaWVsZHM9e2NvbW1hbmRGb3JtKCkuZmllbGRzfVxuICAgICAgICBmaWxlcz17ZmlsZUxpc3QoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlcykgPT4gZmluaXNoQ29tbWFuZChjb21tYW5kRm9ybSgpLCB2YWx1ZXMpfVxuICAgICAgICBvbkNhbmNlbD17KCkgPT4geyBzZXRDb21tYW5kRm9ybShudWxsKTsgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbDsgZm0uZm9jdXMoJ2lucHV0JykgfX1cbiAgICAgIC8+fVxuXG4gICAgICB7cXVlc3Rpb25SZXF1ZXN0KCkgJiYgKFxuICAgICAgICA8UXVlc3Rpb25Gb3JtXG4gICAgICAgICAgcmVxdWVzdD17cXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7cGVlclN0YXR1cygpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGVlclN0YXR1cygpfTwvdGV4dD59XG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiB7IGlmICghd29ya3NwYWNlT3BlbigpKSBmbS5mb2N1cygnaW5wdXQnKSB9fSBzdHlsZT17eyBiZzogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogdHJhbnNjcmlwdC5sZW5ndGggPT09IDAgJiYgY2xvdWRzKCkgPyAwIDogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB8fCAhIXF1ZXN0aW9uUmVxdWVzdCgpIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J1x1Mjc2Rid9PC90ZXh0PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICB7KHN0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tIHx8IHNlc3Npb25OYW1lKCkpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Nlc3Npb25OYW1lKCkgPyAnXHUyNDQyICcgOiAnXHUyNDQyJ308L3RleHQ+fVxuICAgICAgICAgICAge3Nlc3Npb25OYW1lKCkgJiYgPHRleHQgc3R5bGU9e3sgYmc6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7c2Vzc2lvbk5hbWUoKX0gYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICBjb2xvcj17Rkd9XG4gICAgICAgICAgbGluZUNvdW50ZXJcbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBmb2N1c2VkPXshd29ya3NwYWNlT3BlbigpICYmIGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICB2YWx1ZT17aW5wdXQoKX1cbiAgICAgICAgICBjdXJzb3JPZmZzZXQ9e2lucHV0Q3Vyc29yKCl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIHNldElucHV0Q3Vyc29yKGN1cnNvcilcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRDbWRJbmRleCgwKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyh2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHModiwge1xuICAgICAgICAgICAgICBhdHRhY2htZW50czogc3RhdGUuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIG5leHRJZDogKCkgPT4gKytzdGF0ZS5pbWFnZUNvdW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNldElucHV0KGNvbnZlcnRlZC50ZXh0LCBjb252ZXJ0ZWQudGV4dCA9PT0gdiA/IGlucHV0Q3Vyc29yKCkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZXRDbWRJbmRleCgwKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldEZpbGVJbmRleCgwKVxuICAgICAgICAgICAgc2V0SGlzdElkeCgtMSlcbiAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChidXN5KCkpIGludGVycnVwdCgpXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gaW1wbGljaXRSZXdpbmRUYXJnZXQoZGVyaXZlZCgpLCBpbnB1dCgpKVxuICAgICAgICAgICAgICBpZiAodGFyZ2V0KSBwZXJmb3JtUmV3aW5kVG8odGFyZ2V0LCB7IGtleTogJ2NoYXQnIH0pXG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICAgICAgc2V0Q29tcGxldGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblN1Ym1pdD17c2VuZH1cbiAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICBpZiAoKChlLmtleSA9PT0gJ2xlZnQnICYmICFlLmN0cmwpIHx8IChlLmtleSA9PT0gJ2gnICYmIGUuY3RybCkpICYmICFlLm1ldGEgJiYgIWUuYWx0ICYmIGJvb3Qud29ya3NwYWNlICYmIGZtLmlzKCdpbnB1dCcpICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpICYmIGVtcHR5V29ya3NwYWNlQ29tcG9zZXIoe1xuICAgICAgICAgICAgICB0ZXh0OiBlLnZhbHVlLCBhdHRhY2htZW50czogd29ya3NwYWNlRHJhZnRBdHRhY2htZW50cyhlLnZhbHVlLCBzdGF0ZS5hdHRhY2htZW50cyksIGRpY3RhdGlvbjogZGljdGF0aW9uU3RhdHVzKCksIGNhcHR1cmU6IGNhcHR1cmVTdGF0dXMoKSwgcGVuZGluZzogcmVmcy5jb21tYW5kRXhwYW5zaW9uIHx8IHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nLFxuICAgICAgICAgICAgICBoaXN0b3J5OiBoaXN0SWR4KCksIGNvbXBsZXRpb246IGNvbXBsZXRpbmcoKSwgY29tbWFuZDogY29tbWFuZEZvcm0oKSwgcXVlc3Rpb246IHF1ZXN0aW9uUmVxdWVzdCgpLCBzdGVlcjogc3RlZXIoKSwgcXVldWVkOiBxdWV1ZWQoKS5sZW5ndGgsIGV4cGVkaXRlZDogZXhwZWRpdGVkKCkubGVuZ3RoLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQoYm9vdC53b3Jrc3BhY2UuY3VycmVudElkKCkpXG4gICAgICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4odHJ1ZSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlTG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICBmbS5mb2N1cygnd29ya3NwYWNlJylcbiAgICAgICAgICAgICAgdm9pZCByZWZyZXNoV29ya3NwYWNlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZzLmRpY3RhdGlvbklucHV0LmhhbmRsZShlKSkgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICd2Jykge1xuICAgICAgICAgICAgICByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IHRydWVcbiAgICAgICAgICAgICAgdm9pZCByZWZzLnBhc3RlSW1hZ2UoKS5maW5hbGx5KCgpID0+IHsgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcgPSBmYWxzZSB9KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ2cnKSB7XG4gICAgICAgICAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RhcnQoZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdvJykge1xuICAgICAgICAgICAgICB2b2lkIHJlZnMuY2FwdHVyZUltYWdlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwaWNrRmlsZShtYXRjaGVkRmlsZXNbTWF0aC5taW4oZmlsZUluZGV4KCksIG1hdGNoZWRGaWxlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93Q29tbWFuZHMgJiYgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY3ljbGUgPSBjbWRDeWNsZSgpXG4gICAgICAgICAgICAgIGlmICghY3ljbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGNtZEluZGV4KCksIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKHsgbWF0Y2hlczogbWF0Y2hlZENvbW1hbmRzIH0pXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgoc3RhcnQpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIG1hdGNoZWRDb21tYW5kc1tzdGFydF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoY21kSW5kZXgoKSArIDEpICUgY3ljbGUubWF0Y2hlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChuZXh0KVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgY3ljbGUubWF0Y2hlc1tuZXh0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KHJlcGxhY2VtZW50LnRleHQsIHJlcGxhY2VtZW50LmN1cnNvcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAncGFzdGUnICYmIGUudGV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGV4dHJhY3RJbWFnZVBhdGhzKGUudGV4dClcbiAgICAgICAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFmdCA9IGUudmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBhdCA9IGUuY3Vyc29yID8/IGRyYWZ0Lmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN0bC5pZFxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHBhdGhzLm1hcChwYXRoID0+IGN0bC5hdHRhY2hJbWFnZShwYXRoKSkpLnRoZW4ocGxhY2Vob2xkZXJzID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjdGwuaWQgIT09IHNlc3Npb25JZCB8fCBpbnB1dCgpICE9PSBkcmFmdCkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICBzZXRJbnB1dChkcmFmdC5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlcnMuam9pbignICcpICsgZHJhZnQuc2xpY2UoYXQpKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdiYWNrc3BhY2UnICYmIGUuY3Vyc29yID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IpLm1hdGNoKC9cXFtJbWFnZSAjXFxkK1xcXSQvKVxuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjdGwuZGV0YWNoSW1hZ2UobWF0Y2hbMF0pXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQoZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvciAtIG1hdGNoWzBdLmxlbmd0aCkgKyBlLnZhbHVlLnNsaWNlKGUuY3Vyc29yKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSkge1xuICAgICAgICAgICAgICBjb25zdCBjdHggPSBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBlLnZhbHVlLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pXG4gICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKCFjb21wbGV0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgc2V0Q29tcEluZGV4KDApXG4gICAgICAgICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgubWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjZXB0Q29tcGxldGlvbihlLnZhbHVlLCBjdHgsIGN0eC5tYXRjaGVzW01hdGgubWluKGNvbXBJbmRleCgpLCBjdHgubWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgfHwgZS5tZXRhIHx8IHNob3dDb21tYW5kcyB8fCBzaG93RmlsZXMpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIGUudmFsdWUgPT09ICcnICYmIChleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgIGN0bC5yZWNhbGxQZW5kaW5nKCkudGhlbihzZXRJbnB1dCkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdyaWdodCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgcXVldWVkKCkubGVuZ3RoID4gMCAmJiBidXN5KCkgJiYgIWNvbXBhY3RpbmcoKSkge1xuICAgICAgICAgICAgICBjdGwuZXhwZWRpdGVRdWV1ZWQoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnJvd3NpbmcgPSBoaXN0SWR4KCkgPj0gMFxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIChicm93c2luZyB8fCBlLnZhbHVlID09PSAnJykgJiYgaGlzdElkeCgpIDwgc2VudCgpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSArIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnZG93bicgJiYgYnJvd3NpbmcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSAtIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChuIDwgMCA/ICcnIDogc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9Nb3VzZUZvY3VzUmVnaW9uPn1cblxuICAgICAge3Nob3dDb21wb3NlckFjdGlvbnMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG1hcmdpbkxlZnQ6IDEgfX0+XG4gICAgICAgICAgPENvbXBvc2VyQWN0aW9uXG4gICAgICAgICAgICBpY29uPVwiXHUyNUNCXCJcbiAgICAgICAgICAgIGFjdGl2ZUljb249XCJcdTI1Q0ZcIlxuICAgICAgICAgICAgYWN0aXZlPXtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnfVxuICAgICAgICAgICAgb25Ib3Zlcj17KGhvdmVyZWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKVxuICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb3NlckFjdGlvbkxhYmVsKCkgPT09ICdjYXB0dXJlIGF1ZGlvIChjdHJsLWcpJykgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZydcbiAgICAgICAgICAgICAgPyB2b2lkIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RvcCgpXG4gICAgICAgICAgICAgIDogcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydCh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCkgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1QTFcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVBMFwiXG4gICAgICAgICAgICBhY3RpdmU9e2NhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZyd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgaW1hZ2UgKGN0cmwtbyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2RpY3RhdGlvbkluZGljYXRvcihkaWN0YXRpb25TdGF0dXMoKSwgZGljdGF0aW9uTGV2ZWxzKCkpfTwvdGV4dD59XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZycgPyAnZXNjIGNhbmNlbCAgZW50ZXIgY29uZmlybScgOiBjYXB0dXJlU3RhdHVzKCkgPT09ICdjYXB0dXJpbmcnID8gJyBlc2MgY2FuY2VsJyA6IGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA/IGAgJHtjb21wb3NlckFjdGlvbkxhYmVsKCl9YCA6ICcnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0NvbW1hbmRzICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge21hdGNoZWRDb21tYW5kcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgY29tbWFuZHM8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRDb21tYW5kc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2NtZEluZGV4KCl9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRDbWRJbmRleH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhjKSA9PiBydW5Db21tYW5kKGMpfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tbWFuZHMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoYywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2AvJHtjLm5hbWV9YC5wYWRFbmQobWF0Y2hlZENvbW1hbmRzLnJlZHVjZSgobSwgeCkgPT4gTWF0aC5tYXgobSwgeC5uYW1lLmxlbmd0aCArIDMpLCAxMikpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBGRyA6IE1VVEVEIH19PntjLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRGaWxlc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtmaWxlSW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRGaWxlSW5kZXh9XG4gICAgICAgICAgICBvblN1Ym1pdD17cGlja0ZpbGV9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSl9XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93RmlsZXMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsoZiwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Zn08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tcGxldGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17Y29tcEN0eC5tYXRjaGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2NvbXBJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldENvbXBJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXsoY2FuZGlkYXRlKSA9PiBhY2NlcHRDb21wbGV0aW9uKGlucHV0KCksIGNvbXBDdHgsIGNhbmRpZGF0ZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17ZGlzbWlzc0NvbXBsZXRpb259XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tcGxldGlvbiAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjYW5kaWRhdGUsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHX1NPRlQgfX0+e2NhbmRpZGF0ZX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cblxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6IHdpZGVMYXlvdXQgPyA2NCA6IHVuZGVmaW5lZCwgaGVpZ2h0OiB3aWRlTGF5b3V0ID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAge3Nob3dNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCl9XG4gICAgICAgICAgY3VycmVudD17bW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtkZWZhdWx0TW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXthc3luYyAobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGN0bC5zd2l0Y2hNb2RlbChtKSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXthc3luYyAobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGN0bC5zd2l0Y2hNb2RlbChtLCB7IGFzRGVmYXVsdDogdHJ1ZSB9KSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpICYmIChcbiAgICAgICAgPE1vZGVsUGFuZWxcbiAgICAgICAgICBtb2RlbHM9e21vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKX1cbiAgICAgICAgICBjdXJyZW50PXtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPyBib290W2Ake3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKX1Nb2RlbGBdIDogc2VsZWN0aW5nU2hlbGxNb2RlbCgpID8gYm9vdC5zaGVsbE1vZGVsIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgOiBib290LnJlc2VhcmNoTW9kZWx9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e251bGx9XG4gICAgICAgICAgdGl0bGU9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGBDaG9vc2UgUGFydGljaXBhbnQgJHtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGAgOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyAnQ2hvb3NlIHNoZWxsIG1vZGVsJyA6IHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkgPyAnQ2hvb3NlIHN5bnRoZXNpcyBtb2RlbCcgOiAnQ2hvb3NlIHBhcmFsbGVsIHdvcmtlciBtb2RlbCd9XG4gICAgICAgICAgaGludD1cImVudGVyOiBzYXZlIG1vZGVsICBlc2M6IGNhbmNlbFwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KG0pID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gcGFydGljaXBhbnRNb2RlbFRhcmdldCgpID09PSAncGFydGljaXBhbnRBJyA/ICdzZXRQYXJ0aWNpcGFudEFNb2RlbCcgOiAnc2V0UGFydGljaXBhbnRCTW9kZWwnXG4gICAgICAgICAgICAgIGN0bFttZXRob2RdKG0ubmFtZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW5nU2hlbGxNb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGN0bC5zZXRTaGVsbE1vZGVsKG0ubmFtZSlcbiAgICAgICAgICAgICAgZmxhc2goYHNoZWxsOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZGVsaWJlcmF0aW9uTW9kZWw6IG0ubmFtZSB9KVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyBkZWxpYmVyYXRpb246IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgZGVsaWJlcmF0aW9uOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm9vdC5yZXNlYXJjaE1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoTW9kZWw6IG0ubmFtZSB9KVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyByZXNlYXJjaFdvcmtlcjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBwYXJhbGxlbCB3b3JrZXJzOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nUmVzZWFyY2goKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZ0RlY2lzaW9uID0gcGVuZGluZ0RlbGliZXJhdGlvbigpXG4gICAgICAgICAgICBjb25zdCByZXR1cm5UbyA9IHJlc2VhcmNoTW9kZWxSZXR1cm4oKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgICBpZiAocGVuZGluZykgcnVuQ29tbWFuZCh7IG5hbWU6ICdwYXJhbGxlbCcgfSwgcGVuZGluZy50YXNrKVxuICAgICAgICAgICAgZWxzZSBpZiAocGVuZGluZ0RlY2lzaW9uKSBydW5Db21tYW5kKHsgbmFtZTogJ2RlbGliZXJhdGUnIH0sIHBlbmRpbmdEZWNpc2lvbi5kZWNpc2lvbilcbiAgICAgICAgICAgIGVsc2UgaWYgKHJldHVyblRvID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsoKSA9PiB7fX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBpZiAocmVzZWFyY2hNb2RlbFJldHVybigpID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U3BlZWRQYW5lbCgpICYmIChcbiAgICAgICAgPFNwZWVkUGFuZWxcbiAgICAgICAgICBsZXZlbHM9e1NQRUVEX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtzcGVlZCgpfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17c3BlZWREZWZhdWx0cygpW21vZGVsKCkubmFtZV0gPz8gJ3N0YW5kYXJkJ31cbiAgICAgICAgICBmb2N1c2VkPXtzaG93U3BlZWRQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KGwpID0+IHtcbiAgICAgICAgICAgIGN0bC5hcHBseVNwZWVkKGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RWZmb3J0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxFZmZvcnRQYW5lbFxuICAgICAgICAgIGxldmVscz17RUZGT1JUX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtlZmZvcnQoKSA/PyBudWxsfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17ZGVmYXVsdEVmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0VmZm9ydFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChsLmtleSlcbiAgICAgICAgICAgIHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5LCB7IGFzRGVmYXVsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93VGhlbWVQYW5lbCgpICYmIChcbiAgICAgICAgPFRoZW1lUGFuZWxcbiAgICAgICAgICB0aGVtZXM9e3RoZW1lSXRlbXMoKX1cbiAgICAgICAgICBwcmVmPXt0aGVtZVByZWYoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93VGhlbWVQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KHQpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dUaGVtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgYXBwbHlUaGVtZVByZWYodC5rZXkpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblByZXZpZXc9eyh0KSA9PiBwcmV2aWV3UGFsZXR0ZSh0LmtleSl9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBwcmV2aWV3UGFsZXR0ZSh0aGVtZVByZWYoKSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dEZWxldGVDb25maXJtKCkgJiYgKFxuICAgICAgICA8Q29uZmlybVBhbmVsXG4gICAgICAgICAgdGl0bGU9XCJEZWxldGUgY3VycmVudCBzZXNzaW9uP1wiXG4gICAgICAgICAgbWVzc2FnZT1cIlRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBhbmQgaXRzIHBlcnNpc3RlZCBoaXN0b3J5IHdpbGwgYmUgcGVybWFuZW50bHkgZGVsZXRlZC5cIlxuICAgICAgICAgIGNvbmZpcm1MYWJlbD1cIkRlbGV0ZVwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd0RlbGV0ZUNvbmZpcm0oKX1cbiAgICAgICAgICBvbkNvbmZpcm09e2NvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0hpc3RvcnlQYW5lbCgpICYmIChcbiAgICAgICAgPEhpc3RvcnlQYW5lbFxuICAgICAgICAgIHByb21wdHM9e2hpc3RQcm9tcHRzKCl9XG4gICAgICAgICAgc2NvcGVzPXtISVNUT1JZX1NDT1BFU31cbiAgICAgICAgICBzY29wZUluZGV4PXtoaXN0U2NvcGUoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93SGlzdG9yeVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodGV4dCkgPT4geyBzZXRJbnB1dCh0ZXh0KTsgc2V0U2hvd0hpc3RvcnlQYW5lbChmYWxzZSkgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtpbmZvUGFuZWwoKSAmJiAoXG4gICAgICAgIDxJbmZvTGlzdFBhbmVsXG4gICAgICAgICAgdGl0bGU9e2luZm9QYW5lbCgpLnRpdGxlfVxuICAgICAgICAgIHJvd3M9e2luZm9QYW5lbCgpLnJvd3N9XG4gICAgICAgICAgb3ZlcnZpZXc9e2luZm9QYW5lbCgpLm92ZXJ2aWV3fVxuICAgICAgICAgIGZvY3VzZWQ9e2luZm9QYW5lbCgpICE9PSBudWxsfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEluZm9QYW5lbChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29ubmVjdFBhbmVsKCkgJiYgKFxuICAgICAgICA8Q29ubmVjdFBhbmVsXG4gICAgICAgICAgcHJvdmlkZXJzPXthdXRoUHJvdmlkZXJzKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0Nvbm5lY3RQYW5lbCgpfVxuICAgICAgICAgIG9uQ29ubmVjdD17Y29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uRGlzY29ubmVjdD17ZGlzY29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb25uZWN0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dXYWtldXBzUGFuZWwoKSAmJiAoXG4gICAgICAgIDxXYWtldXBzUGFuZWxcbiAgICAgICAgICB3YWtldXBzPXsoc2hlbGxzVmVyc2lvbigpLCBib290Lndha2V1cHMubGlzdCgpKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93V2FrZXVwc1BhbmVsKCl9XG4gICAgICAgICAgb25DYW5jZWw9eyh3KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMud2FrZXVwQ2FuY2VsQXJtXG4gICAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSB3LmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSB7IGlkOiB3LmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICAgIHJldHVybiBmbGFzaChgYWdhaW4gdG8gY2FuY2VsIHdha2UtdXAgJHt3LmlkfSAoJHt3Lm5vdGUuc3BsaXQoJ1xcbicpWzBdLnNsaWNlKDAsIDQwKX0pYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZnMud2FrZXVwQ2FuY2VsQXJtID0gbnVsbFxuICAgICAgICAgICAgY3RsLmNhbmNlbFdha2V1cCh3KVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1dha2V1cHNQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAncGljaycgJiYgKFxuICAgICAgICA8UmV3aW5kUGlja1BhbmVsXG4gICAgICAgICAgZW50cmllcz17Wy4uLnJld2luZEVudHJpZXMoKV0ucmV2ZXJzZSgpfVxuICAgICAgICAgIHN0YXRzPXsoaW5kZXgpID0+IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgaW5kZXgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snfVxuICAgICAgICAgIG9uUGljaz17KGVudHJ5KSA9PiB7IHNldFJld2luZFRhcmdldChlbnRyeSk7IHNldFJld2luZFN0ZXAoJ2FjdGlvbicpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0UmV3aW5kU3RlcChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nICYmIHJld2luZFRhcmdldCgpICYmIChcbiAgICAgICAgPFJld2luZEFjdGlvblBhbmVsXG4gICAgICAgICAgdGFyZ2V0PXtyZXdpbmRUYXJnZXQoKX1cbiAgICAgICAgICBvcHRpb25zPXtyZXdpbmRPcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbid9XG4gICAgICAgICAgb25TdWJtaXQ9e3BlcmZvcm1SZXdpbmR9XG4gICAgICAgICAgb25CYWNrPXsoKSA9PiBzZXRSZXdpbmRTdGVwKCdwaWNrJyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7Y29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhY3Rpdml0eS1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2hlbGxBY3Rpb25IaW50ID8gYCR7c2hlbGxBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkU2hlbGx9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdzaGVsbC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaGVsbFdpbmRvdy5tYXAoKHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBzaGVsbC0ke3MuaWR9YFxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB2aWV3ZWRTaGVsbElkKCkgPT09IHMuaWRcbiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBhZ2VudEVsYXBzZWQoeyBzdGFydGVkQXQ6IHMuc3RhcnRlZEF0LCBlbmRlZEF0OiBzLmVuZGVkQXQgfSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YHNoZWxsLSR7cy5pZH1gfSBzZWxlY3RlZD17c2VsZWN0ZWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYHNoZWxsLSR7cy5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChzLmlkKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzLmV4aXRDb2RlID09PSAwID8gR1JFRU4gOiBSRUQgfX0+e3MuZXhpdENvZGUgPT09IDAgPyAnXHUyNUNGJyA6ICdcdTAwRDcnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBGRyA6IE1VVEVEIH19Pntgc2hlbGwgWyR7cy5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e3MuZGVzY3JpcHRpb24gfHwgcy5jb21tYW5kLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gJycgOiBgZXhpdCAke3MuZXhpdENvZGV9ICBgfSR7ZWxhcHNlZH1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IHNoZWxsU3RyaXBTaXplICYmIChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzaGVsbFdpbmRvd1N0YXJ0ID4gMCA/IGBcdTIxOTEgJHtzaGVsbFdpbmRvd1N0YXJ0fWAgOiAnJ30ke3NoZWxsV2luZG93U3RhcnQgPiAwICYmIHNoZWxsV2luZG93U3RhcnQgKyBzaGVsbFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlU2hlbGxzLmxlbmd0aCA/ICcgICcgOiAnJ30ke3NoZWxsV2luZG93U3RhcnQgKyBzaGVsbFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlU2hlbGxzLmxlbmd0aCA/IGBcdTIxOTMgJHt2aXNpYmxlU2hlbGxzLmxlbmd0aCAtIHNoZWxsV2luZG93U3RhcnQgLSBzaGVsbFdpbmRvdy5sZW5ndGh9YCA6ICcnfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7dmlzaWJsZUFnZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogY29tYmluZWRBY3Rpdml0eSB8fCBzaG93Q29tcG9zZXJBY3Rpb25zID8gMCA6IDEgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2FnZW50QWN0aW9uSGludCA/IGAke2FnZW50QWN0aW9uSGludH0gIGAgOiAnJ31qL2sgbW92ZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICAgIHshY29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZEFnZW50fSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnYWdlbnQtbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkQWdlbnQgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FnZW50V2luZG93Lm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnRTdGF0dXMoYSlcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBhZ2VudC0ke2EuaWR9YFxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgYWdlbnQtJHthLmlkfWB9IHNlbGVjdGVkPXt2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYGFnZW50LSR7YS5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChhLmlkKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgICB7YS5zdGF0dXMgPT09ICdydW5uaW5nJyA/IDxTcGlubmVyIGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSB2YXJpYW50PVwiZG90c1wiIC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntzdGF0dXMuaWNvbn08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0PnsnICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZCA/IEZHIDogTVVURUQgfX0+e2Ake2Eucm9sZSB8fCAnYWdlbnQnfSBbJHthLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YS5kZXNjcmlwdGlvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAge3N0YXR1cy5sYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e2AgICR7c3RhdHVzLmxhYmVsfWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCR7c3RhdHVzLmxhYmVsID8gJyAgJyA6ICcgICd9ICR7YWdlbnRFbGFwc2VkKGEpfSAgXHUyMTkzIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlIHZhbHVlPXthLnVzYWdlPy50b3RhbFRva2VucyB8fCBhLnVzYWdlPy5wcm9tcHRUb2tlbnMgfHwgMH0gY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogTVVURUR9IGhpZ2hsaWdodD17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7Y29tcGFjdE51bWJlcihuKX0gdG9rZW5zYH0gLz5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IGFnZW50U3RyaXBTaXplICYmIChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHthZ2VudFdpbmRvd1N0YXJ0ID4gMCA/IGBcdTIxOTEgJHthZ2VudFdpbmRvd1N0YXJ0fWAgOiAnJ30ke2FnZW50V2luZG93U3RhcnQgPiAwICYmIGFnZW50V2luZG93U3RhcnQgKyBhZ2VudFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlQWdlbnRzLmxlbmd0aCA/ICcgICcgOiAnJ30ke2FnZW50V2luZG93U3RhcnQgKyBhZ2VudFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlQWdlbnRzLmxlbmd0aCA/IGBcdTIxOTMgJHt2aXNpYmxlQWdlbnRzLmxlbmd0aCAtIGFnZW50V2luZG93U3RhcnQgLSBhZ2VudFdpbmRvdy5sZW5ndGh9YCA6ICcnfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7d2lkZUxheW91dCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+fVxuXG4gICAgICB7d2lkZUxheW91dCA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgICAge2J1c3koKSAmJiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPFNoaW1tZXIgY29sb3I9e2FjY2VudCgpfSBoaWdobGlnaHQ9e0hJR0hMSUdIVH0gZHVyYXRpb249ezE1MDB9IHJldmVyc2U+XG4gICAgICAgICAgICAgICAgICB7Y29tcGFjdGluZygpXG4gICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICA6IHR1cm5QaGFzZSgpID09PSAndGhpbmtpbmcnID8gJ1RoaW5raW5nJyA6IHR1cm5QaGFzZSgpID09PSAndG9vbHMnID8gJ1dvcmtpbmcnIDogJ1Jlc3BvbmRpbmcnfVxuICAgICAgICAgICAgICAgIDwvU2hpbW1lcj5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7ZWxhcHNlZH0gIGVzYyB0byBpbnRlcnJ1cHRgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgJiYgPFByb2dyZXNzQmFyIHZhcmlhbnQ9XCJ0aGluXCIgdmFsdWU9e2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9uIC8gOH0gd2lkdGg9ezMwfSBwZXJjZW50YWdlPXtmYWxzZX0gY29sb3I9e2FjY2VudCgpfSAvPn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2dpdEluZm8/LmJyYW5jaCAmJiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnUmVwb3NpdG9yeSd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0JyYW5jaCAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntnaXRJbmZvLmJyYW5jaH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0NoYW5nZXMgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57YCR7Z2l0SW5mby5hZGRlZH0gYWRkZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPiAwICYmIGdpdEluZm8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICAnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57YCR7Z2l0SW5mby5yZW1vdmVkfSByZW1vdmVkYH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID09PSAwICYmIGdpdEluZm8ucmVtb3ZlZCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydjbGVhbid9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSB9fT57J1Nlc3Npb24nfTwvdGV4dD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnRGlyZWN0b3J5ICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19Pntib290LmRpc3BsYXlDd2R9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydNb2RlbCAgICAgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e21vZGVsKCkubmFtZX08L3RleHQ+e3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycgRmFzdCd9PC90ZXh0Pn08L2JveD5cbiAgICAgICAgICAgIHtlZmZvcnRBcHBsaWVzKCkgJiYgZWZmb3J0KCkgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydFZmZvcnQgICAgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57ZWZmb3J0KCl9PC90ZXh0PjwvYm94Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnSW5wdXQgdG9rZW5zICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e01hdGgucm91bmQodXNhZ2UucHJvbXB0VG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnT3V0cHV0IHRva2VucyAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e01hdGgucm91bmQodXNhZ2UuY29tcGxldGlvblRva2VucykudG9Mb2NhbGVTdHJpbmcoKX08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICB7dXNhZ2UudGhvdWdodFRva2VucyA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydUaG91Z2h0IHRva2VucyAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e0ZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IE1hdGgucm91bmQobikudG9Mb2NhbGVTdHJpbmcoKX0gLz48L2JveD59XG4gICAgICAgICAgICB7Y29udGV4dFBlcmNlbnQgPiAwICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ29udGV4dCB1c2VkICAgJ308L3RleHQ+PEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBGR19TT0ZUfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtNYXRoLnJvdW5kKG4pfSVgfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydXYWtlLXVwcyAgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57cGVuZGluZ1dha2V1cHN9PC90ZXh0PjwvYm94Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIGdhcDogMSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgIHtzcGVlZEFwcGxpZXMoKSAmJiBzcGVlZCgpID09PSAnZmFzdCcgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PkZhc3Q8L3RleHQ+fVxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2VmZm9ydCgpfTwvdGV4dD59XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICB7cGVuZGluZ1dha2V1cHMgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjNGMCAke3BlbmRpbmdXYWtldXBzfWB9PC90ZXh0Pn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7Y29tcGFjdE51bWJlcih1c2FnZS5wcm9tcHRUb2tlbnMpfSBcdTIxOTNgfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7Y29tcGFjdE51bWJlcih1c2FnZS5jb21wbGV0aW9uVG9rZW5zKX0gXHUyMTkxYH08L3RleHQ+XG4gICAgICAgICAgICB7dXNhZ2UudGhvdWdodFRva2VucyA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e3VzYWdlLnRob3VnaHRUb2tlbnN9IGNvbG9yPXtNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7Y29tcGFjdE51bWJlcihuKX0gXHUyNUM4YH0gLz59XG4gICAgICAgICAgICB7Y29udGV4dFBlcmNlbnQgPiAwICYmIDxBbmltYXRlZFZhbHVlIHZhbHVlPXtjb250ZXh0UGVyY2VudH0gY29sb3I9e2NvbnRleHRQZXJjZW50ID49IDgwID8gUkVEIDogTVVURUR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGJhY2tncm91bmQ9e1BBTkVMX0JHfSBmb3JtYXQ9e2NvbnRleHRCYXJ9IC8+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshd29ya3NwYWNlT3BlbigpICYmIDxEaWN0YXRpb25LZXlzIGlucHV0PXtyZWZzLmRpY3RhdGlvbklucHV0fSAvPn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRBdCh0ZXh0LCBjdXJzb3IgPSB0ZXh0Lmxlbmd0aCkge1xuICBjb25zdCBtYXRjaCA9IHRleHQuc2xpY2UoMCwgY3Vyc29yKS5tYXRjaCgvKF58W1xccyhdKVxcLyhbQS1aYS16MC05Xy1dKikkLylcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGxcbiAgY29uc3Qgc3RhcnQgPSBjdXJzb3IgLSBtYXRjaFsyXS5sZW5ndGggLSAxXG4gIGNvbnN0IHN1ZmZpeCA9IHRleHQuc2xpY2UoY3Vyc29yKS5tYXRjaCgvXltBLVphLXowLTlfLV0qLylbMF1cbiAgcmV0dXJuIHsgc3RhcnQsIGVuZDogY3Vyc29yICsgc3VmZml4Lmxlbmd0aCwgcXVlcnk6IG1hdGNoWzJdIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDb21tYW5kKHRleHQsIHJhbmdlLCBib2R5KSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogdGV4dC5zbGljZSgwLCByYW5nZS5zdGFydCkgKyBib2R5ICsgdGV4dC5zbGljZShyYW5nZS5lbmQpLFxuICAgIGN1cnNvcjogcmFuZ2Uuc3RhcnQgKyBib2R5Lmxlbmd0aCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEZpZWxkcyhjb21tYW5kLCBib2R5LCBhcmdzID0gJycpIHtcbiAgY29uc3QgZmllbGRzID0gWy4uLihjb21tYW5kLmFyZ3VtZW50cyA/PyBbXSldXG4gIGlmIChib2R5LmluY2x1ZGVzKCckQVJHVU1FTlRTJykgJiYgIWFyZ3MpIHtcbiAgICBmaWVsZHMucHVzaCh7IG5hbWU6ICckYXJncycsIGxhYmVsOiAnQXJndW1lbnRzJywgdHlwZTogJ3RleHQnIH0pXG4gIH1cbiAgcmV0dXJuIGZpZWxkc1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgVGV4dEFyZWEsIE1lbnUsIEJ1dHRvbiwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBmdXp6eVNjb3JlLCByYW5rRnV6enkgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgTVVURUQsIFBBTkVMX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIENvbW1hbmRGb3JtKHsgbmFtZSwgZmllbGRzLCBmaWxlcywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgW3N0ZXAsIHNldFN0ZXBdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbc2VsZWN0ZWQsIHNldFNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBmaWVsZCA9IGZpZWxkc1tzdGVwKCldXG4gIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC50eXBlID09PSAnY2hvaWNlJyA/IGZpZWxkLmNob2ljZXMgOiBmaWVsZC50eXBlID09PSAncGF0aCcgPyBmaWxlcyA6IFtdXG4gIGNvbnN0IG1hdGNoZXMgPSByYW5rRnV6enkob3B0aW9ucywgcXVlcnkoKSwgKHEsIHZhbHVlKSA9PiBmdXp6eVNjb3JlKHEsIHZhbHVlKSlcblxuICBmdW5jdGlvbiBhZHZhbmNlKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dCA9IHsgLi4udmFsdWVzKCksIFtmaWVsZC5uYW1lXTogdmFsdWUgfVxuICAgIHNldFZhbHVlcyhuZXh0KVxuICAgIGlmIChzdGVwKCkgPT09IGZpZWxkcy5sZW5ndGggLSAxKSByZXR1cm4gb25TdWJtaXQobmV4dClcbiAgICBzZXRTdGVwKHN0ZXAoKSArIDEpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0U2VsZWN0ZWQoMClcbiAgfVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBnYXA6IDIgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57YC8ke25hbWV9YH08L3RleHQ+XG4gICAgICAgIHtmaWVsZHMuc2xpY2UoMCwgc3RlcCgpKS5tYXAoKGl0ZW0pID0+IDx0ZXh0IGtleT17aXRlbS5uYW1lfSBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3ZhbHVlcygpW2l0ZW0ubmFtZV19PC90ZXh0Pil9XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJDYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gLz5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntmaWVsZC5sYWJlbH08L3RleHQ+XG4gICAgICA8VGV4dEFyZWFcbiAgICAgICAga2V5PXtmaWVsZC5uYW1lfVxuICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICB2YWx1ZT17cXVlcnkoKX1cbiAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgbWF4SGVpZ2h0PXsxfVxuICAgICAgICBwbGFjZWhvbGRlcj17ZmllbGQubGFiZWx9XG4gICAgICAgIG9uQ2FuY2VsPXtvbkNhbmNlbH1cbiAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4geyBzZXRRdWVyeSh2YWx1ZSk7IHNldFNlbGVjdGVkKDApIH19XG4gICAgICAgIG9uU3VibWl0PXsodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2Nob2ljZScpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkgYWR2YW5jZShtYXRjaGVzW01hdGgubWluKHNlbGVjdGVkKCksIG1hdGNoZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgIH0gZWxzZSBhZHZhbmNlKGZpZWxkLnR5cGUgPT09ICdwYXRoJyAmJiBtYXRjaGVzLmxlbmd0aCAmJiAhdmFsdWUuc3RhcnRzV2l0aCgnLycpICYmICF2YWx1ZS5zdGFydHNXaXRoKCd+JykgPyBtYXRjaGVzW01hdGgubWluKHNlbGVjdGVkKCksIG1hdGNoZXMubGVuZ3RoIC0gMSldIDogdmFsdWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChNYXRoLm1pbihzZWxlY3RlZCgpICsgMSwgbWF0Y2hlcy5sZW5ndGggLSAxKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWF4KDAsIHNlbGVjdGVkKCkgLSAxKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRRdWVyeShtYXRjaGVzW01hdGgubWluKHNlbGVjdGVkKCksIG1hdGNoZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAge21hdGNoZXMubGVuZ3RoID4gMCAmJiA8TWVudVxuICAgICAgICBpdGVtcz17bWF0Y2hlc31cbiAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkKCl9XG4gICAgICAgIG9uU2VsZWN0PXtzZXRTZWxlY3RlZH1cbiAgICAgICAgb25TdWJtaXQ9e2FkdmFuY2V9XG4gICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICByZW5kZXJJdGVtPXsodmFsdWUsIHsgYWN0aXZlIH0pID0+IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntgJHthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfSR7dmFsdWV9YH08L3RleHQ+fVxuICAgICAgLz59XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJjb25zdCBmaWxsZXIgPSAvKD88IVteXFxzLDs6IT9dKSg/OnVofHVtKSg/PSR8W1xccyw7Oi4hP10pKFsgXFx0XSpbLDs6LiE/XSopWyBcXHRdKi9naXVcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuRGljdGF0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQuc3BsaXQoJ1xcbicpLm1hcChjbGVhbkxpbmUpLmpvaW4oJ1xcbicpLnRyaW0oKVxufVxuXG5mdW5jdGlvbiBjbGVhbkxpbmUobGluZSkge1xuICBsZXQgcmVzdWx0ID0gJydcbiAgbGV0IG9mZnNldCA9IDBcbiAgbGV0IGNhcGl0YWxpemUgPSBmYWxzZVxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGxpbmUubWF0Y2hBbGwoZmlsbGVyKSkge1xuICAgIGxldCBiZWZvcmUgPSBsaW5lLnNsaWNlKG9mZnNldCwgbWF0Y2guaW5kZXgpXG4gICAgaWYgKGNhcGl0YWxpemUpIGJlZm9yZSA9IHVwcGVyRmlyc3QoYmVmb3JlKVxuICAgIHJlc3VsdCArPSBiZWZvcmVcbiAgICBjb25zdCBhZnRlciA9IGxpbmUuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgY29uc3QgdGVybWluYWwgPSBtYXRjaFsxXS5tYXRjaCgvWy4hP10rLyk/LlswXSA/PyAnJ1xuICAgIHJlc3VsdCA9IHJlc3VsdC50cmltRW5kKClcbiAgICBjb25zdCBzZW50ZW5jZVN0YXJ0ID0gIXJlc3VsdCB8fCAvWy4hP10kLy50ZXN0KHJlc3VsdClcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvLCQvLCAnJylcbiAgICBpZiAoIWFmdGVyKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWzs6XSQvLCAnJylcbiAgICBpZiAodGVybWluYWwgJiYgIXNlbnRlbmNlU3RhcnQpIHJlc3VsdCArPSB0ZXJtaW5hbFxuICAgIGNhcGl0YWxpemUgPSBzZW50ZW5jZVN0YXJ0IHx8IEJvb2xlYW4odGVybWluYWwpXG4gICAgaWYgKHJlc3VsdCAmJiBhZnRlcikgcmVzdWx0ICs9ICcgJ1xuICAgIG9mZnNldCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gIH1cbiAgY29uc3QgdGFpbCA9IGxpbmUuc2xpY2Uob2Zmc2V0KVxuICByZXR1cm4gcmVzdWx0ICsgKGNhcGl0YWxpemUgPyB1cHBlckZpcnN0KHRhaWwpIDogdGFpbClcbn1cblxuZnVuY3Rpb24gdXBwZXJGaXJzdCh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoL14oXFxzKikoXFxwe0xsfSkoPyFcXHB7THV9KS91LCAoXywgc3BhY2UsIGxldHRlcikgPT4gc3BhY2UgKyBsZXR0ZXIudG9VcHBlckNhc2UoKSlcbn1cblxuIiwgImltcG9ydCB7IGNsZWFuRGljdGF0aW9uIH0gZnJvbSAnLi9kaWN0YXRpb24tdGV4dC5qcydcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnXG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25IZWxwZXJQYXRoKHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSkge1xuICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICBjb25zdCBidW5kbGVkID0gZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL2xpbnV4LWRpY3RhdGUuanMnLCBpbXBvcnQubWV0YS51cmwpKVxuICAgIHJldHVybiBleGlzdHNTeW5jKGJ1bmRsZWQpID8gYnVuZGxlZCA6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vaGVscGVyL2xpbnV4LWRpY3RhdGUuanMnLCBpbXBvcnQubWV0YS51cmwpKVxuICB9XG4gIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvLmJ1aWxkL3JlbGVhc2UvcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbih7IG9uU3RhdHVzID0gKCkgPT4ge30sIG9uTGV2ZWwgPSAoKSA9PiB7fSwgb25FcnJvciA9ICgpID0+IHt9LCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGFyY2ggPSBwcm9jZXNzLmFyY2gsIGxhdW5jaCA9ICgpID0+IHNwYXduKHBsYXRmb3JtID09PSAnbGludXgnID8gcHJvY2Vzcy5leGVjUGF0aCA6IGRpY3RhdGlvbkhlbHBlclBhdGgocGxhdGZvcm0pLCBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/IFtkaWN0YXRpb25IZWxwZXJQYXRoKHBsYXRmb3JtKV0gOiBbXSwgeyBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pLCBsb2FkaW5nVGltZW91dCA9IDYwMDAwMCwgcmVxdWVzdFRpbWVvdXQgPSBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/IDE4MDAwMCA6IDQ1MDAwIH0gPSB7fSkge1xuICBsZXQgY2hpbGQgPSBudWxsXG4gIGxldCBzdGF0dXMgPSAnaWRsZSdcbiAgbGV0IHNlcXVlbmNlID0gMFxuICBsZXQgZ2VuZXJhdGlvbiA9IDBcbiAgbGV0IHJlYWR5ID0gbnVsbFxuICBsZXQgZGlzcG9zZWQgPSBmYWxzZVxuICBjb25zdCBwZW5kaW5nID0gbmV3IE1hcCgpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdHVzKHZhbHVlKSB7XG4gICAgc3RhdHVzID0gdmFsdWVcbiAgICBvblN0YXR1cyh2YWx1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0KGVycm9yID0gbmV3IEVycm9yKCdkaWN0YXRpb24gY2FuY2VsbGVkJykpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IGNoaWxkXG4gICAgY2hpbGQgPSBudWxsXG4gICAgcmVhZHkgPSBudWxsXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZW5kaW5nLnZhbHVlcygpKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpXG4gICAgICBlbnRyeS5yZWplY3QoZXJyb3IpXG4gICAgfVxuICAgIHBlbmRpbmcuY2xlYXIoKVxuICAgIHByZXZpb3VzPy5zdGRpbi5lbmQoKVxuICAgIHByZXZpb3VzPy5raWxsKClcbiAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICB9XG5cbiAgZnVuY3Rpb24gd2FpdEZvcihpZCwgdGltZW91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVzZXQobmV3IEVycm9yKCdkaWN0YXRpb24gdGltZWQgb3V0JykpLCB0aW1lb3V0KVxuICAgICAgcGVuZGluZy5zZXQoaWQsIHsgcmVzb2x2ZSwgcmVqZWN0LCB0aW1lciB9KVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUoaWQsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBlbnRyeSA9IHBlbmRpbmcuZ2V0KGlkKVxuICAgIGlmICghZW50cnkpIHJldHVyblxuICAgIHBlbmRpbmcuZGVsZXRlKGlkKVxuICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICBpZiAobWVzc2FnZS5lcnJvcikgZW50cnkucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlLmVycm9yKSlcbiAgICBlbHNlIGVudHJ5LnJlc29sdmUobWVzc2FnZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgaWYgKHJlYWR5KSByZXR1cm4gcmVhZHlcbiAgICBpZiAocGxhdGZvcm0gIT09ICdsaW51eCcgJiYgKHBsYXRmb3JtICE9PSAnZGFyd2luJyB8fCBhcmNoICE9PSAnYXJtNjQnKSkgdGhyb3cgbmV3IEVycm9yKCdkaWN0YXRpb24gcmVxdWlyZXMgTGludXggb3IgYW4gQXBwbGUgU2lsaWNvbiBNYWMnKVxuICAgIGNvbnN0IGluc3RhbmNlID0gbGF1bmNoKClcbiAgICBjaGlsZCA9IGluc3RhbmNlXG4gICAgcmVhZHkgPSB3YWl0Rm9yKCdyZWFkeScsIGxvYWRpbmdUaW1lb3V0KVxuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGluc3RhbmNlLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBidWZmZXIgKz0gY2h1bmsudG9TdHJpbmcoKVxuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAxMDI0ICogMTAyNCkgcmV0dXJuIHJlc2V0KG5ldyBFcnJvcignaW52YWxpZCBkaWN0YXRpb24gaGVscGVyIG91dHB1dCcpKVxuICAgICAgbGV0IGF0XG4gICAgICB3aGlsZSAoKGF0ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgYXQpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShhdCArIDEpXG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIHRyeSB7IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpIH0gY2F0Y2ggeyBjb250aW51ZSB9XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2xldmVsJykge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdyZWNvcmRpbmcnICYmIE51bWJlci5pc0Zpbml0ZShtZXNzYWdlLmxldmVsKSkgb25MZXZlbChNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBtZXNzYWdlLmxldmVsKSkpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdyZWFkeScpIHNldHRsZSgncmVhZHknLCBtZXNzYWdlKVxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UubWVzc2FnZSB8fCAnZGljdGF0aW9uIGZhaWxlZCcpXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICAgIGlmICghYWN0aXZlKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCAhPSBudWxsKSBzZXR0bGUobWVzc2FnZS5pZCwgbWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGluc3RhbmNlLnN0ZGVyci5vbignZGF0YScsICgpID0+IHt9KVxuICAgIGNvbnN0IGZhaWxlZCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICBjb25zdCByZWNvcmRpbmcgPSBzdGF0dXMgPT09ICdyZWNvcmRpbmcnXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIGlmICghYWN0aXZlICYmIHJlY29yZGluZykgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbignZXJyb3InLCAoZXJyb3IpID0+IGZhaWxlZChuZXcgRXJyb3IoYGRpY3RhdGlvbiBoZWxwZXIgdW5hdmFpbGFibGU6ICR7ZXJyb3IubWVzc2FnZX1gKSkpXG4gICAgaW5zdGFuY2Uuc3RkaW4ub24oJ2Vycm9yJywgZmFpbGVkKVxuICAgIGluc3RhbmNlLm9uKCdleGl0JywgKCkgPT4gZmFpbGVkKG5ldyBFcnJvcignZGljdGF0aW9uIGhlbHBlciBleGl0ZWQnKSkpXG4gICAgcmV0dXJuIHJlYWR5XG4gIH1cblxuICBmdW5jdGlvbiByZXF1ZXN0KG9wKSB7XG4gICAgY29uc3QgaWQgPSArK3NlcXVlbmNlXG4gICAgY29uc3QgcmVzdWx0ID0gd2FpdEZvcihpZCwgcmVxdWVzdFRpbWVvdXQpXG4gICAgdHJ5IHsgY2hpbGQuc3RkaW4ud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoeyBpZCwgb3AgfSl9XFxuYCkgfSBjYXRjaCAoZXJyb3IpIHsgcmVzZXQoZXJyb3IpIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwcmVsb2FkKCkge1xuICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuXG4gICAgdHJ5IHsgYXdhaXQgbG9hZCgpIH0gY2F0Y2gge31cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGlmIChkaXNwb3NlZCB8fCBzdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ2xvYWRpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkKClcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICBzZXRTdGF0dXMoJ3N0YXJ0aW5nJylcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ3N0YXJ0JylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdyZWNvcmRpbmcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ3RyYW5zY3JpYmluZycpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3QoJ3N0b3AnKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm4gbnVsbFxuICAgICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgICAgIHJldHVybiBjbGVhbkRpY3RhdGlvbihyZXN1bHQudGV4dCB8fCAnJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSB7XG4gICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiByZXNldCgpXG4gICAgc2V0U3RhdHVzKCdjYW5jZWxsaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVxdWVzdCgnY2FuY2VsJylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdpZGxlJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSByZXNldChlcnJvcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHJlc2V0KClcbiAgfVxuXG4gIHJldHVybiB7IHByZWxvYWQsIHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGRpc3Bvc2UsIGdldCBzdGF0dXMoKSB7IHJldHVybiBzdGF0dXMgfSB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnXG5pbXBvcnQgeyBta2R0ZW1wLCB3cml0ZUZpbGUsIHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHJtU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxuY29uc3QgZXhlY3V0ZSA9IHByb21pc2lmeShleGVjRmlsZSlcbmNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldCgpXG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZGlyIG9mIGRpcmVjdG9yaWVzKSBybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn0pXG5cbmNvbnN0IG1hY1NjcmlwdCA9IGBPYmpDLmltcG9ydCgnQXBwS2l0Jyk7IE9iakMuaW1wb3J0KCdGb3VuZGF0aW9uJyk7XG5jb25zdCBwYXN0ZWJvYXJkID0gJC5OU1Bhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQ7XG5jb25zdCBmaWxlcyA9IHBhc3RlYm9hcmQucHJvcGVydHlMaXN0Rm9yVHlwZSgnTlNGaWxlbmFtZXNQYm9hcmRUeXBlJyk7XG5sZXQgaW1hZ2UgPSBudWxsO1xuaWYgKCFmaWxlcy5pc05pbCgpICYmIGZpbGVzLmNvdW50ID4gMCkge1xuICBjb25zdCBwYXRoID0gT2JqQy51bndyYXAoZmlsZXMub2JqZWN0QXRJbmRleCgwKSk7XG4gIGlmICgvXFxcXC4ocG5nfGpwZT9nfGdpZnx3ZWJwKSQvaS50ZXN0KHBhdGgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aENvbnRlbnRzT2ZGaWxlKHBhdGgpO1xufVxuaWYgKCFpbWFnZSB8fCBpbWFnZS5pc05pbCgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7XG5sZXQgZGF0YSA9IG51bGw7XG5pZiAoIWltYWdlLmlzTmlsKCkpIHtcbiAgY29uc3QgYml0bWFwID0gJC5OU0JpdG1hcEltYWdlUmVwLmltYWdlUmVwV2l0aERhdGEoaW1hZ2UuVElGRlJlcHJlc2VudGF0aW9uKTtcbiAgZGF0YSA9IGJpdG1hcC5yZXByZXNlbnRhdGlvblVzaW5nVHlwZVByb3BlcnRpZXMoJC5OU0JpdG1hcEltYWdlRmlsZVR5cGVQTkcsICQoe30pKTtcbn1cbmRhdGEgPyBPYmpDLnVud3JhcChkYXRhLmJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9ucygwKSkgOiAnJ2BcblxuY29uc3Qgd2luZG93c1NjcmlwdCA9IGBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5XaW5kb3dzLkZvcm1zOyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5EcmF3aW5nO1xuaWYgKFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpDb250YWluc0ltYWdlKCkpIHtcbiAgJGltYWdlID0gW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkdldEltYWdlKCk7XG4gICRzdHJlYW0gPSBOZXctT2JqZWN0IFN5c3RlbS5JTy5NZW1vcnlTdHJlYW07XG4gIHRyeSB7ICRpbWFnZS5TYXZlKCRzdHJlYW0sIFtTeXN0ZW0uRHJhd2luZy5JbWFnaW5nLkltYWdlRm9ybWF0XTo6UG5nKTsgW0NvbnZlcnRdOjpUb0Jhc2U2NFN0cmluZygkc3RyZWFtLlRvQXJyYXkoKSkgfVxuICBmaW5hbGx5IHsgJHN0cmVhbS5EaXNwb3NlKCk7ICRpbWFnZS5EaXNwb3NlKCkgfVxufWBcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDbGlwYm9hcmRJbWFnZSh7IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgZW52ID0gcHJvY2Vzcy5lbnYsIHJ1biA9IGV4ZWN1dGUgfSA9IHt9KSB7XG4gIGlmIChlbnYuU1NIX0NPTk5FQ1RJT04gfHwgZW52LlNTSF9UVFkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5hdmFpbGFibGUgb3ZlciBTU0gnKVxuICBjb25zdCBvcHRpb25zID0geyBlbmNvZGluZzogJ2J1ZmZlcicsIHRpbWVvdXQ6IDEwMDAwLCBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQgfVxuICBsZXQgZGF0YVxuICB0cnkge1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ29zYXNjcmlwdCcsIFsnLWwnLCAnSmF2YVNjcmlwdCcsICctZScsIG1hY1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdwb3dlcnNoZWxsLmV4ZScsIFsnLU5vUHJvZmlsZScsICctTm9uSW50ZXJhY3RpdmUnLCAnLVNUQScsICctQ29tbWFuZCcsIHdpbmRvd3NTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgY29uc3Qgd2F5bGFuZCA9IEJvb2xlYW4oZW52LldBWUxBTkRfRElTUExBWSlcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSB3YXlsYW5kID8gJ3dsLXBhc3RlJyA6ICd4Y2xpcCdcbiAgICAgIGNvbnN0IHsgc3Rkb3V0OiB0eXBlcyB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tbGlzdC10eXBlcyddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdUQVJHRVRTJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBpZiAoIXR5cGVzLnRvU3RyaW5nKCkuc3BsaXQoL1xccysvKS5pbmNsdWRlcygnaW1hZ2UvcG5nJykpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tdHlwZScsICdpbWFnZS9wbmcnLCAnLS1uby1uZXdsaW5lJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ2ltYWdlL3BuZycsICctbyddLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bnN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJylcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCByZWFkZXIgdW5hdmFpbGFibGU6IGluc3RhbGwgJyArIChlbnYuV0FZTEFORF9ESVNQTEFZID8gJ3dsLWNsaXBib2FyZCcgOiBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/ICd4Y2xpcCcgOiAndGhlIHN5c3RlbSBjbGlwYm9hcmQgdG9vbHMnKSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG4gIGlmICghZGF0YS5sZW5ndGgpIHJldHVybiBudWxsXG4gIGlmICghZGF0YS5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGRpZCBub3QgcmV0dXJuIGEgUE5HIGltYWdlJylcbiAgY29uc3QgZGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jbGlwYm9hcmQtJykpXG4gIGRpcmVjdG9yaWVzLmFkZChkaXIpXG4gIGNvbnN0IGRpc3Bvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICBkaXJlY3Rvcmllcy5kZWxldGUoZGlyKVxuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpciwgJ2NsaXBib2FyZC5wbmcnKVxuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBkYXRhLCB7IG1vZGU6IDBvNjAwIH0pXG4gICAgcmV0dXJuIHsgcGF0aCwgZGlzcG9zZSB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgZGlzcG9zZSgpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7IHJlYWRJbWFnZSwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHBhc3RlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHJlYWRJbWFnZSgpXG4gICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgIG9uRXJyb3IoJ05vIGltYWdlIG9uIHRoZSBjbGlwYm9hcmQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdDbGlwYm9hcmQgaW1hZ2Ugbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBDbGlwYm9hcmQgcGFzdGUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgfVxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uLCBnZXRJbnB1dCwgc2V0SW5wdXQgfSkge1xuICBsZXQgZHJhZnQgPSBudWxsXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuXG4gIGZ1bmN0aW9uIHN0YXJ0KHsgdmFsdWUsIGN1cnNvciB9KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgZHJhZnQgPSB7IHZhbHVlLCBjdXJzb3IgfVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHZvaWQgZGljdGF0aW9uLnN0YXJ0KClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0gZHJhZnRcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZGljdGF0aW9uLnN0b3AoKVxuICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbiB8fCAhdGFyZ2V0IHx8IHRleHQgPT0gbnVsbCB8fCBnZXRJbnB1dCgpICE9PSB0YXJnZXQudmFsdWUpIHJldHVyblxuICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IGxlYWQgPSB0ZXh0ICYmIGJlZm9yZSAmJiAhL1xccyQvLnRlc3QoYmVmb3JlKSAmJiAhL15cXHMvLnRlc3QodGV4dCkgPyAnICcgOiAnJ1xuICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgdHJhaWwgPSB0ZXh0ICYmIGFmdGVyICYmICEvXFxzJC8udGVzdCh0ZXh0KSAmJiAhL15bXFxzLiw7OiE/XS8udGVzdChhZnRlcikgPyAnICcgOiAnJ1xuICAgIHNldElucHV0KGJlZm9yZSArIGxlYWQgKyB0ZXh0ICsgdHJhaWwgKyBhZnRlcilcbiAgICBkcmFmdCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICArK2dlbmVyYXRpb25cbiAgICBkcmFmdCA9IG51bGxcbiAgICB2b2lkIGRpY3RhdGlvbi5jYW5jZWwoKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScgfHwgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpKSBjYW5jZWwoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicgJiYgIWV2ZW50LnNoaWZ0ICYmICFldmVudC5tZXRhICYmIGRpY3RhdGlvbi5zdGF0dXMgPT09ICdyZWNvcmRpbmcnKSB2b2lkIHN0b3AoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4geyBzdGFydCwgc3RvcCwgY2FuY2VsLCBoYW5kbGUgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoeyBjYXB0dXJlUmVnaW9uLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yLCBvblN0YXR1cyA9ICgpID0+IHt9IH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIG9uU3RhdHVzKCdjYXB0dXJpbmcnKVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBjYXB0dXJlUmVnaW9uKClcbiAgICAgIGlmICghaW1hZ2UpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ1NjcmVlbiBjYXB0dXJlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgU2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgICBvblN0YXR1cygnaWRsZScpXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBta2R0ZW1wLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxubGV0IGNhcHR1cmVEaXIgPSBudWxsXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNhcHR1cmVEaXIoKSB7XG4gIGNhcHR1cmVEaXIgPz89IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2FwdHVyZS0nKSlcbiAgcmV0dXJuIGNhcHR1cmVEaXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVDb21tYW5kcyhwbGF0Zm9ybSwgZmlsZSwgZW52ID0gcHJvY2Vzcy5lbnYpIHtcbiAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykgcmV0dXJuIFtbJ3NjcmVlbmNhcHR1cmUnLCBbJy1pJywgJy14JywgZmlsZV1dXVxuICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICBpZiAoZW52LlhER19TRVNTSU9OX1RZUEUgPT09ICd3YXlsYW5kJykge1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSBbWydnbm9tZS1zY3JlZW5zaG90JywgWyctYScsICctZicsIGZpbGVdXSwgWydzcGVjdGFjbGUnLCBbJy1yJywgJy1iJywgJy1uJywgJy1vJywgZmlsZV1dXVxuICAgICAgcmV0dXJuIGVudi5TV0FZU09DSyB8fCBlbnYuWERHX0NVUlJFTlRfREVTS1RPUD8uc3BsaXQoJzonKS5pbmNsdWRlcygnc3dheScpXG4gICAgICAgID8gW1snc2x1cnAnLCBbXV0sIC4uLmZhbGxiYWNrXVxuICAgICAgICA6IGZhbGxiYWNrXG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBbJ3hmY2U0LXNjcmVlbnNob290ZXInLCBbJy0tcmVnaW9uJywgJy0tc2F2ZScsIGZpbGVdXSxcbiAgICAgIFsnZ25vbWUtc2NyZWVuc2hvdCcsIFsnLWEnLCAnLWYnLCBmaWxlXV0sXG4gICAgICBbJ3Njcm90JywgWyctLXNlbGVjdCcsIGZpbGVdXSxcbiAgICBdXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdzY3JlZW4gY2FwdHVyZSByZXF1aXJlcyBtYWNPUyBvciBMaW51eCcpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYXB0dXJlUmVnaW9uKHsgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBlbnYgPSBwcm9jZXNzLmVudiwgcnVuID0gZXhlY0ZpbGUsIGV4aXN0cyA9IGV4aXN0c1N5bmMgfSA9IHt9KSB7XG4gIGNvbnN0IGZpbGUgPSBqb2luKGF3YWl0IGVuc3VyZUNhcHR1cmVEaXIoKSwgYGNhcHR1cmUtJHtEYXRlLm5vdygpfS5wbmdgKVxuICBjb25zdCBjb21tYW5kcyA9IGNhcHR1cmVDb21tYW5kcyhwbGF0Zm9ybSwgZmlsZSwgZW52KVxuICBmb3IgKGNvbnN0IFtjb21tYW5kLCBhcmdzXSBvZiBjb21tYW5kcykge1xuICAgIGxldCBlcnJvclxuICAgIGlmIChjb21tYW5kID09PSAnc2x1cnAnKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBydW4oY29tbWFuZCwgYXJncywgKGVycm9yLCBzdGRvdXQpID0+IHJlc29sdmUoeyBlcnJvciwgc3Rkb3V0IH0pKVxuICAgICAgICAvLyBzbHVycCBjb25zdW1lcyBvcHRpb25hbCByZWN0YW5nbGVzIGZyb20gc3RkaW4gYmVmb3JlIHNob3dpbmcgaXRzIFVJLlxuICAgICAgICAvLyBleGVjRmlsZSBsZWF2ZXMgdGhhdCBwaXBlIG9wZW47IHNpZ25hbCBFT0Ygc28gc2VsZWN0aW9uIGNhbiBzdGFydC5cbiAgICAgICAgY2hpbGQ/LnN0ZGluPy5lbmQoKVxuICAgICAgfSlcbiAgICAgIGVycm9yID0gc2VsZWN0aW9uLmVycm9yXG4gICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gc2VsZWN0aW9uLnN0ZG91dD8udHJpbSgpXG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHJldHVybiBudWxsXG4gICAgICAgIGVycm9yID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgcnVuKCdncmltJywgWyctZycsIGdlb21ldHJ5LCBmaWxlXSwgZXJyb3IgPT4gcmVzb2x2ZShlcnJvcikpXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChlcnJvcj8uY29kZSA9PT0gJ0VOT0VOVCcpIHRocm93IG5ldyBFcnJvcignSW5zdGFsbCBncmltIGFuZCBzbHVycCBmb3IgU3dheSByZWdpb24gY2FwdHVyZTogc3VkbyBhcHQgaW5zdGFsbCBncmltIHNsdXJwLicpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHJ1bihjb21tYW5kLCBhcmdzLCBlcnJvciA9PiByZXNvbHZlKGVycm9yKSlcbiAgICAgIH0pXG4gICAgfVxuICAgIC8vIFRyeSBhbm90aGVyIGJhY2tlbmQgb25seSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIG1pc3NpbmcsIG5vdCBvbiBjYW5jZWwuXG4gICAgaWYgKGVycm9yPy5jb2RlID09PSAnRU5PRU5UJykgY29udGludWVcbiAgICBpZiAoIWV4aXN0cyhmaWxlKSkge1xuICAgICAgaWYgKGVycm9yICYmIHBsYXRmb3JtICE9PSAnZGFyd2luJykge1xuICAgICAgICBjb25zdCBkZXRhaWwgPSBlcnJvci5zdGRlcnIgfHwgZXJyb3IubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpXG4gICAgICAgIGlmIChlcnJvci5jb2RlICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoYHNjcmVlbiBjYXB0dXJlIGZhaWxlZDogJHtkZXRhaWx9YClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgYXdhaXQgdW5saW5rKGZpbGUpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHsgcGF0aDogZmlsZSwgZGlzcG9zZTogKCkgPT4gdW5saW5rKGZpbGUpLmNhdGNoKCgpID0+IHt9KSB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGVudi5YREdfU0VTU0lPTl9UWVBFID09PSAnd2F5bGFuZCdcbiAgICA/ICdJbnN0YWxsIGdub21lLXNjcmVlbnNob3Qgb3Igc3BlY3RhY2xlIGZvciBMaW51eCByZWdpb24gY2FwdHVyZS4gU3VwcG9ydCBkZXBlbmRzIG9uIHlvdXIgV2F5bGFuZCBjb21wb3NpdG9yLidcbiAgICA6ICdJbnN0YWxsIGEgcmVnaW9uIGNhcHR1cmUgdG9vbDogc3VkbyBhcHQgaW5zdGFsbCB4ZmNlNC1zY3JlZW5zaG9vdGVyIChvciBnbm9tZS1zY3JlZW5zaG90IC8gc2Nyb3QpLicpXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2VyRmlsZXMoKSB7XG4gIGxldCB0ZXh0ID0gJydcbiAgbGV0IHJlZmVyZW5jZXMgPSBbXVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgYXR0YWNobWVudHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwXG4gICAgd2hpbGUgKHN0YXJ0IDwgdGV4dC5sZW5ndGggJiYgc3RhcnQgPCB2YWx1ZS5sZW5ndGggJiYgdGV4dFtzdGFydF0gPT09IHZhbHVlW3N0YXJ0XSkgc3RhcnQrK1xuICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0aFxuICAgIGxldCBuZXh0RW5kID0gdmFsdWUubGVuZ3RoXG4gICAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIG5leHRFbmQgPiBzdGFydCAmJiB0ZXh0W2VuZCAtIDFdID09PSB2YWx1ZVtuZXh0RW5kIC0gMV0pIHtcbiAgICAgIGVuZC0tXG4gICAgICBuZXh0RW5kLS1cbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPSBuZXh0RW5kIC0gZW5kXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlLmVuZCA8PSBzdGFydCkgcmV0dXJuIFtyZWZlcmVuY2VdXG4gICAgICBpZiAocmVmZXJlbmNlLnN0YXJ0ID49IGVuZCkgcmV0dXJuIFt7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIGRlbHRhLCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBkZWx0YSB9XVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSlcbiAgICB0ZXh0ID0gdmFsdWVcbiAgICBjb25zdCBtYXRjaGVzID0gWy4uLnRleHQubWF0Y2hBbGwoL1xcW0ZpbGUgI1xcZCtcXF0vZyldLnJldmVyc2UoKVxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF0dGFjaG1lbnRzLmdldChtYXRjaFswXSlcbiAgICAgIGlmIChhdHRhY2htZW50Py5raW5kICE9PSAnZmlsZScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBwYXRoID0gYXR0YWNobWVudC5wYXRoXG4gICAgICBjb25zdCBvZmZzZXQgPSBwYXRoLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5zdGFydCA+PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICA/IHsgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgb2Zmc2V0LCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBvZmZzZXQgfVxuICAgICAgICA6IHJlZmVyZW5jZSlcbiAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIHBhdGggKyB0ZXh0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgc3RhcnQ6IG1hdGNoLmluZGV4LCBlbmQ6IG1hdGNoLmluZGV4ICsgcGF0aC5sZW5ndGgsIHBsYWNlaG9sZGVyOiBtYXRjaFswXSB9KVxuICAgIH1cbiAgICByZWZlcmVuY2VzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgIGxldCB2YWx1ZSA9IHRleHRcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBbLi4ucmVmZXJlbmNlc10ucmV2ZXJzZSgpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHJlZmVyZW5jZS5zdGFydCkgKyByZWZlcmVuY2UucGxhY2Vob2xkZXIgKyB2YWx1ZS5zbGljZShyZWZlcmVuY2UuZW5kKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJldHVybiB7IHVwZGF0ZSwgY29udGVudCB9XG59XG4iLCAiY29uc3QgYmFycyA9ICdcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODgnXG5jb25zdCB3aWR0aCA9IDE2XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRMZXZlbChsZXZlbHMsIGxldmVsKSB7XG4gIHJldHVybiBbLi4ubGV2ZWxzLnNsaWNlKDEgLSB3aWR0aCksIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGxldmVsKSldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25JbmRpY2F0b3Ioc3RhdHVzLCBsZXZlbHMpIHtcbiAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gJydcbiAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBgICR7c3RhdHVzfSBgXG4gIGNvbnN0IHNhbXBsZXMgPSBbLi4uQXJyYXkoTWF0aC5tYXgoMCwgd2lkdGggLSBsZXZlbHMubGVuZ3RoKSkuZmlsbCgwKSwgLi4ubGV2ZWxzLnNsaWNlKC13aWR0aCldXG4gIHJldHVybiBgICR7c2FtcGxlcy5tYXAoKGxldmVsKSA9PiBiYXJzW01hdGgucm91bmQobGV2ZWwgKiAoYmFycy5sZW5ndGggLSAxKSldKS5qb2luKCcnKX0gcmVjb3JkaW5nIGBcbn1cbiIsICJpbXBvcnQgeyBjb2RlVG9BTlNJIH0gZnJvbSAnQHNoaWtpanMvY2xpJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgc2hpa2lUaGVtZSB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IExBTkdTID0ge1xuICBqczogJ2pzJywgbWpzOiAnanMnLCBjanM6ICdqcycsIGpzeDogJ2pzeCcsIHRzOiAndHMnLCB0c3g6ICd0c3gnLFxuICBqc29uOiAnanNvbicsIGpzb25sOiAnanNvbicsIG1kOiAnbWQnLCBweTogJ3B5dGhvbicsIHJiOiAncnVieScsIGdvOiAnZ28nLFxuICByczogJ3J1c3QnLCBjOiAnYycsIGg6ICdjJywgY3BwOiAnY3BwJywgamF2YTogJ2phdmEnLCBjc3M6ICdjc3MnLFxuICBodG1sOiAnaHRtbCcsIHZ1ZTogJ3Z1ZScsIHNoOiAnYmFzaCcsIGJhc2g6ICdiYXNoJywgenNoOiAnYmFzaCcsXG4gIHltbDogJ3lhbWwnLCB5YW1sOiAneWFtbCcsIHRvbWw6ICd0b21sJywgc3FsOiAnc3FsJywgc3ZlbHRlOiAnc3ZlbHRlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmdGb3JQYXRoKHBhdGgpIHtcbiAgY29uc3QgZXh0ID0gU3RyaW5nKHBhdGgpLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gTEFOR1NbZXh0XSB8fCAndHh0J1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXAoKVxuY29uc3QgcGVuZGluZyA9IG5ldyBTZXQoKVxuY29uc3QgZmFpbGVkID0gbmV3IFNldCgpXG5jb25zdCBbdmVyc2lvbiwgc2V0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodFZlcnNpb24gPSB2ZXJzaW9uXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHQoY29kZSwgbGFuZykge1xuICBjb25zdCBzYWZlTGFuZyA9IGxhbmcgJiYgIWZhaWxlZC5oYXMobGFuZykgPyBsYW5nIDogJ3R4dCdcbiAgY29uc3QgdGhlbWUgPSBzaGlraVRoZW1lKClcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7dGhlbWV9XFxuJHtzYWZlTGFuZ31cXG4ke2xpbmV9YFxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSByZXR1cm4gY2FjaGUuZ2V0KGtleSlcbiAgICAgIHdhcm0obGluZSwgc2FmZUxhbmcsIHRoZW1lLCBrZXkpXG4gICAgICByZXR1cm4gbGluZVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpXG59XG5cbmZ1bmN0aW9uIHdhcm0obGluZSwgbGFuZywgdGhlbWUsIGtleSkge1xuICBpZiAocGVuZGluZy5oYXMoa2V5KSkgcmV0dXJuXG4gIHBlbmRpbmcuYWRkKGtleSlcbiAgY29kZVRvQU5TSShsaW5lLCBsYW5nLCB0aGVtZSlcbiAgICAudGhlbigoYW5zaSkgPT4gY2FjaGUuc2V0KGtleSwgYW5zaS5yZXBsYWNlKC9cXG4kLywgJycpKSlcbiAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgZmFpbGVkLmFkZChsYW5nKVxuICAgICAgY2FjaGUuc2V0KGtleSwgbGluZSlcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHBlbmRpbmcuZGVsZXRlKGtleSlcbiAgICAgIHNldFZlcnNpb24oKHYpID0+IHYgKyAxKVxuICAgIH0pXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5Um93cyhyb3dzKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IChyb3cpID0+IHJvdy5zdGF0dXMgPT09ICdydW5uaW5nJyB8fCByb3cuc3RhdHVzID09PSAncXVldWVkJ1xuICByZXR1cm4gWy4uLnJvd3NdLnNvcnQoKGEsIGIpID0+IE51bWJlcihhY3RpdmUoYikpIC0gTnVtYmVyKGFjdGl2ZShhKSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpdml0eVN0cmlwU2l6ZXMoaGVpZ2h0LCBsZW5ndGhzLCBtYXJnaW4gPSAxKSB7XG4gIGNvbnN0IGdyb3VwcyA9IGxlbmd0aHMuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aFxuICBpZiAoIWdyb3VwcykgcmV0dXJuIGxlbmd0aHMubWFwKCgpID0+IDApXG4gIGNvbnN0IGJ1ZGdldCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogMC4yKVxuICBjb25zdCBzaXplcyA9IGxlbmd0aHMubWFwKChsZW5ndGgpID0+IGxlbmd0aCA/IDEgOiAwKVxuICBjb25zdCB1c2VkID0gKCkgPT4gbWFyZ2luICsgMSArIGdyb3VwcyArIHNpemVzLnJlZHVjZSgoc3VtLCBzaXplLCBpKSA9PiBzdW0gKyBzaXplICsgTnVtYmVyKHNpemUgPCBsZW5ndGhzW2ldKSwgMClcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gc2l6ZXMubWFwKChzaXplLCBpKSA9PiBpKVxuICAgICAgLmZpbHRlcigoaSkgPT4gc2l6ZXNbaV0gPCBsZW5ndGhzW2ldKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNpemVzW2FdIC0gc2l6ZXNbYl0gfHwgYSAtIGIpXG4gICAgY29uc3QgbmV4dCA9IGNhbmRpZGF0ZXMuZmluZCgoaSkgPT4gdXNlZCgpICsgTnVtYmVyKHNpemVzW2ldICsgMSA8IGxlbmd0aHNbaV0pIDw9IGJ1ZGdldClcbiAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gc2l6ZXNcbiAgICBzaXplc1tuZXh0XSsrXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwV2luZG93U3RhcnQoY3VycmVudCwgdGFyZ2V0LCBsZW5ndGgsIHNpemUpIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKVxuICBjb25zdCBzY3JvbGxvZmYgPSBzaXplID4gMiA/IDEgOiAwXG4gIGlmICh0YXJnZXQgPCAwKSByZXR1cm4gc3RhcnRcbiAgaWYgKHRhcmdldCA8IHN0YXJ0ICsgc2Nyb2xsb2ZmKSByZXR1cm4gTWF0aC5tYXgoMCwgdGFyZ2V0IC0gc2Nyb2xsb2ZmKVxuICBpZiAodGFyZ2V0ID49IHN0YXJ0ICsgc2l6ZSAtIHNjcm9sbG9mZikgcmV0dXJuIE1hdGgubWluKG1heCwgdGFyZ2V0IC0gc2l6ZSArIHNjcm9sbG9mZiArIDEpXG4gIHJldHVybiBzdGFydFxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgRGlmZiwgZWFzZSwgSG9yaXpvbnRhbFNjcm9sbEJveCwgbGluZWFyLCBNYXJrZG93biwgU2Nyb2xsQm94LCBTcGlubmVyLCB1c2VBbmltYXRlZCwgdXNlSGl0VGVzdCwgdXNlSW5wdXQsIHVzZU1vdXNlIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4sIFBFRVIgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0LCBsYW5nRm9yUGF0aCB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuaW1wb3J0IHsgY29tcGFjdFRyYW5zY3JpcHRSdW5zIH0gZnJvbSAnLi90cmFuc2NyaXB0LXdpbmRvdy5qcydcblxuZXhwb3J0IHsgZGVmYXVsdFRpdGxlIGFzIHVpVGl0bGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rvb2xzL3JlY29yZGVyLmpzJ1xuXG5mdW5jdGlvbiBQcm9zZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPHRleHQ+e3Nob3dufTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb2RlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICBjb25zdCBjb250ZW50V2lkdGggPSBNYXRoLm1heCgwLCAuLi52YWx1ZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBbLi4ubGluZV0ubGVuZ3RoKSkgKyAyXG4gIHJldHVybiAoXG4gICAgPEhvcml6b250YWxTY3JvbGxCb3ggY29udGVudFdpZHRoPXtjb250ZW50V2lkdGh9IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGtleSkgPT4gKFxuICAgICAgICAgIDx0ZXh0IGtleT17a2V5fSBzdHlsZT17eyBvdmVyZmxvdzogJ25vd3JhcCcgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L0hvcml6b250YWxTY3JvbGxCb3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVHJhbnNjcmlwdENvZGVCbG9jayhwcm9wcykge1xuICBjb25zdCBsYW5ndWFnZSA9IHByb3BzLmxhbmd1YWdlPy50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IENvbXBvbmVudCA9IFsnbWQnLCAnbWFya2Rvd24nLCAndGV4dCcsICd0eHQnLCAncGxhaW50ZXh0J10uaW5jbHVkZXMobGFuZ3VhZ2UpID8gUHJvc2VTbmlwcGV0IDogQ29kZVNuaXBwZXRcbiAgcmV0dXJuIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpIHtcbiAgaWYgKCFkaWZmPy5odW5rcz8ubGVuZ3RoKSByZXR1cm4geyBiZWZvcmU6IFN0cmluZyhyZXZlcnQ/LmJlZm9yZSB8fCAnJyksIGFmdGVyOiBTdHJpbmcocmV2ZXJ0Py5hZnRlciB8fCAnJykgfVxuICBjb25zdCBiZWZvcmUgPSBbXVxuICBjb25zdCBhZnRlciA9IFtdXG4gIGRpZmYuaHVua3MuZm9yRWFjaCgoaHVuaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXgpIHtcbiAgICAgIGJlZm9yZS5wdXNoKCdcdTIyRUYnKVxuICAgICAgYWZ0ZXIucHVzaCgnXHUyMkVGJylcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdhZGQnKSBiZWZvcmUucHVzaChsaW5lLnRleHQpXG4gICAgICBpZiAobGluZS50eXBlICE9PSAncmVtb3ZlJykgYWZ0ZXIucHVzaChsaW5lLnRleHQpXG4gICAgfVxuICB9KVxuICByZXR1cm4geyBiZWZvcmU6IGJlZm9yZS5qb2luKCdcXG4nKSwgYWZ0ZXI6IGFmdGVyLmpvaW4oJ1xcbicpIH1cbn1cblxuZnVuY3Rpb24gZGlmZlByZXZpZXdMaW5lcyhkaWZmLCByZXZlcnQpIHtcbiAgaWYgKGRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiBkaWZmLmh1bmtzLnJlZHVjZSgoc3VtLCBoKSA9PiBzdW0gKyBoLmxpbmVzLmxlbmd0aCwgMClcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgcmV0dXJuIE1hdGgubWF4KHByZXZpZXcuYWZ0ZXIuc3BsaXQoJ1xcbicpLmxlbmd0aCwgcHJldmlldy5iZWZvcmUuc3BsaXQoJ1xcbicpLmxlbmd0aCwgMilcbn1cblxuZnVuY3Rpb24gZm10RHVyYXRpb24obXMpIHtcbiAgaWYgKG1zIDwgNjAwMDApIHJldHVybiBgJHsobXMgLyAxMDAwKS50b0ZpeGVkKDIpfXNgXG4gIGNvbnN0IHNlY3MgPSBNYXRoLnJvdW5kKG1zIC8gMTAwMClcbiAgcmV0dXJuIGAke01hdGguZmxvb3Ioc2VjcyAvIDYwKX1tICR7c2VjcyAlIDYwfXNgXG59XG5cbmZ1bmN0aW9uIGZtdFJ1bm5pbmcobXMpIHtcbiAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKVxuICByZXR1cm4gc2VjcyA8IDYwID8gYCR7c2Vjc31zYCA6IGAke01hdGguZmxvb3Ioc2VjcyAvIDYwKX1tICR7c2VjcyAlIDYwfXNgXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgY29uc3QgcmdiID0gKGNvbG9yKSA9PiBjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gN1xuICAgID8gWzEsIDMsIDVdLm1hcCgoaSkgPT4gcGFyc2VJbnQoY29sb3Iuc2xpY2UoaSwgaSArIDIpLCAxNikpXG4gICAgOiBbMTI3LCAxMjcsIDEyN11cbiAgY29uc3QgYSA9IHJnYihmcm9tKVxuICBjb25zdCBiID0gcmdiKHRvKVxuICByZXR1cm4gYCMke2EubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5jb25zdCBUT09MX0RFU0NSSVBUSU9OX0xJTUlUID0gNVxuY29uc3QgQkFTSF9PVVRQVVRfTElORVMgPSAxMFxuY29uc3QgVE9PTF9OQU1FX0ZMQVNIX01TID0gOTAwXG5jb25zdCBERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgPSA1MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9NUyA9IDcwMFxuXG5mdW5jdGlvbiBkZWxheWVkTGluZWFyKHQpIHtcbiAgY29uc3QgZGVsYXkgPSBERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgLyAoREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TICsgREVTQ1JJUFRJT05fUkVWRUFMX01TKVxuICByZXR1cm4gdCA8PSBkZWxheSA/IDAgOiAodCAtIGRlbGF5KSAvICgxIC0gZGVsYXkpXG59XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUmV2ZWFsKHsgY2hpbGRyZW4sIHJ1bm5pbmcgfSkge1xuICBjb25zdCByZXZlYWwgPSB1c2VBbmltYXRlZChydW5uaW5nID8gMCA6IDEsIGVhc2UoREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TICsgREVTQ1JJUFRJT05fUkVWRUFMX01TLCBkZWxheWVkTGluZWFyKSlcbiAgaWYgKCFydW5uaW5nKSByZXZlYWwuc2V0KDEpXG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoYWNjZW50KCksIEZHLCByZXZlYWwoKSksIG92ZXJmbG93OiAndHJ1bmNhdGUnLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAgfX0+e2NoaWxkcmVufTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gb3V0cHV0TGluZXModmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdXG4gIGNvbnN0IGxpbmVzID0gdmFsdWUuc3BsaXQoJ1xcbicpXG4gIGlmIChsaW5lcy5hdCgtMSkgPT09ICcnKSBsaW5lcy5wb3AoKVxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gQmFzaE91dHB1dCh7IHZhbHVlLCBsaW5lU3RhcnQsIGxpbmVDb3VudCB9KSB7XG4gIGNvbnN0IGxpbmVzID0gb3V0cHV0TGluZXModmFsdWUpXG4gIGlmICghbGluZXMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG93biA9IGxpbmVzLnNsaWNlKC1CQVNIX09VVFBVVF9MSU5FUylcbiAgY29uc3QgZmlyc3QgPSBsaW5lU3RhcnQgfHwgKGxpbmVDb3VudCA/IGxpbmVDb3VudCAtIHNob3duLmxlbmd0aCArIDEgOiBsaW5lcy5sZW5ndGggLSBzaG93bi5sZW5ndGggKyAxKVxuICBjb25zdCBsYXN0ID0gbGluZUNvdW50IHx8IGZpcnN0ICsgc2hvd24ubGVuZ3RoIC0gMVxuICBjb25zdCBndXR0ZXJXaWR0aCA9IFN0cmluZyhsYXN0KS5sZW5ndGhcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7c2hvd24ubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgIDxib3gga2V5PXtmaXJzdCArIGl9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7U3RyaW5nKGZpcnN0ICsgaSkucGFkU3RhcnQoZ3V0dGVyV2lkdGgpfSBgfTwvdGV4dD5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb21wYWN0VG9vbFNpZ24oeyB0b29sIH0pIHtcbiAgaWYgKHRvb2wubmFtZSAhPT0gJ2Jhc2gnKSByZXR1cm4gPHRleHQ+eycgICd9PC90ZXh0PlxuICBpZiAodG9vbC5iYWNrZ3JvdW5kKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnXHUyMUFBICd9PC90ZXh0PlxuICBpZiAodG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIDxib3ggc3R5bGU9e3sgd2lkdGg6IDIgfX0+PFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPjwvYm94PlxuICBpZiAodG9vbC5leGl0Q29kZSA9PT0gMCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57J1x1MjcxMyAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuZXhpdENvZGUgIT0gbnVsbCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+eydcdTAwRDcgJ308L3RleHQ+XG4gIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFRvb2xHcm91cCh7IGl0ZW0sIHZlcmJvc2UgfSkge1xuICBjb25zdCBsYXRlc3RDYWxsSWQgPSBpdGVtLnRvb2xzLmF0KC0xKT8uY2FsbElkXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKFRPT0xfTkFNRV9GTEFTSF9NUywgbGluZWFyKSlcbiAgaWYgKGxhdGVzdENhbGxJZCAhPT0gZ2xvdy5fY2FsbElkKSB7XG4gICAgZ2xvdy5fY2FsbElkID0gbGF0ZXN0Q2FsbElkXG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICBnbG93LnNuYXAoMSlcbiAgICAgIGdsb3cuc2V0KDApXG4gICAgfVxuICB9XG5cbiAgaWYgKHZlcmJvc2UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgeyhpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnksIGkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICAgICAgICA/IDxNZXNzYWdlIGtleT17aX0gaXRlbT17ZW50cnl9IHZlcmJvc2UgLz5cbiAgICAgICAgICA6IDxUb29sQ2FyZCBrZXk9e2l9IHsuLi5lbnRyeX0gdmVyYm9zZSAvPil9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwKClcbiAgZm9yIChjb25zdCB0b29sIG9mIGl0ZW0udG9vbHMpIGNvdW50cy5zZXQodG9vbC5uYW1lLCAoY291bnRzLmdldCh0b29sLm5hbWUpIHx8IDApICsgMSlcbiAgY29uc3QgZW50cmllcyA9IFsuLi5jb3VudHNdXG4gIGNvbnN0IHRvdGFsTXMgPSBpdGVtLnRvb2xzLnJlZHVjZSgoc3VtLCB0b29sKSA9PiBzdW0gKyAodG9vbC5kdXJhdGlvbk1zIHx8IDApLCAwKVxuICBjb25zdCBsYXRlc3ROYW1lID0gaXRlbS50b29scy5hdCgtMSk/Lm5hbWVcbiAgY29uc3QgYWN0aXZpdHkgPSAoaXRlbS5pdGVtcyB8fCBpdGVtLnRvb2xzKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5raW5kID09PSAndGhvdWdodHMnXG4gICAgPyB7IC4uLmVudHJ5LCBuYW1lOiAndGhvdWdodHMnLCBkZXNjcmlwdGlvbjogZW50cnkudGV4dC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLCB0aG91Z2h0OiB0cnVlIH1cbiAgICA6IGVudHJ5KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5kZXNjcmlwdGlvbilcbiAgY29uc3QgZGVzY3JpcHRpb25zID0gYWN0aXZpdHkuc2xpY2UoLVRPT0xfREVTQ1JJUFRJT05fTElNSVQpXG4gIGNvbnN0IGhpZGRlbkRlc2NyaXB0aW9ucyA9IGFjdGl2aXR5Lmxlbmd0aCAtIGRlc2NyaXB0aW9ucy5sZW5ndGhcbiAgY29uc3QgdG9vbE5hbWVXaWR0aCA9IE1hdGgubWF4KDAsIC4uLmRlc2NyaXB0aW9ucy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lLmxlbmd0aCkpXG4gIGNvbnN0IHZpc2libGVCYXNoID0gaXRlbS5hY3RpdmUgJiYgaXRlbS50b29scy5hdCgtMSk/Lm5hbWUgPT09ICdiYXNoJyA/IGl0ZW0udG9vbHMuYXQoLTEpIDogbnVsbFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAge2l0ZW0uYWN0aXZlID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTI3MTM8L3RleHQ+fVxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4V3JhcDogJ3dyYXAnLCBmbGV4R3JvdzogMSwgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT4gQ2FsbGVkIDwvdGV4dD5cbiAgICAgICAgICB7ZW50cmllcy5tYXAoKFtuYW1lLCBjb3VudF0sIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17bmFtZX0gc3R5bGU9e3sgY29sb3I6IGl0ZW0uYWN0aXZlICYmIG5hbWUgPT09IGxhdGVzdE5hbWUgPyBtaXhDb2xvcihGRywgYWNjZW50KCksIGdsb3coKSkgOiBpdGVtLmFjdGl2ZSA/IEZHIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgIHtgJHtpID8gJywgJyA6ICcnfSR7bmFtZX0ke2NvdW50ID09PSAxID8gJycgOiBgICR7Y291bnR9IHRpbWVzYH1gfVxuICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICAge3RvdGFsTXMgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57Zm10RHVyYXRpb24odG90YWxNcyl9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgIHtoaWRkZW5EZXNjcmlwdGlvbnMgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgPHRleHQ+eycgJy5yZXBlYXQodG9vbE5hbWVXaWR0aCArIDQpfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YC4uLiR7aGlkZGVuRGVzY3JpcHRpb25zfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIHtkZXNjcmlwdGlvbnMubWFwKCh0b29sLCBpKSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Rvb2wuY2FsbElkIHx8IGB0aG91Z2h0LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHt0b29sLnRob3VnaHQgPyA8dGV4dD57JyAgJ308L3RleHQ+IDogPENvbXBhY3RUb29sU2lnbiB0b29sPXt0b29sfSAvPn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0b29sLnRob3VnaHQgfX0+e2Ake3Rvb2wubmFtZS5wYWRTdGFydCh0b29sTmFtZVdpZHRoKX0gIGB9PC90ZXh0PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodFxuICAgICAgICAgICAgICA/IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT48TWFya2Rvd24gdGV4dD17dG9vbC5kZXNjcmlwdGlvbn0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19IC8+PC9ib3g+XG4gICAgICAgICAgICAgIDogPERlc2NyaXB0aW9uUmV2ZWFsIHJ1bm5pbmc9e3Rvb2wuc3RhdHVzID09PSAncnVubmluZyd9Pnt0b29sLmRlc2NyaXB0aW9ufTwvRGVzY3JpcHRpb25SZXZlYWw+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAge3Zpc2libGVCYXNoPy50aXRsZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntoaWdobGlnaHQodmlzaWJsZUJhc2gudGl0bGUsICdiYXNoJyl9PC90ZXh0Pn1cbiAgICAgICAge3Zpc2libGVCYXNoPy5mdWxsT3V0cHV0ICYmIDxCYXNoT3V0cHV0IHZhbHVlPXt2aXNpYmxlQmFzaC5mdWxsT3V0cHV0fSBsaW5lU3RhcnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVTdGFydH0gbGluZUNvdW50PXt2aXNpYmxlQmFzaC5vdXRwdXRMaW5lQ291bnR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbENhcmQoeyBuYW1lLCB0aXRsZSwgdGl0bGVMYW5nLCBkZXNjcmlwdGlvbiwgc3RhdHVzLCBkaWZmLCByZXZlcnQsIGZ1bGxPdXRwdXQsIG91dHB1dExpbmVTdGFydCwgb3V0cHV0TGluZUNvdW50LCBlcnJvciwgYmFja2dyb3VuZCwgdmVyYm9zZSwgc3RhcnRlZEF0LCBkdXJhdGlvbk1zIH0pIHtcbiAgY29uc3Qgc2hvd25UaXRsZSA9IG5hbWUgPT09ICdiYXNoJyA/IG51bGwgOiB0aXRsZUxhbmcgJiYgdGl0bGUgPyBoaWdobGlnaHQodGl0bGUsIHRpdGxlTGFuZykgOiB0aXRsZVxuICBjb25zdCBpbmxpbmVEZXNjcmlwdGlvbiA9ICFzaG93blRpdGxlXG4gIGNvbnN0IHByZXZpZXcgPSBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpXG4gIGNvbnN0IHJ1bm5pbmcgPSBzdGF0dXMgPT09ICdydW5uaW5nJ1xuICBjb25zdCBpbnRlcnJ1cHRlZCA9IHN0YXR1cyA9PT0gJ2ludGVycnVwdGVkJ1xuICBjb25zdCByZXZlcnRlZCA9IHN0YXR1cyA9PT0gJ3JldmVydGVkJ1xuICBjb25zdCBmYWlsZWQgPSBzdGF0dXMgPT09ICdlcnJvcidcbiAgY29uc3Qgb3V0TGluZXMgPSBmdWxsT3V0cHV0ID8gZnVsbE91dHB1dC5zcGxpdCgnXFxuJykgOiBudWxsXG5cbiAgY29uc3QgZWxhcHNlZCA9IHJ1bm5pbmcgJiYgc3RhcnRlZEF0ID8gRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA6IDBcbiAgY29uc3QgdG9vayA9ICFydW5uaW5nICYmICFiYWNrZ3JvdW5kICYmIGR1cmF0aW9uTXMgIT0gbnVsbCA/IGZtdER1cmF0aW9uKGR1cmF0aW9uTXMpIDogbnVsbFxuXG4gIGNvbnN0IGluZm8gPSBydW5uaW5nID8gKGVsYXBzZWQgPj0gNTAwMCA/IGBydW5uaW5nICgke2ZtdFJ1bm5pbmcoZWxhcHNlZCl9KWAgOiAncnVubmluZycpXG4gICAgOiBpbnRlcnJ1cHRlZCA/ICdpbnRlcnJ1cHRlZCdcbiAgICA6IHJldmVydGVkID8gJ3JldmVydGVkJ1xuICAgIDogZmFpbGVkID8gYGZhaWxlZCR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogYmFja2dyb3VuZCA/ICdiYWNrZ3JvdW5kICBzaGVsbCBsaXN0ZWQgYmVsb3cnXG4gICAgOiBkaWZmID8gYCske2RpZmYuYWRkaXRpb25zfSAtJHtkaWZmLmRlbGV0aW9uc30ke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IG91dExpbmVzID8gYCR7b3V0cHV0TGluZUNvdW50IHx8IG91dExpbmVzLmxlbmd0aH0gJHsob3V0cHV0TGluZUNvdW50IHx8IG91dExpbmVzLmxlbmd0aCkgPT09IDEgPyAnbGluZScgOiAnbGluZXMnfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogYGRvbmUke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAge3J1bm5pbmdcbiAgICAgICAgICA/IDxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz5cbiAgICAgICAgICA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpbnRlcnJ1cHRlZCB8fCBmYWlsZWQgPyBSRUQgOiByZXZlcnRlZCA/IE1VVEVEIDogYWNjZW50KCkgfX0+e2ludGVycnVwdGVkID8gJ1x1MjcxNycgOiBmYWlsZWQgPyAnXHUyNzE3JyA6IHJldmVydGVkID8gJ1x1MjFBOScgOiAnXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAgfX0+e2Ake25hbWUucGFkRW5kKDUpfSBgfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHIH19PntzaG93blRpdGxlIHx8IGRlc2NyaXB0aW9uIHx8IG5hbWV9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtpbmZvfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICB7ZGVzY3JpcHRpb24gJiYgIWlubGluZURlc2NyaXB0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntkZXNjcmlwdGlvbn08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtuYW1lID09PSAnYmFzaCcgJiYgdGl0bGUgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nIHx8ICdiYXNoJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7ZmFpbGVkICYmIGVycm9yICYmIChcbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlcnJvcn1gfTwvdGV4dD5cbiAgICAgICl9XG4gICAgICB7cmV2ZXJ0ICYmICFydW5uaW5nICYmICFyZXZlcnRlZCAmJiAhKGRpZmYgJiYgZGlmZi5hZGRpdGlvbnMgPT09IDAgJiYgZGlmZi5kZWxldGlvbnMgPT09IDApICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCksIG1hcmdpblRvcDogMSwgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPERpZmZcbiAgICAgICAgICAgIGJlZm9yZT17cHJldmlldy5iZWZvcmV9XG4gICAgICAgICAgICBhZnRlcj17cHJldmlldy5hZnRlcn1cbiAgICAgICAgICAgIGxhbmd1YWdlPXtsYW5nRm9yUGF0aChyZXZlcnQucGF0aCl9XG4gICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgIGNvbnRleHQ9ezN9XG4gICAgICAgICAgICBmb2xkcz17ZmFsc2V9XG4gICAgICAgICAgICBmb2N1c2VkPXtmYWxzZX1cbiAgICAgICAgICAgIHNjcm9sbGJhcj17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiBmdWxsT3V0cHV0ICYmIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+PEJhc2hPdXRwdXQgdmFsdWU9e2Z1bGxPdXRwdXR9IGxpbmVTdGFydD17b3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e291dHB1dExpbmVDb3VudH0gLz48L2JveD59XG4gICAgICB7b3V0TGluZXMgJiYgdmVyYm9zZSAmJiBuYW1lICE9PSAnYmFzaCcgJiYgIXJ1bm5pbmcgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge291dExpbmVzLnNsaWNlKDAsIDIwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtvdXRMaW5lcy5sZW5ndGggPiAyMDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7b3V0TGluZXMubGVuZ3RoIC0gMjAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uVHVybih7IGl0ZW0sIHZlcmJvc2UsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCBwYWlyZWQgPSBmYWxzZSwgYm9yZGVyID0gdHJ1ZSwgcGFuZUhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgcGFydGljaXBhbnRBID0gaXRlbS5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgaXRlbS5yb2xlID09PSAncHJvcG9zZXInXG4gIGNvbnN0IHN5bnRoZXNpcyA9IGl0ZW0ucm9sZSA9PT0gJ3N5bnRoZXNpcydcbiAgY29uc3QgbGFiZWwgPSBzeW50aGVzaXMgPyAnU3ludGhlc2lzJyA6IGAke3BhcnRpY2lwYW50QSA/ICdQYXJ0aWNpcGFudCBBJyA6ICdQYXJ0aWNpcGFudCBCJ30gIHJvdW5kICR7aXRlbS5yb3VuZH1gXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChwYW5lSGVpZ2h0ICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkgJiYgKGV2ZW50LmFjdGlvbiA9PT0gJ3Njcm9sbCcgfHwgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnKSkgb25Gb2N1cz8uKClcbiAgfSlcbiAgY29uc3QgdG9vbHMgPSBjb21wYWN0VG9vbEhpc3RvcnkgPyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoaXRlbS50b29scyB8fCBbXSwgISFpdGVtLmFjdGl2ZSAmJiAhaXRlbS50ZXh0KSA6IGl0ZW0udG9vbHMgfHwgW11cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiBwYWlyZWQgPyAwIDogMiwgaGVpZ2h0OiBwYW5lSGVpZ2h0LCBiZzogcGFpcmVkID8gUEFORUxfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4R3JvdzogcGFuZUhlaWdodCA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtib3JkZXIgJiYgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVEIH19IC8+fVxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgYmc6IHN5bnRoZXNpcyA/IFNFTEVDVF9CRyA6IHBhcnRpY2lwYW50QSB8fCBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCB8fCBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0PlxuICAgICAgICAgIHtwYW5lSGVpZ2h0ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveFxuICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4geyBzZXRPZmZzZXQobmV4dCk7IHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKSB9fVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IDxEZWxpYmVyYXRpb25Db250ZW50IHRvb2xzPXt0b29sc30gdGV4dD17dGV4dH0gdmVyYm9zZT17dmVyYm9zZX0gLz59XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uQ29udGVudCh7IHRvb2xzLCB0ZXh0LCB2ZXJib3NlIH0pIHtcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAge3Rvb2xzLm1hcCgodG9vbCkgPT4gPE1lc3NhZ2Uga2V5PXt0b29sLmNhbGxJZH0gaXRlbT17dG9vbH0gdmVyYm9zZT17dmVyYm9zZX0gLz4pfVxuICAgICAgICAgIHt0ZXh0ICYmIHRvb2xzLmxlbmd0aCA+IDAgJiYgPHRleHQ+IDwvdGV4dD59XG4gICAgICAgICAge3RleHQgJiYgKFxuICAgICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgICBjb2RlQmc9e251bGx9XG4gICAgICAgICAgICAgIGNvZGVCbG9jaz17VHJhbnNjcmlwdENvZGVCbG9ja31cbiAgICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgIHRhYmxlUm93SG92ZXJCZz17UEFORUxfQkd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gIDwvYm94PlxufVxuXG5mdW5jdGlvbiBkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKSB7XG4gIGNvbnN0IHJvd3MgPSBbXVxuICBmb3IgKGNvbnN0IHR1cm4gb2YgdHVybnMpIHtcbiAgICBpZiAodHVybi5yb2xlID09PSAnc3ludGhlc2lzJyB8fCAhdHVybi5wYXJhbGxlbEdyb3VwKSB7XG4gICAgICByb3dzLnB1c2goW3R1cm5dKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSByb3dzLmZpbmQoKHJvdykgPT4gcm93WzBdPy5wYXJhbGxlbEdyb3VwID09PSB0dXJuLnBhcmFsbGVsR3JvdXApXG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5wdXNoKHR1cm4pXG4gICAgZWxzZSByb3dzLnB1c2goW3R1cm5dKVxuICB9XG4gIHJldHVybiByb3dzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZWxpYmVyYXRpb25FeGNoYW5nZSh7IHR1cm5zLCB2ZXJib3NlLCB3aWRlLCBjb21wYWN0VG9vbEhpc3RvcnkgPSBmYWxzZSwgdmlld3BvcnRIZWlnaHQsIGZvY3VzZWQgPSBmYWxzZSwgb25Gb2N1cyB9KSB7XG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IGlkID0gdHVybiA9PiBgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gXG4gIGNvbnN0IHNlbGVjdGVkSWQgPSBzZWxlY3RlZCgpIHx8ICh0dXJuc1swXSAmJiBpZCh0dXJuc1swXSkpXG4gIGNvbnN0IGZvY3VzVHVybiA9IHR1cm4gPT4geyBzZXRTZWxlY3RlZChpZCh0dXJuKSk7IG9uRm9jdXM/LigpIH1cbiAgdXNlSW5wdXQoZXZlbnQgPT4ge1xuICAgIGlmICghZm9jdXNlZCB8fCAoZXZlbnQua2V5ICE9PSAnbGVmdCcgJiYgZXZlbnQua2V5ICE9PSAncmlnaHQnKSkgcmV0dXJuXG4gICAgY29uc3QgaW5kZXggPSB0dXJucy5maW5kSW5kZXgodHVybiA9PiBpZCh0dXJuKSA9PT0gc2VsZWN0ZWRJZClcbiAgICBjb25zdCBuZXh0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odHVybnMubGVuZ3RoIC0gMSwgaW5kZXggKyAoZXZlbnQua2V5ID09PSAnbGVmdCcgPyAtMSA6IDEpKSlcbiAgICBpZiAodHVybnNbbmV4dF0pIGZvY3VzVHVybih0dXJuc1tuZXh0XSlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICBjb25zdCBwYW5lSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgPyBNYXRoLm1heCg2LCBNYXRoLmZsb29yKHZpZXdwb3J0SGVpZ2h0ICogKHR1cm5zLnNvbWUodHVybiA9PiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnKSA/IDAuNiA6IDEpKSAtIDEpIDogdW5kZWZpbmVkXG4gIGNvbnN0IHBhbmVQcm9wcyA9IHR1cm4gPT4gKHsgcGFuZUhlaWdodDogdHVybi5yb2xlID09PSAnc3ludGhlc2lzJyAmJiB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAwLjM1KSkgOiBwYW5lSGVpZ2h0LCBmb2N1c2VkOiBmb2N1c2VkICYmIHNlbGVjdGVkSWQgPT09IGlkKHR1cm4pLCBvbkZvY3VzOiAoKSA9PiBmb2N1c1R1cm4odHVybikgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ludGhlc2lzID0gcm93WzBdPy5yb2xlID09PSAnc3ludGhlc2lzJ1xuICAgICAgICBpZiAoIXdpZGUgfHwgc3ludGhlc2lzKSByZXR1cm4gcm93Lm1hcCgodHVybikgPT4gPERlbGliZXJhdGlvblR1cm4ga2V5PXtgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gfSBpdGVtPXt0dXJufSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gey4uLnBhbmVQcm9wcyh0dXJuKX0gLz4pXG4gICAgICAgIGNvbnN0IGxlZnQgPSByb3cuZmluZCgodHVybikgPT4gdHVybi5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgdHVybi5yb2xlID09PSAncHJvcG9zZXInKVxuICAgICAgICBjb25zdCByaWdodCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1iJyB8fCB0dXJuLnJvbGUgPT09ICdyZXZpZXdlcicpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd1swXT8ucGFyYWxsZWxHcm91cCB8fCBgJHtyb3dbMF0/LnJvbGV9OiR7cm93WzBdPy5yb3VuZH06JHtpbmRleH1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93Jywgd2lkdGg6ICcxMDAlJywgb3ZlcmZsb3c6ICdjbGlwJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAnNTAlJywgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e2xlZnQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17bGVmdH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHBhaXJlZCBib3JkZXI9e2ZhbHNlfSB7Li4ucGFuZVByb3BzKGxlZnQpfSAvPn08L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBvdmVyZmxvdzogJ2NsaXAnIH19PntyaWdodCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtyaWdodH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHBhaXJlZCBib3JkZXI9e2ZhbHNlfSB7Li4ucGFuZVByb3BzKHJpZ2h0KX0gLz59PC9ib3g+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2hvd0xvY2tlZCA9IGZhbHNlIH0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gPFRvb2xHcm91cCBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJyAmJiBpdGVtLm9yaWdpbiA9PT0gJ3ZpZXcnKSB7XG4gICAgY29uc3QgbGFiZWwgPSAvXlxcW3ZpZXc6IChbXlxcXV0rKVxcXS8uZXhlYyhpdGVtLnRleHQpPy5bMV0gfHwgJ2ltYWdlJ1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyNzEzIFZpZXdlZCAke2xhYmVsfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLm5vdGljZXMubGVuZ3RofSBhZ2VudHMgZmluaXNoZWRgfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2l0ZW0ubm90aWNlcy5tYXAoKG5vdGljZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19Pntub3RpY2UudGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndG9vbCcpIHtcbiAgICByZXR1cm4gPFRvb2xDYXJkIHsuLi5pdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N1bW1hcnknKSB7XG4gICAgY29uc3QgbGluZXMgPSBpdGVtLnRleHQuc3BsaXQoJ1xcbicpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntpdGVtLnNvdXJjZSA9PT0gJ2NvbXBhY3QnID8gJ1x1MjcyNiBzdW1tYXJ5ICBjb252ZXJzYXRpb24gY29tcGFjdGVkIGFib3ZlIHRoaXMgcG9pbnQnIDogJ1x1MjcyNiBzdW1tYXJ5ICByZXdvdW5kIGNvbnZlcnNhdGlvbid9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2xpbmVzLmxlbmd0aH0gJHtsaW5lcy5sZW5ndGggPT09IDEgPyAnbGluZScgOiAnbGluZXMnfWB9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtsaW5lcy5zbGljZSgwLCA1MDApLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtsaW5lcy5sZW5ndGggPiA1MDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7bGluZXMubGVuZ3RoIC0gNTAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8TWFya2Rvd24gdGV4dD17aXRlbS50ZXh0fSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpIHtcbiAgICByZXR1cm4gPGJveCBzdHlsZT17eyBtYXJnaW5Ub3A6IDEgfX0+PERlbGliZXJhdGlvblR1cm4gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz48L2JveD5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdub3RpY2UnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0udGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2tpbGwnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjcyNiBza2lsbDogJHtpdGVtLm5hbWV9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjUwMFx1MjUwMCAke2l0ZW0uY291bnR9IHRvb2wgJHtpdGVtLmNvdW50ID09PSAxID8gJ2ludGVyYWN0aW9uJyA6ICdpbnRlcmFjdGlvbnMnfSBoaWRkZW4gXHUyNTAwXHUyNTAwYH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtY29tbWFuZCcpIHtcbiAgICBjb25zdCBzaG93biA9IGhpZ2hsaWdodChpdGVtLnRleHQsICdiYXNoJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J2NvbW1hbmQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0+e2Ake2kgPT09IDAgPyAnJCAnIDogJyAgJ30ke2xpbmUgfHwgJyAnfWB9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLW91dHB1dCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J291dHB1dCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7aXRlbS50ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdwZWVyJykge1xuICAgIGNvbnN0IGluY29taW5nID0gaXRlbS5kaXJlY3Rpb24gPT09ICdpbmNvbWluZydcbiAgICBjb25zdCB1bnJlYWQgPSBpbmNvbWluZyAmJiAhaXRlbS5yZWFkXG4gICAgY29uc3QgY29sb3IgPSBpbmNvbWluZyAmJiBpdGVtLnJlYWQgPyBNVVRFRCA6IFBFRVJcbiAgICBjb25zdCBkZWxpdmVyeVN0YXR1cyA9IGl0ZW0uc3RhdHVzIHx8ICd1bmtub3duJ1xuICAgIGNvbnN0IHN0YXR1cyA9IGluY29taW5nID8gYCAoJHt1bnJlYWQgPyAndW5yZWFkJyA6ICdyZWFkJ30pOmAgOiBkZWxpdmVyeVN0YXR1cyA9PT0gJ2RlbGl2ZXJlZCcgPyAnOicgOiBgICgke2RlbGl2ZXJ5U3RhdHVzfSk6YFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogUEVFUiwgYm9sZDogdHJ1ZSB9fT57YCR7aW5jb21pbmcgPyAnZnJvbScgOiAndG8nfSBAJHtpbmNvbWluZyA/IGl0ZW0uZnJvbS5uYW1lIDogaXRlbS50by5uYW1lfWB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yLCBib2xkOiB1bnJlYWQgfX0+e3N0YXR1c308L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvciB9fT57aXRlbS50ZXh0fTwvdGV4dD5cbiAgICAgICAge2l0ZW0uZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57aXRlbS5lcnJvcn08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInKSB7XG4gICAgY29uc3QgbGFiZWwgPSBzaG93TG9ja2VkICYmIGl0ZW0ubG9ja2VkID8gJ0xvY2tlZCAgY29tcGFjdGVkJyA6IHNob3dMb2NrZWQgPyAnVXNlcicgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogUEFORUxfQkcgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiBQQU5FTF9CRywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBwYWRkaW5nTGVmdDogMSwgcGFkZGluZ1JpZ2h0OiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57aXRlbS50ZXh0fTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdBc3Npc3RhbnQnIDogbnVsbFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogdW5kZWZpbmVkIH19IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBwYWRkaW5nTGVmdDogMSwgcGFkZGluZ1JpZ2h0OiAyLCBwYWRkaW5nWTogc2hvd0xvY2tlZCA/IDEgOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgIGNvZGVCbG9jaz17VHJhbnNjcmlwdENvZGVCbG9ja31cbiAgICAgICAgICAgIHRhYmxlQm9yZGVyQ29sb3I9e01VVEVEfVxuICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtcywgYWN0aXZlID0gZmFsc2UpIHtcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7KSB7XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tpXS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rob3VnaHRzJykpIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICBjb25zdCB0b29scyA9IHJ1bi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKVxuICAgICAgcmVzdWx0LnB1c2goeyBraW5kOiAndG9vbC1ncm91cCcsIGNhbGxJZDogdG9vbHMuYXQoLTEpPy5jYWxsSWQsIGl0ZW1zOiBydW4sIHRvb2xzLCBhY3RpdmU6IGFjdGl2ZSAmJiBlbmQgPT09IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2ldLmFnZW50Q29tcGxldGlvbikge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIGl0ZW1zW2VuZF0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbZW5kXS5hZ2VudENvbXBsZXRpb24pIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICByZXN1bHQucHVzaChydW4ubGVuZ3RoID09PSAxID8gcnVuWzBdIDogeyBraW5kOiAnYWdlbnQtbm90aWNlLWdyb3VwJywgbm90aWNlczogcnVuIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICByZXN1bHQucHVzaChpdGVtc1tpKytdKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zY3JpcHRXaW5kb3coaXRlbXMsIHNpemUpIHtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBpdGVtcy5sZW5ndGggLSBzaXplKVxuICBjb25zdCBoaWRkZW4gPSBpdGVtcy5zbGljZSgwLCBzdGFydClcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaXRlbXMuc2xpY2Uoc3RhcnQpLFxuICAgIGhpZGRlbkl0ZW1zOiBoaWRkZW4ubGVuZ3RoLFxuICAgIGhpZGRlbkNvdW50OiBoaWRkZW4ucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBzb3VyY2VJdGVtQ291bnQoaXRlbSksIDApLFxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUl0ZW1Db3VudChpdGVtKSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIGl0ZW0uaXRlbXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSByZXR1cm4gaXRlbS5ub3RpY2VzLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSByZXR1cm4gaXRlbS5jb3VudFxuICByZXR1cm4gMVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgVGV4dElucHV0LCB1c2VMYXlvdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBjb252ZXJzYXRpb25NYXRjaGVzLCBoaWdobGlnaHRDb252ZXJzYXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnZlcnNhdGlvbi1zZWFyY2guanMnXG5cbmZ1bmN0aW9uIFNjcm9sbEFuY2hvcih7IHRhcmdldCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHRhcmdldC5hbmNob3JZID0gbGF5b3V0LnlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gU2VhcmNoTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIGN1cnJlbnRNYXRjaCwgc2VhcmNoIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgaWYgKGN1cnJlbnRNYXRjaCkgc2VhcmNoLnNjcm9sbFRvTWF0Y2gobGF5b3V0LCBjdXJyZW50TWF0Y2gpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pIHtcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtjb21taXR0ZWQsIHNldENvbW1pdHRlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtlbnRlckZvY3VzLCBzZXRFbnRlckZvY3VzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Njcm9sbFJlcXVlc3QsIHNldFNjcm9sbFJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzY3JvbGxdID0gY3JlYXRlU2lnbmFsKHsgYW5jaG9yWTogMCwga2V5OiBudWxsIH0pXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJGb2N1cygpIHtcbiAgICBpZiAoIWFjdGl2ZSgpKSByZXR1cm5cbiAgICBmbS5pdGVtKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICBpZiAoZW50ZXJGb2N1cygpKSB7XG4gICAgICBzZXRFbnRlckZvY3VzKGZhbHNlKVxuICAgICAgZm0uZm9jdXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgc2V0QWN0aXZlKHRydWUpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0RW50ZXJGb2N1cyh0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2UoeyByZXN0b3JlRm9jdXMgPSB0cnVlIH0gPSB7fSkge1xuICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBpZiAocmVzdG9yZUZvY3VzICYmIGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIGZtLmZvY3VzKCdmZWVkJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBtYXRjaGVzKSB7XG4gICAgaWYgKGFjdGl2ZSgpICYmICFmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSB7XG4gICAgICBjbG9zZSh7IHJlc3RvcmVGb2N1czogZmFsc2UgfSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmICghYWN0aXZlKCkgfHwgIWNvbW1pdHRlZCgpKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBjb3VudCA9IG1hdGNoZXMubGVuZ3RoXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIGNsb3NlKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyAmJiAhZXZlbnQuc2hpZnQpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSArIDEpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTicgfHwgKGV2ZW50LnNoaWZ0ICYmIGV2ZW50LmtleSA9PT0gJ24nKSkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpIC0gMSArIGNvdW50KSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnbycpIHJldHVybiBmYWxzZVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKGl0ZW1zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnZlcnNhdGlvbk1hdGNoZXMoaXRlbXMsIHF1ZXJ5KCksIHZlcmJvc2UoKSlcbiAgICBjb25zdCBsYXN0SW5kZXggPSBNYXRoLm1heCgwLCBtYXRjaGVzLmxlbmd0aCAtIDEpXG4gICAgaWYgKGluZGV4KCkgPiBsYXN0SW5kZXgpIHNldEluZGV4KGxhc3RJbmRleClcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGl0ZW1zOiBhY3RpdmUoKSA/IGhpZ2hsaWdodENvbnZlcnNhdGlvbihpdGVtcywgcXVlcnkoKSwgaW5kZXgoKSwgdmVyYm9zZSgpKSA6IGl0ZW1zLFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvTWF0Y2gobGF5b3V0LCBtYXRjaCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHNjcm9sbCgpXG4gICAgY29uc3Qga2V5ID0gYCR7cXVlcnkoKX1cXDAke2luZGV4KCl9XFwwJHt2ZXJib3NlKCl9XFwwJHtzY3JvbGxSZXF1ZXN0KCl9YFxuICAgIGlmICh0YXJnZXQua2V5ID09PSBrZXkpIHJldHVyblxuICAgIHRhcmdldC5rZXkgPSBrZXlcbiAgICBzZXRGb2xsb3coZmFsc2UpXG4gICAgc2V0T2Zmc2V0KE1hdGgubWF4KDAsIGxheW91dC55IC0gdGFyZ2V0LmFuY2hvclkgKyBtYXRjaC5saW5lIC0gMykpXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVRdWVyeSh2YWx1ZSkge1xuICAgIHNldFF1ZXJ5KHZhbHVlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZSxcbiAgICBxdWVyeSxcbiAgICBjb21taXR0ZWQsXG4gICAgaW5kZXgsXG4gICAgZm9jdXNlZDogKCkgPT4gZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSxcbiAgICByZWdpc3RlckZvY3VzLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgaGFuZGxlSW5wdXQsXG4gICAgcHJlcGFyZSxcbiAgICBzY3JvbGw6IHNjcm9sbCgpLFxuICAgIHNjcm9sbFRvTWF0Y2gsXG4gICAgY29tbWl0OiAoKSA9PiBzZXRDb21taXR0ZWQodHJ1ZSksXG4gICAgdXBkYXRlUXVlcnksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnZlcnNhdGlvblNlYXJjaEJhcih7IHNlYXJjaCwgbWF0Y2hlcyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFNocmluazogMCwgaGVpZ2h0OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnLyAnfTwvdGV4dD5cbiAgICAgIHtzZWFyY2guY29tbWl0dGVkKClcbiAgICAgICAgPyA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGZsZXhHcm93OiAxIH19PntzZWFyY2gucXVlcnkoKX08L3RleHQ+XG4gICAgICAgIDogPFRleHRJbnB1dFxuICAgICAgICAgICAgZm9jdXNlZD17c2VhcmNoLmZvY3VzZWQoKX1cbiAgICAgICAgICAgIHZhbHVlPXtzZWFyY2gucXVlcnkoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZWFyY2gudXBkYXRlUXVlcnl9XG4gICAgICAgICAgICBvblN1Ym1pdD17c2VhcmNoLmNvbW1pdH1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtzZWFyY2guY2xvc2V9XG4gICAgICAgICAgLz59XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e21hdGNoZXMubGVuZ3RoID8gYCR7c2VhcmNoLmluZGV4KCkgKyAxfS8ke21hdGNoZXMubGVuZ3RofWAgOiAnMC8wJ308L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQW5jaG9yIGFzIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgU2VhcmNoTWVzc2FnZSBhcyBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlIH1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgVGV4dElucHV0LCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQsIEZHLCBGR19TT0ZULCBQQU5FTF9CRywgU0VMRUNUX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZnVuY3Rpb24gYW5zd2VyVGV4dChxdWVzdGlvbiwgYW5zd2VyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIuam9pbignLCAnKVxuICByZXR1cm4gYW5zd2VyIHx8ICdOb3QgYW5zd2VyZWQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBRdWVzdGlvbkZvcm0oeyByZXF1ZXN0LCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBxdWVzdGlvbnMgPSByZXF1ZXN0LnF1ZXN0aW9uc1xuICBjb25zdCByZXZpZXdpbmcgPSBxdWVzdGlvbnMubGVuZ3RoID4gMVxuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gY3JlYXRlU2lnbmFsKHt9KVxuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjdXN0b20sIHNldEN1c3RvbV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXZpZXcsIHNldFJldmlld10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjb250cm9sLCBzZXRDb250cm9sXSA9IGNyZWF0ZVNpZ25hbCgnYW5zd2VyJylcblxuICBjb25zdCBxdWVzdGlvbiA9ICgpID0+IHF1ZXN0aW9uc1tzdGVwKCldXG4gIGNvbnN0IG9wdGlvbnMgPSAoKSA9PiBxdWVzdGlvbigpLm9wdGlvbnMgfHwgW11cbiAgY29uc3Qgcm93cyA9ICgpID0+IFsuLi5vcHRpb25zKCksIC4uLihxdWVzdGlvbigpLmFsbG93T3RoZXIgPT09IGZhbHNlID8gW10gOiBbeyBsYWJlbDogJ090aGVyJywgb3RoZXI6IHRydWUgfV0pXVxuICBjb25zdCBzZWxlY3RlZCA9IChsYWJlbCkgPT4gKGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXSkuaW5jbHVkZXMobGFiZWwpXG4gIGNvbnN0IG90aGVyQW5zd2VyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFuc3dlciA9IGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXVxuICAgIGNvbnN0IGxhYmVscyA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIuZmluZCgodmFsdWUpID0+ICFsYWJlbHMuaGFzKHZhbHVlKSkgfHwgJydcbiAgICByZXR1cm4gYW5zd2VyICYmICFsYWJlbHMuaGFzKGFuc3dlcikgPyBhbnN3ZXIgOiAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QW5zd2VyKHZhbHVlKSB7XG4gICAgc2V0QW5zd2VycygoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgW3F1ZXN0aW9uKCkuaWRdOiB2YWx1ZSB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIHNldEN1cnNvcigwKVxuICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgaWYgKHN0ZXAoKSA8IHF1ZXN0aW9ucy5sZW5ndGggLSAxKSBzZXRTdGVwKHN0ZXAoKSArIDEpXG4gICAgZWxzZSBpZiAocmV2aWV3aW5nKSB7IHNldEN1cnNvcihxdWVzdGlvbnMubGVuZ3RoKTsgc2V0UmV2aWV3KHRydWUpIH1cbiAgICBlbHNlIGZpbmlzaCgpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgb25TdWJtaXQocXVlc3Rpb25zLm1hcCgoaXRlbSkgPT4gKHsgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXI6IGFuc3dlcnMoKVtpdGVtLmlkXSA/PyAnJyB9KSkpXG4gIH1cblxuICBmdW5jdGlvbiBzdWJtaXRUZXh0KHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICAgIHNldEFuc3dlcihhbnN3ZXIpXG4gICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgIGVsc2UgYWR2YW5jZSgpXG4gIH1cblxuICBmdW5jdGlvbiBzdWJtaXRPdGhlcih2YWx1ZSkge1xuICAgIGNvbnN0IGFuc3dlciA9IHZhbHVlLnRyaW0oKVxuICAgIGNvbnN0IGtub3duID0gbmV3IFNldCgoaXRlbS5vcHRpb25zIHx8IFtdKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICBjb25zdCBjaG9pY2VzID0gaXRlbS50eXBlID09PSAnbXVsdGknID8gKGFuc3dlcnMoKVtpdGVtLmlkXSB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4ga25vd24uaGFzKGVudHJ5KSkgOiBbXVxuICAgIGNvbnN0IG5leHRBbnN3ZXIgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyBbLi4uY2hvaWNlcywgLi4uKGFuc3dlciA/IFthbnN3ZXJdIDogW10pXSA6IGFuc3dlclxuICAgIHNldEFuc3dlcihuZXh0QW5zd2VyKVxuICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICBpZiAoaXRlbS50eXBlID09PSAnc2luZ2xlJyAmJiBhbnN3ZXIpIHtcbiAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlciB9XSlcbiAgICAgIGVsc2UgYWR2YW5jZSgpXG4gICAgfVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgaWYgKGN1c3RvbSgpKSB7IHNldEN1c3RvbShmYWxzZSk7IHNldENvbnRyb2woJ2Fuc3dlcicpIH1cbiAgICAgIGVsc2UgaWYgKHJldmlldygpKSBzZXRSZXZpZXcoZmFsc2UpXG4gICAgICBlbHNlIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJldmlldygpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSBzZXRDdXJzb3IoTWF0aC5taW4ocXVlc3Rpb25zLmxlbmd0aCwgY3Vyc29yKCkgKyAxKSlcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgICAgaWYgKGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoKSBmaW5pc2goKVxuICAgICAgICBlbHNlIHsgc2V0U3RlcChjdXJzb3IoKSk7IHNldEN1cnNvcigwKTsgc2V0Q29udHJvbCgnYW5zd2VyJyk7IHNldFJldmlldyhmYWxzZSkgfVxuICAgICAgfSBlbHNlIHJldHVyblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3RlcCgpID4gMCAmJiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSkge1xuICAgICAgc2V0Q29udHJvbChjb250cm9sKCkgPT09ICdiYWNrJyA/ICdhbnN3ZXInIDogJ2JhY2snKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY29udHJvbCgpID09PSAnYmFjaycpIHJldHVyblxuICAgIGlmIChjdXN0b20oKSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgfHwgZXZlbnQua2V5ID09PSAnc2hpZnQtdGFiJykge1xuICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHF1ZXN0aW9uKCk/LnR5cGUgPT09ICd0ZXh0JykgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykgc2V0Q3Vyc29yKE1hdGgubWF4KDAsIGN1cnNvcigpIC0gMSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihyb3dzKCkubGVuZ3RoIC0gMSwgY3Vyc29yKCkgKyAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdzcGFjZScgJiYgcXVlc3Rpb24oKS50eXBlID09PSAnbXVsdGknKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzKClbY3Vyc29yKCldXG4gICAgICBpZiAocm93Lm90aGVyKSB7XG4gICAgICAgIGlmIChvdGhlckFuc3dlcigpKSB7XG4gICAgICAgICAgY29uc3Qga25vd24gPSBuZXcgU2V0KG9wdGlvbnMoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICAgICAgICBzZXRBbnN3ZXIoKGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4ga25vd24uaGFzKGVudHJ5KSkpXG4gICAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICB9IGVsc2Ugc2V0Q3VzdG9tKHRydWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdXG4gICAgICAgIHNldEFuc3dlcihjdXJyZW50LmluY2x1ZGVzKHJvdy5sYWJlbCkgPyBjdXJyZW50LmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSByb3cubGFiZWwpIDogWy4uLmN1cnJlbnQsIHJvdy5sYWJlbF0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzKClbY3Vyc29yKCldXG4gICAgICBpZiAocXVlc3Rpb24oKS50eXBlID09PSAnbXVsdGknKSBhZHZhbmNlKClcbiAgICAgIGVsc2UgaWYgKHJvdy5vdGhlcikgc2V0Q3VzdG9tKHRydWUpXG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0QW5zd2VyKHJvdy5sYWJlbClcbiAgICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBxdWVzdGlvbigpLmlkLCBxdWVzdGlvbjogcXVlc3Rpb24oKS5xdWVzdGlvbiwgYW5zd2VyOiByb3cubGFiZWwgfV0pXG4gICAgICAgIGVsc2UgYWR2YW5jZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHJldHVyblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG5cbiAgaWYgKHJldmlldygpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJldmlldyBhbnN3ZXJzPC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ZW50ZXI6IGVkaXQgb3Igc3VibWl0ICBlc2M6IGJhY2s8L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7cXVlc3Rpb25zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogY3Vyc29yKCkgPT09IGluZGV4ID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBhY2NlbnQoKSA6IEZHIH19PntpdGVtLnF1ZXN0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YW5zd2VyVGV4dChpdGVtLCBhbnN3ZXJzKClbaXRlbS5pZF0pfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJnOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/IGFjY2VudCgpIDogdW5kZWZpbmVkLCBjb2xvcjogY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGggPyAnYmxhY2snIDogRkcsIGJvbGQ6IHRydWUgfX0+IFN1Ym1pdCBhbnN3ZXJzIDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGl0ZW0gPSBxdWVzdGlvbigpXG4gIGNvbnN0IHByb2dyZXNzID0gcXVlc3Rpb25zLmxlbmd0aCA+IDEgPyBgJHtzdGVwKCkgKyAxfSBvZiAke3F1ZXN0aW9ucy5sZW5ndGh9YCA6ICdRdWVzdGlvbidcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAge3N0ZXAoKSA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGxhYmVsPVwiQmFja1wiXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY29udHJvbCgpID09PSAnYmFjayd9XG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVwKHN0ZXAoKSAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKDApXG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57cHJvZ3Jlc3N9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aXRlbS50eXBlID09PSAnbXVsdGknID8gJ3NwYWNlOiBzZWxlY3QgIGVudGVyOiBjb250aW51ZScgOiAnZW50ZXI6IGFuc3dlcid9ICBlc2M6IGNhbmNlbDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBib2xkOiB0cnVlIH19PntpdGVtLnF1ZXN0aW9ufTwvdGV4dD5cbiAgICAgIHtpdGVtLmRlc2NyaXB0aW9uICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntpdGVtLmRlc2NyaXB0aW9ufTwvdGV4dD59XG4gICAgICB7aXRlbS50eXBlID09PSAndGV4dCcgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFNFTEVDVF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBrZXk9e2Ake2l0ZW0uaWR9OnRleHRgfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdhbnN3ZXInfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHlvdXIgYW5zd2VyXCJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17dHlwZW9mIGFuc3dlcnMoKVtpdGVtLmlkXSA9PT0gJ3N0cmluZycgPyBhbnN3ZXJzKClbaXRlbS5pZF0gOiAnJ31cbiAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRUZXh0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtyb3dzKCkubWFwKChvcHRpb24sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogY3Vyc29yKCkgPT09IGluZGV4ID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+XG4gICAgICAgICAgICAgICAge2l0ZW0udHlwZSA9PT0gJ211bHRpJ1xuICAgICAgICAgICAgICAgICAgPyBgJHtvcHRpb24ub3RoZXIgPyAob3RoZXJBbnN3ZXIoKSA/ICdbeF0nIDogJ1sgXScpIDogKHNlbGVjdGVkKG9wdGlvbi5sYWJlbCkgPyAnW3hdJyA6ICdbIF0nKX0gYFxuICAgICAgICAgICAgICAgICAgOiBgJHtjdXJzb3IoKSA9PT0gaW5kZXggPyAnXHUyMDNBJyA6ICcgJ30gYH17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIHtvcHRpb24uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2AgICR7b3B0aW9uLmRlc2NyaXB0aW9ufWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAge29wdGlvbi5vdGhlciAmJiAoY3VzdG9tKCkgfHwgb3RoZXJBbnN3ZXIoKSkgJiYgKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGN1c3RvbSgpID8gUEFORUxfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdMZWZ0OiA0IH19PlxuICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l0ZW0uaWR9Om90aGVyYH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjdXN0b20oKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGFub3RoZXIgYW5zd2VyXCJcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXtvdGhlckFuc3dlcigpfVxuICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17c3VibWl0T3RoZXJ9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgdXNlSW50ZXJ2YWwsIHVzZU1vdXNlLCB1c2VSZXNpemUgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZnVuY3Rpb24gRW1wdHlDbG91ZCh7IHdpZHRoLCBoZWlnaHQsIHZlcnNpb24gfSkge1xuICBjb25zdCBbcGhhc2UsIHNldFBoYXNlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbd2FrZSwgc2V0V2FrZV0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGxldCBwcmV2aW91cyA9IG51bGxcblxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uICE9PSAnbW92ZScgJiYgZXZlbnQuYWN0aW9uICE9PSAnZHJhZycpIHJldHVyblxuICAgIGNvbnN0IHggPSBldmVudC54XG4gICAgY29uc3QgeSA9IGV2ZW50LnlcbiAgICBpZiAoeCA8IDAgfHwgeCA+PSB3aWR0aCB8fCB5IDwgMCB8fCB5ID49IGhlaWdodCkgcmV0dXJuXG4gICAgY29uc3QgZHggPSBwcmV2aW91cyA/IHggLSBwcmV2aW91cy54IDogMFxuICAgIGNvbnN0IGR5ID0gcHJldmlvdXMgPyB5IC0gcHJldmlvdXMueSA6IDBcbiAgICBwcmV2aW91cyA9IHsgeCwgeSB9XG4gICAgY29uc3Qgc3BlZWQgPSBNYXRoLmh5cG90KGR4ICogMC41LCBkeSlcbiAgICBpZiAoc3BlZWQgPT09IDApIHJldHVyblxuICAgIHNldFdha2UocG9pbnRzID0+IFsuLi5wb2ludHMuc2xpY2UoLTIwKSwgeyB4LCB5LCBkeCwgZHksIHNwZWVkOiBNYXRoLm1pbig0LCBzcGVlZCksIGFnZTogMCB9XSlcbiAgfSlcblxuICB1c2VJbnRlcnZhbCgoKSA9PiB7XG4gICAgc2V0UGhhc2UodmFsdWUgPT4gdmFsdWUgKyAwLjE2KVxuICAgIHNldFdha2UocG9pbnRzID0+IHBvaW50cy5tYXAocG9pbnQgPT4gKHsgLi4ucG9pbnQsIGFnZTogcG9pbnQuYWdlICsgMSB9KSkuZmlsdGVyKHBvaW50ID0+IHBvaW50LmFnZSA8IDE4KSlcbiAgfSwgOTApXG5cbiAgY29uc3QgZ2x5cGhzID0gJyAgLi46OisrKipcdTI1OTFcdTI1OTInXG4gIGNvbnN0IHJvd3MgPSBbXVxuICBjb25zdCBiYXNlID0gYWNjZW50KClcbiAgY29uc3QgcmdiID0gL14jKFswLTlhLWZdezZ9KSQvaS5leGVjKGJhc2UpXG4gIGNvbnN0IG5laWdoYm9yaW5nID0gcmdiXG4gICAgPyBgIyR7W1xuICAgICAgTWF0aC5tYXgoMCwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDAsIDIpLCAxNikgLSAxOCksXG4gICAgICBNYXRoLm1pbigyNTUsIHBhcnNlSW50KHJnYlsxXS5zbGljZSgyLCA0KSwgMTYpICsgOCksXG4gICAgICBNYXRoLm1pbigyNTUsIHBhcnNlSW50KHJnYlsxXS5zbGljZSg0LCA2KSwgMTYpICsgMjQpLFxuICAgIF0ubWFwKHZhbHVlID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG4gICAgOiBiYXNlXG5cbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgIGNvbnN0IHJvdyA9IFtdXG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICBjb25zdCBwID0gcGhhc2UoKVxuICAgICAgY29uc3QgYnJvYWQgPSBNYXRoLnNpbih4ICogMC4wOCArIHApICsgTWF0aC5zaW4oeSAqIDAuMjkgLSBwICogMC43KSArIE1hdGguc2luKCh4ICsgeSkgKiAwLjA1ICsgcCAqIDAuMzUpXG4gICAgICBjb25zdCB3aXNwcyA9IE1hdGguc2luKHggKiAwLjE5IC0geSAqIDAuMTEgLSBwICogMC41NSkgKyBNYXRoLnNpbih4ICogMC4wMyArIHkgKiAwLjQzICsgcCAqIDAuNClcbiAgICAgIGNvbnN0IHBvY2tldHMgPSBNYXRoLnNpbih4ICogMC4zMSArIHAgKiAwLjgpICogTWF0aC5zaW4oeSAqIDAuNDcgLSBwICogMC4zKVxuICAgICAgbGV0IGJyb2FkRGlzcGxhY2VtZW50ID0gMFxuICAgICAgbGV0IHdpc3BEaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgaW50ZXJhY3Rpb24gPSAwXG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHdha2UoKSkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmh5cG90KHBvaW50LmR4ICogMC41LCBwb2ludC5keSkgfHwgMVxuICAgICAgICBjb25zdCB1eCA9IHBvaW50LmR4ICogMC41IC8gbGVuZ3RoXG4gICAgICAgIGNvbnN0IHV5ID0gcG9pbnQuZHkgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgcnggPSAoeCAtIHBvaW50LngpICogMC41XG4gICAgICAgIGNvbnN0IHJ5ID0geSAtIHBvaW50LnlcbiAgICAgICAgY29uc3QgYWxvbmcgPSByeCAqIHV4ICsgcnkgKiB1eVxuICAgICAgICBjb25zdCBhY3Jvc3MgPSAtcnggKiB1eSArIHJ5ICogdXhcbiAgICAgICAgY29uc3QgdHJhaWxpbmcgPSBhbG9uZyA8PSAyICYmIGFsb25nID49IC0xOCAtIHBvaW50LnNwZWVkICogM1xuICAgICAgICBpZiAoIXRyYWlsaW5nKSBjb250aW51ZVxuICAgICAgICBjb25zdCBhZ2UgPSAxIC0gcG9pbnQuYWdlIC8gMThcbiAgICAgICAgY29uc3QgdHJhaWwgPSBNYXRoLmV4cCgtTWF0aC5wb3coKGFsb25nICsgNCArIHBvaW50LmFnZSAqIDAuMzUpIC8gKDcgKyBwb2ludC5zcGVlZCAqIDIpLCAyKSlcbiAgICAgICAgY29uc3QgY2VudGVyID0gTWF0aC5leHAoLShhY3Jvc3MgKiBhY3Jvc3MpIC8gNSlcbiAgICAgICAgY29uc3QgZWRnZXMgPSBNYXRoLmV4cCgtTWF0aC5wb3coTWF0aC5hYnMoYWNyb3NzKSAtIDMuMiwgMikgLyAzKVxuICAgICAgICBjb25zdCBmb3JjZSA9IGFnZSAqIHRyYWlsICogKDAuNSArIHBvaW50LnNwZWVkICogMC40NSlcbiAgICAgICAgY29uc3QgcmFkaWFsRGlzdGFuY2UgPSBNYXRoLnNxcnQocnggKiByeCArIHJ5ICogcnkpXG4gICAgICAgIGNvbnN0IHJpcHBsZUVudmVsb3BlID0gTWF0aC5leHAoLShyYWRpYWxEaXN0YW5jZSAqIHJhZGlhbERpc3RhbmNlKSAvICgzNSArIHBvaW50LnNwZWVkICogMTIpKVxuICAgICAgICBjb25zdCByaXBwbGUgPSBNYXRoLnNpbihyYWRpYWxEaXN0YW5jZSAqIDEuMzUgLSBwb2ludC5hZ2UgKiAwLjc1KSAqIHJpcHBsZUVudmVsb3BlICogYWdlXG4gICAgICAgIHdpc3BEaXNwbGFjZW1lbnQgKz0gKGVkZ2VzICogMC45IC0gY2VudGVyKSAqIGZvcmNlICogMS41ICsgcmlwcGxlICogKDEuMiArIHBvaW50LnNwZWVkICogMC4yNSlcbiAgICAgICAgYnJvYWREaXNwbGFjZW1lbnQgKz0gKGVkZ2VzICogMC40NSAtIGNlbnRlciAqIDAuMzUpICogZm9yY2UgKiAwLjU1ICsgcmlwcGxlICogMC4yNVxuICAgICAgICBpbnRlcmFjdGlvbiA9IE1hdGgubWF4KGludGVyYWN0aW9uLCBNYXRoLmFicyhyaXBwbGUpICogKDAuNSArIHBvaW50LnNwZWVkICogMC4xNSkpXG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIChcbiAgICAgICAgYnJvYWQgKyBicm9hZERpc3BsYWNlbWVudCArICh3aXNwcyArIHdpc3BEaXNwbGFjZW1lbnQpICogMC42NSArIHBvY2tldHMgKiAwLjggKyAzLjJcbiAgICAgICkgLyA3LjQpKVxuICAgICAgY29uc3QgaW5kZXggPSBNYXRoLm1pbihnbHlwaHMubGVuZ3RoIC0gMSwgTWF0aC5mbG9vcih2YWx1ZSAqIGdseXBocy5sZW5ndGgpKVxuICAgICAgcm93LnB1c2goeyBnbHlwaDogZ2x5cGhzW2luZGV4XSwgY29sb3I6IGludGVyYWN0aW9uID4gMC4xNiA/IG5laWdoYm9yaW5nIDogYmFzZSwgZGltOiBpbmRleCA8IDggfSlcbiAgICB9XG4gICAgcm93cy5wdXNoKHJvdylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEgfX0+XG4gICAgICB7cm93cy5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGkgPT09IDEgPyAncGljbycgOiBpID09PSAyID8gYHYke3ZlcnNpb259YCA6ICcnXG4gICAgICAgIGNvbnN0IGluQnJhbmRCb3ggPSBpID49IDEgJiYgaSA8PSAyXG4gICAgICAgIGNvbnN0IGJveFN0YXJ0ID0gMVxuICAgICAgICBjb25zdCBib3hXaWR0aCA9IGB2JHt2ZXJzaW9ufWAubGVuZ3RoICsgMlxuICAgICAgICBjb25zdCBjbG91ZCA9IChjZWxscykgPT4gY2VsbHMubWFwKChjZWxsLCB4KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXt4fSBzdHlsZT17eyBjb2xvcjogY2VsbC5jb2xvciwgZGltOiBjZWxsLmRpbSB9fT57Y2VsbC5nbHlwaH08L3RleHQ+XG4gICAgICAgICkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJveCBrZXk9e2l9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG92ZXJmbG93OiAnY2xpcCcgfX0+XG4gICAgICAgICAgICB7aW5CcmFuZEJveCAmJiBjbG91ZChyb3cuc2xpY2UoMCwgYm94U3RhcnQpKX1cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogYm94V2lkdGgsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBib2xkOiBpID09PSAxLCBjb2xvcjogaSA9PT0gMSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjbG91ZChyb3cuc2xpY2UoaW5CcmFuZEJveCA/IGJveFN0YXJ0ICsgYm94V2lkdGggOiAwKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbXB0eVN0YXRlKHsgdmVyc2lvbiwgY2xvdWRzID0gZmFsc2UgfSkge1xuICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBjcmVhdGVTaWduYWwoeyB3aWR0aDogcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCwgaGVpZ2h0OiBwcm9jZXNzLnN0ZG91dC5yb3dzIHx8IDI0IH0pXG4gIHVzZVJlc2l6ZShzZXRTaXplKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIHNpemUoKS53aWR0aClcbiAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgc2l6ZSgpLmhlaWdodCAtIDQpXG4gIGlmICghY2xvdWRzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYm9sZDogdHJ1ZSwgY29sb3I6IGFjY2VudCgpIH19PnsnICBwaWNvJ308L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgdiR7dmVyc2lvbn1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGgsIGhlaWdodCB9fT5cbiAgICAgIDxFbXB0eUNsb3VkIHdpZHRoPXt3aWR0aH0gaGVpZ2h0PXtoZWlnaHR9IHZlcnNpb249e3ZlcnNpb259IC8+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuIiwgImltcG9ydCB7IE1hcmtkb3duLCBTY3JvbGxCb3gsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IEhFTFBfVEVYVCA9IChjb21tYW5kcykgPT4gYHBpY28gaXMgYSBjb2RpbmcgYWdlbnQgaW4geW91ciB0ZXJtaW5hbC4gSXQgcmVhZHMsIGVkaXRzLCBhbmQgc2VhcmNoZXMgZmlsZXMsIHJ1bnMgY29tbWFuZHMsIGFuZCBzdHJlYW1zIGl0cyB3b3JrIGludG8gdGhpcyB0cmFuc2NyaXB0LlxuXG4jIyBDb21tYW5kc1xuXG5UeXBlIFxcYC9cXGAgaW4gdGhlIGNvbXBvc2VyIHRvIGZpbHRlciB0aGVzZSBhcyB5b3UgdHlwZS5cblxuJHtjb21tYW5kcy5tYXAoKGMpID0+IGAtIFxcYC8ke2MubmFtZX1cXGAgLSAke2MuZGVzY31gKS5qb2luKCdcXG4nKX1cblxuVHdvIGtpbmRzIG9mIHVzZXItZGVmaW5lZCBlbnRyaWVzIGpvaW4gdGhpcyBtZW51OlxuXG4tICoqY29tbWFuZHMqKiAoXFxgfi8ucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGAgb3IgXFxgLnBpY28vY29tbWFuZHMvPG5hbWU+Lm1kXFxgKTogcHJvbXB0IHRlbXBsYXRlcyB5b3UgaW52b2tlIGFzIFxcYC88bmFtZT4gW2FyZ3NdXFxgLiBcXGAkQVJHVU1FTlRTXFxgIGluIHRoZSBib2R5IGlzIHJlcGxhY2VkIHdpdGggd2hhdGV2ZXIgZm9sbG93cyB0aGUgY29tbWFuZDsgd2l0aG91dCBhIHBsYWNlaG9sZGVyLCBhcmdzIGFyZSBhcHBlbmRlZC4gVGhlIG1vZGVsIG5ldmVyIHNlZXMgdGhlc2UgdW50aWwgeW91IHJ1biBvbmUuXG4tICoqc2tpbGxzKiogKFxcYH4vLnBpY28vc2tpbGxzLzxuYW1lPi9TS0lMTC5tZFxcYCBvciBcXGAucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgKTogY2FwYWJpbGl0aWVzIHdpdGggYSBuYW1lIGFuZCBkZXNjcmlwdGlvbi4gWW91IGNhbiBpbnZva2UgdGhlbSBsaWtlIGNvbW1hbmRzLCBhbmQgdGhlIGFnZW50IGNhbiBhbHNvIGRpc2NvdmVyIGFuZCBsb2FkIHRoZW0gaXRzZWxmIHZpYSB0aGUgc2tpbGwgdG9vbC5cbi0gKip0b29scyoqIChcXGB+Ly5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCBvciBcXGAucGljby90b29scy88bmFtZT4uanNcXGApOiBFUyBtb2R1bGVzIGRlZmF1bHQtZXhwb3J0aW5nIFxcYHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYSwgZXhlY3V0ZSB9XFxgIChvciBhIGZhY3RvcnkgcmVjZWl2aW5nIFxcYHsgY3dkLCByb290IH1cXGApLiBUaGV5IGpvaW4gdGhlIGFnZW50J3MgdG9vbHNldCBhbmQgYXJlIHJlc2Nhbm5lZCBldmVyeSB0dXJuLCBzbyBlZGl0cyBhcHBseSBvbiB0aGUgbmV4dCBtZXNzYWdlLiBBc2sgdGhlIGFnZW50IHRvIGJ1aWxkIG9uZSBmb3IgeW91OiB0aGUgYnVpbHQtaW4gXFxgL25ldy10b29sXFxgIHNraWxsIHRlYWNoZXMgaXQgdGhlIGZvcm1hdC5cblxuSW4gdGhlIE1DUCBwYW5lbDogZW50ZXIgZW5hYmxlcy9kaXNhYmxlcyBhIHNlcnZlciAoZGlzYWJsZWQgaXMgc3RpY2t5IGFjcm9zcyByZXN0YXJ0cyAtIGNvbmZpZyBrZXB0LCBubyBjb25uZWN0aW9uLCBubyB0b29scyBvZmZlcmVkIHRvIHRoZSBtb2RlbCwgcGVyIHByb2plY3QpLCBcXGB0XFxgIGxpc3RzIGl0cyB0b29scywgXFxgclxcYCByZWNvbm5lY3RzLCBcXGBhXFxgIGFkZHMsIFxcYGN0cmwreFxcYCByZW1vdmVzIChwcmVzcyB0d2ljZSkuIFVuZmlsdGVyZWQgbGlzdHMgKGVmZm9ydCwgcmV3aW5kIG9wdGlvbnMsIE1DUCkgYWxzbyBtb3ZlIHdpdGggXFxgalxcYC9cXGBrXFxgIGFuZCBqdW1wIHdpdGggXFxgZ1xcYC9cXGBHXFxgLlxuXG4jIyBDb21wb3NlclxuXG4tIFxcYGN0cmwrdlxcYDogQXR0YWNoIGNsaXBib2FyZCBpbWFnZVxuLSBcXGBjdHJsK29cXGA6IENhcHR1cmUgc2NyZWVuIHJlZ2lvbiAobWFjT1MpXG4tIFxcYGN0cmwrZ1xcYDogUmVjb3JkIChtYWNPUylcbi0gXFxgZW50ZXJcXGA6IFRyYW5zY3JpYmUgcmVjb3JkaW5nXG4tIFxcYGVzY1xcYDogQ2FuY2VsIGRpY3RhdGlvblxuXG4tIFxcYGVudGVyXFxgIHNlbmRzOyBcXGBzaGlmdCtlbnRlclxcYCBvciBcXGBcXFxcPGVudGVyPlxcYCBpbnNlcnRzIGEgbmV3bGluZVxuLSBcXGBAXFxgIG9wZW5zIGEgZnV6enkgZmlsZSBwaWNrZXI7IGVudGVyIGluc2VydHMgdGhlIHNlbGVjdGVkIHBhdGhcbi0gZHJhZyBhbiBpbWFnZSBmaWxlIGludG8gdGhlIHRlcm1pbmFsIHRvIGF0dGFjaCBpdDogaXQgYXBwZWFycyBpbmxpbmUgYXMgXFxgW0ltYWdlICNOXVxcYCwgZXhhY3RseSB3aGVyZSB5b3VyIGN1cnNvciBpcywgc28gaW1hZ2VzIGNhbiBzaXQgYmV0d2VlbiBzZW50ZW5jZXM7IGJhY2tzcGFjZSBhZnRlciBvbmUgcmVtb3ZlcyB0aGUgd2hvbGUgYXR0YWNobWVudFxuLSBcXGB0YWJcXGAgY29tcGxldGVzOiBcXGAvc3VtbTx0YWI+XFxgIGZpbmlzaGVzIHRoZSBjb21tYW5kIG5hbWUgYW5kIGN5Y2xlcyB0aHJvdWdoIG1hdGNoZXMgb24gcmVwZWF0OyBhZnRlciBhbiBhcmd1bWVudCBzcGFjZSBpdCBjb21wbGV0ZXMgdmFsdWVzIChcXGAvbW9kZWwgZmxhPHRhYj5cXGAsIFxcYC9jb2xvciA8dGFiPlxcYCwgXFxgL2VmZm9ydCA8dGFiPlxcYCkgYW5kIGZpbGUgcGF0aHMgZm9yIHNraWxscyBhbmQgY29tbWFuZHMuIEtlZXAgdHlwaW5nIHRvIG5hcnJvdywgdGFiIG9yIGVudGVyIGluc2VydHNcbi0gXFxgdXBcXGAgYW5kIFxcYGRvd25cXGAgb24gYW4gZW1wdHkgY29tcG9zZXIgcmVjYWxsIG1lc3NhZ2VzIHlvdSBhbHJlYWR5IHNlbnRcbi0gXFxgY3RybCtyXFxgIG9wZW5zIHJld2luZCAoc2FtZSBhcyBcXGAvcmV3aW5kXFxgKTsgXFxgL2hpc3RvcnlcXGAgZnV6enktc2VhcmNoZXMgeW91ciBvbGQgcHJvbXB0cyBhbmQgcHV0cyB0aGUgc2VsZWN0ZWQgb25lIGJhY2sgaW4gdGhlIGNvbXBvc2VyXG4tIFxcYGN0cmwrc1xcYCBvcGVucyB0aGUgc2Vzc2lvbiBwaWNrZXIgKHNhbWUgYXMgXFxgL3Jlc3VtZVxcYCk7IFxcYGN0cmwrdFxcYCBvcGVucyB0aGUgbW9kZWwgcGlja2VyXG4tIFxcYGN0cmwrcFxcYCBzd2l0Y2hlcyBwcm9qZWN0czogcGljayBvbmUgYW5kIHBpY28ganVtcHMgdG8gaXRzIG1vc3QgcmVjZW50IHNlc3Npb24sIGNoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgdG9vbHMsIGNvbnRleHQsIGFuZCBNQ1Agc2VydmVycyB0byBtYXRjaDsgXFxgY3RybCt4XFxgIHR3aWNlIGRlbGV0ZXMgYSBwcm9qZWN0J3MgcGljbyBoaXN0b3J5IChhbGwgaXRzIHNlc3Npb25zIGFuZCBtZW1vcmllcyk7IFxcYC9uZXdcXGAgc3RhcnRzIGEgZnJlc2ggc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBwcm9qZWN0XG4tIFxcYGN0cmwrYlxcYCBjeWNsZXMgdGhpbmtpbmcgZWZmb3J0IChkZWZhdWx0LCBsb3csIG1lZGl1bSwgaGlnaCwgbWF4KSBvbiBtb2RlbHMgdGhhdCBzdXBwb3J0IGl0OyBcXGAvZWZmb3J0XFxgIG9wZW5zIHRoZSBmdWxsIHBpY2tlclxuLSBpbnNpZGUgYSBzZWFyY2ggcGFuZWwsIFxcYGN0cmwrc1xcYCBjeWNsZXMgdGhlIHNjb3BlIGluc3RlYWQ6IHRoaXMgc2Vzc2lvbiwgdGhpcyBwcm9qZWN0LCBvciBldmVyeXdoZXJlXG4tIFxcYC9yZXdpbmRcXGAgcmVzdG9yZXMgdGhlIGNvbnZlcnNhdGlvbiB0byBhbiBlYXJsaWVyIG1lc3NhZ2U7IGEgcmV3aW5kIGNhbiBiZSB1bmRvbmUgd2l0aCBcXGBjdHJsK3pcXGBcbi0gbWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgYWdlbnQgaXMgcmVzcG9uZGluZyBxdWV1ZSB1cCBhYm92ZSB0aGUgY29tcG9zZXIgYW5kIGFyZSBkZWxpdmVyZWQgYXMgb25lIG1lc3NhZ2Ugd2hlbiB0aGUgdHVybiBmaW5pc2hlczsgXFxgdXBcXGAgcHVsbHMgdGhlbSBiYWNrIGZvciBlZGl0aW5nXG4tIFxcYGVzY1xcYCBpbnRlcnJ1cHRzIGEgc3RyZWFtaW5nIHJlc3BvbnNlLCBvciBjbGVhcnMgdGhlIGNvbXBvc2VyIHdoZW4gaWRsZVxuXG4jIyBNb3ZpbmcgYXJvdW5kXG5cbi0gXFxgdGFiXFxgIHN3aXRjaGVzIGZvY3VzIGJldHdlZW4gdGhlIHRyYW5zY3JpcHQgYW5kIHRoZSBjb21wb3NlclxuLSB3aXRoIHRoZSB0cmFuc2NyaXB0IGZvY3VzZWQsIFxcYHVwXFxgL1xcYGRvd25cXGAvXFxgalxcYC9cXGBrXFxgIHNjcm9sbCBhbmQgXFxgZ1xcYC9cXGBHXFxgIGp1bXAgdG8gdGhlIGVuZHNcbi0gbG9uZyBzZXNzaW9ucyByZW5kZXIgb25seSB0aGUgbmV3ZXN0IDUwIG1lc3NhZ2VzOyBzY3JvbGxpbmcgdG8gdGhlIHZlcnkgdG9wIGxvYWRzIG9sZGVyIG9uZXMgaW4gYmF0Y2hlcyAodGhlIHRvcCBsaW5lIHNob3dzIGhvdyBtYW55IGFyZSBoaWRkZW4pXG4tIHRoZSBtb3VzZSB3aGVlbCBzY3JvbGxzOyBjbGljay1kcmFnIHNlbGVjdHMgdGV4dCBhbmQgY29waWVzIGl0IG9uIHJlbGVhc2Vcbi0gXFxgY3RybCtjXFxgIHR3aWNlIGV4aXRzXG5cbiMjIFNoZWxsc1xuXG5UaGUgYWdlbnQgY2FuIHJ1biBsb25nLWxpdmVkIHByb2Nlc3NlcyAoZGV2IHNlcnZlcnMsIHdhdGNoZXJzKSB3aXRoIFxcYGJhc2ggYmFja2dyb3VuZDogdHJ1ZVxcYCwgdGhlbiByZWFkIHRoZWlyIG91dHB1dCBhbmQgc3RvcCB0aGVtIGl0c2VsZi4gU2hlbGxzIGFwcGVhciBiZWxvdyB0aGUgY29tcG9zZXIgYW5kIHJlbWFpbiB0aGVyZSBhZnRlciBleGl0OiB0YWIgZm9jdXNlcyB0aGUgbGlzdCwgai9rIG1vdmVzLCBlbnRlciBvcGVucyB0aGUgY29tbWFuZCBhbmQgbGl2ZSBvdXRwdXQsIGFuZCBcXGBjdHJsK3hcXGAga2lsbHMgYSBydW5uaW5nIHNoZWxsIG9yIGRpc21pc3NlcyBhIGZpbmlzaGVkIG9uZS4gV2hlbiBhIHNoZWxsIGV4aXRzIG9uIGl0cyBvd24sIHRoZSBhZ2VudCBpcyBub3RpZmllZCBhbmQgcmVzcG9uZHM7IHNoZWxscyBkaWUgd2l0aCBwaWNvLCBhbmQgcXVpdHRpbmcgd2FybnMgeW91IGlmIGFueSBhcmUgc3RpbGwgdXAuXG5cbiMjIFN1YnNjcmlwdGlvbnNcblxuXFxgL2Nvbm5lY3RcXGAgbGlzdHMgc3Vic2NyaXB0aW9uIHByb3ZpZGVycyB5b3UgY2FuIHNpZ24gaW4gd2l0aCBpbnN0ZWFkIG9mIEFQSSBrZXlzLiBPcGVuQUkgKENoYXRHUFQgLyBDb2RleCBwbGFuKSBzaWducyBpbiB0aHJvdWdoIHlvdXIgYnJvd3NlciB2aWEgT0F1dGg7IHRva2VucyBhcmUgc3RvcmVkIGluIFxcYH4vLnBpY28vYXV0aC5qc29uXFxgIGFuZCByZWZyZXNoZWQgYXV0b21hdGljYWxseSwgc28geW91IHNpZ24gaW4gb25jZS4gT25jZSBjb25uZWN0ZWQsIGNvZGV4IG1vZGVscyBhcHBlYXIgaW4gXFxgL21vZGVsXFxgLCBiaWxsZWQgdG8geW91ciBwbGFuLiBcXGBkXFxgIGluIHRoZSBwYW5lbCBkaXNjb25uZWN0cy5cblxuIyMgTWVtb3J5XG5cblRoZSBhZ2VudCBzYXZlcyBkdXJhYmxlIGZhY3RzIHdpdGggdGhlIHJlbWVtYmVyIHRvb2w6IG9uZSBmaWxlIHBlciBtZW1vcnkgdW5kZXIgXFxgfi8ucGljby9tZW1vcnlcXGAgKGdsb2JhbCkgb3IgdGhlIHByb2plY3QncyBkaXJlY3RvcnkgaW4gXFxgfi8ucGljby9wcm9qZWN0c1xcYC4gT25seSBhIG9uZS1saW5lIGluZGV4IGlzIGluIGl0cyBjb250ZXh0OyBpdCBsb2FkcyBhIHNwZWNpZmljIG1lbW9yeSB3aXRoIHRoZSByZWNhbGwgdG9vbCB3aGVuIHJlbGV2YW50LiBcXGAvbWVtb3J5XFxgIGxpc3RzIGV2ZXJ5dGhpbmcgaXQga25vd3Mgd2l0aCBhIGNvbnRlbnQgcHJldmlldzogXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgZmlsdGVyIChhbGwsIHByb2plY3QsIGdsb2JhbCkgYW5kIFxcYGN0cmwreFxcYCB0d2ljZSBmb3JnZXRzIHRoZSBzZWxlY3RlZCBtZW1vcnkuIFlvdSBjYW4gYWxzbyBhc2sgdGhlIGFnZW50IHRvIHJlbWVtYmVyLCBmb3JnZXQsIG9yIGNsZWFuIHVwIGl0cyBtZW1vcmllcyBpbiBwbGFpbiBsYW5ndWFnZS5cblxuIyMgV2FrZS11cHNcblxuVGhlIGFnZW50IGNhbiBzY2hlZHVsZSBvbmUtdGltZSB3YWtlLXVwcyBmb3IgaXRzZWxmIHdpdGggdGhlIHNjaGVkdWxlX3dha2V1cCB0b29sOiBhZnRlciB0aGUgZGVsYXkgaXQgcmVjZWl2ZXMgaXRzIG93biBub3RlIGFzIGEgc3lzdGVtIG5vdGlmaWNhdGlvbiBhbmQgYWN0cyBvbiBpdC4gUmVjdXJyaW5nIGxvb3BzIGFyZSBqdXN0IHRoZSBhZ2VudCByZXNjaGVkdWxpbmcgYXQgdGhlIGVuZCBvZiBlYWNoIHdha2UtdXAuIFxcYC93YWtldXBzXFxgIGxpc3RzIHBlbmRpbmcgb25lcyB3aXRoIGxpdmUgY291bnRkb3duczsgZW50ZXIgb3IgXFxgY3RybCt4XFxgIGNhbmNlbHMgKHByZXNzIHR3aWNlKS4gQSBcXGBcdTIzRjAgTlxcYCBpbiB0aGUgZm9vdGVyIHNob3dzIGhvdyBtYW55IGFyZSBwZW5kaW5nLiBXYWtlLXVwcyBsaXZlIGluIG1lbW9yeSBhbmQgYXJlIGxvc3Qgd2hlbiBwaWNvIGV4aXRzLlxuXG4jIyBBcHBlYXJhbmNlXG5cbnBpY28gcGlja3MgYSBsaWdodCBvciBkYXJrIHBhbGV0dGUgYXQgc3RhcnR1cCBieSBhc2tpbmcgdGhlIHRlcm1pbmFsIGZvciBpdHMgYmFja2dyb3VuZCBjb2xvciAoT1NDIDExKSwgc28gaXQgbWF0Y2hlcyB3aGF0ZXZlciB0aGVtZSB5b3VyIHRlcm1pbmFsIHVzZXMuIEluIGF1dG8gbW9kZSBpdCBhbHNvIGZvbGxvd3MgdGhlIHRlcm1pbmFsIHdoZW4gaXQgc3dpdGNoZXMgYmV0d2VlbiBsaWdodCBhbmQgZGFyayB3aGlsZSBwaWNvIGlzIHJ1bm5pbmcgKHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgY29sb3Igc2NoZW1lIG5vdGlmaWNhdGlvbnMsIG1vZGUgMjAzMSwgc3VjaCBhcyBraXR0eSwgZ2hvc3R0eSwgZm9vdCwgYW5kIGNvbnRvdXIpLiBcXGAvdGhlbWVcXGAgb3BlbnMgYSBwaWNrZXIgdGhhdCBwcmV2aWV3cyBlYWNoIHRoZW1lIGFzIHlvdSBtb3ZlIGFuZCBwZXJzaXN0cyB5b3VyIGNob2ljZSBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgOyBcXGAvdGhlbWUgbGlnaHRcXGAsIFxcYC90aGVtZSBkYXJrXFxgLCBvciBcXGAvdGhlbWUgYXV0b1xcYCBhcHBsaWVzIG9uZSBkaXJlY3RseS4gXFxgL2NvbG9yXFxgIHRpbnRzIGEgc2luZ2xlIHNlc3Npb24ncyBhY2NlbnQgYW5kIGlzIGluZGVwZW5kZW50IG9mIHRoZSBwYWxldHRlLlxuXG4jIyBDb250ZXh0XG5cbnBpY28gcmVhZHMgQUdFTlRTLm1kIGZpbGVzIGF1dG9tYXRpY2FsbHk6IGEgZ2xvYmFsIG9uZSBmcm9tIH4vLnBpY28sIHRoZW4gZXZlcnkgYW5jZXN0b3Igb2YgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB1cCB0byB0aGUgZ2l0IHJvb3QuIERlZXBlciBmaWxlcyB3aW4uIEFHRU5UUy5tZCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBsb2FkIGxhemlseSB0aGUgZmlyc3QgdGltZSBhIHRvb2wgdG91Y2hlcyB0aGF0IHN1YnRyZWUuIEluIGFueSBwcm9qZWN0IGRpcmVjdG9yeSB3aXRob3V0IGFuIEFHRU5UUy5tZCwgYSBDTEFVREUubWQgaXMgaG9ub3JlZCBhcyBhIGZhbGxiYWNrIHNvIGV4aXN0aW5nIHJlcG9zIHdvcmsgdW5jaGFuZ2VkOyBBR0VOVFMubWQgYWx3YXlzIHdpbnMgd2hlbiBib3RoIGV4aXN0LCBhbmQgdGhlIGZhbGxiYWNrIG5ldmVyIGFwcGxpZXMgdG8gdGhlIGdsb2JhbCBmaWxlLlxuXG5TZXNzaW9ucyBhcmUgc3RvcmVkIHVuZGVyIH4vLnBpY28gYXMganNvbmwgZXZlbnQgbG9nczsgXFxgL3Jlc3VtZVxcYCBmb2xkcyBvbmUgYmFjayBpbnRvIGV4YWN0bHkgdGhpcyB2aWV3LlxuXG5cXGAvY29udGV4dFxcYCBicmVha3MgZG93biB3aGF0IHRoZSBuZXh0IHJlcXVlc3Qgd2lsbCBjb250YWluIC0gc3lzdGVtIHByb21wdCwgdG9vbCBzY2hlbWFzLCBwcm9qZWN0IGluc3RydWN0aW9ucywgbWVtb3J5IGluZGV4LCBjb21wYWN0aW9uIHN1bW1hcnksIGFuZCBjb252ZXJzYXRpb24gLSB3aXRoIGFuIGVzdGltYXRlZCBzaXplIGZvciBlYWNoIHBpZWNlIG5leHQgdG8gdGhlIHByb3ZpZGVyLW1lYXN1cmVkIHRvdGFsLlxuXG5UaGUgZm9vdGVyJ3MgXFxgY3R4ICVcXGAgc2hvd3MgaG93IGZ1bGwgdGhlIG1vZGVsJ3MgY29udGV4dCBpcy4gQXQgODUlIHBpY28gYXV0by1jb21wYWN0czogdGhlIG9sZGVyIGNvbnZlcnNhdGlvbiBpcyBzdW1tYXJpemVkIGluIGEgc3RydWN0dXJlZCBmb3JtLCB0aGUgbW9zdCByZWNlbnQgdHVybnMgYXJlIGtlcHQgdmVyYmF0aW0sIGFuZCB0aGUgbW9kZWwgaXMgdG9sZCB3aGVyZSB0aGUgZnVsbCBzZXNzaW9uIGZpbGUgbGl2ZXMgc28gaXQgY2FuIHJlYWQgZXhhY3QgZGV0YWlscyBiYWNrIG9uIGRlbWFuZC4gTm90aGluZyB2aXNpYmxlIGNoYW5nZXMgaW4gdGhlIHRyYW5zY3JpcHQsIGFuZCByZXdpbmQgc3RpbGwgd29ya3MgYWNyb3NzIGl0LiBcXGAvY29tcGFjdFxcYCBydW5zIGl0IG1hbnVhbGx5IGFuZCB0YWtlcyBvcHRpb25hbCBmb2N1cyBpbnN0cnVjdGlvbnMgKFxcYC9jb21wYWN0IGZvY3VzIG9uIHRoZSBBUEkgY2hhbmdlc1xcYCkuIFNldCBcXGBcImF1dG9Db21wYWN0XCI6IGZhbHNlXFxgIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGAgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIHRyaWdnZXIuXG5cbi0tLVxuXG4qZXNjIHRha2VzIHlvdSBiYWNrIHRvIHRoZSBjb252ZXJzYXRpb24qYFxuXG5leHBvcnQgZnVuY3Rpb24gSGVscCh7IGNvbW1hbmRzLCBvbkNsb3NlIH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICcxMDAlJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnBpY28gIGhlbHA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjE5MVx1MjE5MyBzY3JvbGwgIGVzYyBiYWNrPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkIHNjcm9sbGJhcj5cbiAgICAgICAgPE1hcmtkb3duIHRleHQ9e0hFTFBfVEVYVChjb21tYW5kcyl9IGNvZGVCZz17bnVsbH0gLz5cbiAgICAgIDwvU2Nyb2xsQm94PlxuICAgIDwvYm94PlxuICApXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7OztBQUFBLFNBQVMsY0FBYyxXQUFXLGVBQWU7QUFDakQsU0FBUyxhQUFhLGVBQWUsa0JBQWtCO0FBQ3ZELFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsaUJBQWlCLHlCQUF5QjtBQUNuRCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGtCQUFrQjtBQUkzQixTQUFTLGFBQWEsYUFBYSxPQUFPO0FBQ3hDLFFBQU0sUUFBUSxZQUFZLFFBQVEsU0FBUyxNQUFNLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sTUFBTSxXQUFXLE9BQU8sT0FBTyxTQUFTLE9BQU8sT0FBTyxXQUFXO0FBQzFFO0FBRUEsZUFBZSxZQUFZLEVBQUUsV0FBQUEsWUFBVyxNQUFNLEdBQUc7QUFDL0MsUUFBTSxNQUFNLENBQUMsYUFBYUEsV0FBVSxTQUFTLFFBQVE7QUFDckQsUUFBTSxtQkFBbUIsSUFBSSxPQUFPLElBQUksTUFBTSxrQkFBa0IsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJO0FBQ3RGLFFBQU0sQ0FBQyxhQUFhLE9BQU8sVUFBVSxJQUFJLE1BQU0sUUFBUSxJQUFJO0FBQUEsSUFDekQsWUFBWSxFQUFFLE1BQU0sQ0FBQztBQUFBLElBQ3JCLGdCQUFnQixrQkFBa0IsRUFBRSxNQUFNLENBQUM7QUFBQSxJQUMzQyxJQUFJLFlBQVksSUFBSSxxQkFBcUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQUEsRUFDekQsQ0FBQztBQUNELFNBQU87QUFBQSxJQUNMLEdBQUcsY0FBYyxhQUFhLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXO0FBQUEsTUFDL0QsR0FBRztBQUFBLE1BQ0gsV0FBVyxJQUFJLE1BQU0sUUFBUTtBQUFBLE1BQzdCLFNBQVMsUUFBUSxNQUFN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QUFJOyIsCiAgIm5hbWVzIjogWyJwcm92aWRlcnMiLCAiam9pbiIsICJtYWtlRXZlbnQiLCAicHJvdmlkZXJzIiwgImNvbmZpZyIsICJib290IiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZmlsZVVSTFRvUGF0aCIsICJyZWFkQ29uZmlnIiwgIlNjcm9sbEJveCIsICJ1c2VGb2N1cyIsICJ1c2VMYXlvdXQiLCAidXNlSW50ZXJ2YWwiLCAiY3JlYXRlU2lnbmFsIiwgImhvbWVkaXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAidXNlQW5pbWF0ZWQiLCAiaGlnaGxpZ2h0IiwgIndpZHRoIiwgImZ1enp5U2NvcmUiLCAianN4IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgIndpZHRoIiwgInVzZWQiLCAicHJvdmlkZXJzIiwgIm5hbWUiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgIndpZHRoIiwgInVzZUZvY3VzIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJob21lZGlyIiwgIlNjcm9sbEJveCIsICJwZW5kaW5nIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIkJ1dHRvbiIsICJ1c2VJbnB1dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAicmFua0Z1enp5IiwgImZ1enp5U2NvcmUiLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIk1lbnUiLCAiaG9tZWRpciIsICJidW5kbGVkIiwgInBlbmRpbmciLCAiZmFpbGVkIiwgInBlbmRpbmciLCAiY2FwdHVyZVJlZ2lvbiIsICJwZW5kaW5nIiwgImV4ZWNGaWxlIiwgIm1rZHRlbXAiLCAiZXhpc3RzU3luYyIsICJ0bXBkaXIiLCAiam9pbiIsICJlcnJvciIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiU3Bpbm5lciIsICJUZXh0QXJlYSIsICJ1c2VGb2N1cyIsICJ1c2VIaXRUZXN0IiwgInVzZUlucHV0IiwgInVzZUxheW91dCIsICJ1c2VNb3VzZSIsICJ1c2VSZXNpemUiLCAiU0VTU0lPTl9DT0xPUlMiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAibGluZWFyIiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAiY3JlYXRlU2lnbmFsIiwgIlNjcm9sbEJveCIsICJ1c2VJbnB1dCIsICJsYWJlbCIsICJjcmVhdGVTaWduYWwiLCAiVGV4dElucHV0IiwgInVzZUxheW91dCIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJ1c2VNb3VzZSIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJ1c2VJbnRlcnZhbCIsICJNYXJrZG93biIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiU2Nyb2xsQm94IiwgIk1hcmtkb3duIiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VIaXRUZXN0IiwgInVzZU1vdXNlIiwgImNyZWF0ZVNpZ25hbCIsICJib290IiwgInZlcnNpb24iLCAidXNlSW50ZXJ2YWwiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJkZXRlY3RlZFRoZW1lIiwgImVsYXBzZWQiLCAiU0VTU0lPTl9DT0xPUlMiLCAiaG9tZWRpciIsICJhcm1lZCIsICJ1c2VGb2N1cyIsICJpdGVtcyIsICJyb3ciLCAiZnV6enlTY29yZSIsICJTY3JvbGxCb3giLCAiVGV4dEFyZWEiLCAiTWVudSIsICJwZW5kaW5nIiwgIlNwaW5uZXIiLCAiY29tcGFjdE51bWJlciIsICJqc3giLCAiaXNEZXZJbnN0YWxsIiwgInJ1blVwZGF0ZSIsICJmZXRjaExhdGVzdFZlcnNpb24iLCAibmV3ZXJWZXJzaW9uIiwgInJ1bkhlYWRsZXNzIiwgInJ1blNoZWxsIiwgInJlYWRDb25maWciLCAidGVybWluYWxCYWNrZ3JvdW5kIiwgImZpbGVVUkxUb1BhdGgiXQp9Cg==
|
|
5772
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvYWN0aXZpdHktc3RyaXAuanMiLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkWEFJTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS94YWktbW9kZWxzLmpzJ1xuaW1wb3J0IHsgeGFpQ29ubmVjdGVkLCB4YWlDcmVkZW50aWFscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUveGFpLWF1dGguanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IHN1YnNjcmlwdGlvbkNyZWRlbnRpYWxzID0gaGFzKCdncm9rJykgPyBhd2FpdCB4YWlDcmVkZW50aWFscygpLmNhdGNoKCgpID0+IG51bGwpIDogbnVsbFxuICBjb25zdCBbY2F0YWxvZ0RhdGEsIGNvZGV4LCBvcGVucm91dGVyLCBncm9rXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBsb2FkQ2F0YWxvZyh7IGZvcmNlIH0pLFxuICAgIGxvYWRDb2RleE1vZGVscyhjb2RleENyZWRlbnRpYWxzLCB7IGZvcmNlIH0pLFxuICAgIGhhcygnb3BlbnJvdXRlcicpID8gbG9hZE9wZW5Sb3V0ZXJNb2RlbHMoeyBmb3JjZSB9KSA6IFtdLFxuICAgIGxvYWRYQUlNb2RlbHMoc3Vic2NyaXB0aW9uQ3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4uZ3Jvay5tYXAobW9kZWwgPT4gKHsgLi4ubW9kZWwsIGF2YWlsYWJsZTogaGFzKCdncm9rJyksIGtleUhpbnQ6ICcvY29ubmVjdCcgfSkpLFxuICAgIC4uLm9wZW5yb3V0ZXIubWFwKChtb2RlbCkgPT4gKHsgLi4ubW9kZWwsIGF2YWlsYWJsZTogdHJ1ZSwga2V5SGludDoga2V5SGludCgnb3BlbnJvdXRlcicpIH0pKSxcbiAgXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZE1vZGVsUnVudGltZSgpIHtcbiAgY29uc3QgY2hhdGdwdCA9IGF3YWl0IG9wZW5haUNvbm5lY3RlZCgpXG4gIGNvbnN0IGdyb2sgPSBhd2FpdCB4YWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSksIC4uLihncm9rLmNvbm5lY3RlZCA/IFsnZ3JvayddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIGNvbnN0IHN1YnNjcmlwdGlvbkNyZWRlbnRpYWxzID0gZ3Jvay5jb25uZWN0ZWQgPyBhd2FpdCB4YWlDcmVkZW50aWFscygpLmNhdGNoKCgpID0+IG51bGwpIDogbnVsbFxuICByZXR1cm4geyBwcm92aWRlcnMsIG1vZGVsczogYXdhaXQgbG9hZE1vZGVscygpLCBjb2RleENyZWRlbnRpYWxzLCB4YWlDcmVkZW50aWFsczogc3Vic2NyaXB0aW9uQ3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIiwgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBmaW5kTW9kZWwsIHVzYWdlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgeyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFsczogY29kZXhDcmVkcywgeGFpQ3JlZGVudGlhbHM6IHhhaUNyZWRzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcbiAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuXG4gIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLCBjb25maWd1cmVkOiBjb25maWcuZGVmYXVsdE1vZGVsIH0pXG4gIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBubyB1c2FibGUgbW9kZWwke29wdHMubW9kZWwgPyBgIG1hdGNoaW5nIFwiJHtvcHRzLm1vZGVsfVwiYCA6ICcnfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBpZiAob3B0cy5zcGVlZCA9PT0gJ2Zhc3QnICYmICFtb2RlbC5zcGVlZCkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiAke21vZGVsLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbFxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBlZmZvcnQgPSBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2F1dG8nIDogbnVsbClcblxuICBjb25zdCBib290ID0gYXdhaXQgYnVpbGRQcm9qZWN0Qm9vdChwcm9jZXNzLmN3ZCgpKVxuICBhd2FpdCBQcm9taXNlLnJhY2UoW2Jvb3QubWNwLmNvbm5lY3RBbGwoKSwgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMDApKV0pXG4gIGNvbnN0IHNoZWxscyA9IGNyZWF0ZVNoZWxsTWFuYWdlcigpXG5cbiAgbGV0IHNlc3Npb25cbiAgbGV0IGV2ZW50cyA9IFtdXG4gIGlmIChvcHRzLnJlc3VtZSkge1xuICAgIGNvbnN0IGZpbGUgPSBvcHRzLnJlc3VtZS5pbmNsdWRlcygnLycpID8gb3B0cy5yZXN1bWUgOiBqb2luKHNlc3Npb25zRGlyKGJvb3Qucm9vdCksIGAke29wdHMucmVzdW1lfS5qc29ubGApXG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZFNlc3Npb24oZmlsZSlcbiAgICBzZXNzaW9uID0gb3BlblNlc3Npb24oeyBmaWxlLCBoZWFkZXI6IGxvYWRlZC5oZWFkZXIgfSlcbiAgICBldmVudHMgPSBsb2FkZWQuZXZlbnRzXG4gIH0gZWxzZSB7XG4gICAgc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oeyBjd2Q6IGJvb3QuY3dkLCByb290OiBib290LnJvb3QgfSlcbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3QgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudHMucHVzaChldmVudClcbiAgICBzZXNzaW9uLmFwcGVuZChldmVudClcbiAgICBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShldmVudCkgKyAnXFxuJylcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkU3BlZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpLnNwZWVkXG4gIGNvbnN0IHNwZWVkID0gbW9kZWwuc3BlZWQgPyAob3B0cy5zcGVlZCA/PyAob3B0cy5yZXN1bWUgPyByZXN0b3JlZFNwZWVkID8/ICdzdGFuZGFyZCcgOiBjb25maWcuc3BlZWREZWZhdWx0cz8uW21vZGVsLm5hbWVdKSA/PyAnc3RhbmRhcmQnKSA6ICdzdGFuZGFyZCdcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ3NwZWVkJywgeyB0bzogc3BlZWQgfSkpXG5cbiAgY29uc3Qgc3RkaW5EYXRhID0gYXdhaXQgcmVhZFN0ZGluKClcbiAgY29uc3QgcHJvbXB0VGV4dCA9IHN0ZGluRGF0YSA/IGAke29wdHMucHJvbXB0fVxcblxcbltwaXBlZCBpbnB1dF1cXG4ke3N0ZGluRGF0YX1gIDogb3B0cy5wcm9tcHRcbiAgY29uc3QgeyBjb250ZW50IH0gPSBmaW5hbGl6ZVVzZXJDb250ZW50KHByb21wdFRleHQsIG5ldyBNYXAoKSlcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2U6IHsgcm9sZTogJ3VzZXInLCBjb250ZW50IH0gfSkpXG5cbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVN0YXRlKGV2ZW50cylcbiAgY29uc3QgbG9hZGVkQmVmb3JlID0gbmV3IFNldChib290LnRyYWNrZXIubG9hZGVkKVxuICBjb25zdCB7IHRvb2xzLCByZWNvcmRlciB9ID0gY3JlYXRlVG9vbHNldCh7XG4gICAgY3dkOiBib290LmN3ZCxcbiAgICB0cmFja2VyOiBib290LnRyYWNrZXIsXG4gICAgc2tpbGxzOiBib290LnNraWxscyxcbiAgICBzaGVsbHMsXG4gICAgbWVtb3J5OiBib290Lm1lbW9yeSxcbiAgICBtY3BUb29sczogYm9vdC5tY3AudG9vbHMoKSxcbiAgICB1c2VyVG9vbHM6IFtdLFxuICAgIG1heFRvb2xDYWxsczogb3B0cy5tYXhUb29sQ2FsbHMgPz8gNTAsXG4gIH0pXG5cbiAgbGV0IGF1dGggPSBudWxsXG4gIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyB8fCBtb2RlbC5wcm92aWRlciA9PT0gJ2dyb2snKSB7XG4gICAgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gY29kZXhDcmVkcyA6IHhhaUNyZWRzXG4gICAgaWYgKCFhdXRoKSB7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogc3Vic2NyaXB0aW9uIG1vZGVscyBuZWVkIGEgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgICBhd2FpdCBzZXNzaW9uLmZsdXNoKClcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICB9XG5cbiAgbG9nKGBwaWNvICAke21vZGVsLm5hbWV9JHttb2RlbC5zcGVlZCAmJiBzcGVlZCA9PT0gJ2Zhc3QnID8gJyAgRmFzdCcgOiAnJ30ke2VmZm9ydCA/IGAgICR7ZWZmb3J0fWAgOiAnJ30gIHNlc3Npb24gJHtzZXNzaW9uLmlkfWApXG4gIGxldCB0aG91Z2h0cyA9ICcnXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blR1cm4oe1xuICAgIGhpc3Rvcnk6IGRlcml2ZWQucHJvdmlkZXJIaXN0b3J5LFxuICAgIHRvb2xzLFxuICAgIHJlY29yZGVyLFxuICAgIG1vZGVsTmFtZTogbW9kZWwubmFtZSxcbiAgICBlZmZvcnQsXG4gICAgLi4uKG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnICYmIHsgc3BlZWQgfSksXG4gICAgYXV0aCxcbiAgICBzeXN0ZW06IGJ1aWxkU3lzdGVtUHJvbXB0KHtcbiAgICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgICBjb250ZXh0RmlsZXM6IGJvb3Quc3RhcnR1cENvbnRleHQuZmlsZXMsXG4gICAgICBza2lsbHM6IGJvb3Quc2tpbGxzLmxpc3QoKSxcbiAgICAgIG1lbW9yeUluZGV4VGV4dDogbWVtb3J5SW5kZXgoYXdhaXQgYm9vdC5tZW1vcnkubGlzdCgpLmNhdGNoKCgpID0+IFtdKSwgYm9vdC5yb290KSxcbiAgICB9KSxcbiAgICBvblN0cmVhbTogKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RoaW5raW5nJykgdGhvdWdodHMgKz0gZXZlbnQuY29udGVudFxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sX2NvbXBsZXRlJykge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlY29yZGVyLmVudHJpZXMuYXQoLTEpXG4gICAgICAgIGxvZyhgICBcdTI3MTMgJHtlbnRyeT8ubmFtZSA/PyBldmVudC5jYWxsLmZ1bmN0aW9uLm5hbWV9ICAke2VudHJ5Py50aXRsZSA/PyAnJ31gKVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sX2Vycm9yJykgbG9nKGAgIFx1MjcxNyAke2V2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZXZlbnQuZXJyb3Iuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0sXG4gIH0pXG5cbiAgaWYgKHRob3VnaHRzKSBwZXJzaXN0KG1ha2VFdmVudCgndGhvdWdodHMnLCB7IHRleHQ6IHRob3VnaHRzIH0pKVxuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcmVzdWx0Lm1lc3NhZ2VzKSBwZXJzaXN0KG1ha2VFdmVudCgnbWVzc2FnZScsIHsgbWVzc2FnZSB9KSlcbiAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRlci5lbnRyaWVzKSBwZXJzaXN0KG1ha2VFdmVudCgndG9vbF9tZXRhJywgZW50cnkpKVxuICBmb3IgKGNvbnN0IHBhdGggb2YgYm9vdC50cmFja2VyLmxvYWRlZCkge1xuICAgIGlmICghbG9hZGVkQmVmb3JlLmhhcyhwYXRoKSkgcGVyc2lzdChtYWtlRXZlbnQoJ2NvbnRleHRfZmlsZScsIHsgcGF0aCB9KSlcbiAgfVxuICBpZiAocmVzdWx0LnVzYWdlKSBwZXJzaXN0KG1ha2VFdmVudCgndXNhZ2UnLCB7IG1vZGVsOiBtb2RlbC5uYW1lLCB1c2FnZTogcmVzdWx0LnVzYWdlLCBsYXN0UHJvbXB0OiByZXN1bHQubGFzdFByb21wdFRva2VucyB9KSlcbiAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgcGVyc2lzdChtYWtlRXZlbnQoJ2ludGVycnVwdCcsIHt9KSlcblxuICBjb25zdCBydW5uaW5nID0gc2hlbGxzLnJ1bm5pbmcoKVxuICBpZiAocnVubmluZyA+IDApIGxvZyhgICBraWxsaW5nICR7cnVubmluZ30gYmFja2dyb3VuZCBzaGVsbCR7cnVubmluZyA9PT0gMSA/ICcnIDogJ3MnfWApXG4gIHNoZWxscy5raWxsQWxsKClcbiAgYXdhaXQgYm9vdC5tY3AuY2xvc2VBbGwoKS5jYXRjaCgoKSA9PiB7fSlcbiAgLy8gdGhlIGNhbGxlciBleGl0cyB0aGUgcHJvY2VzcyB0aGUgbW9tZW50IHRoaXMgcmV0dXJucywgd2hpY2ggd291bGQgZGlzY2FyZFxuICAvLyBldmVyeSBhcHBlbmQgc3RpbGwgaW4gZmxpZ2h0XG4gIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuXG4gIGNvbnN0IHRleHQgPSByZXN1bHQubWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmIG0uY29udGVudCkuYXQoLTEpPy5jb250ZW50ID8/ICcnXG4gIGNvbnN0IHN1bW1hcnkgPSB7XG4gICAgdGV4dCxcbiAgICBzZXNzaW9uOiBzZXNzaW9uLmlkLFxuICAgIHNlc3Npb25GaWxlOiBzZXNzaW9uLmZpbGUsXG4gICAgbW9kZWw6IG1vZGVsLm5hbWUsXG4gICAgdXNhZ2U6IHJlc3VsdC51c2FnZSxcbiAgICBjb3N0OiB1c2FnZUNvc3QoZmluZE1vZGVsKG1vZGVscywgbW9kZWwubmFtZSksIHJlc3VsdC51c2FnZSksXG4gICAgdG9vbENhbGxzOiByZWNvcmRlci5lbnRyaWVzLmxlbmd0aCxcbiAgICBpbnRlcnJ1cHRlZDogcmVzdWx0LmludGVycnVwdGVkLFxuICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gIH1cblxuICBpZiAob3B0cy5qc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShzdW1tYXJ5KSArICdcXG4nKVxuICBlbHNlIGlmIChvcHRzLnN0cmVhbUpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3Jlc3VsdCcsIC4uLnN1bW1hcnksIHRleHQ6IHVuZGVmaW5lZCwgYXQ6IERhdGUubm93KCkgfSkgKyAnXFxuJylcbiAgZWxzZSBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXh0ICsgJ1xcbicpXG5cbiAgcmV0dXJuIHJlc3VsdC5pbnRlcnJ1cHRlZCA/IDEgOiAwXG59XG4iLCAiaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUsIHNlbGVjdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC1ydW50aW1lLmpzJ1xuXG5jb25zdCBTWVNURU0gPSAoeyBwbGF0Zm9ybSwgc2hlbGwsIGN3ZCB9KSA9PiBgR2VuZXJhdGUgZXhhY3RseSBvbmUgc2hlbGwgY29tbWFuZCB0aGF0IHNhdGlzZmllcyB0aGUgdXNlcidzIHJlcXVlc3QuIFRoZSBvdXRwdXQgbXVzdCBiZSBhIHZhbGlkIHNoZWxsIGNvbW1hbmQgd2l0aG91dCBNYXJrZG93biBmb3JtYXR0aW5nLiBJZiBtdWx0aXBsZSBzdGVwcyBhcmUgcmVxdWlyZWQsIHRyeSB0byBjb21iaW5lIHRoZW0gdG9nZXRoZXIgdXNpbmcgJiYuXG5cbkVudmlyb25tZW50OlxuLSBvcGVyYXRpbmcgc3lzdGVtOiAke3BsYXRmb3JtfVxuLSBzaGVsbDogJHtzaGVsbH1cbi0gY3VycmVudCBkaXJlY3Rvcnk6ICR7Y3dkfVxuXG5PdXRwdXQgb25seSB0aGUgY29tbWFuZCBhcyBvbmUgbGluZS4gRG8gbm90IHVzZSBNYXJrZG93biBmb3JtYXR0aW5nIHN1Y2ggYXMgXFxgXFxgXFxgLiBEbyBub3QgZXhwbGFpbiB0aGUgY29tbWFuZC4gRG8gbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQuYFxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSB7XG4gIGNvbnN0IGNvbW1hbmQgPSB0ZXh0LnRyaW0oKVxuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIGFuIGVtcHR5IGNvbW1hbmQnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnXFwwJykgfHwgL1tcXHJcXG5dLy50ZXN0KGNvbW1hbmQpKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGxpbmUnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnYGBgJykpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIE1hcmtkb3duIGluc3RlYWQgb2YgYSBjb21tYW5kJylcbiAgcmV0dXJuIGNvbW1hbmRcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNoZWxsKG9wdHMsIGRlcGVuZGVuY2llcyA9IHt9KSB7XG4gIGNvbnN0IHN0ZGVyciA9IGRlcGVuZGVuY2llcy5zdGRlcnIgfHwgcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3Qgc3Rkb3V0ID0gZGVwZW5kZW5jaWVzLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dFxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IChkZXBlbmRlbmNpZXMucmVhZENvbmZpZyB8fCByZWFkQ29uZmlnKSgpXG4gICAgY29uc3QgcnVudGltZSA9IGF3YWl0IChkZXBlbmRlbmNpZXMubG9hZE1vZGVsUnVudGltZSB8fCBsb2FkTW9kZWxSdW50aW1lKSgpXG4gICAgaWYgKHJ1bnRpbWUucHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdubyBjcmVkZW50aWFscyBmb3VuZCAoc2V0IGEgcHJvdmlkZXIga2V5IG9yIHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgY29uZmlndXJlZE1vZGVsID0gY29uZmlnLm1vZGVscz8uc2hlbGxcbiAgICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHtcbiAgICAgIG1vZGVsczogcnVudGltZS5tb2RlbHMsXG4gICAgICBwcm92aWRlcnM6IHJ1bnRpbWUucHJvdmlkZXJzLFxuICAgICAgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLFxuICAgICAgY29uZmlndXJlZDogY29uZmlndXJlZE1vZGVsIHx8IGNvbmZpZy5kZWZhdWx0TW9kZWwsXG4gICAgfSlcbiAgICBjb25zdCByZXF1ZXN0ZWROYW1lID0gb3B0cy5tb2RlbCB8fCBjb25maWd1cmVkTW9kZWxcbiAgICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdXNhYmxlIG1vZGVsJHtyZXF1ZXN0ZWROYW1lID8gYCBtYXRjaGluZyBcIiR7cmVxdWVzdGVkTmFtZX1cImAgOiAnJ31gKVxuICAgIH1cblxuICAgIGlmIChvcHRzLnNwZWVkID09PSAnZmFzdCcgJiYgIW1vZGVsLnNwZWVkKSB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWwubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBzcGVlZCBjb250cm9sYClcblxuICAgIGNvbnN0IGF1dGggPSBtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyA/IHJ1bnRpbWUuY29kZXhDcmVkZW50aWFscyA6IG1vZGVsLnByb3ZpZGVyID09PSAnZ3JvaycgPyBydW50aW1lLnhhaUNyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChbJ2NvZGV4JywgJ2dyb2snXS5pbmNsdWRlcyhtb2RlbC5wcm92aWRlcikgJiYgIWF1dGgpIHRocm93IG5ldyBFcnJvcignc3Vic2NyaXB0aW9uIG1vZGVscyBuZWVkIGEgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkOiBtb2RlbC5zcGVlZCA/IChvcHRzLnNwZWVkID8/ICdzdGFuZGFyZCcpIDogJ3N0YW5kYXJkJyB9KSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgZW5zdXJlRGFlbW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9kYWVtb24tdHJhbnNwb3J0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmVtb3RlLWNvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHBhcnNlQXJncywgVVNBR0UgfSBmcm9tICcuL2NsaS1hcmdzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGRldGVjdFRlcm1pbmFsVGhlbWUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rlcm1pbmFsLXRoZW1lLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBzZXRUZXJtaW5hbEJhY2tncm91bmQsIHBhbGV0dGVMaXN0IH0gZnJvbSAnLi91aS90aGVtZS5qcydcblxuY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSwgJ3V0Zi04JykpXG5cbmxldCBjbGlcbnRyeSB7XG4gIGNsaSA9IHBhcnNlQXJncyhwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpXG59IGNhdGNoIChlcnIpIHtcbiAgY29uc29sZS5lcnJvcihgcGljbzogJHtlcnIubWVzc2FnZX1gKVxuICBjb25zb2xlLmVycm9yKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlbHAnKSB7XG4gIGNvbnNvbGUubG9nKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3ZlcnNpb24nKSB7XG4gIGNvbnNvbGUubG9nKHBrZy52ZXJzaW9uKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3VwZGF0ZScpIHtcbiAgY29uc3QgeyBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24gfSA9IGF3YWl0IGltcG9ydCgncGljb2NvZGUtY29yZS91cGRhdGUuanMnKVxuICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHtcbiAgICBjb25zb2xlLmVycm9yKCd0aGlzIHBpY28gcnVucyBmcm9tIGEgc291cmNlIGNoZWNrb3V0OyB1cGRhdGUgaXQgd2l0aCBnaXQsIG5vdCBucG0nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gIGlmIChsYXRlc3QgJiYgIW5ld2VyVmVyc2lvbihwa2cudmVyc2lvbiwgbGF0ZXN0KSkge1xuICAgIGNvbnNvbGUubG9nKGBwaWNvIHYke3BrZy52ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0aW5nIHBpY29jb2RlICR7bGF0ZXN0ID8gYHRvIHYke2xhdGVzdH0gYCA6ICcnfXZpYSBucG0uLi5gKVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5VcGRhdGUoKVxuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgY29uc29sZS5sb2coYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0ZSBmYWlsZWQ6XFxuJHtyZXN1bHQub3V0cHV0fWApXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuaWYgKGNsaS5tb2RlID09PSAnY29ubmVjdCcpIHtcbiAgY29uc3QgZ3JvayA9IGNsaS5jb25uZWN0UHJvdmlkZXIgPT09ICd4YWknXG4gIGNvbnN0IGNvbm5lY3QgPSBncm9rXG4gICAgPyAoYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL3hhaS1hdXRoLmpzJykpLmNvbm5lY3RYQUlcbiAgICA6IChhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnKSkuY29ubmVjdE9wZW5BSVxuICB0cnkge1xuICAgIGNvbnNvbGUuZXJyb3IoYG9wZW5pbmcgeW91ciBicm93c2VyIGZvciAke2dyb2sgPyAnU3VwZXJHcm9rJyA6ICdDaGF0R1BUJ30gc2lnbi1pbi4uLmApXG4gICAgY29uc3QgeyBlbWFpbCB9ID0gYXdhaXQgY29ubmVjdCh7IG9uVXJsOiAodXJsLCBjb2RlKSA9PiBjb25zb2xlLmVycm9yKGAke3VybH0ke2NvZGUgPyBgXFxuJHtjb2RlfWAgOiAnJ31gKSB9KVxuICAgIGNvbnNvbGUubG9nKGBjb25uZWN0ZWQgYXMgJHtlbWFpbCB8fCAoZ3JvayA/ICd5b3VyIFN1cGVyR3JvayBhY2NvdW50JyA6ICd5b3VyIENoYXRHUFQgYWNjb3VudCcpfWApXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoYGNvbm5lY3QgZmFpbGVkOiAke2Vyci5tZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlYWRsZXNzJykge1xuICBjb25zdCB7IHJ1bkhlYWRsZXNzIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGVhZGxlc3MuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuSGVhZGxlc3MoY2xpKSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3NoZWxsJykge1xuICBjb25zdCB7IHJ1blNoZWxsIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2hlbGwuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuU2hlbGwoY2xpKSlcbn1cblxuY29uc3QgeyBwcm92aWRlcnMgfSA9IGF3YWl0IGxvYWRNb2RlbFJ1bnRpbWUoKVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWSwgT1BFTlJPVVRFUl9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbjogcGljbyAtLWNvbm5lY3Qgb3BlbmFpIHwgcGljbyAtLWNvbm5lY3QgeGFpJylcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5cbmNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuXG5jb25zdCB7IHRoZW1lOiBkZXRlY3RlZFRoZW1lLCBiYWNrZ3JvdW5kOiB0ZXJtaW5hbEJhY2tncm91bmQgfSA9IGF3YWl0IGRldGVjdFRlcm1pbmFsVGhlbWUoKVxuY29uc3QgdGhlbWVPdmVycmlkZSA9IHBhbGV0dGVMaXN0KCkuc29tZSgocCkgPT4gcC5rZXkgPT09IGNvbmZpZy50aGVtZSkgPyBjb25maWcudGhlbWUgOiBudWxsXG5zZXRUZXJtaW5hbEJhY2tncm91bmQodGVybWluYWxCYWNrZ3JvdW5kKVxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGVuc3VyZURhZW1vbih7IGVudHJ5OiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vZGFlbW9uLmpzJywgaW1wb3J0Lm1ldGEudXJsKSkgfSlcbmNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjcmVhdGVSZW1vdGVDb250cm9sbGVyKGNvbm5lY3Rpb24sIHtcbiAgb3B0aW9uczogeyBjd2Q6IHByb2Nlc3MuY3dkKCksIHZlcnNpb246IHBrZy52ZXJzaW9uLCB0aGVtZSwgZGV0ZWN0ZWRUaGVtZSwgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyB9LFxuICBsb2NhbEJvb3Q6IHsgcmVmczoge30gfSxcbn0pXG5jb25zdCBib290ID0gY29udHJvbGxlci5ib290XG5pZiAoY2xpLnNwZWVkKSBhd2FpdCBjb250cm9sbGVyLnNwZWVkQ29tbWFuZChjbGkuc3BlZWQpXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJywgJ1NJR0hVUCddKSBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICBjb25uZWN0aW9uLmNsb3NlKClcbiAgcHJvY2Vzcy5leGl0KDApXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGNvbm5lY3Rpb24uY2xvc2UoKSlcbmNvbnN0IGFwcCA9IG1vdW50KCgpID0+IDxBcHAgYm9vdD17Ym9vdH0gY29udHJvbGxlcj17Y29udHJvbGxlcn0gLz4sIHsgdGl0bGU6IGBwaWNvICAke2Jvb3Qucm9vdC5zcGxpdCgnLycpLnBvcCgpfWAsIHRoZW1lIH0pXG5ib290LnNldFRoZW1lID0gYXBwLnNldFRoZW1lXG4iLCAiZXhwb3J0IGNvbnN0IFVTQUdFID0gYHBpY28gLSBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsXG5cbnVzYWdlOlxuICBwaWNvICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSBzZXNzaW9uIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICBwaWNvIC1wIFwicHJvbXB0XCIgICAgICAgICAgIGhlYWRsZXNzOiBydW4gb25lIGFnZW50aWMgdHVybiwgcHJpbnQgdGhlIGFuc3dlclxuICBwaWNvIC1zIFwicmVxdWVzdFwiICAgICAgICAgIGdlbmVyYXRlIG9uZSBzaGVsbCBjb21tYW5kLCB3aXRob3V0IHJ1bm5pbmcgaXRcbiAgY2F0IGxvZyB8IHBpY28gLXAgXCIuLi5cIiAgICBzdGRpbiBpcyBhcHBlbmRlZCB0byB0aGUgcHJvbXB0IGFzIGNvbnRleHRcblxuY29tbWFuZCBmbGFnczpcbiAgLXAsIC0tcHJpbnQgPHByb21wdD4gICAgICAgcnVuIG9uZSBhZ2VudGljIHR1cm4gYW5kIHByaW50IHRoZSBhbnN3ZXJcbiAgLXMsIC0tc2hlbGwgPHJlcXVlc3Q+ICAgICAgcHJpbnQgb25lIGdlbmVyYXRlZCBzaGVsbCBjb21tYW5kXG4gIC0tanNvbiAgICAgICAgICAgICAgICAgICAgIHByaW50IGEgc2luZ2xlIEpTT04gcmVzdWx0IG9iamVjdCB0byBzdGRvdXRcbiAgLS1zdHJlYW0tanNvbiAgICAgICAgICAgICAgc3RyZWFtIHNlc3Npb24gZXZlbnRzIHRvIHN0ZG91dCBhcyBqc29ubFxuICAtbSwgLS1tb2RlbCA8bmFtZT4gICAgICAgICBtb2RlbCB0byB1c2UgKGZ1enp5IG1hdGNoZWQsIG9yIHJhdyBwcm92aWRlci9tb2RlbClcbiAgLS1zcGVlZCA8bGV2ZWw+ICAgICAgICAgICAgc3BlZWQ6IHN0YW5kYXJkfGZhc3RcbiAgLS1lZmZvcnQgPGxldmVsPiAgICAgICAgICAgdGhpbmtpbmcgZWZmb3J0OiBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhcbiAgLS1yZXN1bWUgPHNlc3Npb24taWQ+ICAgICAgY29udGludWUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBmcm9tIHRoaXMgcHJvamVjdFxuICAtLW1heC10b29sLWNhbGxzIDxuPiAgICAgICBzdG9wIHRoZSBhZ2VudCBhZnRlciBuIHRvb2wgY2FsbHMgKGRlZmF1bHQgNTApXG4gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgIG5vIHByb2dyZXNzIG91dHB1dCBvbiBzdGRlcnJcblxuICAtLWNvbm5lY3QgW29wZW5haXx4YWldICAgICBzaWduIGluIHdpdGggYSBDaGF0R1BUIG9yIFN1cGVyR3JvayBzdWJzY3JpcHRpb25cbiAgdXBkYXRlLCAtLXVwZGF0ZSAgICAgICAgICAgdXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIHNob3cgdmVyc2lvbmBcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2KSB7XG4gIGNvbnN0IG9wdHMgPSB7IG1vZGU6ICdpbnRlcmFjdGl2ZScgfVxuICBjb25zdCB0YWtlVmFsdWUgPSAobmFtZSwgaSkgPT4ge1xuICAgIGlmIChpICsgMSA+PSBhcmd2Lmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IHJlcXVpcmVzIGEgdmFsdWVgKVxuICAgIHJldHVybiBhcmd2W2kgKyAxXVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJndltpXVxuICAgIGlmIChhcmcgPT09ICctcCcgfHwgYXJnID09PSAnLS1wcmludCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdoZWFkbGVzcydcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLXMnIHx8IGFyZyA9PT0gJy0tc2hlbGwnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnc2hlbGwnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tanNvbicpIG9wdHMuanNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctLXN0cmVhbS1qc29uJykgb3B0cy5zdHJlYW1Kc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1tJyB8fCBhcmcgPT09ICctLW1vZGVsJykge1xuICAgICAgb3B0cy5tb2RlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tZWZmb3J0Jykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ2F1dG8nLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZWZmb3J0IFwiJHtsZXZlbH1cIjogdXNlIGF1dG98bG93fG1lZGl1bXxoaWdofG1heGApXG4gICAgICB9XG4gICAgICBvcHRzLmVmZm9ydCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tc3BlZWQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnc3RhbmRhcmQnLCAnZmFzdCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3BlZWQgXCIke2xldmVsfVwiOiB1c2Ugc3RhbmRhcmR8ZmFzdGApXG4gICAgICB9XG4gICAgICBvcHRzLnNwZWVkID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1yZXN1bWUnKSB7XG4gICAgICBvcHRzLnJlc3VtZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tbWF4LXRvb2wtY2FsbHMnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIG9wdHMubWF4VG9vbENhbGxzID0gTnVtYmVyKHZhbHVlKVxuICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRzLm1heFRvb2xDYWxscykgfHwgb3B0cy5tYXhUb29sQ2FsbHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWNvbm5lY3QnKSB7XG4gICAgICBvcHRzLm1vZGUgPSAnY29ubmVjdCdcbiAgICAgIGlmIChhcmd2W2kgKyAxXSAmJiAhYXJndltpICsgMV0uc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgICAgIG9wdHMuY29ubmVjdFByb3ZpZGVyID0gYXJndlsrK2ldXG4gICAgICAgIGlmICghWydvcGVuYWknLCAneGFpJ10uaW5jbHVkZXMob3B0cy5jb25uZWN0UHJvdmlkZXIpKSB0aHJvdyBuZXcgRXJyb3IoJy0tY29ubmVjdCBwcm92aWRlciBtdXN0IGJlIG9wZW5haSBvciB4YWknKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhcmcgPT09ICd1cGRhdGUnIHx8IGFyZyA9PT0gJy0tdXBkYXRlJykgb3B0cy5tb2RlID0gJ3VwZGF0ZSdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctcScgfHwgYXJnID09PSAnLS1xdWlldCcpIG9wdHMucXVpZXQgPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLWgnIHx8IGFyZyA9PT0gJy0taGVscCcpIG9wdHMubW9kZSA9ICdoZWxwJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy12JyB8fCBhcmcgPT09ICctLXZlcnNpb24nKSBvcHRzLm1vZGUgPSAndmVyc2lvbidcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhcmd1bWVudCBcIiR7YXJnfVwiYClcbiAgfVxuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdoZWFkbGVzcycgJiYgIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXAgcmVxdWlyZXMgYSBub24tZW1wdHkgcHJvbXB0JylcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3NoZWxsJykge1xuICAgIGlmICghb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcyByZXF1aXJlcyBhIG5vbi1lbXB0eSByZXF1ZXN0JylcbiAgICBjb25zdCBpbmNvbXBhdGlibGUgPSBbb3B0cy5qc29uICYmICctLWpzb24nLCBvcHRzLnN0cmVhbUpzb24gJiYgJy0tc3RyZWFtLWpzb24nLCBvcHRzLnJlc3VtZSAmJiAnLS1yZXN1bWUnLCBvcHRzLm1heFRvb2xDYWxscyAmJiAnLS1tYXgtdG9vbC1jYWxscyddLmZpbmQoQm9vbGVhbilcbiAgICBpZiAoaW5jb21wYXRpYmxlKSB0aHJvdyBuZXcgRXJyb3IoYCR7aW5jb21wYXRpYmxlfSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2hlbGxgKVxuICB9XG4gIHJldHVybiBvcHRzXG59XG4iLCAiaW1wb3J0IHsgU2Nyb2xsQm94LCB1c2VGb2N1cywgdXNlTGF5b3V0LCB1c2VJbnRlcnZhbCwgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IERFRkFVTFRfQUNDRU5ULCBGR19TT0ZULCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuXG5mdW5jdGlvbiBTZXNzaW9uUm93KHsgcm93LCBzZWxlY3RlZCwgZm9jdXMsIG5vdyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0ocm93LmlkLCBsYXlvdXQpXG4gIGNvbnN0IGNvbG9yID0gU0VTU0lPTl9DT0xPUlNbcm93LmNvbG9yXSB8fCByb3cuY29sb3IgfHwgREVGQVVMVF9BQ0NFTlRcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAxLCBoZWlnaHQ6IDIsIGZsZXhTaHJpbms6IDAsIGJnOiBzZWxlY3RlZCA/IGNvbG9yIDogdW5kZWZpbmVkIH19PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBjb2xvciwgYm9sZDogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Ake3Jvdy5zdGF0dXMgPT09ICdidXN5JyA/ICdcdTI1Q0YnIDogJ1x1MjVDQid9ICR7cm93Lm5hbWV9JHtyb3cucnVubmluZ1NoZWxscyA/IGAgICR7cm93LnJ1bm5pbmdTaGVsbHN9ICR7cm93LnJ1bm5pbmdTaGVsbHMgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9YCA6ICcnfWB9PC90ZXh0PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gcm93LmFjdGl2aXR5IHx8ICd3b3JraW5nJyA6IHJvdy5ydW5uaW5nU2hlbGxzID8gcm93LnNoZWxsQWN0aXZpdHkgfHwgJ3NoZWxsIHJ1bm5pbmcnIDogcm93Lmxhc3RNZXNzYWdlQXQgPyBgTGFzdCBtZXNzYWdlICR7dGltZUFnbyhyb3cubGFzdE1lc3NhZ2VBdCl9YCA6ICdpZGxlJ308L3RleHQ+XG4gIDwvYm94PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gV29ya3NwYWNlU2lkZWJhcih7IGdyb3Vwcywgc2VsZWN0ZWQsIHdpZHRoLCBsb2FkaW5nLCBlcnJvciwgb25IZWlnaHQgfSkge1xuICBjb25zdCBmb2N1cyA9IHVzZUZvY3VzKHsgaW5pdGlhbDogbnVsbCwgYWN0aXZlOiBmYWxzZSB9KVxuICBjb25zdCBbbm93LCBzZXROb3ddID0gY3JlYXRlU2lnbmFsKERhdGUubm93KCkpXG4gIHVzZUludGVydmFsKCgpID0+IHNldE5vdyhEYXRlLm5vdygpKSwgMTAwMDApXG4gIGlmIChzZWxlY3RlZCkgZm9jdXMuZm9jdXMoc2VsZWN0ZWQpXG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgd2lkdGgsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogJzEwMCUnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYm9yZGVyOiAnc2luZ2xlJywgYm9yZGVyRWRnZXM6IHsgcmlnaHQ6IHRydWUgfSwgYm9yZGVyQ29sb3I6IE1VVEVEIH19PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlLCBwYWRkaW5nWDogMSB9fT5TZXNzaW9uczwvdGV4dD5cbiAgICB7bG9hZGluZyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZzwvdGV4dD59XG4gICAge2Vycm9yICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Vycm9yfTwvdGV4dD59XG4gICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2xsb3dGb2N1cz17Zm9jdXN9IGZvY3VzUGFkZGluZz17MX0gb25NZXRyaWNzPXsobWV0cmljcykgPT4gb25IZWlnaHQobWV0cmljcy52aXNpYmxlSGVpZ2h0KX0+XG4gICAgICB7Z3JvdXBzLm1hcCgoZ3JvdXAsIGluZGV4KSA9PiA8Ym94IGtleT17Z3JvdXAuY3dkfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpbmRleCA+IDAgPyAxIDogMCB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJywgcGFkZGluZ1g6IDEgfX0+e2dyb3VwLmN3ZCA9PT0gaG9tZSA/ICd+JyA6IGdyb3VwLmN3ZC5zdGFydHNXaXRoKGhvbWUgKyAnLycpID8gJ34nICsgZ3JvdXAuY3dkLnNsaWNlKGhvbWUubGVuZ3RoKSA6IGdyb3VwLmN3ZH08L3RleHQ+XG4gICAgICAgIHtncm91cC5zZXNzaW9ucy5tYXAoKHJvdykgPT4gPFNlc3Npb25Sb3cga2V5PXtyb3cuaWR9IHJvdz17cm93fSBzZWxlY3RlZD17cm93LmlkID09PSBzZWxlY3RlZH0gZm9jdXM9e2ZvY3VzfSBub3c9e25vdygpfSAvPil9XG4gICAgICA8L2JveD4pfVxuICAgIDwvU2Nyb2xsQm94PlxuICA8L2JveD5cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmNvbnN0IFBBTEVUVEVTID0ge1xuICBkYXJrOiB7XG4gICAgZGVzYzogJ2xpZ2h0IHRleHQgZm9yIGRhcmsgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjYTc4YmZhJyxcbiAgICBmZzogJyNlNWU3ZWInLFxuICAgIGZnU29mdDogJyM5Y2EzYWYnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMxZTFlMjInLFxuICAgIHNlbGVjdEJnOiAnIzM3NDE1MScsXG4gICAgcmVkOiAnI2Y4NzE3MScsXG4gICAgZ3JlZW46ICcjNGFkZTgwJyxcbiAgICBwZWVyOiAnI2M0YjVmZCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyM3YzNhZWQnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIHBlZXI6ICcjNmQyOGQ5JyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBwZWVyOiAnI2Q4YjRmZScsXG4gICAgaGlnaGxpZ2h0OiAnI2VjZWZmNCcsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbn1cblxuLy8gdGhlIGRhcmsgYW5kIGxpZ2h0IHBhbGV0dGVzIHNpdCBvbiB0aGUgdGVybWluYWwncyBvd24gYmFja2dyb3VuZCwgYW5kIGFueVxuLy8gZml4ZWQgcGFuZWwgY29sb3IgY29sbGlkZXMgd2l0aCBzb21lIHRlcm1pbmFsIHRoZW1lLiB3aGVuIHRoZSBiYWNrZ3JvdW5kIGlzXG4vLyBrbm93biwgcGFuZWwgYW5kIHNlbGVjdGlvbiBjb2xvcnMgYXJlIG1peGVkIGZyb20gaXQgaW5zdGVhZDogdG93YXJkIHdoaXRlXG4vLyBvbiBkYXJrIGJhY2tncm91bmRzLCB0b3dhcmQgYmxhY2sgb24gbGlnaHQgb25lc1xuY29uc3QgREVSSVZFRF9TVVJGQUNFUyA9IHtcbiAgZGFyazogeyB0b3dhcmQ6IDI1NSwgcGFuZWw6IDAuMDgsIHNlbGVjdDogMC4yIH0sXG4gIGxpZ2h0OiB7IHRvd2FyZDogMCwgcGFuZWw6IDAuMDYsIHNlbGVjdDogMC4xNCB9LFxufVxuXG5sZXQgdGVybWluYWxCYWNrZ3JvdW5kID0gbnVsbFxuXG5mdW5jdGlvbiBoZXhUb1JnYihoZXgpIHtcbiAgY29uc3QgbSA9IC9eIyhbMC05YS1mXXs2fSkkL2kuZXhlYyhoZXggfHwgJycpXG4gIGlmICghbSkgcmV0dXJuIG51bGxcbiAgY29uc3QgbiA9IHBhcnNlSW50KG1bMV0sIDE2KVxuICByZXR1cm4gW24gPj4gMTYsIChuID4+IDgpICYgMjU1LCBuICYgMjU1XVxufVxuXG5mdW5jdGlvbiBtaXgocmdiLCB0b3dhcmQsIGFtb3VudCkge1xuICByZXR1cm4gJyMnICsgcmdiLm1hcCgoYykgPT4gTWF0aC5yb3VuZChjICsgKHRvd2FyZCAtIGMpICogYW1vdW50KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJylcbn1cblxuZnVuY3Rpb24gZGVyaXZlZFN1cmZhY2VzKG5hbWUpIHtcbiAgY29uc3QgcnVsZSA9IERFUklWRURfU1VSRkFDRVNbbmFtZV1cbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IodGVybWluYWxCYWNrZ3JvdW5kKVxuICBpZiAoIXJ1bGUgfHwgIXJnYikgcmV0dXJuIG51bGxcbiAgLy8gYSBwYWxldHRlIGZvcmNlZCBvbnRvIHRoZSBvcHBvc2l0ZSBraW5kIG9mIGJhY2tncm91bmQga2VlcHMgaXRzIGNvbnN0YW50c1xuICBjb25zdCBbciwgZywgYl0gPSByZ2JcbiAgY29uc3Qgc2lkZSA9ICgwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGIpIC8gMjU1ID4gMC41ID8gJ2xpZ2h0JyA6ICdkYXJrJ1xuICBpZiAoc2lkZSAhPT0gbmFtZSkgcmV0dXJuIG51bGxcbiAgcmV0dXJuIHsgcGFuZWxCZzogbWl4KHJnYiwgcnVsZS50b3dhcmQsIHJ1bGUucGFuZWwpLCBzZWxlY3RCZzogbWl4KHJnYiwgcnVsZS50b3dhcmQsIHJ1bGUuc2VsZWN0KSB9XG59XG5cbmV4cG9ydCBsZXQgREVGQVVMVF9BQ0NFTlQgPSBQQUxFVFRFUy5kYXJrLmFjY2VudFxuZXhwb3J0IGxldCBGRyA9IFBBTEVUVEVTLmRhcmsuZmdcbmV4cG9ydCBsZXQgRkdfU09GVCA9IFBBTEVUVEVTLmRhcmsuZmdTb2Z0XG5leHBvcnQgbGV0IE1VVEVEID0gUEFMRVRURVMuZGFyay5tdXRlZFxuZXhwb3J0IGxldCBQQU5FTF9CRyA9IFBBTEVUVEVTLmRhcmsucGFuZWxCZ1xuZXhwb3J0IGxldCBTRUxFQ1RfQkcgPSBQQUxFVFRFUy5kYXJrLnNlbGVjdEJnXG5leHBvcnQgbGV0IFJFRCA9IFBBTEVUVEVTLmRhcmsucmVkXG5leHBvcnQgbGV0IEdSRUVOID0gUEFMRVRURVMuZGFyay5ncmVlblxuZXhwb3J0IGxldCBQRUVSID0gUEFMRVRURVMuZGFyay5wZWVyXG5leHBvcnQgbGV0IEhJR0hMSUdIVCA9IFBBTEVUVEVTLmRhcmsuaGlnaGxpZ2h0XG5cbmxldCBjdXJyZW50UGFsZXR0ZSA9ICdkYXJrJ1xubGV0IGV4cGxpY2l0QWNjZW50ID0gbnVsbFxuXG5jb25zdCBbYWNjZW50VmFsdWUsIHNldEFjY2VudFZhbHVlXSA9IGNyZWF0ZVNpZ25hbChERUZBVUxUX0FDQ0VOVClcblxuZXhwb3J0IGNvbnN0IGFjY2VudCA9IGFjY2VudFZhbHVlXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBY2NlbnQoY29sb3IpIHtcbiAgZXhwbGljaXRBY2NlbnQgPSBjb2xvciB8fCBudWxsXG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IERFRkFVTFRfQUNDRU5UKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UGFsZXR0ZShuYW1lKSB7XG4gIGN1cnJlbnRQYWxldHRlID0gUEFMRVRURVNbbmFtZV0gPyBuYW1lIDogJ2RhcmsnXG4gIGNvbnN0IHAgPSBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV1cbiAgREVGQVVMVF9BQ0NFTlQgPSBwLmFjY2VudFxuICBGRyA9IHAuZmdcbiAgRkdfU09GVCA9IHAuZmdTb2Z0XG4gIE1VVEVEID0gcC5tdXRlZFxuICBjb25zdCBkZXJpdmVkID0gZGVyaXZlZFN1cmZhY2VzKGN1cnJlbnRQYWxldHRlKVxuICBQQU5FTF9CRyA9IGRlcml2ZWQ/LnBhbmVsQmcgPz8gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IGRlcml2ZWQ/LnNlbGVjdEJnID8/IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIFBFRVIgPSBwLnBlZXJcbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbi8vIHRoZSB0ZXJtaW5hbCdzIGJhY2tncm91bmQgYXMgJyNycmdnYmInLCBvciBudWxsIHdoZW4gdW5rbm93bi4gcmUtYXBwbGllc1xuLy8gdGhlIGN1cnJlbnQgcGFsZXR0ZSBzbyBkZXJpdmVkIHN1cmZhY2VzIGZvbGxvdyBpdFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlcm1pbmFsQmFja2dyb3VuZChoZXgpIHtcbiAgdGVybWluYWxCYWNrZ3JvdW5kID0gaGV4VG9SZ2IoaGV4KSA/IGhleC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICBzZXRQYWxldHRlKGN1cnJlbnRQYWxldHRlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVybWluYWxCYWNrZ3JvdW5kKCkge1xuICByZXR1cm4gdGVybWluYWxCYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgQ2hlY2tib3gsIGVhc2UsIEZpZWxkLCBGaWVsZExpc3QsIE1lbnUsIE51bWJlcklucHV0LCBQaWNrTGlzdCwgUmFkaW8sIFNjcm9sbEJveCwgVGV4dElucHV0LCB1c2VBbmltYXRlZCwgdXNlRm9jdXMsIHVzZUlucHV0LCB1c2VJbnRlcnZhbCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4gfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBmb3JtYXRIdHRwU2VydmVyU3BlYywgcGFyc2VTZXJ2ZXJTcGVjLCByZWRhY3RTZXJ2ZXJTcGVjLCBSRURBQ1RFRF9IRUFERVIgfSBmcm9tICdwaWNvY29kZS1jb3JlL21jcC5qcydcblxuZnVuY3Rpb24gc2hvcnRlbkhvbWUocGF0aCkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhwYXRoKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiB2YWx1ZSA9PT0gaG9tZSB8fCB2YWx1ZS5zdGFydHNXaXRoKGAke2hvbWV9L2ApID8gYH4ke3ZhbHVlLnNsaWNlKGhvbWUubGVuZ3RoKX1gIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZ28oYXQpIHtcbiAgY29uc3QgcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhdCkgLyAxMDAwKSlcbiAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9cyBhZ29gXG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MClcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bSBhZ29gXG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MClcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGggLyAyNCl9ZCBhZ29gXG59XG5cbmZ1bmN0aW9uIFBhbmVsRGl2aWRlcigpIHtcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBTRUxFQ1RfQkcsIG92ZXJmbG93OiAnY2xpcCcgfX0+eydcdTI1MDAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKX08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFBhbmVsRnJhbWUoeyB0aXRsZSwgaGludCwgcmlnaHQsIGZ1bGxTY3JlZW4gPSBmYWxzZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgaGVpZ2h0OiBmdWxsU2NyZWVuID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pnt0aXRsZX08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIHtyaWdodH1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aGludH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiBmdWxsU2NyZWVuID8gMCA6IDIsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhHcm93OiBmdWxsU2NyZWVuID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1QYW5lbCh7IHRpdGxlLCBtZXNzYWdlLCBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsIGZvY3VzZWQsIG9uQ29uZmlybSwgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIG9uQ29uZmlybSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17YGVudGVyOiAke2NvbmZpcm1MYWJlbC50b0xvd2VyQ2FzZSgpfSAgZXNjOiBjYW5jZWxgfT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PnttZXNzYWdlfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCwgYm9sZDogdHJ1ZSB9fT5UaGlzIGNhbm5vdCBiZSB1bmRvbmUuPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ0ZpZWxkKHsgZmllbGQsIHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlfSBsYWJlbD17ZmllbGQubGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ZpZWxkLnBhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHtmaWVsZC5kZXNjfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ051bWJlckZpZWxkKHsgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8TnVtYmVySW5wdXQgZm9jdXNlZD17Zm9jdXNlZH0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IG1pbj17MX0gbWF4PXsxMDB9IHdpZHRoPXs1fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+IFBhcmFsbGVsIGFnZW50IGxpbWl0PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5yZXNlYXJjaC5hZ2VudExpbWl0PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ICAgIE1heGltdW0gYWdlbnRzIHBlciBwYXJhbGxlbCBydW4gKDEtMTAwKTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdNb2RlbEZpZWxkKHsgbW9kZWwsIGxhYmVsLCBwYXRoLCBmb2N1c2VkLCBvblBpY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2xhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXtvblBpY2t9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7bW9kZWwgfHwgJ05vdCBjb25maWd1cmVkJ31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlnUGFuZWwoeyB2YWx1ZXMsIGZvY3VzZWQsIG9uQ2hhbmdlLCBvblBpY2tSZXNlYXJjaE1vZGVsLCBvblBpY2tTaGVsbE1vZGVsLCBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbCwgb25QaWNrUGFydGljaXBhbnRNb2RlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IG5hbWU6ICdjbG91ZHMnLCBsYWJlbDogJ0Nsb3VkIGFuaW1hdGlvbicsIGRlc2M6ICdTaG93IGFuaW1hdGVkIGNsb3VkcyBvbiB0aGUgZW1wdHkgc2NyZWVuJywgcGF0aDogJ2FuaW1hdGlvbi5jbG91ZHMnIH0sXG4gICAgeyBuYW1lOiAnY29tcGFjdFRvb2xzJywgbGFiZWw6ICdDb21wYWN0IHRvb2wgaGlzdG9yeScsIGRlc2M6ICdTdW1tYXJpemUgY29uc2VjdXRpdmUgdG9vbCBjYWxscyBpbiBvbmUgcm93JywgcGF0aDogJ2Rpc3BsYXkuY29tcGFjdFRvb2xIaXN0b3J5JyB9LFxuICAgIHsgbmFtZTogJ2dpdFN0YXR1cycsIGxhYmVsOiAnR2l0IGluZm9ybWF0aW9uJywgZGVzYzogJ1Nob3cgYnJhbmNoIGFuZCBjaGFuZ2VkIGxpbmUgY291bnRzJywgcGF0aDogJ2Rpc3BsYXkuZ2l0U3RhdHVzJyB9LFxuICAgIHsgbmFtZTogJ3dpZGVTaWRlYmFyJywgbGFiZWw6ICdXaWRlIHNpZGViYXInLCBkZXNjOiAnTW92ZSBwYW5lbHMgYW5kIHN0YXR1cyBkZXRhaWxzIHRvIGEgcmlnaHQgc2lkZWJhciB3aGVuIHRoZSB0ZXJtaW5hbCBpcyB3aWRlciB0aGFuIDE2MCBjb2x1bW5zJywgcGF0aDogJ2Rpc3BsYXkud2lkZVNpZGViYXInIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25maWd1cmF0aW9uXCIgaGludD1cInRhYjogbmV4dCBzZXR0aW5nICBzcGFjZS9lbnRlcjogY2hhbmdlICBlc2M6IGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDxGaWVsZExpc3QgZm9jdXNlZD17Zm9jdXNlZH0gaW5pdGlhbEZvY3VzPVwiY2xvdWRzXCIgc2Nyb2xsYmFyIGZvY3VzUGFkZGluZz17MX0+XG4gICAgICAgICAge2ZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQga2V5PXtmaWVsZC5uYW1lfSBuYW1lPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvbmZpZ0ZpZWxkIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlc1tmaWVsZC5uYW1lXX0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShmaWVsZC5uYW1lLCB2YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnJlc2VhcmNoTW9kZWx9IGxhYmVsPVwiUGFyYWxsZWwgd29ya2VyIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5yZXNlYXJjaFdvcmtlclwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tSZXNlYXJjaE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwic2hlbGxNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnNoZWxsTW9kZWx9IGxhYmVsPVwiU2hlbGwgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnNoZWxsXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1NoZWxsTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAge1sncGFydGljaXBhbnRBJywgJ3BhcnRpY2lwYW50QiddLm1hcCgocm9sZSkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIG5hbWU9e2Ake3JvbGV9TW9kZWxgfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzW2Ake3JvbGV9TW9kZWxgXX0gbGFiZWw9e2BQYXJ0aWNpcGFudCAke3JvbGUgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGB9IHBhdGg9e2Btb2RlbHMuJHtyb2xlfWB9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXsoKSA9PiBvblBpY2tQYXJ0aWNpcGFudE1vZGVsKHJvbGUpfSAvPn1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJkZWxpYmVyYXRpb25Nb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLmRlbGliZXJhdGlvbk1vZGVsfSBsYWJlbD1cIlN5bnRoZXNpcyBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuZGVsaWJlcmF0aW9uXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja0RlbGliZXJhdGlvbk1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hBZ2VudExpbWl0XCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdOdW1iZXJGaWVsZCB2YWx1ZT17dmFsdWVzLnJlc2VhcmNoQWdlbnRMaW1pdH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZSgncmVzZWFyY2hBZ2VudExpbWl0JywgdmFsdWUpfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICA8L0ZpZWxkTGlzdD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NvcGVUYWJzKHsgc2NvcGVzLCBhY3RpdmUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICB7c2NvcGVzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e3N9IHN0eWxlPXt7IGNvbG9yOiBpID09PSBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBpID09PSBhY3RpdmUgfX0+e2Ake2kgPiAwID8gJyAgJyA6ICcnfSR7cyA9PT0gJ2NoZWNrb3V0JyA/ICd0aGlzIGNoZWNrb3V0JyA6IHN9YH08L3RleHQ+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxQYW5lbCh7IG1vZGVscywgY3VycmVudCwgZGVmYXVsdE5hbWUsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSwgdGl0bGUgPSAnU2VsZWN0IG1vZGVsJywgaGludCA9ICdlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlJyB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwobW9kZWxzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRNb2RlbHMgPSByYW5rRnV6enkobW9kZWxzLCBxdWVyeSgpLCAocSwgbW9kZWwpID0+IGZ1enp5U2NvcmUocSwgbW9kZWwubmFtZSkpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBjdXJzb3IoKSkge1xuICAgICAgb25QaWNrRGVmYXVsdChjdXJzb3IoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtoaW50fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtyYW5rZWRNb2RlbHN9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtb2RlbHMuLi5cIlxuICAgICAgICAgIGZpbHRlcj17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvcn1cbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIHNjcm9sbG9mZj17MX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvZmYgPSBtLmF2YWlsYWJsZSA9PT0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6ICFvZmYsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBvZmYgPyBNVVRFRCA6IEZHIH19PnttLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eycgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gZGVmYXVsdE5hbWUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnsnICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICB7b2ZmID8gYG5lZWRzICR7bS5rZXlIaW50fWAgOiBtLnByaWNlID8gYCQke20ucHJpY2UuaW59IGluICAkJHttLnByaWNlLm91dH0gb3V0YCA6IFsnY29kZXgnLCAnZ3JvayddLmluY2x1ZGVzKG0ucHJvdmlkZXIpID8gJ3N1YnNjcmlwdGlvbicgOiAncHJpY2UgdW5rbm93bid9XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnttLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIaXN0b3J5UGFuZWwoeyBwcm9tcHRzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uUGljaywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChwcm9tcHRzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBhbnlNYXRjaCA9IHByb21wdHMuc29tZSgocCkgPT4gZnV6enlTY29yZShxdWVyeSgpLCBwLnRleHQpID49IDApXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJTZWFyY2ggcHJvbXB0c1wiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gZWRpdCAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17cHJvbXB0c31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9tcHRzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIHApID0+IGZ1enp5U2NvcmUocSwgcC50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhwKSA9PiBzZXRQcmV2aWV3KHApfVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvblBpY2socC50ZXh0KX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsocCwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cC50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhwLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7YW55TWF0Y2ggJiYgcHJldmlldygpID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBwcm9tcHRzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRQaWNrUGFuZWwoeyBlbnRyaWVzLCBzdGF0cywgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKGVudHJpZXNbMF0gfHwgbnVsbClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiUmV3aW5kIHRvIGEgbWVzc2FnZVwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgZW50ZXIgdG8gY2hvb3NlICBlc2MgdG8gY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17ZW50cmllc31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZXNzYWdlcy4uLlwiXG4gICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIG0udGV4dCkgPj0gMH1cbiAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsobSkgPT4gc2V0UHJldmlldyhtKX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e20udGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3N0YXRzKG0uaW5kZXgpLm1zZ3N9IGFmdGVyYH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKSA/IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YHJld2luZGluZyBoZXJlIGRyb3BzICR7c3RhdHMocHJldmlldygpLmluZGV4KS5tc2dzfSBlbnRyaWVzYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLmVkaXRzLm1hcCgobSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICBcdTIxQTkgJHttLnRpdGxlfWB9PC90ZXh0PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIG1lc3NhZ2VzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRBY3Rpb25QYW5lbCh7IHRhcmdldCwgb3B0aW9ucywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQmFjayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXdpbmQgb3B0aW9uczwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J3RvOiAnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dGFyZ2V0LnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17b3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezR9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICBvbkNhbmNlbD17b25CYWNrfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhvLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e28ubGFiZWx9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke28uZGVzY31gfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlciB0byBjb25maXJtICBlc2MgdG8gcGljayBhIGRpZmZlcmVudCBtZXNzYWdlPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZUVzY2FwZShmb2N1c2VkLCBvbkNsb3NlKSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCgpKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VtZVBhbmVsKHsgc2Vzc2lvbnMsIHNjb3Blcywgc2NvcGVJbmRleCwgbG9hZGluZywgZm9jdXNlZCwgY3VycmVudElkLCBvblBpY2ssIG9uRGVsZXRlLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHNlc3Npb25zWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRTZXNzaW9ucyA9IHJhbmtGdXp6eShzZXNzaW9ucywgcXVlcnkoKSwgKHEsIHNlc3Npb24pID0+IHtcbiAgICBjb25zdCBjdXN0b21TY29yZSA9IHNlc3Npb24uY3VzdG9tVGl0bGUgPyBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY3VzdG9tVGl0bGUpIDogLTFcbiAgICBpZiAoY3VzdG9tU2NvcmUgPj0gMCkgcmV0dXJuIDIwXzAwMCArIGN1c3RvbVNjb3JlXG4gICAgcmV0dXJuIE1hdGgubWF4KGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5hdXRvbWF0aWNUaXRsZSB8fCBzZXNzaW9uLnRpdGxlKSwgZnV6enlTY29yZShxLCBzZXNzaW9uLmNoZWNrb3V0IHx8ICcnKSlcbiAgfSlcbiAgY29uc3Qgc2hvd0NoZWNrb3V0cyA9IG5ldyBTZXQoc2Vzc2lvbnMubWFwKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNoZWNrb3V0KS5maWx0ZXIoQm9vbGVhbikpLnNpemUgPiAxXG4gIGNvbnN0IHNlbGVjdGVkU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZiAobG9hZGluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBzZWxlY3RlZCA9IHByZXZpZXcoKVxuICAgIHJldHVybiBzZXNzaW9ucy5pbmNsdWRlcyhzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IG51bGxcbiAgfVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ2xpc3QnID8gJ3ByZXZpZXcnIDogJ2xpc3QnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkU2Vzc2lvbigpXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgc2VsZWN0ZWQpIHtcbiAgICAgIG9uRGVsZXRlKHNlbGVjdGVkKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJSZXN1bWUgYSBzZXNzaW9uXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGVudGVyIHRvIHJlc3VtZSAgY3RybCt4IGRlbGV0ZSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZyBzZXNzaW9ucy4uLjwvdGV4dD5cbiAgICAgICAgICApIDogc2Vzc2lvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cmFua2VkU2Vzc2lvbnN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnbGlzdCcgJiYgIWxvYWRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsocykgPT4gc2V0UHJldmlldyhzKX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IChzaG93Q2hlY2tvdXRzID8gcy5jb2xvciA6IG51bGwpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIHtzaG93Q2hlY2tvdXRzICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCwgYmc6IHNlbGVjdGVkID8gbnVsbCA6IHMuY29sb3IgfX0+e2Ake3MuY2hlY2tvdXR9ICBgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcsIGJnOiBzZWxlY3RlZCB8fCBzaG93Q2hlY2tvdXRzID8gbnVsbCA6IHMuY29sb3IgfX0+e3MudGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICB7cy5oZWFkZXIuaWQgPT09IGN1cnJlbnRJZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+IGN1cnJlbnQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3RpbWVBZ28ocy5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtzZWxlY3RlZFNlc3Npb24oKSA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcmV2aWV3J30gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnN9ICR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlbGVjdGVkU2Vzc2lvbigpLmF0KX0gICR7c2hvcnRlbkhvbWUoc2VsZWN0ZWRTZXNzaW9uKCkuaGVhZGVyLnJvb3QpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgeyhzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3IHx8IFtdKS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgPiBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3TWVzc2FnZUNvdW50IC0gc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldy5sZW5ndGh9IGVhcmxpZXIgbWVzc2FnZXMgb21pdHRlZGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxib3gga2V5PXtgJHttZXNzYWdlLnJvbGV9LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWVzc2FnZS5yb2xlID09PSAndXNlcicgPyBGRyA6IE1VVEVEIH19PnttZXNzYWdlLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdHJhbnNjcmlwdCBwcmV2aWV3PC90ZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVtb3J5UGFuZWwoeyBtZW1vcmllcywgc2NvcGVzLCBzY29wZUluZGV4LCBmb2N1c2VkLCBvblRvZ2dsZURpc2FibGVkLCBvbkZvcmdldCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3JJdGVtLCBzZXRDdXJzb3JJdGVtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ2xpc3QnKVxuICBjb25zdCBwcmV2aWV3ID0gbWVtb3JpZXMuaW5jbHVkZXMoY3Vyc29ySXRlbSgpKSA/IGN1cnNvckl0ZW0oKSA6IG1lbW9yaWVzWzBdIHx8IG51bGxcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIHNldFBhbmUoKHApID0+IChwID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwcmV2aWV3KSB7XG4gICAgICBvbkZvcmdldChwcmV2aWV3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNZW1vcnlcIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlcjogZW5hYmxlL2Rpc2FibGUgIHRhYjogcHJldmlldyAgY3RybCtzIHNjb3BlICBjdHJsK3ggZm9yZ2V0ICh0d2ljZSkgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQwJScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHttZW1vcmllcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWVtb3JpZXMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXttZW1vcmllc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0J31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbWVtb3JpZXMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIGAke20ubmFtZX0gJHttLmRlc2NyaXB0aW9ufWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3JJdGVtfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25Ub2dnbGVEaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgaXRhbGljOiBtLmRpc2FibGVkLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogKG0uZGlzYWJsZWQgPyBNVVRFRCA6IEZHKSB9fT57YCR7bS5kaXNhYmxlZCA/ICcgICAnIDogJyd9JHttLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHttLmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT4gIHN1cHByZXNzZWQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke20uc2NvcGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtwcmV2aWV3ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtwcmV2aWV3LmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT5TVVBQUkVTU0VEPC90ZXh0Pn1cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e3ByZXZpZXcuZGVzY3JpcHRpb24gfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwcmV2aWV3LmJvZHl9PC90ZXh0PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRWZmb3J0UGFuZWwoeyBsZXZlbHMsIGN1cnJlbnQsIGRlZmF1bHRMZXZlbCwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBpdGVtcyA9IGxldmVsc1xuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoaXRlbXNbY3Vyc29yKCldKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgbGFiZWwgPSAobCkgPT4gKGwua2V5ID09PSBudWxsID8gJ2RlZmF1bHQnIDogbC5rZXkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoaW5raW5nIGVmZm9ydFwiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRDdXJzb3J9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhsLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57bGFiZWwobCkucGFkRW5kKE1hdGgubWF4KDEwLCBsYWJlbChsKS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2wuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU3BlZWRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIGxldmVscy5maW5kSW5kZXgoKGwpID0+IGwua2V5ID09PSBjdXJyZW50KSkpXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiBsLmtleSA9PT0gJ2Zhc3QnID8gJ0Zhc3QnIDogJ1N0YW5kYXJkJ1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTcGVlZFwiIGhpbnQ9XCJlbnRlcjogc2Vzc2lvbiAgY3RybCtzOiBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bC51c2FnZS5yZXBsYWNlKC8gdXNhZ2UkLywgJycpfSBpbmNsdWRlZCB1c2FnZWB9PC90ZXh0PlxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+eycgIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAge2wua2V5ID09PSBkZWZhdWx0TGV2ZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lUGFuZWwoeyB0aGVtZXMsIHByZWYsIGZvY3VzZWQsIG9uUGljaywgb25QcmV2aWV3LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbChNYXRoLm1heCgwLCB0aGVtZXMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gcHJlZikpKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJUaGVtZVwiIGhpbnQ9XCJqL2sgdG8gbW92ZSBhbmQgcHJldmlldyAgZW50ZXIgdG8gYXBwbHkgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBpdGVtcz17dGhlbWVzfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17KGkpID0+IHtcbiAgICAgICAgICAgIHNldEN1cnNvcihpKVxuICAgICAgICAgICAgb25QcmV2aWV3KHRoZW1lc1tpXSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsodCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e3Qua2V5LnBhZEVuZChNYXRoLm1heCgxMCwgdC5rZXkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnt0LmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICB7dC5rZXkgPT09IHByZWYgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+eycgIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29udGV4dE92ZXJ2aWV3KHsgb3ZlcnZpZXcgfSkge1xuICBjb25zdCByZXZlYWwgPSB1c2VBbmltYXRlZCgwLCBlYXNlKDcwMCkpXG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHJldmVhbC5zZXQoMSlcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBsYXlvdXQud2lkdGggfHwgMSlcbiAgY29uc3QgdmlzaWJsZSA9IE1hdGgucm91bmQod2lkdGggKiByZXZlYWwoKSlcbiAgY29uc3QgdXNhZ2VXaWR0aCA9IE1hdGgubWF4KDEsIHdpZHRoIC0gNSlcbiAgY29uc3QgdG90YWwgPSBvdmVydmlldy5zZWdtZW50cy5yZWR1Y2UoKHN1bSwgc2VnbWVudCkgPT4gc3VtICsgc2VnbWVudC50b2tlbnMsIDApXG4gIGNvbnN0IHVzZWQgPSBvdmVydmlldy5tZWFzdXJlZCB8fCB0b3RhbFxuICBjb25zdCBwZXJjZW50ID0gdXNlZCAmJiBvdmVydmlldy5saW1pdCA/IE1hdGgubWluKDEwMCwgdXNlZCAvIG92ZXJ2aWV3LmxpbWl0ICogMTAwKSA6IDBcbiAgbGV0IGJvdW5kYXJ5ID0gMFxuICBjb25zdCBjZWxscyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IG92ZXJ2aWV3LnNlZ21lbnRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgIGJvdW5kYXJ5ICs9IGl0ZW0udG9rZW5zIC8gdG90YWwgKiB3aWR0aFxuICAgICAgcmV0dXJuIGkgPCBib3VuZGFyeVxuICAgIH0pXG4gICAgYm91bmRhcnkgPSAwXG4gICAgY2VsbHMucHVzaChcbiAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IGkgPj0gdmlzaWJsZSA/IFBBTkVMX0JHIDogc2VnbWVudD8uY29sb3IgfHwgTVVURUQgfX0+XG4gICAgICAgIHtpID49IHZpc2libGUgPyAnICcgOiBzZWdtZW50ID8gJ1x1MjU4OCcgOiAnXHUyNTkxJ31cbiAgICAgIDwvdGV4dD4sXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZm9ybWF0VG9rZW5zID0gKHRva2VucykgPT4gdG9rZW5zIDwgMTAwMCA/IGAke01hdGgucm91bmQodG9rZW5zKX0gdG9rYCA6IGAkeyh0b2tlbnMgLyAxMDAwKS50b0ZpeGVkKDEpfWtgXG4gIGNvbnN0IGxlZ2VuZFJvd3MgPSAoKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9IFtbXV1cbiAgICBsZXQgdXNlZCA9IDBcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb3ZlcnZpZXcuc2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IHNlZ21lbnQubGFiZWwubGVuZ3RoICsgZm9ybWF0VG9rZW5zKHNlZ21lbnQudG9rZW5zKS5sZW5ndGggKyA1XG4gICAgICBpZiAodXNlZCA+IDAgJiYgdXNlZCArIGl0ZW1XaWR0aCA+IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKSkge1xuICAgICAgICByb3dzLnB1c2goW10pXG4gICAgICAgIHVzZWQgPSAwXG4gICAgICB9XG4gICAgICByb3dzLmF0KC0xKS5wdXNoKHNlZ21lbnQpXG4gICAgICB1c2VkICs9IGl0ZW1XaWR0aFxuICAgIH1cbiAgICByZXR1cm4gcm93c1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7cGVyY2VudCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e3BlcmNlbnR9IGluaXRpYWw9ezB9IGR1cmF0aW9uPXsxMDAwfSBjb2xvcj17cGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGJhY2tncm91bmQ9e1NFTEVDVF9CR30gZm9ybWF0PXsodmFsdWUpID0+IGNvbnRleHRCYXIodmFsdWUsIHVzYWdlV2lkdGgpfSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwZXJjZW50ID49IDgwID8gUkVEIDogTVVURUQgfX0+e2Ake292ZXJ2aWV3Lm1lYXN1cmVkID8gJycgOiAnfid9JHtNYXRoLnJvdW5kKHBlcmNlbnQpfSVgLnBhZFN0YXJ0KDUpfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT57Y2VsbHN9PC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7bGVnZW5kUm93cygpLm1hcCgocm93LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgIDxib3gga2V5PXtyb3dJbmRleH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7cm93Lm1hcCgoc2VnbWVudCkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IGtleT17c2VnbWVudC5sYWJlbH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpblJpZ2h0OiAyIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWdtZW50LmNvbG9yIH19Plx1MjVBMDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgJHtzZWdtZW50LmxhYmVsfSBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlZ21lbnQudG9rZW5zfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17MH1cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPXsyMDAwfVxuICAgICAgICAgICAgICAgICAgY29sb3I9e01VVEVEfVxuICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0PXthY2NlbnQoKX1cbiAgICAgICAgICAgICAgICAgIGZvcm1hdD17Zm9ybWF0VG9rZW5zfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEluZm9MaXN0UGFuZWwoeyB0aXRsZSwgcm93cywgb3ZlcnZpZXcsIGZvY3VzZWQsIG9uQ2xvc2UgfSkge1xuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgY2xvc2VcIj5cbiAgICAgIHtvdmVydmlldyAmJiA8Q29udGV4dE92ZXJ2aWV3IG92ZXJ2aWV3PXtvdmVydmlld30gLz59XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDE0LCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIHtyb3dzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm90aGluZyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtgJHtyb3cubmFtZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pntyb3cubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICB7cm93Lm5vdGUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cubm90ZX08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cm93LmRlc2MgfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb2plY3RQYW5lbCh7IHByb2plY3RzLCBsb2FkaW5nLCBmb2N1c2VkLCBvblBpY2tDaGVja291dCwgb25QaWNrU2Vzc2lvbiwgb25BZGRXb3JrdHJlZSwgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCByb3dzID0gcHJvamVjdHMuZmxhdE1hcCgocHJvamVjdCkgPT4gcHJvamVjdC5jaGVja291dHMubWFwKChjaGVja291dCwgaW5kZXgpID0+ICh7XG4gICAgLi4uY2hlY2tvdXQsXG4gICAgcHJvamVjdFBhdGg6IHByb2plY3QucGF0aCxcbiAgICBncm91cGVkOiBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggPiAxLFxuICAgIGZpcnN0OiBpbmRleCA9PT0gMCxcbiAgICBsYXN0OiBpbmRleCA9PT0gcHJvamVjdC5jaGVja291dHMubGVuZ3RoIC0gMSxcbiAgfSkpKVxuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwocm93c1swXSB8fCBudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ3Byb2plY3RzJylcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIGlmIChwcmV2aWV3KCk/LnNlc3Npb25zLmxlbmd0aCkgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ3Byb2plY3RzJyA/ICdzZXNzaW9ucycgOiAncHJvamVjdHMnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkFkZFdvcmt0cmVlKHByZXZpZXcoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHBhbmUoKSA9PT0gJ3Byb2plY3RzJyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcoKSkge1xuICAgICAgb25EZWxldGUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY2hlY2tvdXRMYWJlbCA9IChyb3cpID0+IGAke3Jvdy5sYXN0ID8gJ1x1MjUxNFx1MjUwMCcgOiAnXHUyNTFDXHUyNTAwJ30gJHtyb3cuYnJhbmNoIHx8IChyb3cud29ya3RyZWUgPyByb3cucGF0aCA6ICdtYWluJyl9YFxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTd2l0Y2ggcHJvamVjdFwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgbW92ZSAgdGFiIHN3aXRjaCBwYW5lICBlbnRlciBvcGVuICBjdHJsK3QgbmV3IHdvcmt0cmVlICBjdHJsK3ggZGVsZXRlICBlc2MgY2xvc2VcIiBmdWxsU2NyZWVuPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0NCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHByb2plY3RzLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiByb3dzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBrbm93biBwcm9qZWN0cyB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyb3dzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Byb2plY3RzJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgcHJvamVjdHMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgcm93KSA9PiBmdXp6eVNjb3JlKHF1ZXJ5LCBgJHtyb3cucHJvamVjdFBhdGh9ICR7cm93LmJyYW5jaCB8fCAnJ31gKSA+PSAwfVxuICAgICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17c2V0UHJldmlld31cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja0NoZWNrb3V0fVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHJvdywgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAge3Jvdy5ncm91cGVkICYmIHJvdy5maXJzdCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2BcdTI1QkUgJHtyb3cucHJvamVjdFBhdGh9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGFjdGl2ZSA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cm93Lmdyb3VwZWQgPyBgICAke2NoZWNrb3V0TGFiZWwocm93KX1gIDogcm93LnByb2plY3RQYXRofTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtyb3cuY3VycmVudCA/ICdjdXJyZW50ICAnIDogJyd9JHtyb3cubGF0ZXN0ID8gdGltZUFnbyhyb3cubGF0ZXN0LmF0KSA6ICdubyBzZXNzaW9ucyd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoID8gKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGtleT17cHJldmlldygpLnJvb3R9XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3ByZXZpZXcoKS5zZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdzZXNzaW9ucyd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsocXVlcnksIHNlc3Npb24pID0+IGZ1enp5U2NvcmUocXVlcnksIHNlc3Npb24udGl0bGUpID49IDB9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2tTZXNzaW9ufVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHNlc3Npb24sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGFjdGl2ZSA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e3Nlc3Npb24udGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c2Vzc2lvbi50dXJuc30gJHtzZXNzaW9uLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhzZXNzaW9uLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29ubmVjdFBhbmVsKHsgcHJvdmlkZXJzLCBmb2N1c2VkLCBvbkNvbm5lY3QsIG9uRGlzY29ubmVjdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gcHJvdmlkZXJzW01hdGgubWluKGluZGV4KCksIHByb3ZpZGVycy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgcCA9IHNlbGVjdGVkKClcbiAgICBpZiAocCAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHAuY29ubmVjdGVkKSB7XG4gICAgICBvbkRpc2Nvbm5lY3QocClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25uZWN0IGEgc3Vic2NyaXB0aW9uXCIgaGludD1cImVudGVyIHNpZ24gaW4gIGN0cmwreCBkaXNjb25uZWN0ICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cHJvdmlkZXJzfVxuICAgICAgICAgIHNlbGVjdGVkPXtpbmRleCgpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXsocCkgPT4gb25Db25uZWN0KHApfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHAuY29ubmVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCB9fT57cC5jb25uZWN0ZWQgPyAnXHUyNUFBJyA6ICdcdTI1QUInfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3AubGFiZWx9ICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICB7cC5jb25uZWN0ZWQgPyBgY29ubmVjdGVkJHtwLmVtYWlsID8gYCBhcyAke3AuZW1haWx9YCA6ICcnfWAgOiAnbm90IGNvbm5lY3RlZCd9XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7KHAudXNhZ2U/LndpbmRvd3MgfHwgW10pLm1hcCh3aW5kb3cgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3dpbmRvdy5sYWJlbC50b0xvd2VyQ2FzZSgpfSAke01hdGgucm91bmQod2luZG93LnVzZWRQZXJjZW50KX0lIHVzZWQke3dpbmRvdy5yZXNldEF0ID8gYCAgcmVzZXRzICR7bmV3IERhdGUod2luZG93LnJlc2V0QXQpLnRvTG9jYWxlU3RyaW5nKCl9YCA6ICcnfWB9PC90ZXh0Pil9XG4gICAgICAgICAgICAgIHtwLnVybCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3AudXJsfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtwLmNvZGUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwLmNvZGV9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdha2V1cHNQYW5lbCh7IHdha2V1cHMsIGZvY3VzZWQsIG9uQ2FuY2VsLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3RpY2ssIHNldFRpY2tdID0gY3JlYXRlU2lnbmFsKDApXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnRlcnZhbCgoKSA9PiBzZXRUaWNrKCh0KSA9PiB0ICsgMSksIDEwMDApXG4gIHZvaWQgdGljaygpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiB3YWtldXBzW01hdGgubWluKGluZGV4KCksIHdha2V1cHMubGVuZ3RoIC0gMSldIHx8IG51bGxcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGNvbnN0IHcgPSBzZWxlY3RlZCgpXG4gICAgaWYgKHcgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25DYW5jZWwodylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGNvdW50ZG93biA9IChhdCkgPT4ge1xuICAgIGNvbnN0IHNlY3MgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChhdCAtIERhdGUubm93KCkpIC8gMTAwMCkpXG4gICAgaWYgKHNlY3MgPCA2MCkgcmV0dXJuIGBpbiAke3NlY3N9c2BcbiAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihzZWNzIC8gNjApXG4gICAgaWYgKG1pbnMgPCA2MCkgcmV0dXJuIGBpbiAke21pbnN9bSAke3NlY3MgJSA2MH1zYFxuICAgIHJldHVybiBgaW4gJHtNYXRoLmZsb29yKG1pbnMgLyA2MCl9aCAke21pbnMgJSA2MH1tYFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNjaGVkdWxlZCB3YWtlLXVwc1wiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXIgb3IgY3RybCt4IGNhbmNlbCAodHdpY2UpICBlc2MgY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3dha2V1cHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBwZW5kaW5nIHdha2UtdXBzICB0aGUgYWdlbnQgc2NoZWR1bGVzIHRoZW0gd2l0aCBzY2hlZHVsZV93YWtldXA8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXt3YWtldXBzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgICBvblN1Ym1pdD17KHcpID0+IG9uQ2FuY2VsKHcpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsodywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2BcdTIzRjAgJHt3LmlkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntjb3VudGRvd24ody5hdCl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke25ldyBEYXRlKHcuYXQpLnRvTG9jYWxlVGltZVN0cmluZygpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSwgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHX1NPRlQgfX0+e3cubm90ZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIG1jcFN0YXR1cyhzdGF0dXMpIHtcbiAgY29uc3QgcGFsZXR0ZSA9IHtcbiAgICBjb25uZWN0ZWQ6IHsgaWNvbjogJ1x1MjVBQScsIGNvbG9yOiBhY2NlbnQoKSB9LFxuICAgIGNvbm5lY3Rpbmc6IHsgaWNvbjogJ1x1MjVDQycsIGNvbG9yOiAnI2ZiYmYyNCcgfSxcbiAgICBlcnJvcjogeyBpY29uOiAnXHUyNzE3JywgY29sb3I6IFJFRCB9LFxuICAgIGRpc2FibGVkOiB7IGljb246ICdcdTI1QUInLCBjb2xvcjogTVVURUQgfSxcbiAgICBpZGxlOiB7IGljb246ICdcdTI1QUInLCBjb2xvcjogTVVURUQgfSxcbiAgfVxuICByZXR1cm4gcGFsZXR0ZVtzdGF0dXNdIHx8IHBhbGV0dGUuaWRsZVxufVxuXG5mdW5jdGlvbiBGb3JtRmllbGQoeyBsYWJlbCwgYWN0aXZlLCBjaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntsYWJlbH08L3RleHQ+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcFNlcnZlckZvcm0oeyBmb2N1c2VkLCBzZXJ2ZXIsIG9uU2F2ZSwgb25JbnZhbGlkLCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IGluaXRpYWwgPSBzZXJ2ZXIgPyBwYXJzZVNlcnZlclNwZWMoc2VydmVyLmNvbW1hbmQpIDogbnVsbFxuICBjb25zdCBlZGl0aW5nID0gISFzZXJ2ZXJcbiAgY29uc3QgW25hbWUsIHNldE5hbWVdID0gY3JlYXRlU2lnbmFsKHNlcnZlcj8ubmFtZSB8fCAnJylcbiAgY29uc3QgW3Njb3BlLCBzZXRTY29wZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5zY29wZSB8fCAnZ2xvYmFsJylcbiAgY29uc3QgW3RyYW5zcG9ydCwgc2V0VHJhbnNwb3J0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlIHx8ICdzdGRpbycpXG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldF0gPSBjcmVhdGVTaWduYWwoaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnID8gaW5pdGlhbC51cmwgOiBzZXJ2ZXI/LmNvbW1hbmQgfHwgJycpXG4gIGNvbnN0IGluaXRpYWxIZWFkZXJzID0gaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmtleXMoaW5pdGlhbC5oZWFkZXJzKS5tYXAoKG5hbWUpID0+IFtuYW1lLCBSRURBQ1RFRF9IRUFERVJdKSlcbiAgICA6IHt9XG4gIGNvbnN0IFtoZWFkZXJzLCBzZXRIZWFkZXJzXSA9IGNyZWF0ZVNpZ25hbChmb3JtYXRIdHRwU2VydmVyU3BlYygnJywgaW5pdGlhbEhlYWRlcnMpLnRyaW0oKSlcblxuICBjb25zdCBmbSA9IHVzZUZvY3VzKHsgaW5pdGlhbDogZWRpdGluZyA/ICd0cmFuc3BvcnQnIDogJ25hbWUnIH0pXG4gIGlmICghZWRpdGluZykge1xuICAgIGZtLml0ZW0oJ25hbWUnKVxuICAgIGZtLml0ZW0oJ3Njb3BlJylcbiAgfVxuICBmbS5pdGVtKCd0cmFuc3BvcnQnKVxuICBmbS5pdGVtKCd0YXJnZXQnKVxuICBpZiAodHJhbnNwb3J0KCkgPT09ICdodHRwJykgZm0uaXRlbSgnaGVhZGVycycpXG4gIGZtLml0ZW0oJ3NhdmUnKVxuICBmbS5pdGVtKCdjYW5jZWwnKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGh0dHAgPSB0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnXG5cbiAgY29uc3Qgc3VibWl0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlck5hbWUgPSBuYW1lKCkudHJpbSgpXG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQoKS50cmltKClcbiAgICBpZiAoIXNlcnZlck5hbWUgfHwgL1xccy8udGVzdChzZXJ2ZXJOYW1lKSkgcmV0dXJuIG9uSW52YWxpZCgnbmFtZSBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGNvbnRhaW4gc3BhY2VzJylcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gb25JbnZhbGlkKGh0dHAgPyAndXJsIGlzIHJlcXVpcmVkJyA6ICdjb21tYW5kIGlzIHJlcXVpcmVkJylcbiAgICBpZiAoaHR0cCAmJiAhL15odHRwcz86XFwvXFwvLy50ZXN0KHZhbHVlKSkgcmV0dXJuIG9uSW52YWxpZCgndXJsIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vJylcbiAgICBpZiAoIWh0dHAgJiYgL15odHRwcz86XFwvXFwvLy50ZXN0KHZhbHVlKSkgcmV0dXJuIG9uSW52YWxpZCgnYSBzdGRpbyBjb21tYW5kIGNhbm5vdCBzdGFydCB3aXRoIGEgdXJsOyBwaWNrIHRoZSBodHRwIHRyYW5zcG9ydCcpXG4gICAgY29uc3QgZXh0cmEgPSBoZWFkZXJzKCkudHJpbSgpXG4gICAgbGV0IHNwZWMgPSBodHRwICYmIGV4dHJhID8gYCR7dmFsdWV9ICR7ZXh0cmF9YCA6IHZhbHVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2VydmVyU3BlYyhzcGVjKVxuICAgICAgaWYgKHBhcnNlZC50eXBlID09PSAnaHR0cCcgJiYgaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2hlYWRlciwgaGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZC5oZWFkZXJzKSkge1xuICAgICAgICAgIGlmIChoZWFkZXJWYWx1ZSA9PT0gUkVEQUNURURfSEVBREVSICYmIGluaXRpYWwuaGVhZGVyc1toZWFkZXJdICE9PSB1bmRlZmluZWQpIHBhcnNlZC5oZWFkZXJzW2hlYWRlcl0gPSBpbml0aWFsLmhlYWRlcnNbaGVhZGVyXVxuICAgICAgICB9XG4gICAgICAgIHNwZWMgPSBmb3JtYXRIdHRwU2VydmVyU3BlYyhwYXJzZWQudXJsLCBwYXJzZWQuaGVhZGVycylcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBvbkludmFsaWQoZXJyLm1lc3NhZ2UpXG4gICAgfVxuICAgIG9uU2F2ZShzZXJ2ZXJOYW1lLCBzcGVjLCBzY29wZSgpKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7IWVkaXRpbmcgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwibmFtZVwiIGFjdGl2ZT17Zm0uaXMoJ25hbWUnKX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCduYW1lJyl9IHBsYWNlaG9sZGVyPVwibGluZWFyXCIgb25DaGFuZ2U9e3NldE5hbWV9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJzY29wZVwiIGFjdGl2ZT17Zm0uaXMoJ3Njb3BlJyl9PlxuICAgICAgICAgIDxSYWRpbyBvcHRpb25zPXtbJ2dsb2JhbCcsICdwcm9qZWN0J119IHNlbGVjdGVkPXtzY29wZSgpfSBvbkNoYW5nZT17c2V0U2NvcGV9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3Njb3BlJyl9IC8+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJ0cmFuc3BvcnRcIiBhY3RpdmU9e2ZtLmlzKCd0cmFuc3BvcnQnKX0+XG4gICAgICAgIDxSYWRpbyBvcHRpb25zPXtbJ3N0ZGlvJywgJ2h0dHAnXX0gc2VsZWN0ZWQ9e3RyYW5zcG9ydCgpfSBvbkNoYW5nZT17c2V0VHJhbnNwb3J0fSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCd0cmFuc3BvcnQnKX0gLz5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD17aHR0cCA/ICd1cmwnIDogJ2NvbW1hbmQnfSBhY3RpdmU9e2ZtLmlzKCd0YXJnZXQnKX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCd0YXJnZXQnKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtodHRwID8gJ2h0dHBzOi8vbWNwLmxpbmVhci5hcHAvbWNwJyA6ICducHggLXkgQG1vZGVsY29udGV4dHByb3RvY29sL3NlcnZlci1maWxlc3lzdGVtIC90bXAnfVxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0YXJnZXQoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRUYXJnZXR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgIHtodHRwICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cImhlYWRlcnMgIG9wdGlvbmFsXCIgYWN0aXZlPXtmbS5pcygnaGVhZGVycycpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ2hlYWRlcnMnKX0gcGxhY2Vob2xkZXI9J0F1dGhvcml6YXRpb249XCJCZWFyZXIgLi4uXCIgWC1UZWFtPVwiY29yZVwiJyBpbml0aWFsVmFsdWU9e2hlYWRlcnMoKX0gb25DaGFuZ2U9e3NldEhlYWRlcnN9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2VkaXRpbmcgPyAnc2F2ZScgOiAnYWRkJ30gb25QcmVzcz17c3VibWl0fSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCdzYXZlJyl9IC8+XG4gICAgICAgIDx0ZXh0PiAgPC90ZXh0PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPVwiY2FuY2VsXCIgb25QcmVzcz17b25DYW5jZWx9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ2NhbmNlbCcpfSB2YXJpYW50PVwiZGltXCIgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNY3BQYW5lbCh7IHNlcnZlcnMsIGZvY3VzZWQsIG9uVG9nZ2xlLCBvblJlY29ubmVjdCwgb25SZW1vdmUsIG9uQWRkLCBvbkVkaXQsIG9uSW52YWxpZCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtmb3JtLCBzZXRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdmlld2luZywgc2V0Vmlld2luZ10gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQgJiYgIWZvcm0oKSwgKCkgPT4gKHZpZXdpbmcoKSA/IHNldFZpZXdpbmcobnVsbCkgOiBvbkNsb3NlKCkpKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gc2VydmVyc1tNYXRoLm1pbihpbmRleCgpLCBzZXJ2ZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG4gIGNvbnN0IHZpZXdlZCA9ICgpID0+IHNlcnZlcnMuZmluZCgocykgPT4gcy5uYW1lID09PSB2aWV3aW5nKCkpIHx8IG51bGxcblxuICBpZiAodmlld2luZygpICYmIHZpZXdlZCgpKSB7XG4gICAgY29uc3Qgc2VydmVyID0gdmlld2VkKClcbiAgICBjb25zdCBkZXNjcmliZSA9ICh0KSA9PiB0LmRlc2NyaXB0aW9uLnJlcGxhY2UoL15cXFtbXlxcXV0qXFxdXFxzKi8sICcnKS50cmltKCkgfHwgJ25vIGRlc2NyaXB0aW9uJ1xuICAgIHJldHVybiAoXG4gICAgICA8UGFuZWxGcmFtZVxuICAgICAgICB0aXRsZT17YE1DUCBzZXJ2ZXJzICAke3NlcnZlci5uYW1lfSAgJHtzZXJ2ZXIudG9vbHMubGVuZ3RofSAke3NlcnZlci50b29scy5sZW5ndGggPT09IDEgPyAndG9vbCcgOiAndG9vbHMnfWB9XG4gICAgICAgIGhpbnQ9XCJqL2sgb3IgXHUyMTkxXHUyMTkzIHRvIHNjcm9sbCAgZXNjIGJhY2sgdG8gc2VydmVyc1wiXG4gICAgICAgIGZ1bGxTY3JlZW5cbiAgICAgID5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge3NlcnZlci50b29scy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdG9vbHMgcmVwb3J0ZWQgIGlzIHRoZSBzZXJ2ZXIgY29ubmVjdGVkPzwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtzZXJ2ZXIudG9vbHMubWFwKCh0LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBrZXk9e3QubmFtZX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pnt0Lm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkZXNjcmliZSh0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L1BhbmVsRnJhbWU+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNQ1Agc2VydmVyc1wiXG4gICAgICBoaW50PXtmb3JtKClcbiAgICAgICAgPyAndGFiIG1vdmVzIGJldHdlZW4gZmllbGRzICBqL2sgKyBzcGFjZSBwaWNrcyBhIHJhZGlvIG9wdGlvbiAgZXNjIGNhbmNlbHMnXG4gICAgICAgIDogJ2VudGVyIGVuYWJsZS9kaXNhYmxlICB0IHRvb2xzICBlIGVkaXQgIHIgcmVjb25uZWN0ICBhIGFkZCAgY3RybCt4IHJlbW92ZSAodHdpY2UpICBlc2MgY2xvc2UnfVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICB7Zm9ybSgpID8gKFxuICAgICAgICAgIDxNY3BTZXJ2ZXJGb3JtXG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgc2VydmVyPXtmb3JtKCkgPT09ICdhZGQnID8gbnVsbCA6IGZvcm0oKX1cbiAgICAgICAgICAgIG9uU2F2ZT17KG5hbWUsIHNwZWMsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb3JtKCkgPT09ICdhZGQnKSBvbkFkZChuYW1lLCBzcGVjLCBzY29wZSlcbiAgICAgICAgICAgICAgZWxzZSBvbkVkaXQobmFtZSwgc3BlYylcbiAgICAgICAgICAgICAgc2V0Rm9ybShudWxsKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uSW52YWxpZD17b25JbnZhbGlkfVxuICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldEZvcm0obnVsbCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IHNlcnZlcnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBNQ1Agc2VydmVycyBjb25maWd1cmVkICBwcmVzcyBhIHRvIGFkZCBvbmU8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtzZXJ2ZXJzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHMpID0+IG9uVG9nZ2xlKHMubmFtZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IGFjdGl2ZSB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ID0gbWNwU3RhdHVzKHMuc3RhdHVzKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc3QuY29sb3IgfX0+e3N0Lmljb259PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3MubmFtZS5wYWRFbmQoTWF0aC5tYXgoMTQsIHMubmFtZS5sZW5ndGggKyAxKSl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHMuc3RhdHVzID09PSAnZXJyb3InID8gUkVEIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdlcnJvcicgPyBzLmVycm9yIDogcy5zdGF0dXMgPT09ICdjb25uZWN0ZWQnID8gYCR7cy50b29sQ291bnR9IHRvb2xzYCA6IHMuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQ+eycgICAgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57c2hvcnRlbkhvbWUocmVkYWN0U2VydmVyU3BlYyhzLmNvbW1hbmQpKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7cy5zY29wZSA9PT0gJ3Byb2plY3QnID8gJ3Byb2plY3QnIDogJ2dsb2JhbCd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICB7IWZvcm0oKSAmJiAoXG4gICAgICAgIDxNY3BLZXlzXG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBvbktleT17KGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHNlbGVjdGVkKClcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdhJykgc2V0Rm9ybSgnYWRkJylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAnZScpIHNldEZvcm0ocylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncicpIG9uUmVjb25uZWN0KHMubmFtZSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncmVtb3ZlJykgb25SZW1vdmUocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICd0Jykgc2V0Vmlld2luZyhzLm5hbWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcEtleXMoeyBmb2N1c2VkLCBvbktleSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIG9uS2V5KCdyZW1vdmUnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgWydhJywgJ2UnLCAncicsICd0J10uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgb25LZXkoZXZlbnQua2V5KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiBudWxsXG59XG4iLCAiaW1wb3J0IHsgZWFzZSwgbGluZWFyLCB1c2VBbmltYXRlZCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcblxuZnVuY3Rpb24gdG9SZ2IoY29sb3IpIHtcbiAgaWYgKGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoNSwgNyksIDE2KSxcbiAgICBdXG4gIH1cbiAgcmV0dXJuIFsxMjcsIDEyNywgMTI3XVxufVxuXG5mdW5jdGlvbiBtaXhDb2xvcihmcm9tLCB0bywgYW1vdW50KSB7XG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIGZyb21cbiAgY29uc3QgYSA9IHRvUmdiKGZyb20pXG4gIGNvbnN0IGIgPSB0b1JnYih0bylcbiAgY29uc3QgY2hhbm5lbHMgPSBhLm1hcCgodmFsdWUsIGkpID0+IE1hdGgucm91bmQodmFsdWUgKyAoYltpXSAtIHZhbHVlKSAqIGFtb3VudCkpXG4gIHJldHVybiBgIyR7Y2hhbm5lbHMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFuaW1hdGVkVmFsdWUoeyB2YWx1ZSwgaW5pdGlhbCA9IHZhbHVlLCBkdXJhdGlvbiA9IDEwMDAsIGNvbG9yLCBoaWdobGlnaHQsIGJhY2tncm91bmQsIGZvcm1hdCA9IFN0cmluZyB9KSB7XG4gIGNvbnN0IGRpc3BsYXllZCA9IHVzZUFuaW1hdGVkKGluaXRpYWwsIGVhc2UoZHVyYXRpb24pKVxuICBjb25zdCBnbG93ID0gdXNlQW5pbWF0ZWQoMCwgZWFzZShkdXJhdGlvbiwgbGluZWFyKSlcblxuICBpZiAodmFsdWUgIT09IGRpc3BsYXllZC5fYW5pbS50YXJnZXQpIHtcbiAgICBkaXNwbGF5ZWQuc2V0KHZhbHVlKVxuICAgIGdsb3cuc25hcCgxKVxuICAgIGdsb3cuc2V0KDApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihjb2xvciwgaGlnaGxpZ2h0LCBnbG93KCkpLCBiZzogYmFja2dyb3VuZCB9fT5cbiAgICAgIHtmb3JtYXQoZGlzcGxheWVkKCkpfVxuICAgIDwvdGV4dD5cbiAgKVxufVxuIiwgImNvbnN0IExFVkVMUyA9IFsnICcsICdcdTI1OEYnLCAnXHUyNThFJywgJ1x1MjU4RCcsICdcdTI1OEMnLCAnXHUyNThCJywgJ1x1MjU4QScsICdcdTI1ODknLCAnXHUyNTg4J11cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHRCYXIocGVyY2VudCwgd2lkdGggPSA0KSB7XG4gIGNvbnN0IGVpZ2h0aHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcGVyY2VudCkpICogd2lkdGggKiA4IC8gMTAwKVxuICBjb25zdCBmdWxsID0gTWF0aC5mbG9vcihlaWdodGhzIC8gOClcbiAgY29uc3QgcGFydGlhbCA9IGVpZ2h0aHMgJSA4XG4gIHJldHVybiAnXHUyNTg4Jy5yZXBlYXQoZnVsbCkgKyAocGFydGlhbCA/IExFVkVMU1twYXJ0aWFsXSA6ICcnKSArICcgJy5yZXBlYXQod2lkdGggLSBmdWxsIC0gKHBhcnRpYWwgPyAxIDogMCkpXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUdyb3Vwcyhyb3dzKSB7XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgaWYgKCFyb3cubmFtZT8udHJpbSgpKSBjb250aW51ZVxuICAgIGlmICghZ3JvdXBzLmhhcyhyb3cuY3dkKSkgZ3JvdXBzLnNldChyb3cuY3dkLCBbXSlcbiAgICBncm91cHMuZ2V0KHJvdy5jd2QpLnB1c2gocm93KVxuICB9XG4gIHJldHVybiBbLi4uZ3JvdXBzXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKS5tYXAoKFtjd2QsIHNlc3Npb25zXSkgPT4gKHsgY3dkLCBzZXNzaW9ucyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZVNlbGVjdGlvbihyb3dzLCBzZWxlY3RlZCwgcHJldmlvdXMgPSBbXSkge1xuICBpZiAocm93cy5zb21lKChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKSByZXR1cm4gc2VsZWN0ZWRcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCBwcmV2aW91cy5maW5kSW5kZXgoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpXG4gIHJldHVybiByb3dzW01hdGgubWluKGluZGV4LCByb3dzLmxlbmd0aCAtIDEpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlTmF2aWdhdGUocm93cywgc2VsZWN0ZWQsIGV2ZW50LCBoZWlnaHQpIHtcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCByb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgY29uc3QgaGFsZiA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gNikpXG4gIGxldCBuZXh0XG4gIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gaW5kZXggKyBoYWxmXG4gIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBpbmRleCAtIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCB8fCBldmVudC5tZXRhIHx8IGV2ZW50LmFsdCkgcmV0dXJuIHVuZGVmaW5lZFxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IGluZGV4ICsgMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSBpbmRleCAtIDFcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gcm93cy5sZW5ndGggLSAxXG4gIGVsc2UgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gcm93c1tNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dzLmxlbmd0aCAtIDEsIG5leHQpKV0/LmlkID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHModGV4dCwgYXR0YWNobWVudHMpIHtcbiAgcmV0dXJuIFsuLi50ZXh0Lm1hdGNoQWxsKC9cXFsoPzpJbWFnZXxGaWxlKSAjXFxkK1xcXS9nKV0uZmlsdGVyKG1hdGNoID0+IGF0dGFjaG1lbnRzLmhhcyhtYXRjaFswXSkpLmxlbmd0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7IHRleHQsIGF0dGFjaG1lbnRzLCBkaWN0YXRpb24sIGNhcHR1cmUsIHBlbmRpbmcsIGhpc3RvcnksIGNvbXBsZXRpb24sIGNvbW1hbmQsIHF1ZXN0aW9uLCBzdGVlciB9KSB7XG4gIHJldHVybiB0ZXh0ID09PSAnJyAmJiBhdHRhY2htZW50cyA9PT0gMCAmJiBkaWN0YXRpb24gPT09ICdpZGxlJyAmJiBjYXB0dXJlID09PSAnaWRsZScgJiYgIXBlbmRpbmcgJiYgaGlzdG9yeSA8IDAgJiYgIWNvbXBsZXRpb24gJiYgIWNvbW1hbmQgJiYgIXF1ZXN0aW9uICYmICFzdGVlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlQWN0aW9uKHJvdykge1xuICByZXR1cm4gcm93Py5zdGF0dXMgPT09ICdidXN5JyA/ICdpbnRlcnJ1cHQnIDogcm93Py5zdGF0dXMgPT09ICdpZGxlJyA/ICdkZW1vdGUnIDogbnVsbFxufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNpZGViYXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzeCdcbmltcG9ydCB7IHdvcmtzcGFjZUdyb3Vwcywgd29ya3NwYWNlU2VsZWN0aW9uLCB3b3Jrc3BhY2VOYXZpZ2F0ZSwgd29ya3NwYWNlQWN0aW9uLCB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzLCBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyIH0gZnJvbSAnLi93b3Jrc3BhY2Utc2lkZWJhci5qcydcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NraWxscy5qcydcbmltcG9ydCB7IGV4cGFuZENvbW1hbmQsIHBhcnNlQ29tbWFuZEFyZ3VtZW50cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBjb21tYW5kQXQsIHJlcGxhY2VDb21tYW5kLCBjb21tYW5kRmllbGRzIH0gZnJvbSAnLi9jb21wb3Nlci1jb21tYW5kcy5qcydcbmltcG9ydCB7IENvbW1hbmRGb3JtIH0gZnJvbSAnLi9jb21tYW5kLWZvcm0uanN4J1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb24gfSBmcm9tICcuLi9kaWN0YXRpb24uanMnXG5pbXBvcnQgeyByZWFkQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi9jbGlwYm9hcmQuanMnXG5pbXBvcnQgeyBjcmVhdGVDbGlwYm9hcmRJbnB1dCB9IGZyb20gJy4vY2xpcGJvYXJkLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uSW5wdXQgfSBmcm9tICcuL2RpY3RhdGlvbi1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCB9IGZyb20gJy4vc2NyZWVuLWNhcHR1cmUtaW5wdXQuanMnXG5pbXBvcnQgeyBjYXB0dXJlUmVnaW9uIH0gZnJvbSAnLi4vc2NyZWVuLWNhcHR1cmUuanMnXG5pbXBvcnQgeyBjcmVhdGVDb21wb3NlckZpbGVzIH0gZnJvbSAnLi9jb21wb3Nlci1maWxlcy5qcydcbmltcG9ydCB7IGRpY3RhdGlvbkluZGljYXRvciwgYXBwZW5kTGV2ZWwgfSBmcm9tICcuL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMnXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCBvbkNsZWFudXAsIE1lbnUsIFByb2dyZXNzQmFyLCBTY3JvbGxCb3gsIFNoaW1tZXIsIFNwaW5uZXIsIFRleHRBcmVhLCB1c2VGb2N1cywgdXNlRm9jdXNUcmFwLCB1c2VGcmFtZVN0YXRzLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTGF5b3V0LCB1c2VNb3VzZSwgdXNlUmVzaXplLCB1c2VDb2xvclNjaGVtZSwgdXNlU2VsZWN0aW9uLCB1c2VUb2FzdCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IG1ha2VFdmVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZXZlbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdFNlc3Npb25zLCBkZWxldGVTZXNzaW9uLCBkZWxldGVQcm9qZWN0RGF0YSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2Vzc2lvbi5qcydcbmltcG9ydCB7IHVzZXJFbnRyaWVzLCByZXdpbmRTdGF0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgbG9hZFByb2plY3RQcm9tcHRzLCBsb2FkR2xvYmFsUHJvbXB0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvaGlzdG9yeS5qcydcbmltcG9ydCB7IGltcGxpY2l0UmV3aW5kVGFyZ2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS9yZXdpbmQuanMnXG5pbXBvcnQgeyBjaGVja0ZvclVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24sIGlzRGV2SW5zdGFsbCwgcnVuVXBkYXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS91cGRhdGUuanMnXG5pbXBvcnQgeyBTVEVFUl9ST0xFUywgc3RlZXJhYmxlVHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3RlZXIuanMnXG5pbXBvcnQgeyB3cml0ZUNvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgeGFpQ29ubmVjdGVkLCB4YWlVc2FnZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUveGFpLWF1dGguanMnXG5pbXBvcnQgeyBvcGVuYWlTdGF0dXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgRUZGT1JUX0xFVkVMUywgU1BFRURfTEVWRUxTLCBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IGFnZW50VHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQtdHJhbnNjcmlwdC5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgY29tcGxldGlvbkNvbnRleHQsIGFwcGx5Q29tcGxldGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tcGxldGlvbi5qcydcbmltcG9ydCB7IGV4dHJhY3RJbWFnZVBhdGhzLCBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdEZpbGVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9maWxlcy5qcydcbmltcG9ydCB7IGxpc3RXb3JrdHJlZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dvcmt0cmVlcy5qcydcbmltcG9ydCB7IG93bmVyUm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBoaWdobGlnaHRWZXJzaW9uIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBjb250ZXh0QmFyIH0gZnJvbSAnLi9jb250ZXh0LWJhci5qcydcbmltcG9ydCB7IGFjdGl2aXR5Um93cywgYWN0aXZpdHlTdHJpcFNpemVzLCBzdHJpcFdpbmRvd1N0YXJ0IH0gZnJvbSAnLi9hY3Rpdml0eS1zdHJpcC5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IERlbGliZXJhdGlvbkV4Y2hhbmdlLCBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IENvbnZlcnNhdGlvblNlYXJjaEJhciwgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlLCBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2ggfSBmcm9tICcuL2NvbnZlcnNhdGlvbi1zZWFyY2gtdmlldy5qc3gnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMsIHRyYW5zY3JpcHRXaW5kb3cgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuaW1wb3J0IHsgUXVlc3Rpb25Gb3JtIH0gZnJvbSAnLi9xdWVzdGlvbi1mb3JtLmpzeCdcbmltcG9ydCB7IEVtcHR5U3RhdGUgfSBmcm9tICcuL2VtcHR5LXN0YXRlLmpzeCdcbmltcG9ydCB7IEhlbHAgfSBmcm9tICcuL2hlbHAuanN4J1xuaW1wb3J0IHsgTW9kZWxQYW5lbCwgRWZmb3J0UGFuZWwsIFNwZWVkUGFuZWwsIFRoZW1lUGFuZWwsIENvbmZpZ1BhbmVsLCBDb25maXJtUGFuZWwsIEhpc3RvcnlQYW5lbCwgUmV3aW5kUGlja1BhbmVsLCBSZXdpbmRBY3Rpb25QYW5lbCwgUmVzdW1lUGFuZWwsIFByb2plY3RQYW5lbCwgTWNwUGFuZWwsIE1lbW9yeVBhbmVsLCBJbmZvTGlzdFBhbmVsLCBXYWtldXBzUGFuZWwsIENvbm5lY3RQYW5lbCwgdGltZUFnbyB9IGZyb20gJy4vcGFuZWxzLmpzeCdcbmltcG9ydCB7IGFjY2VudCwgc2V0QWNjZW50LCBzZXRQYWxldHRlLCBzZXRUZXJtaW5hbEJhY2tncm91bmQsIGdldFRlcm1pbmFsQmFja2dyb3VuZCwgcGFsZXR0ZU5hbWUsIHBhbGV0dGVMaXN0LCBERUZBVUxUX0FDQ0VOVCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgUkVELCBHUkVFTiwgSElHSExJR0hUIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgQ09NTUFORFMgPSBbXG4gIHsgbmFtZTogJ21vZGVsJywgZGVzYzogJ1N3aXRjaCB0aGUgYWN0aXZlIG1vZGVsIGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3JlZnJlc2gtbW9kZWxzJywgZGVzYzogJ1JlZnJlc2ggYXZhaWxhYmxlIG1vZGVscyBmcm9tIHByb3ZpZGVycycgfSxcbiAgeyBuYW1lOiAnY29ubmVjdCcsIGRlc2M6ICdTaWduIGluIHdpdGggQ2hhdEdQVCBvciBTdXBlckdyb2snIH0sXG4gIHsgbmFtZTogJ2VmZm9ydCcsIGRlc2M6ICdTZXQgdGhlIHRoaW5raW5nIGVmZm9ydCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdzcGVlZCcsIGRlc2M6ICdTcGVlZCcgfSxcbiAgeyBuYW1lOiAncmVzdW1lJywgZGVzYzogJ1BpY2sgdXAgYSBwcmV2aW91cyBzZXNzaW9uIHdoZXJlIHlvdSBsZWZ0IG9mZicgfSxcbiAgeyBuYW1lOiAnbmV3JywgZGVzYzogJ1N0YXJ0IGEgbmV3IHNlc3Npb24gaW4gdGhpcyBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdmb3JrJywgZGVzYzogJ0ZvcmsgY29udmVyc2F0aW9uJyB9LFxuICB7IG5hbWU6ICdkZWxldGUnLCBkZXNjOiAnUGVybWFuZW50bHkgZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb24gYW5kIHN0YXJ0IGZyZXNoJyB9LFxuICB7IG5hbWU6ICdwcm9qZWN0JywgZGVzYzogJ1N3aXRjaCBwcm9qZWN0czoganVtcCB0byBhbm90aGVyIHByb2plY3QsIHNhbWUgYXMgY3RybCtwJyB9LFxuICB7IG5hbWU6ICdjd2QnLCBkZXNjOiAnU2hvdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcHJvamVjdCByb290JyB9LFxuICB7IG5hbWU6ICdza2lsbHMnLCBkZXNjOiAnTGlzdCBldmVyeSBza2lsbDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnY29tbWFuZHMnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdpbml0JywgZGVzYzogJ0NyZWF0ZSBvciBpbXByb3ZlIHJlcG9zaXRvcnkgQUdFTlRTLm1kIGd1aWRhbmNlJyB9LFxuICB7IG5hbWU6ICd0b29scycsIGRlc2M6ICdMaXN0IGJ1aWx0aW4gYW5kIHVzZXItZGVmaW5lZCB0b29sczsgTUNQIHRvb2xzIGxpdmUgaW4gL21jcCcgfSxcbiAgeyBuYW1lOiAncmV3aW5kJywgZGVzYzogJ1Jlc3RvcmUgdGhlIGNvbnZlcnNhdGlvbiB0byBhIHByZXZpb3VzIG1lc3NhZ2UnIH0sXG4gIHsgbmFtZTogJ3N0ZWVyJywgZGVzYzogJ0VkaXQgb3IgYWRkIGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB3aXRob3V0IHNlbmRpbmcnIH0sXG4gIHsgbmFtZTogJ2hpc3RvcnknLCBkZXNjOiAnU2VhcmNoIHByb21wdHMgeW91IHByZXZpb3VzbHkgc2VudCcgfSxcbiAgeyBuYW1lOiAncmVuYW1lJywgZGVzYzogJ05hbWUgdGhpcyBzZXNzaW9uOyBvbWl0IHRoZSBuYW1lIHRvIHJlc3RvcmUgaXRzIGF1dG9tYXRpYyB0aXRsZScgfSxcbiAgeyBuYW1lOiAnY29sb3InLCBkZXNjOiAnQ29sb3IgdGhpcyBzZXNzaW9uOiAvY29sb3IgPG5hbWUgb3IgI2hleD4sIC9jb2xvciBub25lIHRvIGNsZWFyJyB9LFxuICB7IG5hbWU6ICd0aGVtZScsIGRlc2M6ICdQaWNrIGEgY29sb3IgdGhlbWU7IC90aGVtZSA8bmFtZT4gYXBwbGllcyBvbmUgZGlyZWN0bHknIH0sXG4gIHsgbmFtZTogJ2NvbmZpZycsIGRlc2M6ICdDb25maWd1cmUgcGljbyBkaXNwbGF5IGFuZCBiZWhhdmlvcicgfSxcbiAgeyBuYW1lOiAnbWNwJywgZGVzYzogJ01hbmFnZSBNQ1Agc2VydmVyczogYWRkLCB0b2dnbGUsIHJlY29ubmVjdCcgfSxcbiAgeyBuYW1lOiAncGFyYWxsZWwnLCBkZXNjOiAnUnVuIGEgdGFzayB3aXRoIHBhcmFsbGVsIGFnZW50czogL3BhcmFsbGVsIDx0YXNrPicgfSxcbiAgeyBuYW1lOiAnZGVsaWJlcmF0ZScsIGRlc2M6ICdEZWxpYmVyYXRlIG9uIGEgZGVjaXNpb246IC9kZWxpYmVyYXRlIDxkZWNpc2lvbj4nIH0sXG4gIHsgbmFtZTogJ3dha2V1cHMnLCBkZXNjOiAnVmlldyBhbmQgY2FuY2VsIHNjaGVkdWxlZCB3YWtlLXVwcycgfSxcbiAgeyBuYW1lOiAnbWVtb3J5JywgZGVzYzogJ0Jyb3dzZSBhbmQgbWFuYWdlIHNhdmVkIG1lbW9yaWVzOiBwcm9qZWN0IGFuZCBnbG9iYWwnIH0sXG4gIHsgbmFtZTogJ2NvbXBhY3QnLCBkZXNjOiAnU3VtbWFyaXplIHRoZSBjb252ZXJzYXRpb24gdG8gZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2NsZWFyJywgZGVzYzogJ0NsZWFyIHRoZSBjb252ZXJzYXRpb24gYW5kIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjb3N0JywgZGVzYzogJ1Nob3cgdG9rZW4gdXNhZ2UgYW5kIGVzdGltYXRlZCBjb3N0IHNvIGZhcicgfSxcbiAgeyBuYW1lOiAnY29udGV4dCcsIGRlc2M6IFwiU2hvdyB3aGF0J3MgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBhbmQgaG93IGJpZyBlYWNoIHBpZWNlIGlzXCIgfSxcbiAgeyBuYW1lOiAnZXhwb3J0JywgZGVzYzogJ1NhdmUgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIHRvIGEgbWFya2Rvd24gZmlsZScgfSxcbiAgeyBuYW1lOiAndXBkYXRlJywgZGVzYzogJ1VwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbScgfSxcbiAgeyBuYW1lOiAnaGVscCcsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQgYW5kIHdoYXQgaXQgZG9lcycgfSxcbl1cblxuY29uc3QgSElTVE9SWV9TQ09QRVMgPSBbJ3Nlc3Npb24nLCAncHJvamVjdCcsICdldmVyeXdoZXJlJ11cbmNvbnN0IE1FTU9SWV9TQ09QRVMgPSBbJ2FsbCcsICdwcm9qZWN0JywgJ2dsb2JhbCddXG5cblxuZnVuY3Rpb24gYWdlbnRFbGFwc2VkKGFnZW50LCBub3cgPSBEYXRlLm5vdygpKSB7XG4gIGlmICghYWdlbnQuc3RhcnRlZEF0KSByZXR1cm4gJ3dhaXRpbmcnXG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCgoYWdlbnQuZW5kZWRBdCB8fCBub3cpIC0gYWdlbnQuc3RhcnRlZEF0KSAvIDEwMDApKVxuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApXG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApXG4gIGlmIChob3VycykgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzICUgNjB9bWBcbiAgaWYgKG1pbnV0ZXMpIHJldHVybiBgJHttaW51dGVzfW0gJHtzZWNvbmRzICUgNjB9c2BcbiAgcmV0dXJuIGAke3NlY29uZHN9c2Bcbn1cblxuZnVuY3Rpb24gYWdlbnRTdGF0dXMoYWdlbnQpIHtcbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4geyBpY29uOiAnJywgbGFiZWw6ICcnLCBjb2xvcjogYWNjZW50KCkgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncXVldWVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDQycsIGxhYmVsOiAncXVldWVkJywgY29sb3I6IE1VVEVEIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0YnLCBsYWJlbDogJycsIGNvbG9yOiBHUkVFTiB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4geyBpY29uOiAnXHUwMEQ3JywgbGFiZWw6ICdmYWlsZWQnLCBjb2xvcjogUkVEIH1cbiAgcmV0dXJuIHsgaWNvbjogJ1x1MjVBMCcsIGxhYmVsOiAnY2FuY2VsbGVkJywgY29sb3I6IE1VVEVEIH1cbn1cblxuZnVuY3Rpb24gU3RlZXJNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2VsZWN0ZWQsIGZvY3VzIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgZm9jdXMuaXRlbShpdGVtLm1lc3NhZ2VJZCwgbGF5b3V0KVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gc2hvd0xvY2tlZCAvPlxufVxuXG5mdW5jdGlvbiBEaWN0YXRpb25LZXlzKHsgaW5wdXQgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoaW5wdXQuaGFuZGxlKGV2ZW50KSkgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gTW91c2VGb2N1c1JlZ2lvbih7IGNoaWxkcmVuLCBvblByZXNzLCAuLi5wcm9wcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0JyAmJiBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpKSBvblByZXNzKClcbiAgfSlcbiAgcmV0dXJuIDxib3ggey4uLnByb3BzfT57Y2hpbGRyZW59PC9ib3g+XG59XG5cbmZ1bmN0aW9uIENvbXBvc2VyQWN0aW9uKHsgaWNvbiwgYWN0aXZlSWNvbiwgYWN0aXZlID0gZmFsc2UsIG9uUHJlc3MsIG9uSG92ZXIgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW5zaWRlID0gaGl0VGVzdChldmVudC54LCBldmVudC55KVxuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdtb3ZlJyAmJiBpbnNpZGUgIT09IGhvdmVyZWQoKSkge1xuICAgICAgc2V0SG92ZXJlZChpbnNpZGUpXG4gICAgICBvbkhvdmVyPy4oaW5zaWRlKVxuICAgIH1cbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgaGlnaGxpZ2h0ZWQgPSBob3ZlcmVkKCkgfHwgYWN0aXZlXG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBiZzogaGlnaGxpZ2h0ZWQgPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCwgY29sb3I6IGhpZ2hsaWdodGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICR7aGlnaGxpZ2h0ZWQgPyBhY3RpdmVJY29uIDogaWNvbn0gYH08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIEFnZW50U3RyaXBSb3coeyBzZWxlY3RlZCwgZm9jdXNlZCwgY2hpbGRyZW4sIG9uUHJlc3MgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW5zaWRlID0gaGl0VGVzdChldmVudC54LCBldmVudC55KVxuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdtb3ZlJykgc2V0SG92ZXJlZChpbnNpZGUpXG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGZvY3VzZWQgPyBhY2NlbnQoKSA6IG51bGwsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IGhvdmVyZWQoKSA/IEZHX1NPRlQgOiBNVVRFRCB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogc2VsZWN0ZWQgfX0+e3NlbGVjdGVkID8gJ1x1Mjc2RiAnIDogJyAgJ308L3RleHQ+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9ib3g+XG4gIClcbn1cblxuLy8gb25seSB0aGUgbmV3ZXN0IHNsaWNlIG9mIGEgbG9uZyB0cmFuc2NyaXB0IHJlbmRlcnM7IG9sZGVyIGl0ZW1zIGxvYWQgaW5cbi8vIGJhdGNoZXMgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRvIHRoZSB0b3AuIHJlbmRlciBjb3N0IGlzIHBlci1pdGVtLCBzbyB0aGlzXG4vLyBrZWVwcyBkYXktbG9uZyBzZXNzaW9ucyBhcyBmYXN0IGFzIGZyZXNoIG9uZXNcbmNvbnN0IEhJU1RPUllfV0lORE9XID0gNTBcblxuZnVuY3Rpb24gY29sbGFwc2VTdGVlclRvb2xzKGl0ZW1zKSB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IFtdXG4gIGxldCBoaWRkZW4gPSAwXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmICghaGlkZGVuKSByZXR1cm5cbiAgICBjb2xsYXBzZWQucHVzaCh7IGtpbmQ6ICdzdGVlci10b29scycsIGNvdW50OiBoaWRkZW4gfSlcbiAgICBoaWRkZW4gPSAwXG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgaGlkZGVuICs9IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnID8gaXRlbS5pdGVtcy5sZW5ndGggOiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoKClcbiAgICAgIGNvbGxhcHNlZC5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG4gIGZsdXNoKClcbiAgcmV0dXJuIGNvbGxhcHNlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXBwKHsgYm9vdCwgY29udHJvbGxlcjogY3RsIH0pIHtcbiAgY29uc3QgeyBjd2QsIHJvb3QsIHZlcnNpb24sIHNraWxscywgbWNwIH0gPSBib290XG4gIGNvbnN0IHN0YXRlID0gY3RsLnN0YXRlXG4gIGNvbnN0IFt3b3Jrc3BhY2VPcGVuLCBzZXRXb3Jrc3BhY2VPcGVuXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3dvcmtzcGFjZVJvd3MsIHNldFdvcmtzcGFjZVJvd3NdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbd29ya3NwYWNlU2VsZWN0ZWQsIHNldFdvcmtzcGFjZVNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbd29ya3NwYWNlTG9hZGluZywgc2V0V29ya3NwYWNlTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VFcnJvciwgc2V0V29ya3NwYWNlRXJyb3JdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbd29ya3NwYWNlSGVpZ2h0LCBzZXRXb3Jrc3BhY2VIZWlnaHRdID0gY3JlYXRlU2lnbmFsKDIwKVxuICBjb25zdCBbd29ya3NwYWNlUGVuZGluZywgc2V0V29ya3NwYWNlUGVuZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IHdvcmtzcGFjZUdyb3Vwc05vdyA9IHdvcmtzcGFjZUdyb3Vwcyh3b3Jrc3BhY2VSb3dzKCkpXG4gIGNvbnN0IHdvcmtzcGFjZVNlc3Npb25zID0gd29ya3NwYWNlR3JvdXBzTm93LmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5zZXNzaW9ucylcbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFdvcmtzcGFjZSgpIHtcbiAgICBpZiAoIWJvb3Qud29ya3NwYWNlIHx8IGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nKSByZXR1cm5cbiAgICBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZyA9IHRydWVcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IGJvb3Qud29ya3NwYWNlLmxpc3QoKVxuICAgICAgY29uc3QgbmV4dCA9IHdvcmtzcGFjZUdyb3Vwcyhyb3dzKS5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHdvcmtzcGFjZVNlbGVjdGlvbihuZXh0LCB3b3Jrc3BhY2VTZWxlY3RlZCgpLCB3b3Jrc3BhY2VTZXNzaW9ucylcbiAgICAgIHNldFdvcmtzcGFjZVNlbGVjdGVkKHNlbGVjdGVkKVxuICAgICAgc2V0V29ya3NwYWNlUm93cyhyb3dzKVxuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoJycpXG4gICAgICBpZiAod29ya3NwYWNlT3BlbigpKSBhd2FpdCBib290LndvcmtzcGFjZS5wcmV2aWV3KHNlbGVjdGVkKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgc2Vzc2lvbnMgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSBmYWxzZVxuICAgICAgc2V0V29ya3NwYWNlTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cbiAgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UgPSByZWZyZXNoV29ya3NwYWNlXG4gIHVzZUludGVydmFsKCgpID0+IHsgaWYgKHdvcmtzcGFjZU9wZW4oKSkgdm9pZCBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSgpIH0sIDEwMDApXG4gIGlmIChib290LndvcmtzcGFjZSAmJiAhYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQpIHtcbiAgICBib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCA9IHRydWVcbiAgICBjb25zdCBjbGVhbnVwID0gYm9vdC53b3Jrc3BhY2Uuc3Vic2NyaWJlPy4oKCkgPT4gdm9pZCBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSgpKVxuICAgIG9uQ2xlYW51cCgoKSA9PiB7IGNsZWFudXA/LigpOyBib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCA9IGZhbHNlIH0pXG4gIH1cbiAgY29uc3QgW21vZGVscywgc2V0TW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChib290Lm1vZGVscylcbiAgY29uc3QgW3JlZnJlc2hpbmdNb2RlbHMsIHNldFJlZnJlc2hpbmdNb2RlbHNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuXG4gIGNvbnN0IFtkZXJpdmVkLCBzZXREZXJpdmVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZXJpdmVkKVxuICBjb25zdCBbdGVybWluYWxXaWR0aCwgc2V0VGVybWluYWxXaWR0aF0gPSBjcmVhdGVTaWduYWwocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MClcbiAgY29uc3QgW3Rlcm1pbmFsSGVpZ2h0LCBzZXRUZXJtaW5hbEhlaWdodF0gPSBjcmVhdGVTaWduYWwocHJvY2Vzcy5zdGRvdXQucm93cyB8fCAyNClcbiAgdXNlUmVzaXplKCh7IHdpZHRoLCBoZWlnaHQgfSkgPT4geyBzZXRUZXJtaW5hbFdpZHRoKHdpZHRoKTsgc2V0VGVybWluYWxIZWlnaHQoaGVpZ2h0KSB9KVxuICBjb25zdCBbb3ZlcmxheSwgc2V0T3ZlcmxheV0gPSBjcmVhdGVTaWduYWwoc3RhdGUub3ZlcmxheSlcbiAgY29uc3QgW3N0cmVhbWluZywgc2V0U3RyZWFtaW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdHJlYW1pbmcpXG4gIGNvbnN0IFtsaXZlVXNhZ2UsIHNldExpdmVVc2FnZV0gPSBjcmVhdGVTaWduYWwoc3RhdGUubGl2ZVVzYWdlKVxuICBjb25zdCBbdHVyblBoYXNlLCBzZXRUdXJuUGhhc2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnR1cm5QaGFzZSlcbiAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gY3JlYXRlU2lnbmFsKHN0YXRlLmJ1c3kpXG4gIGNvbnN0IFtjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5jb21wYWN0aW5nKVxuICBjb25zdCBbY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1c10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgY29uc3QgW3N0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdGFydGVkQXQpXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGNvbXBvc2VyRmlsZXMgPSBib290LnJlZnMuY29tcG9zZXJGaWxlcyA/Pz0gY3JlYXRlQ29tcG9zZXJGaWxlcygpXG4gIGNvbnN0IFtpbnB1dEN1cnNvciwgc2V0SW5wdXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjb21tYW5kRm9ybSwgc2V0Q29tbWFuZEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IHNldElucHV0ID0gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgIGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID0gKGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID8/IDApICsgMVxuICAgIGNvbnN0IHZhbHVlID0gY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZSlcbiAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IgPz8gdmFsdWUubGVuZ3RoKVxuICB9XG4gIGNvbnN0IFtkaWN0YXRpb25TdGF0dXMsIHNldERpY3RhdGlvblN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbZGljdGF0aW9uTGV2ZWxzLCBzZXREaWN0YXRpb25MZXZlbHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbY2FwdHVyZVN0YXR1cywgc2V0Q2FwdHVyZVN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbY29tcG9zZXJBY3Rpb25MYWJlbCwgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbF0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLm1vZGVsKVxuICBjb25zdCBbZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgY29uc3QgW2VmZm9ydCwgc2V0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5lZmZvcnQpXG4gIGNvbnN0IFtkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICBjb25zdCBbc3BlZWQsIHNldFNwZWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zcGVlZClcbiAgY29uc3QgW3NwZWVkRGVmYXVsdHMsIHNldFNwZWVkRGVmYXVsdHNdID0gY3JlYXRlU2lnbmFsKHsgLi4uc3RhdGUuc3BlZWREZWZhdWx0cyB9KVxuICBjb25zdCBbc2hvd1NwZWVkUGFuZWwsIHNldFNob3dTcGVlZFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dFZmZvcnRQYW5lbCwgc2V0U2hvd0VmZm9ydFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dUaGVtZVBhbmVsLCBzZXRTaG93VGhlbWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29uZmlnUGFuZWwsIHNldFNob3dDb25maWdQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlQ29uZmlybSwgc2V0U2hvd0RlbGV0ZUNvbmZpcm1dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY2xvdWRzLCBzZXRDbG91ZHNdID0gY3JlYXRlU2lnbmFsKGJvb3QuY2xvdWRzKVxuICBjb25zdCBbY29tcGFjdFRvb2xIaXN0b3J5LCBzZXRDb21wYWN0VG9vbEhpc3RvcnldID0gY3JlYXRlU2lnbmFsKGJvb3QuY29tcGFjdFRvb2xIaXN0b3J5KVxuICBjb25zdCBbZ2l0Rm9vdGVyLCBzZXRHaXRGb290ZXJdID0gY3JlYXRlU2lnbmFsKGJvb3QuZ2l0Rm9vdGVyKVxuICBjb25zdCBbd2lkZVNpZGViYXIsIHNldFdpZGVTaWRlYmFyXSA9IGNyZWF0ZVNpZ25hbChib290LndpZGVTaWRlYmFyKVxuICBjb25zdCBbcmVzZWFyY2hBZ2VudExpbWl0LCBzZXRSZXNlYXJjaEFnZW50TGltaXRdID0gY3JlYXRlU2lnbmFsKGJvb3QucmVzZWFyY2hBZ2VudExpbWl0KVxuICBjb25zdCBbcXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXN0aW9uKVxuICBjb25zdCBbc2hvd01lbW9yeVBhbmVsLCBzZXRTaG93TWVtb3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWVtU2NvcGUsIHNldE1lbVNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbbWVtb3J5TGlzdCwgc2V0TWVtb3J5TGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFt0aGVtZVByZWYsIHNldFRoZW1lUHJlZl0gPSBjcmVhdGVTaWduYWwoYm9vdC50aGVtZVByZWYgfHwgJ2F1dG8nKVxuICBjb25zdCBbZGV0ZWN0ZWRUaGVtZSwgc2V0RGV0ZWN0ZWRUaGVtZV0gPSBjcmVhdGVTaWduYWwoYm9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJylcbiAgY29uc3QgW3F1ZXVlZCwgc2V0UXVldWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWV1ZWQpXG4gIGNvbnN0IFtleHBlZGl0ZWQsIHNldEV4cGVkaXRlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZXhwZWRpdGVkKVxuICBjb25zdCBbc2VudCwgc2V0U2VudF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc2VudClcbiAgY29uc3QgW2hpc3RJZHgsIHNldEhpc3RJZHhdID0gY3JlYXRlU2lnbmFsKC0xKVxuICBjb25zdCBbY21kSW5kZXgsIHNldENtZEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY21kQ3ljbGUsIHNldENtZEN5Y2xlXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbZmlsZUluZGV4LCBzZXRGaWxlSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmaWxlTGlzdCwgc2V0RmlsZUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbZmlsZXNEaXNtaXNzZWQsIHNldEZpbGVzRGlzbWlzc2VkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXdTaWduYWxdID0gY3JlYXRlU2lnbmFsKCdjaGF0JylcbiAgY29uc3QgW3ZlcmJvc2VdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGVsUGFuZWwsIHNldFNob3dNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwsIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzZWFyY2hNb2RlbFJldHVybiwgc2V0UmVzZWFyY2hNb2RlbFJldHVybl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsLCBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RpbmdTaGVsbE1vZGVsLCBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3BhcnRpY2lwYW50TW9kZWxUYXJnZXQsIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nUmVzZWFyY2gsIHNldFBlbmRpbmdSZXNlYXJjaF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdEZWxpYmVyYXRpb24sIHNldFBlbmRpbmdEZWxpYmVyYXRpb25dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIGNvbnN0IFt2aWV3ZWRBZ2VudElkLCBzZXRWaWV3ZWRBZ2VudElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRXaW5kb3dPZmZzZXQsIHNldEFnZW50V2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd0hpc3RvcnlQYW5lbCwgc2V0U2hvd0hpc3RvcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtoaXN0U2NvcGUsIHNldEhpc3RTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2hpc3RQcm9tcHRzLCBzZXRIaXN0UHJvbXB0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaG93UmVzdW1lUGFuZWwsIHNldFNob3dSZXN1bWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXN1bWVTY29wZXMsIHNldFJlc3VtZVNjb3Blc10gPSBjcmVhdGVTaWduYWwoWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXSlcbiAgY29uc3QgW3Jlc3VtZVNjb3BlLCBzZXRSZXN1bWVTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jlc3VtZVNlc3Npb25zLCBzZXRSZXN1bWVTZXNzaW9uc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtyZXN1bWVMb2FkaW5nLCBzZXRSZXN1bWVMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNY3BQYW5lbCwgc2V0U2hvd01jcFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dQcm9qZWN0UGFuZWwsIHNldFNob3dQcm9qZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5mb1BhbmVsLCBzZXRJbmZvUGFuZWxdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt2aWV3ZWRTaGVsbElkLCBzZXRWaWV3ZWRTaGVsbElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2hlbGxXaW5kb3dPZmZzZXQsIHNldFNoZWxsV2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd1dha2V1cHNQYW5lbCwgc2V0U2hvd1dha2V1cHNQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29ubmVjdFBhbmVsLCBzZXRTaG93Q29ubmVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2F1dGhQcm92aWRlcnMsIHNldEF1dGhQcm92aWRlcnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hlbGxzVmVyc2lvbiwgc2V0U2hlbGxzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2dpdFZlcnNpb24sIHNldEdpdFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcHJvamVjdHNMb2FkaW5nLCBzZXRQcm9qZWN0c0xvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWNwU2VydmVycywgc2V0TWNwU2VydmVyc10gPSBjcmVhdGVTaWduYWwobWNwLmxpc3QoKSlcbiAgY29uc3QgW2NvbXBsZXRpbmcsIHNldENvbXBsZXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29tcEluZGV4LCBzZXRDb21wSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXdpbmRTdGVwLCBzZXRSZXdpbmRTdGVwXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcmV3aW5kVGFyZ2V0LCBzZXRSZXdpbmRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBbaGlzdFdpbmRvdywgc2V0SGlzdFdpbmRvd10gPSBjcmVhdGVTaWduYWwoSElTVE9SWV9XSU5ET1cpXG4gIGNvbnN0IFt0cmFuc2NyaXB0TWV0cmljcywgc2V0VHJhbnNjcmlwdE1ldHJpY3NdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlciwgc2V0U3RlZXJdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlclRleHQsIHNldFN0ZWVyVGV4dF0gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgY29uc3QgcmVmcyA9IGJvb3QucmVmc1xuICByZWZzLnF1aXRBdCA/Pz0gMFxuICByZWZzLnJlc3VtZU9wZW4gPz89IDBcblxuICBmdW5jdGlvbiBzZXRWaWV3KG5leHQpIHtcbiAgICBzZXRWaWV3U2lnbmFsKG5leHQpXG4gICAgY3RsLmhvbGQobmV4dCAhPT0gJ2NoYXQnKVxuICB9XG5cbiAgLy8gdGhlIGNvbnRyb2xsZXIgb3ducyBldmVyeSBwaWVjZSBvZiBjb252ZXJzYXRpb24gc3RhdGU7IHRoZXNlIHNpZ25hbHNcbiAgLy8gbWlycm9yIGl0IHNvIHRoZSByZW5kZXIgdHJlZSBiZWxvdyBzdGF5cyByZWFjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhhdFxuICBjb25zdCBtaXJyb3IgPSAoZ2V0LCBzZXQsIHZhbHVlKSA9PiB7XG4gICAgaWYgKGdldCgpICE9PSB2YWx1ZSkgc2V0KHZhbHVlKVxuICB9XG4gIGNvbnN0IFtwZWVyU3RhdHVzLCBzZXRQZWVyU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgLy8gdGhlIG5hbWUgcGVlcnMgcmVhY2ggdGhpcyBzZXNzaW9uIGJ5OiB0aGUgdXNlcidzLCBvciB0aGUgYXV0b21hdGljIG9uZVxuICBjb25zdCBbc2Vzc2lvbk5hbWUsIHNldFNlc3Npb25OYW1lXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuXG4gIGZ1bmN0aW9uIHN5bmNGcm9tQ29udHJvbGxlcigpIHtcbiAgICBzZXRTZXNzaW9uTmFtZShzdGF0ZS5kZXJpdmVkLnRpdGxlIHx8IHN0YXRlLnBlZXJDb25uZWN0aW9uPy5uYW1lIHx8IG51bGwpXG4gICAgc2V0UGVlclN0YXR1cyhzdGF0ZS5wZWVyRXJyb3IgPyBgcGVlciBkaXNjb25uZWN0ZWQ6ICR7c3RhdGUucGVlckVycm9yfWAgOiBzdGF0ZS5wZWVyUGF1c2VkICYmIHN0YXRlLnBlZXJDb25uZWN0aW9uID8gJ3BlZXIgcmVzcG9uc2VzIHBhdXNlZCcgOiAnJylcbiAgICBtaXJyb3IoZGVyaXZlZCwgc2V0RGVyaXZlZCwgc3RhdGUuZGVyaXZlZClcbiAgICBtaXJyb3Iob3ZlcmxheSwgc2V0T3ZlcmxheSwgc3RhdGUub3ZlcmxheSlcbiAgICBtaXJyb3Ioc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmcsIHN0YXRlLnN0cmVhbWluZylcbiAgICBtaXJyb3IobGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2UsIHN0YXRlLmxpdmVVc2FnZSlcbiAgICBtaXJyb3IodHVyblBoYXNlLCBzZXRUdXJuUGhhc2UsIHN0YXRlLnR1cm5QaGFzZSlcbiAgICBtaXJyb3IoYnVzeSwgc2V0QnVzeSwgc3RhdGUuYnVzeSlcbiAgICBtaXJyb3IoY29tcGFjdGluZywgc2V0Q29tcGFjdGluZywgc3RhdGUuY29tcGFjdGluZylcbiAgICBtaXJyb3IoY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1cywgc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgICBtaXJyb3Ioc3RhcnRlZEF0LCBzZXRTdGFydGVkQXQsIHN0YXRlLnN0YXJ0ZWRBdClcbiAgICBtaXJyb3IobW9kZWwsIHNldE1vZGVsLCBzdGF0ZS5tb2RlbClcbiAgICBtaXJyb3IoZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWwsIHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgICBtaXJyb3Ioc3BlZWQsIHNldFNwZWVkLCBzdGF0ZS5zcGVlZClcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc3BlZWREZWZhdWx0cygpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGUuc3BlZWREZWZhdWx0cykpIHNldFNwZWVkRGVmYXVsdHMoeyAuLi5zdGF0ZS5zcGVlZERlZmF1bHRzIH0pXG4gICAgbWlycm9yKGVmZm9ydCwgc2V0RWZmb3J0LCBzdGF0ZS5lZmZvcnQpXG4gICAgbWlycm9yKGRlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnQsIHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gICAgbWlycm9yKHF1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0LCBzdGF0ZS5xdWVzdGlvbilcbiAgICBtaXJyb3IocXVldWVkLCBzZXRRdWV1ZWQsIHN0YXRlLnF1ZXVlZClcbiAgICBtaXJyb3IoZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWQsIHN0YXRlLmV4cGVkaXRlZClcbiAgICBtaXJyb3Ioc2VudCwgc2V0U2VudCwgc3RhdGUuc2VudClcbiAgICBtaXJyb3IoYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbiwgc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICB9XG5cbiAgLy8gdHJlbmQgcmUtcnVucyB0aGlzIGNvbXBvbmVudCBvbiBldmVyeSBzaWduYWwgY2hhbmdlLCBzbyB0aGUgY29udHJvbGxlclxuICAvLyBpcyBzdWJzY3JpYmVkIG9uY2UgYW5kIGVhY2ggaGFuZGxlciByZWFjaGVzIHRoZSBuZXdlc3QgcmVuZGVyIHRocm91Z2hcbiAgLy8gcmVmcy51aSwgd2hpY2ggaXMgcmVwbGFjZWQgYmVsb3cgb24gZXZlcnkgcGFzc1xuICByZWZzLnVpID0ge1xuICAgIHN5bmM6IHN5bmNGcm9tQ29udHJvbGxlcixcbiAgICBmbGFzaDogKG1lc3NhZ2UpID0+IGZsYXNoKG1lc3NhZ2UpLFxuICAgIGRlcml2ZWQ6IChuZXh0KSA9PiB7XG4gICAgICBzZXRBY2NlbnQobmV4dC5jb2xvcilcbiAgICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogbmV4dC5jb2xvciB8fCBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH0pXG4gICAgfSxcbiAgICBxdWVzdGlvbjogKCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gICAgfSxcbiAgICB0dXJuOiAoKSA9PiB7XG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfSxcbiAgICBpbnB1dDogKHRleHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRJbnB1dCh0ZXh0KVxuICAgIH0sXG4gICAgc2Vzc2lvbjogKCkgPT4ge1xuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH0sXG4gICAgcmVzdW1lZDogKG1ldGEpID0+IGZsYXNoKGByZXN1bWVkICAke21ldGEudHVybnN9ICR7bWV0YS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28obWV0YS5hdCl9YCksXG4gICAgcHJvamVjdDogKG5leHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFx4MWJdMDtwaWNvICAke25leHQucm9vdC5zcGxpdCgnLycpLnBvcCgpfVxceDA3YClcbiAgICAgIHNldE1jcFNlcnZlcnMobmV4dC5tY3AubGlzdCgpKVxuICAgICAgc2V0RmlsZUxpc3QoW10pXG4gICAgfSxcbiAgICBtY3A6IChzZXJ2ZXJzKSA9PiBzZXRNY3BTZXJ2ZXJzKHNlcnZlcnMpLFxuICAgIHNoZWxsczogKCkgPT4gc2V0U2hlbGxzVmVyc2lvbigodikgPT4gdiArIDEpLFxuICAgIGdpdDogKCkgPT4gc2V0R2l0VmVyc2lvbigodikgPT4gdiArIDEpLFxuICB9XG4gIGlmICghcmVmcy5zdWJzY3JpYmVkKSB7XG4gICAgcmVmcy5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIGN0bC5vbignY2hhbmdlJywgKCkgPT4gcmVmcy51aS5zeW5jKCkpXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIFsnZmxhc2gnLCAnZGVyaXZlZCcsICdxdWVzdGlvbicsICd0dXJuJywgJ2lucHV0JywgJ3Nlc3Npb24nLCAncmVzdW1lZCcsICdwcm9qZWN0JywgJ21jcCcsICdzaGVsbHMnLCAnZ2l0J10pIHtcbiAgICAgIGN0bC5vbih0eXBlLCAocGF5bG9hZCkgPT4gcmVmcy51aVt0eXBlXShwYXlsb2FkKSlcbiAgICB9XG4gIH1cbiAgc3luY0Zyb21Db250cm9sbGVyKClcblxuICBjb25zdCBza2lsbENvbW1hbmRzID0gc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogYHNraWxsICAke3MuZGVzY3JpcHRpb24gfHwgcy5zb3VyY2V9YCwgc2tpbGw6IHRydWUgfSkpXG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IGJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoYykgPT4gKHsgbmFtZTogYy5uYW1lLCBkZXNjOiBgY29tbWFuZCAgJHtjLmRlc2NyaXB0aW9uIHx8IGMuc291cmNlfWAsIGNvbW1hbmQ6IHRydWUgfSkpXG4gIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAoKVxuICBjb25zdCBzaGFkb3dlZCA9IFtdXG4gIGZvciAoY29uc3QgYyBvZiBbLi4uQ09NTUFORFMsIC4uLnNraWxsQ29tbWFuZHMsIC4uLnVzZXJDb21tYW5kc10pIHtcbiAgICBpZiAoYnlOYW1lLmhhcyhjLm5hbWUpKSBzaGFkb3dlZC5wdXNoKGAke2Muc2tpbGwgPyAnc2tpbGwnIDogJ2NvbW1hbmQnfSBcIiR7Yy5uYW1lfVwiYClcbiAgICBlbHNlIGJ5TmFtZS5zZXQoYy5uYW1lLCBjKVxuICB9XG4gIGNvbnN0IGFsbENvbW1hbmRzID0gWy4uLmJ5TmFtZS52YWx1ZXMoKV1cbiAgaWYgKHNoYWRvd2VkLmxlbmd0aCAmJiAhcmVmcy53YXJuZWRTaGFkb3dlZCkge1xuICAgIHJlZnMud2FybmVkU2hhZG93ZWQgPSB0cnVlXG4gICAgc2V0VGltZW91dCgoKSA9PiBmbGFzaChgc2hhZG93ZWQgYnkgYW4gZWFybGllciBuYW1lLCByZW5hbWUgdG8gdXNlOiAke3NoYWRvd2VkLmpvaW4oJywgJyl9YCksIDApXG4gIH1cblxuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogMzUwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1yaWdodCcsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gPHRleHQgc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke21lc3NhZ2V9IGB9PC90ZXh0PixcbiAgfSlcblxuICBjb25zdCB1cGRhdGVUb2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogODAwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IChcbiAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpIH19PlxuICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfT57YCAke21lc3NhZ2V9IGB9PC9TaGltbWVyPlxuICAgICAgPC9ib3g+XG4gICAgKSxcbiAgfSlcblxuICBmdW5jdGlvbiBmbGFzaChtc2cpIHtcbiAgICB0b2FzdChtc2cpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTW9kZWxzKCkge1xuICAgIGlmIChyZWZyZXNoaW5nTW9kZWxzKCkpIHJldHVyblxuICAgIHNldFJlZnJlc2hpbmdNb2RlbHModHJ1ZSlcbiAgICBmbGFzaCgncmVmcmVzaGluZyBtb2RlbHMnKVxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCBib290LnJlZnJlc2hNb2RlbHMoKVxuICAgICAgYm9vdC5tb2RlbHMgPSByZWZyZXNoZWRcbiAgICAgIHNldE1vZGVscyhyZWZyZXNoZWQpXG4gICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQpXG4gICAgICBmbGFzaChgbW9kZWxzIHJlZnJlc2hlZCAgJHtyZWZyZXNoZWQubGVuZ3RofSBtb2RlbHMgICR7ZWxhcHNlZH1tc2ApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbW9kZWwgcmVmcmVzaCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJlZnMucGFzdGVJbWFnZSA/Pz0gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoe1xuICAgIHJlYWRJbWFnZTogcmVhZENsaXBib2FyZEltYWdlLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gIH0pXG4gIHJlZnMuY2FwdHVyZUltYWdlID8/PSBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoe1xuICAgIGNhcHR1cmVSZWdpb24sXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgICBvblN0YXR1czogc2V0Q2FwdHVyZVN0YXR1cyxcbiAgfSlcblxuICBpZiAoIXJlZnMuZGljdGF0aW9uKSB7XG4gICAgcmVmcy5kaWN0YXRpb24gPSBjcmVhdGVEaWN0YXRpb24oe1xuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0RGljdGF0aW9uU3RhdHVzKHN0YXR1cylcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHNldERpY3RhdGlvbkxldmVscyhbXSlcbiAgICAgIH0sXG4gICAgICBvbkxldmVsOiAobGV2ZWwpID0+IHNldERpY3RhdGlvbkxldmVscyhhcHBlbmRMZXZlbChkaWN0YXRpb25MZXZlbHMoKSwgbGV2ZWwpKSxcbiAgICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKGBkaWN0YXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCksXG4gICAgfSlcbiAgICByZWZzLmRpY3RhdGlvbklucHV0ID0gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb246IHJlZnMuZGljdGF0aW9uLCBnZXRJbnB1dDogaW5wdXQsIHNldElucHV0IH0pXG4gICAgY29uc3QgcHJlbG9hZCA9IHNldEltbWVkaWF0ZSgoKSA9PiByZWZzLmRpY3RhdGlvbi5wcmVsb2FkKCkpXG4gICAgcHJlbG9hZC51bnJlZigpXG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgY2xlYXJJbW1lZGlhdGUocHJlbG9hZClcbiAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBbc2lnbmFsLCBjb2RlXSBvZiBbWydTSUdURVJNJywgMTQzXSwgWydTSUdIVVAnLCAxMjldXSkge1xuICAgICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcmVmcy51cGRhdGVDaGVja2VkKSB7XG4gICAgcmVmcy51cGRhdGVDaGVja2VkID0gdHJ1ZVxuICAgIGNoZWNrRm9yVXBkYXRlKHZlcnNpb24pLnRoZW4oKGZvdW5kKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kKSByZXR1cm5cbiAgICAgIHVwZGF0ZVRvYXN0KGBwaWNvIHYke2ZvdW5kLnZlcnNpb259IGF2YWlsYWJsZSAgL3VwZGF0ZWApXG4gICAgICBmb3VuZC5tYXJrTm90aWZpZWQoKVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgY29uc3QgcGVyZm9ybUNvbXBhY3Rpb24gPSBjdGwuY29tcGFjdFxuXG4gIGZ1bmN0aW9uIGNvbXBsZXRpb25Tb3VyY2UobmFtZSkge1xuICAgIGlmIChuYW1lID09PSAnc3BlZWQnKSByZXR1cm4gU1BFRURfTEVWRUxTLm1hcCgobCkgPT4gbC5rZXkpXG4gICAgaWYgKG5hbWUgPT09ICdjb2xvcicpIHJldHVybiBPYmplY3Qua2V5cyhTRVNTSU9OX0NPTE9SUylcbiAgICBpZiAobmFtZSA9PT0gJ3RoZW1lJykgcmV0dXJuIFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgaWYgKG5hbWUgPT09ICdlZmZvcnQnKSByZXR1cm4gWydkZWZhdWx0JywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgIGlmIChuYW1lID09PSAnbW9kZWwnKSByZXR1cm4gbW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpLm1hcCgobSkgPT4gbS5uYW1lKVxuICAgIGNvbnN0IGNtZCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoY21kPy5za2lsbCB8fCBjbWQ/LmNvbW1hbmQpIHJldHVybiBmaWxlTGlzdCgpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NDb21wbGV0aW9uKCkge1xuICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgc2V0Q29tcEluZGV4KDApXG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHRDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkge1xuICAgIHNldElucHV0KGFwcGx5Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpKVxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbmQodGV4dCkge1xuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgfHwgdmlld2VkU2hlbGxJZCgpKSByZXR1cm5cbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KC9cXHMrLylcbiAgICAgIGNvbnN0IG1hdGNoID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKG1hdGNoLCB7IHN0YXJ0OiB0ZXh0LmluZGV4T2YoJy8nKSwgZW5kOiB0ZXh0Lmxlbmd0aCB9LCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgc2V0SW5wdXQoJycpXG4gICAgICAgIHJ1bkNvbW1hbmQobWF0Y2gsIHJlc3Quam9pbignICcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SGlzdElkeCgtMSlcbiAgICBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBjdGwuc2VuZChjb21wb3NlckZpbGVzLmNvbnRlbnQoKS50cmltKCkpXG4gICAgc2V0SW5wdXQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHQoKSB7XG4gICAgaWYgKCFidXN5KCkpIHJldHVyblxuICAgIGlmIChzdGF0ZS5xdWVzdGlvbikgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICBjdGwuaW50ZXJydXB0KClcbiAgfVxuXG4gIGNvbnN0IGZtdFRva2VucyA9IChuKSA9PiAobiA+PSAxMDAwID8gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfWtgIDogU3RyaW5nKG4pKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNZW1vcmllcygpIHtcbiAgICBzZXRNZW1vcnlMaXN0KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGVNZW1vcnlEaXNhYmxlZChtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LnNldERpc2FibGVkKG0sICFtLmRpc2FibGVkKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGAke20uZGlzYWJsZWQgPyAnZW5hYmxlZCcgOiAnc3VwcHJlc3NlZCd9ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1lbW9yeSB1cGRhdGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmb3JnZXRNZW1vcnkobSkge1xuICAgIGNvbnN0IGFybWVkID0gcmVmcy5mb3JnZXRBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG0uZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmZvcmdldEFybSA9IHsgZmlsZTogbS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBmb3JnZXQgXCIke20ubmFtZX1cImApXG4gICAgfVxuICAgIHJlZnMuZm9yZ2V0QXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5mb3JnZXQobSlcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgZm9yZ290ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGZvcmdldCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gb3BlbkNvbnRleHRQYW5lbCgpIHtcbiAgICBjb25zdCB0b2sgPSAobikgPT4gYH4ke2ZtdFRva2VucyhuKX0gdG9rYFxuICAgIGNvbnN0IGJyZWFrZG93biA9IGF3YWl0IGN0bC5jb250ZXh0QnJlYWtkb3duKClcbiAgICBjb25zdCByb3dzID0gYnJlYWtkb3duLnJvd3MubWFwKChyb3cpID0+ICh7IG5hbWU6IHJvdy5uYW1lLCBkZXNjOiByb3cuZGVzYywgbm90ZTogdG9rKHJvdy50b2tlbnMpIH0pKVxuICAgIGlmIChicmVha2Rvd24ubWVhc3VyZWQpIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIG5hbWU6ICdsYXN0IG1lYXN1cmVkIHJlcXVlc3QnLFxuICAgICAgICBkZXNjOiAncHJvdmlkZXItcmVwb3J0ZWQgaW5wdXQgdG9rZW5zLCB0aGUgbnVtYmVyIGJlaGluZCBjdHggJScsXG4gICAgICAgIG5vdGU6IGAke2JyZWFrZG93bi5tZWFzdXJlZC50b0xvY2FsZVN0cmluZygpfSB0b2tgLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0SW5mb1BhbmVsKHtcbiAgICAgIHRpdGxlOiBgQ29udGV4dCAgJHticmVha2Rvd24ubW9kZWx9YCxcbiAgICAgIHJvd3MsXG4gICAgICBvdmVydmlldzogYnJlYWtkb3duLnNlZ21lbnRzLmxlbmd0aCA/IHsgc2VnbWVudHM6IGJyZWFrZG93bi5zZWdtZW50cywgbWVhc3VyZWQ6IGJyZWFrZG93bi5tZWFzdXJlZCwgbGltaXQ6IGJyZWFrZG93bi5saW1pdCA/PyBtb2RlbCgpLmNvbnRleHQgfSA6IG51bGwsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRoZW1lSXRlbXMgPSAoKSA9PiBbXG4gICAgLi4ucGFsZXR0ZUxpc3QoKSxcbiAgICB7IGtleTogJ2F1dG8nLCBkZXNjOiBgZm9sbG93IHRoZSB0ZXJtaW5hbCAoZGV0ZWN0ZWQ6ICR7ZGV0ZWN0ZWRUaGVtZSgpfSlgIH0sXG4gIF1cblxuICBmdW5jdGlvbiBwYWxldHRlRm9yKHByZWYpIHtcbiAgICByZXR1cm4gcHJlZiA9PT0gJ2F1dG8nID8gZGV0ZWN0ZWRUaGVtZSgpIDogcHJlZlxuICB9XG5cbiAgLy8gdGhlIHRlcm1pbmFsIHJlcG9ydHMgbGlnaHQvZGFyayBzd2l0Y2hlcyB3aGlsZSBwaWNvIHJ1bnM7IGF1dG8gZm9sbG93c1xuICAvLyB0aGVtLCBidXQgbmV2ZXIgb3ZlciBhIHBhbGV0dGUgdGhlIHRoZW1lIHBpY2tlciBpcyBwcmV2aWV3aW5nLiBhIG5ld1xuICAvLyBiYWNrZ3JvdW5kIGNvbG9yIHJlLWRlcml2ZXMgcGFuZWwgc3VyZmFjZXMgdW5kZXIgd2hhdGV2ZXIgcGFsZXR0ZSBpcyB1cFxuICBjb25zdCByZWNoZWNrVGhlbWUgPSB1c2VDb2xvclNjaGVtZSgoc2NoZW1lLCB7IGJhY2tncm91bmQgfSA9IHt9KSA9PiB7XG4gICAgaWYgKGJhY2tncm91bmQgJiYgYmFja2dyb3VuZCAhPT0gZ2V0VGVybWluYWxCYWNrZ3JvdW5kKCkpIHtcbiAgICAgIHNldFRlcm1pbmFsQmFja2dyb3VuZChiYWNrZ3JvdW5kKVxuICAgICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBhY2NlbnQoKSwgbXV0ZWQ6IE1VVEVEIH0pXG4gICAgfVxuICAgIGlmIChzY2hlbWUgPT09IGRldGVjdGVkVGhlbWUoKSkgcmV0dXJuXG4gICAgc2V0RGV0ZWN0ZWRUaGVtZShzY2hlbWUpXG4gICAgaWYgKHRoZW1lUHJlZigpID09PSAnYXV0bycgJiYgIXNob3dUaGVtZVBhbmVsKCkpIHByZXZpZXdQYWxldHRlKCdhdXRvJylcbiAgfSlcblxuICBmdW5jdGlvbiBwcmV2aWV3UGFsZXR0ZShwcmVmKSB7XG4gICAgc2V0UGFsZXR0ZShwYWxldHRlRm9yKHByZWYpKVxuICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUaGVtZVByZWYocHJlZikge1xuICAgIHNldFRoZW1lUHJlZihwcmVmKVxuICAgIHByZXZpZXdQYWxldHRlKHByZWYpXG4gICAgaWYgKHByZWYgPT09ICdhdXRvJykgcmVjaGVja1RoZW1lKClcbiAgICB3cml0ZUNvbmZpZyh7IHRoZW1lOiBwcmVmID09PSAnYXV0bycgPyB1bmRlZmluZWQgOiBwcmVmIH0pLmNhdGNoKCgpID0+IHt9KVxuICAgIGZsYXNoKHByZWYgPT09ICdhdXRvJyA/IGB0aGVtZTogYXV0byAgZm9sbG93aW5nIHRoZSB0ZXJtaW5hbCAoJHtwYWxldHRlRm9yKCdhdXRvJyl9KWAgOiBgdGhlbWU6ICR7cHJlZn1gKVxuICB9XG5cbiAgY29uc3QgW3N0ZWVyRGVyaXZlZCwgc2V0U3RlZXJEZXJpdmVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBsZXQgc3RlZXJQcmV2aWV3UmVxdWVzdCA9IDBcbiAgZnVuY3Rpb24gc3RlZXJQcmV2aWV3KCkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSBzdGVlcigpPy5jaGFuZ2VzXG4gICAgaWYgKCFjaGFuZ2VzPy5sZW5ndGgpIHJldHVybiBkZXJpdmVkKClcbiAgICBpZiAocmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzICE9PSBjaGFuZ2VzKSB7XG4gICAgICByZWZzLnN0ZWVyUHJldmlld0NoYW5nZXMgPSBjaGFuZ2VzXG4gICAgICBjb25zdCByZXF1ZXN0ID0gKytzdGVlclByZXZpZXdSZXF1ZXN0XG4gICAgICBQcm9taXNlLnJlc29sdmUoY3RsLnByZXZpZXdTdGVlcihjaGFuZ2VzKSkudGhlbihuZXh0ID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3QgPT09IHN0ZWVyUHJldmlld1JlcXVlc3QpIHNldFN0ZWVyRGVyaXZlZChuZXh0KVxuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgfVxuICAgIHJldHVybiBzdGVlckRlcml2ZWQoKSB8fCBkZXJpdmVkKClcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBsb2FkRnVsbEhpc3RvcnkoKSB7XG4gICAgaWYgKGN0bC5sb2FkSGlzdG9yeSAmJiAoc3RhdGUuZGVyaXZlZC50cmFuc2NyaXB0T2Zmc2V0IHx8IDApID4gMCkgYXdhaXQgY3RsLmxvYWRIaXN0b3J5KEluZmluaXR5KVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRPbGRlckhpc3RvcnkoKSB7XG4gICAgaWYgKCFjdGwubG9hZEhpc3RvcnkgfHwgcmVmcy5oaXN0b3J5TG9hZGluZyB8fCAhKHN0YXRlLmRlcml2ZWQudHJhbnNjcmlwdE9mZnNldCA+IDApKSByZXR1cm5cbiAgICByZWZzLmhpc3RvcnlMb2FkaW5nID0gdHJ1ZVxuICAgIHRyeSB7IGF3YWl0IGN0bC5sb2FkSGlzdG9yeShzdGF0ZS5kZXJpdmVkLnRyYW5zY3JpcHQubGVuZ3RoICsgSElTVE9SWV9XSU5ET1cpIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZmxhc2goZXJyb3IubWVzc2FnZSkgfVxuICAgIGZpbmFsbHkgeyByZWZzLmhpc3RvcnlMb2FkaW5nID0gZmFsc2UgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlZXJSb3dzKCkge1xuICAgIHJldHVybiBzdGVlcmFibGVUcmFuc2NyaXB0KHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBiZWdpblN0ZWVyKCkge1xuICAgIGlmIChidXN5KCkgfHwgY29tcGFjdGluZygpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICBzZXRTdGVlckRlcml2ZWQobnVsbClcbiAgICByZWZzLnN0ZWVyUHJldmlld0NoYW5nZXMgPSBudWxsXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgc2V0U3RlZXIoeyBzZWxlY3RlZCwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UsIHJvbGU6ICd1c2VyJywgY2hhbmdlczogW10gfSlcbiAgICBpZiAocm93c1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdLm1lc3NhZ2VJZClcbiAgICBzZXRIaXN0V2luZG93KEluZmluaXR5KVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0ZWVyKGFwcGxpZWQgPSBmYWxzZSkge1xuICAgIHNldFN0ZWVyKG51bGwpXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICBpZiAoYXBwbGllZCkgZmxhc2goJ2NvbnZlcnNhdGlvbiBzdGVlcmluZyBhcHBsaWVkICBub3RoaW5nIHNlbnQnKVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlTdGVlcigpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBpZiAoIWRyYWZ0Py5jaGFuZ2VzLmxlbmd0aCkgcmV0dXJuIGNsb3NlU3RlZXIoKVxuICAgIGN0bC5hcHBseVN0ZWVyKGRyYWZ0LmNoYW5nZXMpXG4gICAgY2xvc2VTdGVlcih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGVlckVkaXQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93ID0gc3RlZXJSb3dzKClbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCFyb3cpIHJldHVybiBzdGFydFN0ZWVyQWRkKClcbiAgICBpZiAocm93LmxvY2tlZCkgcmV0dXJuIGZsYXNoKCdsb2NrZWQgIHRoaXMgbWVzc2FnZSBpcyBiZWZvcmUgdGhlIGxhdGVzdCBjb21wYWN0aW9uJylcbiAgICBzZXRTdGVlclRleHQocm93LnRleHQpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiBmYWxzZSwgcm9sZTogcm93LnJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJBZGQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGNvbnN0IHByZXZpb3VzUm9sZSA9IHNlbGVjdGVkPy5yb2xlXG4gICAgY29uc3Qgcm9sZSA9IHByZXZpb3VzUm9sZSA9PT0gJ3VzZXInID8gJ2Fzc2lzdGFudCcgOiBTVEVFUl9ST0xFU1swXVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiB0cnVlLCBhZGRpbmc6IHRydWUsIHJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJUZXh0KHRleHQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZsYXNoKCdtZXNzYWdlIGNhbm5vdCBiZSBlbXB0eScpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBjaGFuZ2UgPSBkcmFmdC5hZGRpbmdcbiAgICAgID8geyBvcDogJ2luc2VydCcsIGlkOiBtYWtlRXZlbnQoJ21lc3NhZ2UnKS5pZCwgYWZ0ZXI6IHRhcmdldD8ubWVzc2FnZUlkID8/IG51bGwsIG1lc3NhZ2U6IHsgcm9sZTogZHJhZnQucm9sZSwgY29udGVudDogdmFsdWUgfSB9XG4gICAgICA6IHsgb3A6ICdyZXBsYWNlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCBjaGFuZ2VzOiBbLi4uZHJhZnQuY2hhbmdlcywgY2hhbmdlXSB9KVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJEZWxldGUoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgaWYgKHRhcmdldC5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgY29uc3QgY2hhbmdlcyA9IFsuLi5kcmFmdC5jaGFuZ2VzLCB7IG9wOiAnZGVsZXRlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkIH1dXG4gICAgY29uc3QgcmVtYWluaW5nID0gcm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm1lc3NhZ2VJZCAhPT0gdGFyZ2V0Lm1lc3NhZ2VJZClcbiAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWluKGRyYWZ0LnNlbGVjdGVkLCBNYXRoLm1heCgwLCByZW1haW5pbmcubGVuZ3RoIC0gMSkpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQsIGNoYW5nZXMgfSlcbiAgICBpZiAocmVtYWluaW5nW3NlbGVjdGVkXSkgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocmVtYWluaW5nW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnNlcnRDb21tYW5kKGNvbW1hbmQsIHJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpLCBhcmdzID0gJycpIHtcbiAgICBpZiAoIXJhbmdlKSByZXR1cm5cbiAgICBjb25zdCBkcmFmdCA9IGlucHV0KClcbiAgICBjb25zdCB0b2tlbiA9IHt9XG4gICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gdG9rZW5cbiAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGJvb3QuY29tbWFuZHMubGlzdCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29tbWFuZC5uYW1lKVxuICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUZyb250bWF0dGVyKGF3YWl0IHJlYWRGaWxlKG1ldGFkYXRhLmZpbGUsICd1dGYtOCcpKVxuICAgICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gdG9rZW4gfHwgaW5wdXQoKSAhPT0gZHJhZnQpIHJldHVyblxuICAgICAgY29uc3QgZm9ybSA9IHsgbmFtZTogY29tbWFuZC5uYW1lLCBib2R5OiBib2R5LnRyaW0oKSwgZHJhZnQsIHJhbmdlLCBhcmdzLCB0b2tlbiB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb21tYW5kRmllbGRzKHsgYXJndW1lbnRzOiBwYXJzZUNvbW1hbmRBcmd1bWVudHMoYm9keSkgfSwgYm9keSwgYXJncylcbiAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHNldENvbW1hbmRGb3JtKHsgLi4uZm9ybSwgZmllbGRzIH0pXG4gICAgICAgIGlmIChmaWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdwYXRoJykpIHtcbiAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKHNldEZpbGVMaXN0KS5jYXRjaCgoZXJyb3IpID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgZmluaXNoQ29tbWFuZChmb3JtLCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goYGNvdWxkIG5vdCBsb2FkIC8ke2NvbW1hbmQubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaENvbW1hbmQoZm9ybSwgdmFsdWVzKSB7XG4gICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gZm9ybS50b2tlbiB8fCBpbnB1dCgpICE9PSBmb3JtLmRyYWZ0KSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keSA9IGV4cGFuZENvbW1hbmQoZm9ybS5ib2R5LCB2YWx1ZXNbJyRhcmdzJ10gPz8gZm9ybS5hcmdzLCB2YWx1ZXMpXG4gICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoZm9ybS5kcmFmdCwgZm9ybS5yYW5nZSwgYm9keSlcbiAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBydW5Db21tYW5kKGMsIGFyZ3MgPSAnJykge1xuICAgIHJldHVybiBleGVjdXRlQ29tbWFuZChjLCBhcmdzKS5jYXRjaChlcnJvciA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDb21tYW5kKGMsIGFyZ3MgPSAnJykge1xuICAgIGlmICh0eXBlb2YgYXJncyAhPT0gJ3N0cmluZycpIGFyZ3MgPSAnJ1xuICAgIGlmIChjLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKGMpXG4gICAgc2V0SW5wdXQoJycpXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICBpZiAoYy5uYW1lID09PSAnZm9yaycpIHtcbiAgICAgIGlmIChidXN5KCkgfHwgY29tcGFjdGluZygpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICByZXR1cm4gY3RsLmZvcmsoYXJncy50cmltKCkpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZW5hbWUnKSByZXR1cm4gY3RsLnJlbmFtZShhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb2xvcicpIHJldHVybiBjdGwuc2V0Q29sb3IoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29uZmlnJykge1xuICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3RoZW1lJykge1xuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1RoZW1lUGFuZWwodHJ1ZSlcbiAgICAgIGNvbnN0IGNob2ljZSA9IGFyZ3MudG9Mb3dlckNhc2UoKVxuICAgICAgY29uc3QgdmFsaWQgPSBbLi4ucGFsZXR0ZUxpc3QoKS5tYXAoKHApID0+IHAua2V5KSwgJ2F1dG8nXVxuICAgICAgaWYgKCF2YWxpZC5pbmNsdWRlcyhjaG9pY2UpKSByZXR1cm4gZmxhc2goYHRoZW1lOiAke3BhbGV0dGVOYW1lKCl9ICAvdGhlbWUgPCR7dmFsaWQuam9pbignfCcpfT5gKVxuICAgICAgYXBwbHlUaGVtZVByZWYoY2hvaWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLnNraWxsKSByZXR1cm4gY3RsLnNlbmRTa2lsbChjLm5hbWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2Nvbm5lY3QnKSByZXR1cm4gb3BlbkNvbm5lY3RQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2luaXQnKSByZXR1cm4gY3RsLnNlbmRJbml0KGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3BhcmFsbGVsJykge1xuICAgICAgY29uc3QgdGFzayA9IGFyZ3MudHJpbSgpXG4gICAgICBpZiAoYXdhaXQgY3RsLnNlbmRQYXJhbGxlbCh0YXNrKSkgcmV0dXJuXG4gICAgICBzZXRQZW5kaW5nUmVzZWFyY2goeyB0YXNrIH0pXG4gICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2RlbGliZXJhdGUnKSB7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGFyZ3MudHJpbSgpXG4gICAgICBpZiAoYXdhaXQgY3RsLnNlbmREZWxpYmVyYXRlKGRlY2lzaW9uKSkgcmV0dXJuXG4gICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKHsgZGVjaXNpb24gfSlcbiAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKHRydWUpXG4gICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ21vZGVsJykge1xuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3dpdGNoTW9kZWxCeU5hbWUoYXJncylcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3JlZnJlc2gtbW9kZWxzJykgcmV0dXJuIHJlZnJlc2hNb2RlbHMoKVxuICAgIGlmIChjLm5hbWUgPT09ICdzcGVlZCcpIHtcbiAgICAgIGlmICghc3BlZWRBcHBsaWVzKCkpIHJldHVybiBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbGApXG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93U3BlZWRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zcGVlZENvbW1hbmQoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZWZmb3J0Jykge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIHJldHVybiBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd0VmZm9ydFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnNldEVmZm9ydEJ5TmFtZShhcmdzLnRvTG93ZXJDYXNlKCkpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd1cGRhdGUnKSB7XG4gICAgICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHJldHVybiBmbGFzaCgndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dCAgdXBkYXRlIGl0IHdpdGggZ2l0JylcbiAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24odmVyc2lvbiwgbGF0ZXN0KSkgcmV0dXJuIGZsYXNoKGBwaWNvIHYke3ZlcnNpb259IGlzIGFscmVhZHkgdGhlIGxhdGVzdGApXG4gICAgICBmbGFzaChgdXBkYXRpbmcke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30uLi5gKVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiBmbGFzaChgdXBkYXRlZCR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfSAgcmVzdGFydCBwaWNvIHRvIHVzZSBpdGApXG4gICAgICByZXR1cm4gZmxhc2goYHVwZGF0ZSBmYWlsZWQ6ICR7cmVzdWx0Lm91dHB1dC5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdzdGVlcicpIHJldHVybiBiZWdpblN0ZWVyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29udGV4dCcpIHJldHVybiBvcGVuQ29udGV4dFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaGlzdG9yeScpIHJldHVybiBvcGVuSGlzdG9yeVNlYXJjaCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hlbHAnKSByZXR1cm4gc2V0VmlldygnaGVscCcpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21jcCcpIHJldHVybiBzZXRTaG93TWNwUGFuZWwodHJ1ZSlcbiAgICBpZiAoYy5uYW1lID09PSAnd2FrZXVwcycpIHJldHVybiBzZXRTaG93V2FrZXVwc1BhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICByZXR1cm4gc2V0U2hvd01lbW9yeVBhbmVsKHRydWUpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXN1bWUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICAgIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Byb2plY3QnKSByZXR1cm4gb3BlblByb2plY3RQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2N3ZCcpIHtcbiAgICAgIGNvbnN0IHJvb3ROb3RlID0gYm9vdC5yb290ICE9PSBib290LmN3ZCA/IGAgIHByb2plY3Qgcm9vdCAke3Nob3J0ZW5QYXRoKGJvb3Qucm9vdCl9YCA6ICcnXG4gICAgICByZXR1cm4gZmxhc2goYCR7Ym9vdC5kaXNwbGF5Q3dkfSR7cm9vdE5vdGV9YClcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3NraWxscycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ1NraWxscycsXG4gICAgICAgIHJvd3M6IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IHMuZGVzY3JpcHRpb24sIG5vdGU6IHMuc291cmNlIH0pKSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21tYW5kcycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ0NvbW1hbmRzJyxcbiAgICAgICAgcm93czogW1xuICAgICAgICAgIC4uLkNPTU1BTkRTLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2MsIG5vdGU6ICdidWlsdGluJyB9KSksXG4gICAgICAgICAgLi4uYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjbWQpID0+ICh7IG5hbWU6IGAvJHtjbWQubmFtZX1gLCBkZXNjOiBjbWQuZGVzY3JpcHRpb24sIG5vdGU6IGNtZC5zb3VyY2UgfSkpLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Rvb2xzJykge1xuICAgICAgY29uc3QgeyByb3dzLCBtY3BDb3VudCB9ID0gYXdhaXQgY3RsLmRlc2NyaWJlVG9vbHMoKVxuICAgICAgc2V0SW5mb1BhbmVsKHsgdGl0bGU6IGBUb29scyR7bWNwQ291bnQgPyBgICBwbHVzICR7bWNwQ291bnR9IE1DUCAoc2VlIC9tY3ApYCA6ICcnfWAsIHJvd3MgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbmV3JykgcmV0dXJuIGN0bC5uZXdTZXNzaW9uKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGlmICghc3RhdGUuc2Vzc2lvbikgcmV0dXJuIGZsYXNoKCdubyBjdXJyZW50IHNlc3Npb24gdG8gZGVsZXRlJylcbiAgICAgIHNldFNob3dEZWxldGVDb25maXJtKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Jld2luZCcpIHtcbiAgICAgIGF3YWl0IGxvYWRGdWxsSGlzdG9yeSgpXG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIHJldHVybiBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIHNldFJld2luZFN0ZXAoJ3BpY2snKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjbGVhcicpIHJldHVybiBjdGwuY2xlYXIoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21wYWN0JykgcmV0dXJuIHBlcmZvcm1Db21wYWN0aW9uKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2Nvc3QnKSB7XG4gICAgICBjb25zdCBjb3N0ID0gY3RsLmNvc3RTdW1tYXJ5KClcbiAgICAgIGlmICghY29zdCkgcmV0dXJuIGZsYXNoKCdubyB1c2FnZSB5ZXQnKVxuICAgICAgY29uc3QgYmFzZSA9IGAkJHtjb3N0LnNwZW50LnRvRml4ZWQoNCl9IHNwZW50ICAke2Nvc3QucHJvbXB0VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IGluICAke2Nvc3QuY29tcGxldGlvblRva2Vucy50b0xvY2FsZVN0cmluZygpfSBvdXRgXG4gICAgICBmbGFzaChjb3N0LnNwZW50IC0gY29zdC5hY3RpdmUgPiAwLjAwMDA1ID8gYCR7YmFzZX0gIGN1cnJlbnQgY29udmVyc2F0aW9uICQke2Nvc3QuYWN0aXZlLnRvRml4ZWQoNCl9YCA6IGJhc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBjdGwuZXhwb3J0TWFya2Rvd24oKVxuICAgICAgZmxhc2goYGV4cG9ydGVkIHRvICR7ZmlsZX1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEF1dGhQcm92aWRlcnMoKSB7XG4gICAgY29uc3QgW29wZW5haSwgZ3Jva10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBvcGVuYWlTdGF0dXMoKS5jYXRjaCgoKSA9PiAoeyBjb25uZWN0ZWQ6IGZhbHNlLCBlbWFpbDogbnVsbCB9KSksXG4gICAgICB4YWlDb25uZWN0ZWQoKS5jYXRjaCgoKSA9PiAoeyBjb25uZWN0ZWQ6IGZhbHNlLCBlbWFpbDogbnVsbCB9KSksXG4gICAgXSlcbiAgICBjb25zdCB1c2FnZSA9IGdyb2suY29ubmVjdGVkID8gYXdhaXQgeGFpVXNhZ2UoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgICBzZXRBdXRoUHJvdmlkZXJzKFtcbiAgICAgIHsgaWQ6ICdvcGVuYWknLCBsYWJlbDogJ09wZW5BSSAgQ2hhdEdQVCAvIENvZGV4IHBsYW4nLCBjb25uZWN0ZWQ6IG9wZW5haS5jb25uZWN0ZWQsIGVtYWlsOiBvcGVuYWkuZW1haWwgfSxcbiAgICAgIHsgaWQ6ICd4YWknLCBsYWJlbDogJ0dyb2sgLyBTdXBlckdyb2snLCBjb25uZWN0ZWQ6IGdyb2suY29ubmVjdGVkLCBlbWFpbDogZ3Jvay5lbWFpbCwgdXNhZ2UsIHVybDogZ3Jvay5jb25uZWN0ZWQgPyBudWxsIDogYXV0aFByb3ZpZGVycygpLmZpbmQocCA9PiBwLmlkID09PSAneGFpJyk/LnVybCwgY29kZTogZ3Jvay5jb25uZWN0ZWQgPyBudWxsIDogYXV0aFByb3ZpZGVycygpLmZpbmQocCA9PiBwLmlkID09PSAneGFpJyk/LmNvZGUgfSxcbiAgICBdKVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbkNvbm5lY3RQYW5lbCgpIHtcbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKHRydWUpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICB9XG5cbiAgdXNlSW50ZXJ2YWwoKCkgPT4geyBpZiAoc2hvd0Nvbm5lY3RQYW5lbCgpKSB2b2lkIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkgfSwgMzAwMDApXG5cbiAgZnVuY3Rpb24gY29ubmVjdFByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgY29uc3QgZ3JvayA9IHByb3ZpZGVyLmlkID09PSAneGFpJ1xuICAgIGZsYXNoKGBzaWduaW5nIGluIHRvICR7Z3JvayA/ICdHcm9rJyA6ICdDaGF0R1BUJ31gKVxuICAgIGNvbnN0IHRhc2sgPSBncm9rXG4gICAgICA/IGN0bC5jb25uZWN0WEFJKHsgb25Vcmw6ICh1cmwsIGNvZGUpID0+IHNldEF1dGhQcm92aWRlcnMoYXV0aFByb3ZpZGVycygpLm1hcChwID0+IHAuaWQgPT09ICd4YWknID8geyAuLi5wLCB1cmwsIGNvZGUgfSA6IHApKSB9KVxuICAgICAgOiBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICB0YXNrLnRoZW4oKHsgZW1haWwsIGNvdW50IH0pID0+IHtcbiAgICAgIGZsYXNoKGBjb25uZWN0ZWQke2VtYWlsID8gYCBhcyAke2VtYWlsfWAgOiAnJ30gICR7Y291bnR9IG1vZGVsc2ApXG4gICAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gICAgfSkuY2F0Y2goZXJyID0+IGZsYXNoKGBjb25uZWN0IGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMjApfWApKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzY29ubmVjdFByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmRpc2Nvbm5lY3RBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSBwcm92aWRlci5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSB7IGlkOiBwcm92aWRlci5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGlzY29ubmVjdCAke3Byb3ZpZGVyLmxhYmVsfWApXG4gICAgfVxuICAgIHJlZnMuZGlzY29ubmVjdEFybSA9IG51bGxcbiAgICBpZiAocHJvdmlkZXIuaWQgPT09ICd4YWknKSBhd2FpdCBjdGwuZGlzY29ubmVjdFhBSSgpXG4gICAgZWxzZSBhd2FpdCBjdGwuZGlzY29ubmVjdFByb3ZpZGVyKClcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gICAgZmxhc2goYGRpc2Nvbm5lY3RlZCBmcm9tICR7cHJvdmlkZXIuaWQgPT09ICd4YWknID8gJ0dyb2snIDogJ0NoYXRHUFQnfWApXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUmVzdW1lUGFuZWwoKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9ICsrcmVmcy5yZXN1bWVPcGVuXG4gICAgY29uc3Qgc2NvcGVzID0gWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXVxuICAgIHNldFJlc3VtZVNjb3BlcyhzY29wZXMpXG4gICAgc2V0UmVzdW1lU2NvcGUoMClcbiAgICBzZXRTaG93UmVzdW1lUGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoU2Vzc2lvbnMoMCwgc2NvcGVzKVxuICAgIGxpc3RXb3JrdHJlZXMob3duZXJSb290KGJvb3Qucm9vdCkpLnRoZW4oKHRyZWVzKSA9PiB7XG4gICAgICBpZiAodHJlZXMubGVuZ3RoIDwgMiB8fCAhc2hvd1Jlc3VtZVBhbmVsKCkgfHwgcmVxdWVzdCAhPT0gcmVmcy5yZXN1bWVPcGVuKSByZXR1cm5cbiAgICAgIHNldFJlc3VtZVNjb3BlcyhbJ3JlcG9zaXRvcnknLCAnY2hlY2tvdXQnLCAnZXZlcnl3aGVyZSddKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoU2Vzc2lvbnMoc2NvcGVJbmRleCwgc2NvcGVzID0gcmVzdW1lU2NvcGVzKCkpIHtcbiAgICBzZXRSZXN1bWVMb2FkaW5nKHRydWUpXG4gICAgY3RsLmxpc3RSZXN1bWVTZXNzaW9ucyhzY29wZXNbc2NvcGVJbmRleF0pXG4gICAgICAudGhlbihzZXRSZXN1bWVTZXNzaW9ucylcbiAgICAgIC5maW5hbGx5KCgpID0+IHNldFJlc3VtZUxvYWRpbmcoZmFsc2UpKVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvcnRlblBhdGgocGF0aCkge1xuICAgIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKGhvbWUpID8gcGF0aC5yZXBsYWNlKGhvbWUsICd+JykgOiBwYXRoXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUHJvamVjdFBhbmVsKCkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dQcm9qZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoUHJvamVjdHMoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFByb2plY3RzKCkge1xuICAgIHNldFByb2plY3RzTG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsaXN0ID0gYXdhaXQgY3RsLmxpc3RQcm9qZWN0cygpXG4gICAgICBzZXRQcm9qZWN0cyhsaXN0Lm1hcCgocHJvamVjdCkgPT4gKHtcbiAgICAgICAgLi4ucHJvamVjdCxcbiAgICAgICAgcGF0aDogc2hvcnRlblBhdGgocHJvamVjdC5yb290KSxcbiAgICAgICAgY2hlY2tvdXRzOiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0KSA9PiAoeyAuLi5jaGVja291dCwgcGF0aDogc2hvcnRlblBhdGgoY2hlY2tvdXQucm9vdCkgfSkpLFxuICAgICAgfSkpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRQcm9qZWN0c0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYWRkUHJvamVjdFdvcmt0cmVlKGNoZWNrb3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyZWUgPSBhd2FpdCBjdGwuYWRkV29ya3RyZWUoY2hlY2tvdXQub3duZXIpXG4gICAgICBhd2FpdCBjdGwuc3dpdGNoVG9Xb3JrdHJlZSh7IHJvb3Q6IHRyZWUucGF0aCB9KVxuICAgICAgc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGB3b3JrdHJlZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUHJvamVjdENoZWNrb3V0KGNoZWNrb3V0KSB7XG4gICAgaWYgKGNoZWNrb3V0Lndvcmt0cmVlKSB7XG4gICAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgcmVtb3ZlIHRoZSBjdXJyZW50IHdvcmt0cmVlICBzd2l0Y2ggYXdheSBmaXJzdCcpXG4gICAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5yb290ICE9PSBjaGVja291dC5yb290IHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0geyByb290OiBjaGVja291dC5yb290LCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9XCIgYW5kIGl0cyAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ31gKVxuICAgICAgfVxuICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3RsLmRlbGV0ZVdvcmt0cmVlKGNoZWNrb3V0KVxuICAgICAgICBhd2FpdCByZWZyZXNoUHJvamVjdHMoKVxuICAgICAgICBmbGFzaChgcmVtb3ZlZCAke2NoZWNrb3V0LmJyYW5jaCB8fCBjaGVja291dC5wYXRofWApXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZmxhc2goYHJlbW92ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNoZWNrb3V0LmN1cnJlbnQpIHJldHVybiBmbGFzaCgnY2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudCBwcm9qZWN0ICBzd2l0Y2ggYXdheSBmaXJzdCcpXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnByb2plY3REZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0geyByb290OiBjaGVja291dC5yb290LCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke2NoZWNrb3V0LnBhdGh9XCIgYW5kIGl0cyAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ31gKVxuICAgIH1cbiAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVByb2plY3REYXRhKGNoZWNrb3V0LnJvb3QpXG4gICAgICBhd2FpdCByZWZyZXNoUHJvamVjdHMoKVxuICAgICAgZmxhc2goYGRlbGV0ZWQgJHtjaGVja291dC5wYXRofSAgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9IHJlbW92ZWRgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGRlbGV0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2Vzc2lvbk1ldGEobWV0YSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5zZXNzaW9uPy5pZCA9PT0gbWV0YS5oZWFkZXIuaWRcbiAgICBpZiAoY3VycmVudCAmJiBidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZGVsZXRlQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtZXRhLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kZWxldGVBcm0gPSB7IGZpbGU6IG1ldGEuZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGVsZXRlIFwiJHttZXRhLnRpdGxlLnNsaWNlKDAsIDUwKX1cImApXG4gICAgfVxuICAgIHJlZnMuZGVsZXRlQXJtID0gbnVsbFxuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9uKCkpIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTZXNzaW9uKG1ldGEuZmlsZSlcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgZmxhc2goJ3Nlc3Npb24gZGVsZXRlZCcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXN1bWVTZXNzaW9uKG1ldGEpIHtcbiAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSlcbiAgICBhd2FpdCBjdGwucmVzdW1lKG1ldGEpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuSGlzdG9yeVNlYXJjaCgpIHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2VudCgpXG4gICAgc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZXNzaW9uKSlcbiAgICBzZXRTaG93SGlzdG9yeVBhbmVsKHRydWUpXG4gICAgc2V0SGlzdFNjb3BlKDApXG4gIH1cblxuICBmdW5jdGlvbiBkZWR1cGVQcm9tcHRzKHBvb2wpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpXG4gICAgY29uc3Qgb3V0ID0gW11cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi5wb29sXS5zb3J0KChhLCBiKSA9PiBiLmF0IC0gYS5hdCkpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhlbnRyeS50ZXh0KSkgY29udGludWVcbiAgICAgIHNlZW4uYWRkKGVudHJ5LnRleHQpXG4gICAgICBvdXQucHVzaChlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoSGlzdFNjb3BlKG5leHQpIHtcbiAgICBzZXRIaXN0U2NvcGUobmV4dClcbiAgICBpZiAobmV4dCA9PT0gMCkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoc2VudCgpKSlcbiAgICBjb25zdCBwcm9qZWN0ID0gYXdhaXQgbG9hZFByb2plY3RQcm9tcHRzKHJvb3QpXG4gICAgaWYgKG5leHQgPT09IDEpIHJldHVybiBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3RdKSlcbiAgICBjb25zdCBnbG9iYWwgPSBhd2FpdCBsb2FkR2xvYmFsUHJvbXB0cygpXG4gICAgc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhbLi4uc2VudCgpLCAuLi5wcm9qZWN0LCAuLi5nbG9iYWxdKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIG9wdCkge1xuICAgIGF3YWl0IGN0bC5yZXdpbmQodGFyZ2V0LCBvcHQua2V5KVxuICAgIHNldFJld2luZFN0ZXAobnVsbClcbiAgICBzZXRSZXdpbmRUYXJnZXQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1SZXdpbmQob3B0KSB7XG4gICAgcmV0dXJuIHBlcmZvcm1SZXdpbmRUbyhyZXdpbmRUYXJnZXQoKSwgb3B0KVxuICB9XG5cbiAgY29uc3QgdW5kb1Jld2luZCA9IGN0bC51bmRvUmV3aW5kXG5cbiAgYXN5bmMgZnVuY3Rpb24gY29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9uKCkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCBjdGwuZGVsZXRlQ3VycmVudFNlc3Npb24oKVxuICAgIHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKVxuICAgIHJldHVybiBkZWxldGVkXG4gIH1cblxuICBjb25zdCBhbnlQYW5lbCA9ICgpID0+XG4gICAgc2hvd01vZGVsUGFuZWwoKSB8fCBzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgfHwgc2hvd1NwZWVkUGFuZWwoKSB8fCBzaG93RWZmb3J0UGFuZWwoKSB8fCBzaG93VGhlbWVQYW5lbCgpIHx8IHNob3dDb25maWdQYW5lbCgpIHx8IHNob3dEZWxldGVDb25maXJtKCkgfHwgc2hvd01lbW9yeVBhbmVsKCkgfHwgc2hvd0hpc3RvcnlQYW5lbCgpIHx8IHNob3dSZXN1bWVQYW5lbCgpIHx8IHNob3dNY3BQYW5lbCgpIHx8XG4gICAgc2hvd1Byb2plY3RQYW5lbCgpIHx8IHNob3dXYWtldXBzUGFuZWwoKSB8fCBzaG93Q29ubmVjdFBhbmVsKCkgfHxcbiAgICBjb21tYW5kRm9ybSgpICE9PSBudWxsIHx8IGluZm9QYW5lbCgpICE9PSBudWxsIHx8IHJld2luZFN0ZXAoKSAhPT0gbnVsbFxuXG4gIC8vIGV2ZXJ5IGZvY3VzLXRha2luZyBwYW5lbCBkaW1zIHRoZSBjb252ZXJzYXRpb24gYmVoaW5kIGl0OyB0aGUgdGhlbWVcbiAgLy8gcGlja2VyIGlzIHRoZSBvbmUgZXhlbXB0aW9uLCBzaW5jZSBpdHMgam9iIGlzIHByZXZpZXdpbmcgcGFsZXR0ZXMgb25cbiAgLy8gdGhlIHVuZGltbWVkIHVpXG4gIGNvbnN0IGRpbW1pbmdQYW5lbCA9ICgpID0+IGFueVBhbmVsKCkgJiYgIXNob3dUaGVtZVBhbmVsKClcblxuICBmdW5jdGlvbiBjYW5jZWxBZ2VudChhZ2VudCkge1xuICAgIGN0bC5jYW5jZWxBZ2VudChhZ2VudC5pZClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NBZ2VudChhZ2VudCkge1xuICAgIGlmICghYXdhaXQgY3RsLmRpc21pc3NBZ2VudChhZ2VudC5pZCkpIHJldHVyblxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGFnZW50LmlkKSBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdGwuZGlzbWlzc0RlbGliZXJhdGlvbihpdGVtLmRlbGliZXJhdGlvbklkKVxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGl0ZW0uaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NTaGVsbChzaGVsbCkge1xuICAgIGJvb3Quc2hlbGxzLmRpc21pc3Moc2hlbGwuaWQpXG4gICAgaWYgKHZpZXdlZFNoZWxsSWQoKSA9PT0gc2hlbGwuaWQpIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGxTaGVsbChzaGVsbCkge1xuICAgIGlmIChzaGVsbC5zdGF0dXMgIT09ICdydW5uaW5nJykgcmV0dXJuIGZsYXNoKGBzaGVsbCAke3NoZWxsLmlkfSBhbHJlYWR5IGV4aXRlZGApXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnNoZWxsS2lsbEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHNoZWxsLmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuc2hlbGxLaWxsQXJtID0geyBpZDogc2hlbGwuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGtpbGwgXCIke3NoZWxsLmRlc2NyaXB0aW9uIHx8IGBzaGVsbCAke3NoZWxsLmlkfWB9XCJgKVxuICAgIH1cbiAgICByZWZzLnNoZWxsS2lsbEFybSA9IG51bGxcbiAgICBib290LnNoZWxscy5raWxsKHNoZWxsLmlkLCAndXNlcicpXG4gIH1cblxuICBjb25zdCBzcGVlZEFwcGxpZXMgPSBjdGwuc3BlZWRBcHBsaWVzXG4gIGNvbnN0IGVmZm9ydEFwcGxpZXMgPSBjdGwuZWZmb3J0QXBwbGllc1xuICBjb25zdCBzZXRTZXNzaW9uRWZmb3J0ID0gY3RsLnNldEVmZm9ydFxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiAnaW5wdXQnIH0pXG4gIGNvbnN0IHN0ZWVyTGlzdEZvY3VzID0gdXNlRm9jdXMoeyBpbml0aWFsOiBudWxsLCBjeWNsZTogJ25vbmUnLCBhY3RpdmU6IGZhbHNlIH0pXG4gIGZtLml0ZW0oJ2ZlZWQnKVxuICBpZiAoc3RlZXIoKSkge1xuICAgIGZtLml0ZW0oJ3N0ZWVyJylcbiAgICBpZiAoIWZtLmlzKCdzdGVlcicpKSBmbS5mb2N1cygnc3RlZXInKVxuICB9XG4gIGNvbnN0IGNvbnZlcnNhdGlvblNlYXJjaCA9IGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KVxuICBjb252ZXJzYXRpb25TZWFyY2gucmVnaXN0ZXJGb2N1cygpXG4gIGxldCBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzID0gW11cbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IGFnZW50Um93cyA9IGFjdGl2aXR5Um93cyhjdGwuYWN0aXZpdHkoKSlcbiAgc2hlbGxzVmVyc2lvbigpXG4gIGNvbnN0IHNoZWxsUm93cyA9IGFjdGl2aXR5Um93cyhjdGwuc2hlbGxSb3dzKCkpXG4gIGNvbnN0IHNob3dDb21wb3NlckFjdGlvbnMgPSAhc3RlZXIoKSAmJiAhdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkgJiYgIWFueVBhbmVsKCkgJiYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpXG4gIGNvbnN0IGFjdGl2aXR5TWFyZ2luID0gKHNoZWxsUm93cy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwKSB8fCAhc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDEgOiAwXG4gIGNvbnN0IFtzaGVsbFN0cmlwU2l6ZSwgYWdlbnRTdHJpcFNpemVdID0gYWN0aXZpdHlTdHJpcFNpemVzKHRlcm1pbmFsSGVpZ2h0KCksIFtzaGVsbFJvd3MubGVuZ3RoLCBhZ2VudFJvd3MubGVuZ3RoXSwgYWN0aXZpdHlNYXJnaW4pXG4gIGlmIChxdWVzdGlvblJlcXVlc3QoKSkge1xuICAgIGZtLml0ZW0oJ3F1ZXN0aW9uJylcbiAgICBpZiAoIWZtLmlzKCdxdWVzdGlvbicpKSBmbS5mb2N1cygncXVlc3Rpb24nKVxuICB9IGVsc2Uge1xuICAgIGlmICghdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIGZtLml0ZW0oJ2lucHV0JylcbiAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZtLmdyb3VwKCdhY3Rpdml0eS1zdHJpcCcsIHsgaXRlbXM6IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ3NoZWxsLXN0cmlwJywgeyBpdGVtczogWydzaGVsbC1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICAgIGlmIChhZ2VudFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ2FnZW50LXN0cmlwJywgeyBpdGVtczogWydhZ2VudC1tYWluJywgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9XG4gICAgaWYgKHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gJiYgIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSB7XG4gICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gZmFsc2VcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfVxuICB9XG4gIGlmICh3b3Jrc3BhY2VPcGVuKCkpIHsgZm0uaXRlbSgnd29ya3NwYWNlJyk7IGZtLmZvY3VzKCd3b3Jrc3BhY2UnKSB9XG4gIGVsc2UgaWYgKHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlKSB7XG4gICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSBmYWxzZVxuICAgIGZtLmZvY3VzKHF1ZXN0aW9uUmVxdWVzdCgpID8gJ3F1ZXN0aW9uJyA6ICdpbnB1dCcpXG4gIH1cbiAgdXNlRm9jdXNUcmFwKHdvcmtzcGFjZU9wZW4oKSB8fCBhbnlQYW5lbCgpIHx8IHZpZXcoKSA9PT0gJ2hlbHAnKVxuICB1c2VTZWxlY3Rpb24oe1xuICAgIG9uQ29weTogKHRleHQpID0+IGZsYXNoKGBjb3BpZWQgJHt0ZXh0Lmxlbmd0aH0gJHt0ZXh0Lmxlbmd0aCA9PT0gMSA/ICdjaGFyYWN0ZXInIDogJ2NoYXJhY3RlcnMnfWApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkge1xuICAgIGNvbnN0IGl0ZW1zID0gWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgoc2hlbGwpID0+IGBzaGVsbC0ke3NoZWxsLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhZ2VudCkgPT4gYGFnZW50LSR7YWdlbnQuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGNvbnN0IHBhZ2VTaXplID0gZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gc2hlbGxTdHJpcFNpemUgOiBhZ2VudFN0cmlwU2l6ZVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFnZVNpemUgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHBhZ2VTaXplIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gKGN1cnJlbnQgKyAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IChjdXJyZW50IC0gMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IHRhcmdldCA9IGl0ZW1zW25leHRdXG4gICAgZm0uZm9jdXModGFyZ2V0KVxuICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsKVxuICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ2FnZW50LScpID8gdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsKVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVTdHJpcChldmVudCwgcHJlZml4LCByb3dzLCB7IG1haW4gPSBmYWxzZSwgcHJldmlld0FnZW50ID0gZmFsc2UsIHByZXZpZXdTaGVsbCA9IGZhbHNlIH0gPSB7fSkge1xuICAgIGNvbnN0IGl0ZW1zID0gWy4uLihtYWluID8gW2Ake3ByZWZpeH0tbWFpbmBdIDogW10pLCAuLi5yb3dzLm1hcCgocm93KSA9PiBgJHtwcmVmaXh9LSR7cm93LmlkfWApXVxuICAgIGNvbnN0IGN1cnJlbnQgPSBpdGVtcy5pbmRleE9mKGZtLmN1cnJlbnQoKSlcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnRcbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gICAgZWxzZSBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSBpdGVtcy5sZW5ndGggLSAxXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdkJykgbmV4dCA9IE1hdGgubWluKGl0ZW1zLmxlbmd0aCAtIDEsIGN1cnJlbnQgKyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKChwcmVmaXggPT09ICdzaGVsbCcgPyBzaGVsbFN0cmlwU2l6ZSA6IGFnZW50U3RyaXBTaXplKSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gTWF0aC5tYXgoMCwgY3VycmVudCAtIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoKHByZWZpeCA9PT0gJ3NoZWxsJyA/IHNoZWxsU3RyaXBTaXplIDogYWdlbnRTdHJpcFNpemUpIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gKGN1cnJlbnQgKyAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IChjdXJyZW50IC0gMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IHRhcmdldCA9IGl0ZW1zW25leHRdXG4gICAgZm0uZm9jdXModGFyZ2V0KVxuICAgIGlmIChwcmV2aWV3QWdlbnQpIHtcbiAgICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0ID09PSAnYWdlbnQtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfVxuICAgIGlmIChwcmV2aWV3U2hlbGwpIHtcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgdXNlSW5wdXQoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgaWYgKHdvcmtzcGFjZU9wZW4oKSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5jYW5jZWxQcmV2aWV3KClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNldFdvcmtzcGFjZUVycm9yKGByZXR1cm4gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgICAgfSBmaW5hbGx5IHsgc2V0V29ya3NwYWNlUGVuZGluZyhmYWxzZSkgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jrc3BhY2VQZW5kaW5nKCkpIHJldHVyblxuICAgICAgY29uc3QgbmV4dCA9IHdvcmtzcGFjZU5hdmlnYXRlKHdvcmtzcGFjZVNlc3Npb25zLCB3b3Jrc3BhY2VTZWxlY3RlZCgpLCBldmVudCwgd29ya3NwYWNlSGVpZ2h0KCkpXG4gICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldFdvcmtzcGFjZVNlbGVjdGVkKG5leHQpXG4gICAgICAgIHZvaWQgYm9vdC53b3Jrc3BhY2UucHJldmlldyhuZXh0KS5jYXRjaChlcnJvciA9PiBzZXRXb3Jrc3BhY2VFcnJvcihgcHJldmlldyBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCByb3cgPSB3b3Jrc3BhY2VTZXNzaW9ucy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gd29ya3NwYWNlU2VsZWN0ZWQoKSlcbiAgICAgIGlmICghcm93KSByZXR1cm5cbiAgICAgIGNvbnN0IGF0dGFjaCA9ICFldmVudC5jdHJsICYmICFldmVudC5tZXRhICYmICFldmVudC5hbHQgJiYgKGV2ZW50LmtleSA9PT0gJ3JpZ2h0JyB8fCBldmVudC5rZXkgPT09ICdsJyB8fCBldmVudC5rZXkgPT09ICdyZXR1cm4nKVxuICAgICAgY29uc3QgYWN0aW9uID0gZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyA/IHdvcmtzcGFjZUFjdGlvbihyb3cpIDogbnVsbFxuICAgICAgaWYgKCFhdHRhY2ggJiYgIWFjdGlvbikgcmV0dXJuXG4gICAgICBzZXRXb3Jrc3BhY2VQZW5kaW5nKHRydWUpXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYXR0YWNoKSB7XG4gICAgICAgICAgYXdhaXQgYm9vdC53b3Jrc3BhY2Uuc2VsZWN0KHJvdy5pZClcbiAgICAgICAgICBzZXRJbnB1dCgnJylcbiAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgIHNldE9mZnNldCgwKVxuICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG51bGwpXG4gICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgY29udmVyc2F0aW9uU2VhcmNoLmNsb3NlKClcbiAgICAgICAgICByZWZzLnVpLnNlc3Npb24oKVxuICAgICAgICAgIHJlZnMudWkuc3luYygpXG4gICAgICAgICAgcmVmcy51aS5kZXJpdmVkKHN0YXRlLmRlcml2ZWQpXG4gICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSB0cnVlXG4gICAgICAgICAgc2V0V29ya3NwYWNlT3BlbihmYWxzZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZVthY3Rpb25dKHJvdy5pZClcbiAgICAgICAgICBhd2FpdCByZWZyZXNoV29ya3NwYWNlKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYCR7YXR0YWNoID8gJ2F0dGFjaCcgOiBhY3Rpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgICB9IGZpbmFsbHkgeyBzZXRXb3Jrc3BhY2VQZW5kaW5nKGZhbHNlKSB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3RlZXIoKSAmJiBmbS5pcygnc3RlZXInKSAmJiAhc3RlZXIoKS5lZGl0aW5nKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIGFwcGx5U3RlZXIoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2VTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSBzdGFydFN0ZWVyRWRpdCgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdhJykgc3RhcnRTdGVlckFkZCgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICd4JyB8fCBldmVudC5rZXkgPT09ICdkJykgc3RhZ2VTdGVlckRlbGV0ZSgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCBkcmFmdC5zZWxlY3RlZCAtIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKSwgZHJhZnQuc2VsZWN0ZWQgKyAxKVxuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXT8ubWVzc2FnZUlkKVxuICAgICAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZCB9KVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdob21lJyB8fCBldmVudC5rZXkgPT09ICdnJykge1xuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzWzBdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkOiAwIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2VuZCcgfHwgZXZlbnQua2V5ID09PSAnRycpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHJldHVyblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY29udmVyc2F0aW9uU2VhcmNoLmhhbmRsZUlucHV0KGV2ZW50LCBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzKSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIGNvbnN0IHNoZWxsID0gdGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gdGFyZ2V0KSA6IG51bGxcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiBgYWdlbnQtJHtyb3cuaWR9YCA9PT0gdGFyZ2V0KSA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50ID0gaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicgPyBudWxsIDogaXRlbVxuICAgICAgaWYgKHNoZWxsKSBzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/IGtpbGxTaGVsbChzaGVsbCkgOiBkaXNtaXNzU2hlbGwoc2hlbGwpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGFnZW50KSBbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoYWdlbnQuc3RhdHVzKSA/IGNhbmNlbEFnZW50KGFnZW50KSA6IGRpc21pc3NBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdzaGVsbCcsIHNoZWxsUm93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3U2hlbGw6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCAnYWdlbnQnLCBhZ2VudFJvd3MsIHsgbWFpbjogdHJ1ZSwgcHJldmlld0FnZW50OiB0cnVlIH0pKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCBzaGVsbCA9IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHNoZWxsUm93cy5maW5kKChzKSA9PiBgc2hlbGwtJHtzLmlkfWAgPT09IGZtLmN1cnJlbnQoKSlcbiAgICAgIGlmIChzaGVsbCkge1xuICAgICAgICBpZiAoc2hlbGwuc3RhdHVzID09PSAncnVubmluZycpIGtpbGxTaGVsbChzaGVsbClcbiAgICAgICAgZWxzZSBkaXNtaXNzU2hlbGwoc2hlbGwpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0ID09PSAnYWdlbnQtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiBhZ2VudFJvd3MuZmluZCgocm93KSA9PiBgYWdlbnQtJHtyb3cuaWR9YCA9PT0gdGFyZ2V0KVxuICAgICAgaWYgKGl0ZW0/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nKSBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pXG4gICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgIGlmIChbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoaXRlbS5zdGF0dXMpKSBjYW5jZWxBZ2VudChpdGVtKVxuICAgICAgICBlbHNlIGRpc21pc3NBZ2VudChpdGVtKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyAmJiBidXN5KCkgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGludGVycnVwdCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2MnKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gICAgICBpZiAobm93IC0gcmVmcy5xdWl0QXQgPCAxNTAwKSB7XG4gICAgICAgIGF3YWl0IGN0bC5zaHV0ZG93bigpXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmcy5xdWl0QXQgPSBub3dcbiAgICAgICAgY29uc3QgcnVubmluZyA9IGJvb3Quc2hlbGxzLnJ1bm5pbmcoKVxuICAgICAgICBmbGFzaChydW5uaW5nID8gYCR7cnVubmluZ30gJHtydW5uaW5nID09PSAxID8gJ3NoZWxsJyA6ICdzaGVsbHMnfSBydW5uaW5nICBjdHJsK2MgYWdhaW4gdG8gZXhpdCBhbmQga2lsbCAke3J1bm5pbmcgPT09IDEgPyAnaXQnIDogJ3RoZW0nfWAgOiAnY3RybCtjIGFnYWluIHRvIGV4aXQnKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ2ZlZWQnKSAmJiBldmVudC5rZXkgPT09ICcvJykge1xuICAgICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICAgIGNvbnZlcnNhdGlvblNlYXJjaC5vcGVuKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncicgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGF3YWl0IGxvYWRGdWxsSGlzdG9yeSgpXG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGVsc2UgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIGVsc2Ugc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgZWxzZSBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdiJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbbnVsbCwgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgICAgICBjb25zdCBuZXh0ID0gb3JkZXJbKG9yZGVyLmluZGV4T2YoZWZmb3J0KCkgPz8gbnVsbCkgKyAxKSAlIG9yZGVyLmxlbmd0aF1cbiAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChuZXh0KVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93SGlzdG9yeVBhbmVsKCkpIHtcbiAgICAgIHN3aXRjaEhpc3RTY29wZSgoaGlzdFNjb3BlKCkgKyAxKSAlIEhJU1RPUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICAgIHNldE1lbVNjb3BlKChzKSA9PiAocyArIDEpICUgTUVNT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKHJlc3VtZVNjb3BlKCkgKyAxKSAlIHJlc3VtZVNjb3BlcygpLmxlbmd0aFxuICAgICAgc2V0UmVzdW1lU2NvcGUobmV4dClcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhuZXh0KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd6JyAmJiBzdGF0ZS5yZXdpbmRVbmRvICYmICFidXN5KCkgJiYgdmlldygpID09PSAnY2hhdCcpIHtcbiAgICAgIHVuZG9SZXdpbmQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgZm10RWxhcHNlZCA9IChzKSA9PiAocyA8IDYwID8gYCR7c31zYCA6IGAke01hdGguZmxvb3IocyAvIDYwKX1tICR7cyAlIDYwfXNgKVxuICBjb25zdCBlbGFwc2VkID0gZm10RWxhcHNlZChidXN5KCkgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRlZEF0KCkpIC8gMTAwMCkpIDogMClcblxuICBjb25zdCBzbGFzaFJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpXG4gIGNvbnN0IHNsYXNoUXVlcnkgPSBzbGFzaFJhbmdlPy5xdWVyeSA/PyBudWxsXG4gIGNvbnN0IHNob3dDb21tYW5kcyA9IHNsYXNoUmFuZ2UgIT09IG51bGwgJiYgIWFueVBhbmVsKClcbiAgY29uc3QgbWF0Y2hlZENvbW1hbmRzID0gIXNob3dDb21tYW5kc1xuICAgID8gW11cbiAgICA6IGNtZEN5Y2xlKClcbiAgICAgID8gY21kQ3ljbGUoKS5tYXRjaGVzXG4gICAgICA6IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gKGMuY29tbWFuZCB8fCAoc2xhc2hSYW5nZS5zdGFydCA9PT0gMCAmJiBzbGFzaFJhbmdlLmVuZCA9PT0gaW5wdXQoKS5sZW5ndGgpKSAmJiBjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNsYXNoUXVlcnkudG9Mb3dlckNhc2UoKSkpXG5cbiAgY29uc3QgYXRNYXRjaCA9IGlucHV0KCkubWF0Y2goLyhefFtcXHMoXSlAKFteXFxzQF0qKSQvKVxuICBjb25zdCBzaG93RmlsZXMgPSBhdE1hdGNoICE9PSBudWxsICYmICFzaG93Q29tbWFuZHMgJiYgIWZpbGVzRGlzbWlzc2VkKCkgJiYgIWFueVBhbmVsKClcbiAgaWYgKHNob3dGaWxlcykge1xuICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWF0Y2hlZEZpbGVzID0gc2hvd0ZpbGVzXG4gICAgPyBmaWxlTGlzdCgpXG4gICAgICAgIC5tYXAoKGYpID0+IFtmdXp6eVNjb3JlKGF0TWF0Y2hbMl0sIGYpLCBmXSlcbiAgICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVxuICAgICAgICAubWFwKChbLCBmXSkgPT4gZilcbiAgICA6IFtdXG5cbiAgYXN5bmMgZnVuY3Rpb24gcGlja0ZpbGUoZikge1xuICAgIGNvbnN0IHYgPSBpbnB1dCgpXG4gICAgY29uc3QgYXQgPSB2Lmxhc3RJbmRleE9mKCdAJylcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGF3YWl0IGN0bC5hdHRhY2hQcm9qZWN0RmlsZShmKVxuICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlciArICcgJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCArIDEpICsgZiArICcgJylcbiAgICB9XG4gICAgc2V0RmlsZUluZGV4KDApXG4gIH1cblxuICBjb25zdCBjb21wQ3R4ID0gY29tcGxldGluZygpID8gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogaW5wdXQoKSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KSA6IG51bGxcbiAgY29uc3Qgc2hvd0NvbXBsZXRpb24gPSAhIWNvbXBDdHggJiYgY29tcEN0eC5tYXRjaGVzLmxlbmd0aCA+IDAgJiYgIXNob3dDb21tYW5kcyAmJiAhc2hvd0ZpbGVzICYmICFhbnlQYW5lbCgpXG5cbiAgY29uc3QgcmV3aW5kRW50cmllcyA9ICgpID0+IHVzZXJFbnRyaWVzKGRlcml2ZWQoKSlcbiAgY29uc3QgcmV3aW5kT3B0aW9ucyA9ICgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmV3aW5kVGFyZ2V0KClcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIFtdXG4gICAgY29uc3QgeyBtc2dzLCBlZGl0cyB9ID0gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCB0YXJnZXQuaW5kZXgpXG4gICAgY29uc3QgZSA9IGVkaXRzLmxlbmd0aFxuICAgIGNvbnN0IGVkaXRzTGFiZWwgPSBgJHtlfSAke2UgPT09IDEgPyAnZWRpdCcgOiAnZWRpdHMnfWBcbiAgICBjb25zdCBvcHRzID0gW11cbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2JvdGgnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBhbmQgY29udmVyc2F0aW9uJywgZGVzYzogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHtcbiAgICAgIGtleTogJ2NoYXQnLFxuICAgICAgbGFiZWw6IGUgPiAwID8gJ3Jlc3RvcmUgY29udmVyc2F0aW9uIG9ubHknIDogJ3Jlc3RvcmUgY29udmVyc2F0aW9uJyxcbiAgICAgIGRlc2M6IGUgPiAwID8gJ2NoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGZpbGUgY2hhbmdlcyBrZXB0JyA6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBkcm9wcyAke21zZ3N9IGVudHJpZXNgLFxuICAgIH0pXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdjb2RlJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgb25seScsIGRlc2M6IGBjb252ZXJzYXRpb24ga2VwdCAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goeyBrZXk6ICdzdW1tYXJ5JywgbGFiZWw6ICdyZXdpbmQgYW5kIGtlZXAgYSBzdW1tYXJ5JywgZGVzYzogJ2Ryb3BwZWQgZW50cmllcyBjb2xsYXBzZSBpbnRvIGEgb25lLWxpbmUgbm90ZScgfSlcbiAgICByZXR1cm4gb3B0c1xuICB9KSgpXG5cbiAgY29uc3QgdXNhZ2UgPSBsaXZlVXNhZ2UoKSB8fCBkZXJpdmVkKCkudXNhZ2VBY3RpdmVcbiAgY29uc3QgY29udGV4dFBlcmNlbnQgPSBtb2RlbCgpLmNvbnRleHQgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdE1vZGVsID09PSBtb2RlbCgpLm5hbWVcbiAgICA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgLyBtb2RlbCgpLmNvbnRleHQpICogMTAwKSlcbiAgICA6IDBcbiAgY29uc3QgdmlzaWJsZVNoZWxscyA9IHNoZWxsUm93c1xuICBjb25zdCB2aWV3ZWRTaGVsbCA9IHZpZXdlZFNoZWxsSWQoKSA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gdmlld2VkU2hlbGxJZCgpKSA6IG51bGxcbiAgY29uc3QgY29tYmluZWRBY3Rpdml0eSA9IHZpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMFxuICBjb25zdCBzaGVsbFN0cmlwRm9jdXMgPSBmbS5pcygnc2hlbGwtc3RyaXAnKSB8fCAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ3NoZWxsLScpKSA/IGZtLmN1cnJlbnQoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsSWQgPSBzaGVsbFN0cmlwRm9jdXMgJiYgc2hlbGxTdHJpcEZvY3VzICE9PSAnc2hlbGwtbWFpbicgPyBzaGVsbFN0cmlwRm9jdXMuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsID0gZm9jdXNlZFNoZWxsSWQgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IGZvY3VzZWRTaGVsbElkKSA6IG51bGxcbiAgY29uc3QgaGludGVkU2hlbGwgPSBmb2N1c2VkU2hlbGwgfHwgdmlld2VkU2hlbGxcbiAgY29uc3Qgc2hlbGxBY3Rpb25IaW50ID0gaGludGVkU2hlbGwgPyBgY3RybCt4ICR7aGludGVkU2hlbGwuc3RhdHVzID09PSAncnVubmluZycgPyAna2lsbCcgOiAnZGlzbWlzcyd9YCA6ICcnXG4gIGNvbnN0IHNoZWxsV2luZG93VGFyZ2V0ID0gc2hlbGxTdHJpcEZvY3VzID09PSAnc2hlbGwtbWFpbicgPyAwIDogdmlzaWJsZVNoZWxscy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IChmb2N1c2VkU2hlbGxJZCB8fCB2aWV3ZWRTaGVsbElkKCkpKVxuICBjb25zdCBzaGVsbFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChzaGVsbFdpbmRvd09mZnNldCgpLCBzaGVsbFdpbmRvd1RhcmdldCwgdmlzaWJsZVNoZWxscy5sZW5ndGgsIHNoZWxsU3RyaXBTaXplKVxuICBpZiAoc2hlbGxXaW5kb3dTdGFydCAhPT0gc2hlbGxXaW5kb3dPZmZzZXQoKSkgc2V0U2hlbGxXaW5kb3dPZmZzZXQoc2hlbGxXaW5kb3dTdGFydClcbiAgY29uc3Qgc2hlbGxXaW5kb3cgPSB2aXNpYmxlU2hlbGxzLnNsaWNlKHNoZWxsV2luZG93U3RhcnQsIHNoZWxsV2luZG93U3RhcnQgKyBzaGVsbFN0cmlwU2l6ZSlcbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IHZpc2libGVBZ2VudHMgPSBhZ2VudFJvd3NcbiAgY29uc3Qgdmlld2VkQWdlbnQgPSB2aWV3ZWRBZ2VudElkKCkgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHZpZXdlZEFnZW50SWQoKSkgOiBudWxsXG4gIGNvbnN0IGFnZW50U3RyaXBGb2N1cyA9IGZtLmlzKCdhZ2VudC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnYWdlbnQtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnRJZCA9IGFnZW50U3RyaXBGb2N1cyAmJiBhZ2VudFN0cmlwRm9jdXMgIT09ICdhZ2VudC1tYWluJyA/IGFnZW50U3RyaXBGb2N1cy5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnQgPSBmb2N1c2VkQWdlbnRJZCA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gZm9jdXNlZEFnZW50SWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRBZ2VudCA9IGZvY3VzZWRBZ2VudCB8fCB2aWV3ZWRBZ2VudFxuICBjb25zdCBhZ2VudEFjdGlvbkhpbnQgPSBoaW50ZWRBZ2VudFxuICAgID8gYGN0cmwreCAke1sncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhoaW50ZWRBZ2VudC5zdGF0dXMpID8gJ2NhbmNlbCcgOiAnZGlzbWlzcyd9YFxuICAgIDogJydcbiAgY29uc3QgYWdlbnRXaW5kb3dUYXJnZXQgPSBhZ2VudFN0cmlwRm9jdXMgPT09ICdhZ2VudC1tYWluJ1xuICAgID8gMFxuICAgIDogdmlzaWJsZUFnZW50cy5maW5kSW5kZXgoKGEpID0+IGEuaWQgPT09IChmb2N1c2VkQWdlbnRJZCB8fCB2aWV3ZWRBZ2VudElkKCkpKVxuICBjb25zdCBhZ2VudFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChhZ2VudFdpbmRvd09mZnNldCgpLCBhZ2VudFdpbmRvd1RhcmdldCwgdmlzaWJsZUFnZW50cy5sZW5ndGgsIGFnZW50U3RyaXBTaXplKVxuICBpZiAoYWdlbnRXaW5kb3dTdGFydCAhPT0gYWdlbnRXaW5kb3dPZmZzZXQoKSkgc2V0QWdlbnRXaW5kb3dPZmZzZXQoYWdlbnRXaW5kb3dTdGFydClcbiAgY29uc3QgYWdlbnRXaW5kb3cgPSB2aXNpYmxlQWdlbnRzLnNsaWNlKGFnZW50V2luZG93U3RhcnQsIGFnZW50V2luZG93U3RhcnQgKyBhZ2VudFN0cmlwU2l6ZSlcbiAgY29uc3QgcGVuZGluZ1dha2V1cHMgPSBib290Lndha2V1cHMucGVuZGluZygpXG4gIGdpdFZlcnNpb24oKVxuICBjb25zdCBnaXRJbmZvID0gZ2l0Rm9vdGVyKCkgPyBib290LmdpdC5zdGF0dXMoKSA6IG51bGxcblxuICBpZiAodmlldygpID09PSAnaGVscCcpIHtcbiAgICByZXR1cm4gPEhlbHAgY29tbWFuZHM9e0NPTU1BTkRTfSBvbkNsb3NlPXsoKSA9PiBzZXRWaWV3KCdjaGF0Jyl9IC8+XG4gIH1cblxuICBoaWdobGlnaHRWZXJzaW9uKClcblxuICBjb25zdCBtYWluVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0IDogZGVyaXZlZCgpLnRyYW5zY3JpcHRcbiAgY29uc3Qgc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCA9IHN0ZWVyUm93cygpW3N0ZWVyKCk/LnNlbGVjdGVkXT8ubWVzc2FnZUlkXG4gIGNvbnN0IGRlY29yYXRlZFRyYW5zY3JpcHQgPSBzdGVlcigpID8gbWFpblRyYW5zY3JpcHQubWFwKChpdGVtKSA9PiAoe1xuICAgIC4uLml0ZW0sXG4gICAgc3RlZXJTZWxlY3RlZDogaXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWQsXG4gIH0pKSA6IG1haW5UcmFuc2NyaXB0XG4gIGNvbnN0IGFjdGl2ZVNoZWxsID0gc2hlbGxTdHJpcEZvY3VzID8gZm9jdXNlZFNoZWxsIDogYWdlbnRTdHJpcEZvY3VzID8gbnVsbCA6IHZpZXdlZFNoZWxsXG4gIGNvbnN0IGFjdGl2ZUFnZW50ID0gYWdlbnRTdHJpcEZvY3VzID8gZm9jdXNlZEFnZW50IDogc2hlbGxTdHJpcEZvY3VzID8gbnVsbCA6IHZpZXdlZEFnZW50XG4gIGxldCBzaGVsbE91dHB1dCA9IG51bGxcbiAgaWYgKGFjdGl2ZVNoZWxsKSB7XG4gICAgdHJ5IHsgc2hlbGxPdXRwdXQgPSBib290LnNoZWxscy5vdXRwdXQoYWN0aXZlU2hlbGwuaWQsIHsgdGFpbDogMjAwMCB9KSB9IGNhdGNoIHt9XG4gIH1cbiAgY29uc3Qgc2hlbGxUcmFuc2NyaXB0ID0gYWN0aXZlU2hlbGwgPyBbXG4gICAgeyBraW5kOiAnc2hlbGwtY29tbWFuZCcsIHRleHQ6IGFjdGl2ZVNoZWxsLmNvbW1hbmQgfSxcbiAgICB7IGtpbmQ6ICdzaGVsbC1vdXRwdXQnLCB0ZXh0OiBzaGVsbE91dHB1dD8ub3V0cHV0IHx8ICdubyBvdXRwdXQgeWV0JyB9LFxuICBdIDogbnVsbFxuICBjb25zdCB0cmFuc2NyaXB0U291cmNlID0gYWN0aXZlU2hlbGwgPyBgc2hlbGw6JHthY3RpdmVTaGVsbC5pZH1gIDogYWN0aXZlQWdlbnQgPyBgYWdlbnQ6JHthY3RpdmVBZ2VudC5pZH1gIDogJ21haW4nXG4gIGNvbnN0IGxpdmVQZWVySWRzID0gbmV3IFNldChvdmVybGF5KCkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICdwZWVyJykubWFwKChpdGVtKSA9PiBpdGVtLm1lc3NhZ2VJZCkpXG4gIGNvbnN0IHVucmVhZFBlZXJzID0gZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmtpbmQgPT09ICdwZWVyJyAmJiBpdGVtLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nJyAmJiAhaXRlbS5yZWFkKVxuICBjb25zdCB1bnJlYWRQZWVySWRzID0gbmV3IFNldCh1bnJlYWRQZWVycy5tYXAoaXRlbSA9PiBpdGVtLm1lc3NhZ2VJZCkpXG4gIGNvbnN0IHRyYW5zY3JpcHQgPSBzaGVsbFRyYW5zY3JpcHQgfHwgKGFjdGl2ZUFnZW50ID8gYWdlbnRUcmFuc2NyaXB0KGFjdGl2ZUFnZW50KSA6IGRlY29yYXRlZFRyYW5zY3JpcHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICdwZWVyJyB8fCAoIWxpdmVQZWVySWRzLmhhcyhpdGVtLm1lc3NhZ2VJZCkgJiYgIXVucmVhZFBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSkpKVxuICBjb25zdCBkZWxpYmVyYXRpb25WaWV3ID0gYWN0aXZlQWdlbnQ/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nXG4gIGNvbnN0IGlzb2xhdGVkVHJhbnNjcmlwdCA9IGFjdGl2ZUFnZW50IHx8IGFjdGl2ZVNoZWxsXG4gIGNvbnN0IGdyb3VwSXRlbXMgPSAoc291cmNlLCBhY3RpdmUgPSBmYWxzZSkgPT4gc3RlZXIoKVxuICAgID8gY29sbGFwc2VTdGVlclRvb2xzKHNvdXJjZSlcbiAgICA6IGNvbXBhY3RUb29sSGlzdG9yeSgpXG4gICAgICA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhzb3VyY2UsIGFjdGl2ZSlcbiAgICAgIDogc291cmNlXG4gIGNvbnN0IHRyYW5zY3JpcHRJdGVtcyA9IGdyb3VwSXRlbXModHJhbnNjcmlwdCwgYWN0aXZlQWdlbnQ/LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKVxuICBjb25zdCB3aW5kb3dlZCA9IGRlbGliZXJhdGlvblZpZXcgPyB7IGl0ZW1zOiB0cmFuc2NyaXB0SXRlbXMsIGhpZGRlbkl0ZW1zOiAwLCBoaWRkZW5Db3VudDogMCB9IDogdHJhbnNjcmlwdFdpbmRvdyh0cmFuc2NyaXB0SXRlbXMsIGhpc3RXaW5kb3coKSlcbiAgY29uc3QgaGlkZGVuQ291bnQgPSB3aW5kb3dlZC5oaWRkZW5Db3VudCArICghYWN0aXZlQWdlbnQgJiYgIWFjdGl2ZVNoZWxsID8gZGVyaXZlZCgpLnRyYW5zY3JpcHRPZmZzZXQgfHwgMCA6IDApXG4gIGNvbnN0IHZpc2libGVJdGVtcyA9IGlzb2xhdGVkVHJhbnNjcmlwdCA/IHdpbmRvd2VkLml0ZW1zIDogWy4uLndpbmRvd2VkLml0ZW1zLCAuLi5ncm91cEl0ZW1zKG92ZXJsYXkoKSwgdHVyblBoYXNlKCkgPT09ICd0b29scycpLCAuLi4oc3RyZWFtaW5nKCkgPyBbeyBraW5kOiAnYXNzaXN0YW50JywgdGV4dDogYCR7c3RyZWFtaW5nKCl9XHUyNThCYCB9XSA6IFtdKSwgLi4udW5yZWFkUGVlcnNdXG4gIGNvbnN0IHByZXBhcmVkQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uU2VhcmNoLnByZXBhcmUodmlzaWJsZUl0ZW1zKVxuICBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzID0gcHJlcGFyZWRDb252ZXJzYXRpb24ubWF0Y2hlc1xuICBjb25zdCBpdGVtcyA9IHByZXBhcmVkQ29udmVyc2F0aW9uLml0ZW1zXG5cbiAgY29uc3Qgd29ya3NwYWNlV2lkdGggPSBNYXRoLm1pbigzOCwgTWF0aC5tYXgoMTgsIE1hdGguZmxvb3IodGVybWluYWxXaWR0aCgpIC8gMykpKVxuICBjb25zdCB3aWRlTGF5b3V0ID0gd2lkZVNpZGViYXIoKSAmJiB0ZXJtaW5hbFdpZHRoKCkgLSAod29ya3NwYWNlT3BlbigpID8gd29ya3NwYWNlV2lkdGggOiAwKSA+IDE2MFxuXG4gIGlmIChzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVtb3J5UGFuZWxcbiAgICAgICAgbWVtb3JpZXM9e21lbW9yeUxpc3QoKS5maWx0ZXIoKG0pID0+IE1FTU9SWV9TQ09QRVNbbWVtU2NvcGUoKV0gPT09ICdhbGwnIHx8IG0uc2NvcGUgPT09IE1FTU9SWV9TQ09QRVNbbWVtU2NvcGUoKV0pfVxuICAgICAgICBzY29wZXM9e01FTU9SWV9TQ09QRVN9XG4gICAgICAgIHNjb3BlSW5kZXg9e21lbVNjb3BlKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGVEaXNhYmxlZD17dG9nZ2xlTWVtb3J5RGlzYWJsZWR9XG4gICAgICAgIG9uRm9yZ2V0PXtmb3JnZXRNZW1vcnl9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNZW1vcnlQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93TWNwUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWNwUGFuZWxcbiAgICAgICAgc2VydmVycz17bWNwU2VydmVycygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uVG9nZ2xlPXsobmFtZSkgPT4gbWNwLnRvZ2dsZShuYW1lKX1cbiAgICAgICAgb25SZWNvbm5lY3Q9eyhuYW1lKSA9PiBtY3AucmVjb25uZWN0KG5hbWUpfVxuICAgICAgICBvblJlbW92ZT17KG5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMubWNwUmVtb3ZlQXJtXG4gICAgICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5uYW1lICE9PSBuYW1lIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0geyBuYW1lLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byByZW1vdmUgXCIke25hbWV9XCIgYW5kIGl0cyBjb25maWdgKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWZzLm1jcFJlbW92ZUFybSA9IG51bGxcbiAgICAgICAgICBtY3AucmVtb3ZlKG5hbWUpXG4gICAgICAgICAgZmxhc2goYHJlbW92ZWQgbWNwIHNlcnZlciAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25BZGQ9eyhuYW1lLCBjb21tYW5kLCBzY29wZSkgPT4ge1xuICAgICAgICAgIG1jcC5hZGQobmFtZSwgY29tbWFuZCwgc2NvcGUpXG4gICAgICAgICAgZmxhc2goYGFkZGVkICR7bmFtZX0gKCR7c2NvcGV9KWApXG4gICAgICAgIH19XG4gICAgICAgIG9uRWRpdD17KG5hbWUsIGNvbW1hbmQpID0+IHtcbiAgICAgICAgICBtY3AudXBkYXRlKG5hbWUsIGNvbW1hbmQpXG4gICAgICAgICAgZmxhc2goYHVwZGF0ZWQgJHtuYW1lfWApXG4gICAgICAgIH19XG4gICAgICAgIG9uSW52YWxpZD17Zmxhc2h9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNY3BQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93UmVzdW1lUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVzdW1lUGFuZWxcbiAgICAgICAgc2Vzc2lvbnM9e3Jlc3VtZVNlc3Npb25zKCl9XG4gICAgICAgIHNjb3Blcz17cmVzdW1lU2NvcGVzKCl9XG4gICAgICAgIHNjb3BlSW5kZXg9e3Jlc3VtZVNjb3BlKCl9XG4gICAgICAgIGxvYWRpbmc9e3Jlc3VtZUxvYWRpbmcoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBjdXJyZW50SWQ9e3N0YXRlLnNlc3Npb24/LmlkfVxuICAgICAgICBvblBpY2s9eyhtZXRhKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGEuaGVhZGVyLmlkID09PSBzdGF0ZS5zZXNzaW9uPy5pZCkgcmV0dXJuIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICAgICAgICByZXN1bWVTZXNzaW9uKG1ldGEpXG4gICAgICAgIH19XG4gICAgICAgIG9uRGVsZXRlPXtkZWxldGVTZXNzaW9uTWV0YX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dQcm9qZWN0UGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8UHJvamVjdFBhbmVsXG4gICAgICAgIHByb2plY3RzPXtwcm9qZWN0cygpfVxuICAgICAgICBsb2FkaW5nPXtwcm9qZWN0c0xvYWRpbmcoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblBpY2tDaGVja291dD17KGNoZWNrb3V0KSA9PiBjaGVja291dC5sYXRlc3QgPyByZXN1bWVTZXNzaW9uKGNoZWNrb3V0LmxhdGVzdCkgOiBjdGwuc3dpdGNoVG9Xb3JrdHJlZShjaGVja291dCkudGhlbigoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKSl9XG4gICAgICAgIG9uUGlja1Nlc3Npb249e3Jlc3VtZVNlc3Npb259XG4gICAgICAgIG9uQWRkV29ya3RyZWU9e2FkZFByb2plY3RXb3JrdHJlZX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVByb2plY3RDaGVja291dH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93Q29uZmlnUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlnUGFuZWxcbiAgICAgICAgdmFsdWVzPXt7IGNsb3VkczogY2xvdWRzKCksIGNvbXBhY3RUb29sczogY29tcGFjdFRvb2xIaXN0b3J5KCksIGdpdFN0YXR1czogZ2l0Rm9vdGVyKCksIHdpZGVTaWRlYmFyOiB3aWRlU2lkZWJhcigpLCByZXNlYXJjaE1vZGVsOiBib290LnJlc2VhcmNoTW9kZWwsIHNoZWxsTW9kZWw6IGJvb3Quc2hlbGxNb2RlbCwgZGVsaWJlcmF0aW9uTW9kZWw6IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwsIHBhcnRpY2lwYW50QU1vZGVsOiBib290LnBhcnRpY2lwYW50QU1vZGVsLCBwYXJ0aWNpcGFudEJNb2RlbDogYm9vdC5wYXJ0aWNpcGFudEJNb2RlbCwgcmVzZWFyY2hBZ2VudExpbWl0OiByZXNlYXJjaEFnZW50TGltaXQoKSB9fVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja1NoZWxsTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKHRydWUpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tSZXNlYXJjaE1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1BhcnRpY2lwYW50TW9kZWw9eyh0YXJnZXQpID0+IHtcbiAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KHRhcmdldClcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja0RlbGliZXJhdGlvbk1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2hhbmdlPXsobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Nsb3VkcycpIHtcbiAgICAgICAgICAgIHNldENsb3Vkcyh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgYW5pbWF0aW9uOiB7IGNsb3VkczogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2dpdFN0YXR1cycpIHtcbiAgICAgICAgICAgIHNldEdpdEZvb3Rlcih2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QuZ2l0Rm9vdGVyID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IGdpdEZvb3RlcjogdmFsdWUgfSlcbiAgICAgICAgICAgIGJvb3QuZ2l0LnNldEVuYWJsZWQodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgZ2l0U3RhdHVzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2lkZVNpZGViYXInKSB7XG4gICAgICAgICAgICBzZXRXaWRlU2lkZWJhcih2YWx1ZSlcbiAgICAgICAgICAgIGJvb3Qud2lkZVNpZGViYXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgd2lkZVNpZGViYXI6IHZhbHVlIH0pXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgd2lkZVNpZGViYXI6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZXNlYXJjaEFnZW50TGltaXQnKSB7XG4gICAgICAgICAgICBzZXRSZXNlYXJjaEFnZW50TGltaXQodmFsdWUpXG4gICAgICAgICAgICBib290LnJlc2VhcmNoQWdlbnRMaW1pdCA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyByZXNlYXJjaEFnZW50TGltaXQ6IHZhbHVlIH0pXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IHJlc2VhcmNoOiB7IGFnZW50TGltaXQ6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0Q29tcGFjdFRvb2xIaXN0b3J5KHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IGNvbXBhY3RUb29sSGlzdG9yeTogdmFsdWUgfSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6ICcxMDAlJyB9fT5cbiAgICAgIHt3b3Jrc3BhY2VPcGVuKCkgJiYgPFdvcmtzcGFjZVNpZGViYXIgZ3JvdXBzPXt3b3Jrc3BhY2VHcm91cHNOb3d9IHNlbGVjdGVkPXt3b3Jrc3BhY2VTZWxlY3RlZCgpfSB3aWR0aD17d29ya3NwYWNlV2lkdGh9IGxvYWRpbmc9e3dvcmtzcGFjZUxvYWRpbmcoKX0gZXJyb3I9e3dvcmtzcGFjZUVycm9yKCl9IG9uSGVpZ2h0PXsoaGVpZ2h0KSA9PiB7IGlmICh3b3Jrc3BhY2VIZWlnaHQoKSAhPT0gaGVpZ2h0KSBzZXRXb3Jrc3BhY2VIZWlnaHQoaGVpZ2h0KSB9fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogd2lkZUxheW91dCA/ICdyb3cnIDogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBmbGV4QmFzaXM6IDAsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxLCBiZzogUEFORUxfQkcgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpXG4gICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtQQU5FTF9CR30gZHVyYXRpb249ezE1MDB9IHJldmVyc2U+XG4gICAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgICA6IHR1cm5QaGFzZSgpID09PSAndGhpbmtpbmcnID8gJ1RoaW5raW5nJyA6IHR1cm5QaGFzZSgpID09PSAndG9vbHMnID8gJ1dvcmtpbmcnIDogJ1Jlc3BvbmRpbmcnfVxuICAgICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7ZWxhcHNlZH0gIGVzYyB0byBpbnRlcnJ1cHRgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgICA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+fVxuICAgICAgICA8L2JveD5cbiAgICAgICAge2dpdEluZm8/LmJyYW5jaCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntnaXRJbmZvLmJyYW5jaH08L3RleHQ+fVxuICAgICAgICB7Z2l0SW5mbz8uYWRkZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57YCske2dpdEluZm8uYWRkZWR9YH08L3RleHQ+fVxuICAgICAgICB7Z2l0SW5mbz8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57YC0ke2dpdEluZm8ucmVtb3ZlZH1gfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICAgIHt0cmFuc2NyaXB0Lmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZSB2ZXJzaW9uPXt2ZXJzaW9ufSBjbG91ZHM9e2Nsb3VkcygpfSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge2RlbGliZXJhdGlvblZpZXcgJiYgaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICd1c2VyJykubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnByb21wdDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyLCBwYWRkaW5nUmlnaHQ6IDQsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhTaHJpbms6IDAgfX0+XG4gICAgICAgICAgICA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX1cbiAgICAgICAgICBmb2N1c2VkPXshZGVsaWJlcmF0aW9uVmlldyAmJiAoZm0uaXMoJ2ZlZWQnKSB8fCBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKX1cbiAgICAgICAgICBmb2xsb3dGb2N1cz17c3RlZXIoKSA/IHN0ZWVyTGlzdEZvY3VzIDogbnVsbH1cbiAgICAgICAgICBmb2N1c1BhZGRpbmc9ezF9XG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0PXtmb2xsb3coKSA/IDFlOSA6IG9mZnNldCgpfVxuICAgICAgICAgIG9uTWV0cmljcz17KG1ldHJpY3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdHJhbnNjcmlwdE1ldHJpY3MoKVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzPy52aXNpYmxlSGVpZ2h0ID09PSBtZXRyaWNzLnZpc2libGVIZWlnaHQgJiYgcHJldmlvdXM/LmNvbnRlbnRIZWlnaHQgPT09IG1ldHJpY3MuY29udGVudEhlaWdodCkgcmV0dXJuXG4gICAgICAgICAgICBzZXRUcmFuc2NyaXB0TWV0cmljcyhtZXRyaWNzKVxuICAgICAgICAgICAgaWYgKGhpZGRlbkNvdW50ID4gMCAmJiBtZXRyaWNzLnZpc2libGVIZWlnaHQgPiAwICYmIG1ldHJpY3MuY29udGVudEhlaWdodCA8PSBtZXRyaWNzLnZpc2libGVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvd2VkLmhpZGRlbkNvdW50ID09PSAwKSB2b2lkIGxvYWRPbGRlckhpc3RvcnkoKVxuICAgICAgICAgICAgICBzZXRIaXN0V2luZG93KChzaXplKSA9PiBzaXplICsgSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblNjcm9sbD17KG5leHQsIG1ldGEpID0+IHtcbiAgICAgICAgICBzZXRGb2xsb3coISFtZXRhPy5hdEJvdHRvbSlcbiAgICAgICAgICAvLyBiYWNrIGF0IHRoZSBib3R0b206IGxvYWRlZCBoaXN0b3J5IGlzIG9mZi1zY3JlZW4sIHNvIHJlLWhpZGluZ1xuICAgICAgICAgIC8vIGl0IGlzIGludmlzaWJsZSBhbmQgcmVzdG9yZXMgdGhlIHNtYWxsIHJlbmRlciB3aW5kb3dcbiAgICAgICAgICBpZiAobWV0YT8uYXRCb3R0b20gJiYgaGlzdFdpbmRvdygpID4gSElTVE9SWV9XSU5ET1cpIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgaWYgKG5leHQgPT09IDAgJiYgaGlkZGVuQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHRoZSB2aWV3IGFuY2hvcmVkOiBlc3RpbWF0ZSB0aGUgcm93cyB0aGUgbmV3IGJhdGNoIGFkZHNcbiAgICAgICAgICAgIC8vIGFuZCBzY3JvbGwgcGFzdCB0aGVtIHNvIHRoZSBjdXJyZW50IHRvcCBpdGVtIHN0YXlzIGluIHBsYWNlXG4gICAgICAgICAgICBpZiAod2luZG93ZWQuaGlkZGVuQ291bnQgPT09IDApIHZvaWQgbG9hZE9sZGVySGlzdG9yeSgpXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IE1hdGgubWluKEhJU1RPUllfV0lORE9XLCB3aW5kb3dlZC5oaWRkZW5JdGVtcyB8fCBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIGNvbnN0IGF2Z1Jvd3MgPSBNYXRoLm1heCgyLCBNYXRoLnJvdW5kKChtZXRhPy5tYXhPZmZzZXQgfHwgMCkgLyBNYXRoLm1heCgxLCBpdGVtcy5sZW5ndGgpKSlcbiAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHcpID0+IHcgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIHNldE9mZnNldChhZGRlZCAqIGF2Z1Jvd3MpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0T2Zmc2V0KG5leHQpXG4gICAgICAgIH19XG4gICAgICAgIHNjcm9sbGJhclxuICAgICAgPlxuICAgICAgICA8Q29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yIHRhcmdldD17Y29udmVyc2F0aW9uU2VhcmNoLnNjcm9sbH0gLz5cbiAgICAgICAge2hpZGRlbkNvdW50ID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyMzAzICR7aGlkZGVuQ291bnQudG9Mb2NhbGVTdHJpbmcoKX0gb2xkZXIgJHtoaWRkZW5Db3VudCA9PT0gMSA/ICdtZXNzYWdlJyA6ICdtZXNzYWdlcyd9ICBzY3JvbGwgdG8gdG9wIHRvIGxvYWRgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2RlbGliZXJhdGlvblZpZXcgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxEZWxpYmVyYXRpb25FeGNoYW5nZSB0dXJucz17aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpfSB2ZXJib3NlPXt2ZXJib3NlKCl9IHdpZGU9e3Rlcm1pbmFsV2lkdGgoKSA+PSAxMTB9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5KCl9IHZpZXdwb3J0SGVpZ2h0PXt0cmFuc2NyaXB0TWV0cmljcygpPy52aXNpYmxlSGVpZ2h0fSBmb2N1c2VkPXtmbS5pcygnZmVlZCcpfSBvbkZvY3VzPXsoKSA9PiBmbS5mb2N1cygnZmVlZCcpfSAvPlxuICAgICAgICAgICAge2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kICE9PSAndXNlcicgJiYgaXRlbS5raW5kICE9PSAnZGVsaWJlcmF0aW9uLXR1cm4nKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Uga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfTp0YWlsOiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaX1gfSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gc3RlZXIoKSAmJiBpdGVtLm1lc3NhZ2VJZCA/IChcbiAgICAgICAgICA8U3RlZXJNZXNzYWdlXG4gICAgICAgICAgICBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaGlkZGVuQ291bnQgKyBpfWB9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZSgpfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2l0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkfVxuICAgICAgICAgICAgZm9jdXM9e3N0ZWVyTGlzdEZvY3VzfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBjdXJyZW50TWF0Y2g9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldPy5pdGVtSW5kZXggPT09IGkgPyBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzW2NvbnZlcnNhdGlvblNlYXJjaC5pbmRleCgpXSA6IG51bGx9XG4gICAgICAgICAgICBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgIHtjb252ZXJzYXRpb25TZWFyY2guYWN0aXZlKCkgPyAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaEJhciBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH0gbWF0Y2hlcz17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc30gLz5cbiAgICAgICAgKSA6IGZtLmlzKCdmZWVkJykgJiYgIWFueVBhbmVsKCkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogYWNjZW50KCksIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6ICdibGFjaycgfX0+eydqL2sgIFx1MjE5MS9cdTIxOTMgc2Nyb2xsICAgZy9HIGVuZHMgICAvIHNlYXJjaCAgIGN0cmwtdS9kIHBhZ2UnfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94Pn1cblxuICAgICAgeyhleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7ZXhwZWRpdGVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YGV4cGVkaXRlZC0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57J1x1MjFBMCAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogYWNjZW50KCkgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnICBhZnRlciBuZXh0IHRvb2wgIFx1MjE5MSB0byBlZGl0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge3F1ZXVlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BwZW5kaW5nLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnXHUyMDNBICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiBleHBlZGl0ZWQoKS5sZW5ndGggPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICBwZW5kaW5nICBcdTIxOTEgZWRpdCAgXHUyMTkyIHNlbmQgYWZ0ZXIgbmV4dCB0b29sJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge2NvbW1hbmRGb3JtKCkgJiYgPENvbW1hbmRGb3JtXG4gICAgICAgIG5hbWU9e2NvbW1hbmRGb3JtKCkubmFtZX1cbiAgICAgICAgZmllbGRzPXtjb21tYW5kRm9ybSgpLmZpZWxkc31cbiAgICAgICAgZmlsZXM9e2ZpbGVMaXN0KCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZXMpID0+IGZpbmlzaENvbW1hbmQoY29tbWFuZEZvcm0oKSwgdmFsdWVzKX1cbiAgICAgICAgb25DYW5jZWw9eygpID0+IHsgc2V0Q29tbWFuZEZvcm0obnVsbCk7IHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGw7IGZtLmZvY3VzKCdpbnB1dCcpIH19XG4gICAgICAvPn1cblxuICAgICAge3F1ZXN0aW9uUmVxdWVzdCgpICYmIChcbiAgICAgICAgPFF1ZXN0aW9uRm9ybVxuICAgICAgICAgIHJlcXVlc3Q9e3F1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIGZvY3VzZWQ9eyF3b3Jrc3BhY2VPcGVuKCkgJiYgZm0uaXMoJ3F1ZXN0aW9uJykgJiYgIWFueVBhbmVsKCl9XG4gICAgICAgICAgb25TdWJtaXQ9eyhhbnN3ZXJzKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmFuc3dlclF1ZXN0aW9uKGFuc3dlcnMpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICAgICAgICAgIGN0bC5jYW5jZWxRdWVzdGlvbigpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzdGVlcigpICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3N0ZWVyKCkuZWRpdGluZyA/IGAke3N0ZWVyKCkuYWRkaW5nID8gJ0FkZCcgOiAnRWRpdCd9ICR7c3RlZXIoKS5yb2xlfWAgOiBgU3RlZXIgICR7c3RlZXIoKS5jaGFuZ2VzLmxlbmd0aH0gc3RhZ2VkYH08L3RleHQ+XG4gICAgICAgICAge3N0ZWVyKCkuZWRpdGluZyA/IChcbiAgICAgICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmbS5pcygnc3RlZXInKX1cbiAgICAgICAgICAgICAgdmFsdWU9e3N0ZWVyVGV4dCgpfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0U3RlZXJUZXh0fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17c3RhZ2VTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgICAgICAgICAgICAgIHNldFN0ZWVyKHsgLi4uc3RlZXIoKSwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBTVEVFUl9ST0xFUy5pbmRleE9mKHN0ZWVyKCkucm9sZSlcbiAgICAgICAgICAgICAgICAgIHNldFN0ZWVyKHsgLi4uc3RlZXIoKSwgcm9sZTogU1RFRVJfUk9MRVNbKGF0ICsgMSkgJSBTVEVFUl9ST0xFUy5sZW5ndGhdIH0pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgICAgICBuZXdsaW5lT25CYWNrc2xhc2hFbnRlclxuICAgICAgICAgICAgICBjbGVhck9uU3VibWl0XG4gICAgICAgICAgICAgIG1heEhlaWdodD17OH1cbiAgICAgICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIxOTFcdTIxOTMgc2VsZWN0ICBlbnRlciBlZGl0ICBhIGFkZCBhZnRlciAgeC9kIGRlbGV0ZSAgY3RybCtzIGFwcGx5ICBlc2MgZGlzY2FyZCd9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3BlZXJTdGF0dXMoKSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3BlZXJTdGF0dXMoKX08L3RleHQ+fVxuICAgICAgeyFzdGVlcigpICYmICF2aWV3ZWRBZ2VudCAmJiAhdmlld2VkU2hlbGwgJiYgPE1vdXNlRm9jdXNSZWdpb24gb25QcmVzcz17KCkgPT4geyBpZiAoIXdvcmtzcGFjZU9wZW4oKSkgZm0uZm9jdXMoJ2lucHV0JykgfX0gc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IHRyYW5zY3JpcHQubGVuZ3RoID09PSAwICYmIGNsb3VkcygpID8gMCA6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfHwgISFxdWVzdGlvblJlcXVlc3QoKSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydcdTI3NkYnfTwvdGV4dD5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgeyhzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSB8fCBzZXNzaW9uTmFtZSgpKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7c3RhdGUuc2Vzc2lvbj8uaGVhZGVyLmZvcmtlZEZyb20gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntzZXNzaW9uTmFtZSgpID8gJ1x1MjQ0MiAnIDogJ1x1MjQ0Mid9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtzZXNzaW9uTmFtZSgpICYmIDx0ZXh0IHN0eWxlPXt7IGJnOiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCkgPyBhY2NlbnQoKSA6IE1VVEVELCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke3Nlc3Npb25OYW1lKCl9IGB9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgY29sb3I9e0ZHfVxuICAgICAgICAgIGxpbmVDb3VudGVyXG4gICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgdmFsdWU9e2lucHV0KCl9XG4gICAgICAgICAgY3Vyc29yT2Zmc2V0PXtpbnB1dEN1cnNvcigpfVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsoY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IpXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzKHYsIHtcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHN0YXRlLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBuZXh0SWQ6ICgpID0+ICsrc3RhdGUuaW1hZ2VDb3VudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRJbnB1dChjb252ZXJ0ZWQudGV4dCwgY29udmVydGVkLnRleHQgPT09IHYgPyBpbnB1dEN1cnNvcigpIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRGaWxlSW5kZXgoMClcbiAgICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnVzeSgpKSBpbnRlcnJ1cHQoKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGltcGxpY2l0UmV3aW5kVGFyZ2V0KGRlcml2ZWQoKSwgaW5wdXQoKSlcbiAgICAgICAgICAgICAgaWYgKHRhcmdldCkgcGVyZm9ybVJld2luZFRvKHRhcmdldCwgeyBrZXk6ICdjaGF0JyB9KVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TdWJtaXQ9e3NlbmR9XG4gICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCgoZS5rZXkgPT09ICdsZWZ0JyAmJiAhZS5jdHJsKSB8fCAoZS5rZXkgPT09ICdoJyAmJiBlLmN0cmwpKSAmJiAhZS5tZXRhICYmICFlLmFsdCAmJiBib290LndvcmtzcGFjZSAmJiBmbS5pcygnaW5wdXQnKSAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSAmJiBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyKHtcbiAgICAgICAgICAgICAgdGV4dDogZS52YWx1ZSwgYXR0YWNobWVudHM6IHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHMoZS52YWx1ZSwgc3RhdGUuYXR0YWNobWVudHMpLCBkaWN0YXRpb246IGRpY3RhdGlvblN0YXR1cygpLCBjYXB0dXJlOiBjYXB0dXJlU3RhdHVzKCksIHBlbmRpbmc6IHJlZnMuY29tbWFuZEV4cGFuc2lvbiB8fCByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyxcbiAgICAgICAgICAgICAgaGlzdG9yeTogaGlzdElkeCgpLCBjb21wbGV0aW9uOiBjb21wbGV0aW5nKCksIGNvbW1hbmQ6IGNvbW1hbmRGb3JtKCksIHF1ZXN0aW9uOiBxdWVzdGlvblJlcXVlc3QoKSwgc3RlZXI6IHN0ZWVyKCksIHF1ZXVlZDogcXVldWVkKCkubGVuZ3RoLCBleHBlZGl0ZWQ6IGV4cGVkaXRlZCgpLmxlbmd0aCxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgIHNldFdvcmtzcGFjZVNlbGVjdGVkKGJvb3Qud29ya3NwYWNlLmN1cnJlbnRJZCgpKVxuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKHRydWUpXG4gICAgICAgICAgICAgIHNldFdvcmtzcGFjZUxvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgZm0uZm9jdXMoJ3dvcmtzcGFjZScpXG4gICAgICAgICAgICAgIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZSkpIHJldHVybiB0cnVlXG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAndicpIHtcbiAgICAgICAgICAgICAgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5wYXN0ZUltYWdlKCkuZmluYWxseSgoKSA9PiB7IHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nID0gZmFsc2UgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdnJykge1xuICAgICAgICAgICAgICByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KGUpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnbycpIHtcbiAgICAgICAgICAgICAgdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGlja0ZpbGUobWF0Y2hlZEZpbGVzW01hdGgubWluKGZpbGVJbmRleCgpLCBtYXRjaGVkRmlsZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0NvbW1hbmRzICYmIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN5Y2xlID0gY21kQ3ljbGUoKVxuICAgICAgICAgICAgICBpZiAoIWN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihjbWRJbmRleCgpLCBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZSh7IG1hdGNoZXM6IG1hdGNoZWRDb21tYW5kcyB9KVxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KHN0YXJ0KVxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBtYXRjaGVkQ29tbWFuZHNbc3RhcnRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQobmV4dC50ZXh0LCBuZXh0LmN1cnNvcilcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKGNtZEluZGV4KCkgKyAxKSAlIGN5Y2xlLm1hdGNoZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgobmV4dClcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIGN5Y2xlLm1hdGNoZXNbbmV4dF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChyZXBsYWNlbWVudC50ZXh0LCByZXBsYWNlbWVudC5jdXJzb3IpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3Bhc3RlJyAmJiBlLnRleHQpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBleHRyYWN0SW1hZ2VQYXRocyhlLnRleHQpXG4gICAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZnQgPSBlLnZhbHVlXG4gICAgICAgICAgICAgICAgY29uc3QgYXQgPSBlLmN1cnNvciA/PyBkcmFmdC5sZW5ndGhcbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdGwuaWRcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwYXRocy5tYXAocGF0aCA9PiBjdGwuYXR0YWNoSW1hZ2UocGF0aCkpKS50aGVuKHBsYWNlaG9sZGVycyA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3RsLmlkICE9PSBzZXNzaW9uSWQgfHwgaW5wdXQoKSAhPT0gZHJhZnQpIHJldHVyblxuICAgICAgICAgICAgICAgICAgc2V0SW5wdXQoZHJhZnQuc2xpY2UoMCwgYXQpICsgcGxhY2Vob2xkZXJzLmpvaW4oJyAnKSArIGRyYWZ0LnNsaWNlKGF0KSlcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnYmFja3NwYWNlJyAmJiBlLmN1cnNvciA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yKS5tYXRjaCgvXFxbSW1hZ2UgI1xcZCtcXF0kLylcbiAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgY3RsLmRldGFjaEltYWdlKG1hdGNoWzBdKVxuICAgICAgICAgICAgICAgIHNldElucHV0KGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IgLSBtYXRjaFswXS5sZW5ndGgpICsgZS52YWx1ZS5zbGljZShlLmN1cnNvcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEpIHtcbiAgICAgICAgICAgICAgY29uc3QgY3R4ID0gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogZS52YWx1ZSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KVxuICAgICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIGlmICghY29tcGxldGluZygpKSB7XG4gICAgICAgICAgICAgICAgc2V0Q29tcGxldGluZyh0cnVlKVxuICAgICAgICAgICAgICAgIHNldENvbXBJbmRleCgwKVxuICAgICAgICAgICAgICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4Lm1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY2VwdENvbXBsZXRpb24oZS52YWx1ZSwgY3R4LCBjdHgubWF0Y2hlc1tNYXRoLm1pbihjb21wSW5kZXgoKSwgY3R4Lm1hdGNoZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsIHx8IGUubWV0YSB8fCBzaG93Q29tbWFuZHMgfHwgc2hvd0ZpbGVzKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3VwJyAmJiBlLnZhbHVlID09PSAnJyAmJiAoZXhwZWRpdGVkKCkubGVuZ3RoID4gMCB8fCBxdWV1ZWQoKS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICBjdGwucmVjYWxsUGVuZGluZygpLnRoZW4oc2V0SW5wdXQpLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAncmlnaHQnICYmIGUudmFsdWUgPT09ICcnICYmIHF1ZXVlZCgpLmxlbmd0aCA+IDAgJiYgYnVzeSgpICYmICFjb21wYWN0aW5nKCkpIHtcbiAgICAgICAgICAgICAgY3RsLmV4cGVkaXRlUXVldWVkKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzaW5nID0gaGlzdElkeCgpID49IDBcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3VwJyAmJiAoYnJvd3NpbmcgfHwgZS52YWx1ZSA9PT0gJycpICYmIGhpc3RJZHgoKSA8IHNlbnQoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBoaXN0SWR4KCkgKyAxXG4gICAgICAgICAgICAgIHNldEhpc3RJZHgobilcbiAgICAgICAgICAgICAgc2V0SW5wdXQoc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2Rvd24nICYmIGJyb3dzaW5nKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBoaXN0SWR4KCkgLSAxXG4gICAgICAgICAgICAgIHNldEhpc3RJZHgobilcbiAgICAgICAgICAgICAgc2V0SW5wdXQobiA8IDAgPyAnJyA6IHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgICBuZXdsaW5lT25CYWNrc2xhc2hFbnRlclxuICAgICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICAgIG1heEhlaWdodD17OH1cbiAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvTW91c2VGb2N1c1JlZ2lvbj59XG5cbiAgICAgIHtzaG93Q29tcG9zZXJBY3Rpb25zICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBtYXJnaW5MZWZ0OiAxIH19PlxuICAgICAgICAgIDxDb21wb3NlckFjdGlvblxuICAgICAgICAgICAgaWNvbj1cIlx1MjVDQlwiXG4gICAgICAgICAgICBhY3RpdmVJY29uPVwiXHUyNUNGXCJcbiAgICAgICAgICAgIGFjdGl2ZT17ZGljdGF0aW9uU3RhdHVzKCkgIT09ICdpZGxlJ31cbiAgICAgICAgICAgIG9uSG92ZXI9eyhob3ZlcmVkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChob3ZlcmVkKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCdjYXB0dXJlIGF1ZGlvIChjdHJsLWcpJylcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJBY3Rpb25MYWJlbCgpID09PSAnY2FwdHVyZSBhdWRpbyAoY3RybC1nKScpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gZGljdGF0aW9uU3RhdHVzKCkgPT09ICdyZWNvcmRpbmcnXG4gICAgICAgICAgICAgID8gdm9pZCByZWZzLmRpY3RhdGlvbklucHV0LnN0b3AoKVxuICAgICAgICAgICAgICA6IHJlZnMuZGljdGF0aW9uSW5wdXQuc3RhcnQoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpIH0pfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPENvbXBvc2VyQWN0aW9uXG4gICAgICAgICAgICBpY29uPVwiXHUyNUExXCJcbiAgICAgICAgICAgIGFjdGl2ZUljb249XCJcdTI1QTBcIlxuICAgICAgICAgICAgYWN0aXZlPXtjYXB0dXJlU3RhdHVzKCkgPT09ICdjYXB0dXJpbmcnfVxuICAgICAgICAgICAgb25Ib3Zlcj17KGhvdmVyZWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJ2NhcHR1cmUgaW1hZ2UgKGN0cmwtbyknKVxuICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb3NlckFjdGlvbkxhYmVsKCkgPT09ICdjYXB0dXJlIGltYWdlIChjdHJsLW8pJykgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB2b2lkIHJlZnMuY2FwdHVyZUltYWdlKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZGljdGF0aW9uU3RhdHVzKCkgIT09ICdpZGxlJyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntkaWN0YXRpb25JbmRpY2F0b3IoZGljdGF0aW9uU3RhdHVzKCksIGRpY3RhdGlvbkxldmVscygpKX08L3RleHQ+fVxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGljdGF0aW9uU3RhdHVzKCkgPT09ICdyZWNvcmRpbmcnID8gJ2VzYyBjYW5jZWwgIGVudGVyIGNvbmZpcm0nIDogY2FwdHVyZVN0YXR1cygpID09PSAnY2FwdHVyaW5nJyA/ICcgZXNjIGNhbmNlbCcgOiBjb21wb3NlckFjdGlvbkxhYmVsKCkgPyBgICR7Y29tcG9zZXJBY3Rpb25MYWJlbCgpfWAgOiAnJ308L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21tYW5kcyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHttYXRjaGVkQ29tbWFuZHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIGNvbW1hbmRzPC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXttYXRjaGVkQ29tbWFuZHN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXtjbWRJbmRleCgpfVxuICAgICAgICAgICAgICBvblNlbGVjdD17c2V0Q21kSW5kZXh9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXsoYykgPT4gcnVuQ29tbWFuZChjKX1cbiAgICAgICAgICAgICAgZm9jdXNlZD17c2hvd0NvbW1hbmRzICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KGMsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntgLyR7Yy5uYW1lfWAucGFkRW5kKG1hdGNoZWRDb21tYW5kcy5yZWR1Y2UoKG0sIHgpID0+IE1hdGgubWF4KG0sIHgubmFtZS5sZW5ndGggKyAzKSwgMTIpKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gRkcgOiBNVVRFRCB9fT57Yy5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0ZpbGVzICYmIG1hdGNoZWRGaWxlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXttYXRjaGVkRmlsZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17ZmlsZUluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0RmlsZUluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9e3BpY2tGaWxlfVxuICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldEZpbGVzRGlzbWlzc2VkKHRydWUpfVxuICAgICAgICAgICAgZm9jdXNlZD17c2hvd0ZpbGVzICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGYsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHX1NPRlQgfX0+e2Z9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0NvbXBsZXRpb24gJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e2NvbXBDdHgubWF0Y2hlc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtjb21wSW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRDb21wSW5kZXh9XG4gICAgICAgICAgICBvblN1Ym1pdD17KGNhbmRpZGF0ZSkgPT4gYWNjZXB0Q29tcGxldGlvbihpbnB1dCgpLCBjb21wQ3R4LCBjYW5kaWRhdGUpfVxuICAgICAgICAgICAgb25DYW5jZWw9e2Rpc21pc3NDb21wbGV0aW9ufVxuICAgICAgICAgICAgZm9jdXNlZD17c2hvd0NvbXBsZXRpb24gJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsoY2FuZGlkYXRlLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntjYW5kaWRhdGV9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPC9ib3g+XG5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiB3aWRlTGF5b3V0ID8gNjQgOiB1bmRlZmluZWQsIGhlaWdodDogd2lkZUxheW91dCA/ICcxMDAlJyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIHtzaG93TW9kZWxQYW5lbCgpICYmIChcbiAgICAgICAgPE1vZGVsUGFuZWxcbiAgICAgICAgICBtb2RlbHM9e21vZGVscygpfVxuICAgICAgICAgIGN1cnJlbnQ9e21vZGVsKCkubmFtZX1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17ZGVmYXVsdE1vZGVsKCkubmFtZX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93TW9kZWxQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17YXN5bmMgKG0pID0+IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBjdGwuc3dpdGNoTW9kZWwobSkpIHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17YXN5bmMgKG0pID0+IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBjdGwuc3dpdGNoTW9kZWwobSwgeyBhc0RlZmF1bHQ6IHRydWUgfSkpIHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMoKS5maWx0ZXIoKG0pID0+IG0uYXZhaWxhYmxlICE9PSBmYWxzZSl9XG4gICAgICAgICAgY3VycmVudD17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYm9vdFtgJHtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCl9TW9kZWxgXSA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/IGJvb3Quc2hlbGxNb2RlbCA6IHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkgPyBib290LmRlbGliZXJhdGlvbk1vZGVsIDogYm9vdC5yZXNlYXJjaE1vZGVsfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtudWxsfVxuICAgICAgICAgIHRpdGxlPXtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPyBgQ2hvb3NlIFBhcnRpY2lwYW50ICR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID09PSAncGFydGljaXBhbnRBJyA/ICdBJyA6ICdCJ30gbW9kZWxgIDogc2VsZWN0aW5nU2hlbGxNb2RlbCgpID8gJ0Nob29zZSBzaGVsbCBtb2RlbCcgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gJ0Nob29zZSBzeW50aGVzaXMgbW9kZWwnIDogJ0Nob29zZSBwYXJhbGxlbCB3b3JrZXIgbW9kZWwnfVxuICAgICAgICAgIGhpbnQ9XCJlbnRlcjogc2F2ZSBtb2RlbCAgZXNjOiBjYW5jZWxcIlxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhtKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFydGljaXBhbnRNb2RlbFRhcmdldCgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnc2V0UGFydGljaXBhbnRBTW9kZWwnIDogJ3NldFBhcnRpY2lwYW50Qk1vZGVsJ1xuICAgICAgICAgICAgICBjdGxbbWV0aG9kXShtLm5hbWUpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ1NoZWxsTW9kZWwoKSkge1xuICAgICAgICAgICAgICBjdGwuc2V0U2hlbGxNb2RlbChtLm5hbWUpXG4gICAgICAgICAgICAgIGZsYXNoKGBzaGVsbDogJHttLm5hbWV9YClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSkge1xuICAgICAgICAgICAgICBib290LmRlbGliZXJhdGlvbk1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IGRlbGliZXJhdGlvbk1vZGVsOiBtLm5hbWUgfSlcbiAgICAgICAgICAgICAgd3JpdGVDb25maWcoeyBtb2RlbHM6IHsgZGVsaWJlcmF0aW9uOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYGRlbGliZXJhdGlvbjogJHttLm5hbWV9YClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvb3QucmVzZWFyY2hNb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyByZXNlYXJjaE1vZGVsOiBtLm5hbWUgfSlcbiAgICAgICAgICAgICAgd3JpdGVDb25maWcoeyBtb2RlbHM6IHsgcmVzZWFyY2hXb3JrZXI6IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgcGFyYWxsZWwgd29ya2VyczogJHttLm5hbWV9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQobnVsbClcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gcGVuZGluZ1Jlc2VhcmNoKClcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdEZWNpc2lvbiA9IHBlbmRpbmdEZWxpYmVyYXRpb24oKVxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVG8gPSByZXNlYXJjaE1vZGVsUmV0dXJuKClcbiAgICAgICAgICAgIHNldFBlbmRpbmdSZXNlYXJjaChudWxsKVxuICAgICAgICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbihudWxsKVxuICAgICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybihudWxsKVxuICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHJ1bkNvbW1hbmQoeyBuYW1lOiAncGFyYWxsZWwnIH0sIHBlbmRpbmcudGFzaylcbiAgICAgICAgICAgIGVsc2UgaWYgKHBlbmRpbmdEZWNpc2lvbikgcnVuQ29tbWFuZCh7IG5hbWU6ICdkZWxpYmVyYXRlJyB9LCBwZW5kaW5nRGVjaXNpb24uZGVjaXNpb24pXG4gICAgICAgICAgICBlbHNlIGlmIChyZXR1cm5UbyA9PT0gJ2NvbmZpZycpIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KCkgPT4ge319XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQobnVsbClcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFBlbmRpbmdSZXNlYXJjaChudWxsKVxuICAgICAgICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbihudWxsKVxuICAgICAgICAgICAgaWYgKHJlc2VhcmNoTW9kZWxSZXR1cm4oKSA9PT0gJ2NvbmZpZycpIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybihudWxsKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1NwZWVkUGFuZWwoKSAmJiAoXG4gICAgICAgIDxTcGVlZFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtTUEVFRF9MRVZFTFN9XG4gICAgICAgICAgY3VycmVudD17c3BlZWQoKX1cbiAgICAgICAgICBkZWZhdWx0TGV2ZWw9e3NwZWVkRGVmYXVsdHMoKVttb2RlbCgpLm5hbWVdID8/ICdzdGFuZGFyZCd9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd1NwZWVkUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBjdGwuYXBwbHlTcGVlZChsLmtleSlcbiAgICAgICAgICAgIHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIGN0bC5hcHBseVNwZWVkKGwua2V5LCB7IGFzRGVmYXVsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0VmZm9ydFBhbmVsKCkgJiYgKFxuICAgICAgICA8RWZmb3J0UGFuZWxcbiAgICAgICAgICBsZXZlbHM9e0VGRk9SVF9MRVZFTFN9XG4gICAgICAgICAgY3VycmVudD17ZWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBkZWZhdWx0TGV2ZWw9e2RlZmF1bHRFZmZvcnQoKSA/PyBudWxsfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dFZmZvcnRQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXkpXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobCkgPT4ge1xuICAgICAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChsLmtleSwgeyBhc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1RoZW1lUGFuZWwoKSAmJiAoXG4gICAgICAgIDxUaGVtZVBhbmVsXG4gICAgICAgICAgdGhlbWVzPXt0aGVtZUl0ZW1zKCl9XG4gICAgICAgICAgcHJlZj17dGhlbWVQcmVmKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd1RoZW1lUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0KSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIGFwcGx5VGhlbWVQcmVmKHQua2V5KVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QcmV2aWV3PXsodCkgPT4gcHJldmlld1BhbGV0dGUodC5rZXkpfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dUaGVtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgcHJldmlld1BhbGV0dGUodGhlbWVQcmVmKCkpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RGVsZXRlQ29uZmlybSgpICYmIChcbiAgICAgICAgPENvbmZpcm1QYW5lbFxuICAgICAgICAgIHRpdGxlPVwiRGVsZXRlIGN1cnJlbnQgc2Vzc2lvbj9cIlxuICAgICAgICAgIG1lc3NhZ2U9XCJUaGUgY3VycmVudCBjb252ZXJzYXRpb24gYW5kIGl0cyBwZXJzaXN0ZWQgaGlzdG9yeSB3aWxsIGJlIHBlcm1hbmVudGx5IGRlbGV0ZWQuXCJcbiAgICAgICAgICBjb25maXJtTGFiZWw9XCJEZWxldGVcIlxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dEZWxldGVDb25maXJtKCl9XG4gICAgICAgICAgb25Db25maXJtPXtjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb259XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dIaXN0b3J5UGFuZWwoKSAmJiAoXG4gICAgICAgIDxIaXN0b3J5UGFuZWxcbiAgICAgICAgICBwcm9tcHRzPXtoaXN0UHJvbXB0cygpfVxuICAgICAgICAgIHNjb3Blcz17SElTVE9SWV9TQ09QRVN9XG4gICAgICAgICAgc2NvcGVJbmRleD17aGlzdFNjb3BlKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0hpc3RvcnlQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KHRleHQpID0+IHsgc2V0SW5wdXQodGV4dCk7IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0hpc3RvcnlQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7aW5mb1BhbmVsKCkgJiYgKFxuICAgICAgICA8SW5mb0xpc3RQYW5lbFxuICAgICAgICAgIHRpdGxlPXtpbmZvUGFuZWwoKS50aXRsZX1cbiAgICAgICAgICByb3dzPXtpbmZvUGFuZWwoKS5yb3dzfVxuICAgICAgICAgIG92ZXJ2aWV3PXtpbmZvUGFuZWwoKS5vdmVydmlld31cbiAgICAgICAgICBmb2N1c2VkPXtpbmZvUGFuZWwoKSAhPT0gbnVsbH1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRJbmZvUGFuZWwobnVsbCl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0Nvbm5lY3RQYW5lbCgpICYmIChcbiAgICAgICAgPENvbm5lY3RQYW5lbFxuICAgICAgICAgIHByb3ZpZGVycz17YXV0aFByb3ZpZGVycygpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb25uZWN0UGFuZWwoKX1cbiAgICAgICAgICBvbkNvbm5lY3Q9e2Nvbm5lY3RQcm92aWRlcn1cbiAgICAgICAgICBvbkRpc2Nvbm5lY3Q9e2Rpc2Nvbm5lY3RQcm92aWRlcn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93V2FrZXVwc1BhbmVsKCkgJiYgKFxuICAgICAgICA8V2FrZXVwc1BhbmVsXG4gICAgICAgICAgd2FrZXVwcz17KHNoZWxsc1ZlcnNpb24oKSwgYm9vdC53YWtldXBzLmxpc3QoKSl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd1dha2V1cHNQYW5lbCgpfVxuICAgICAgICAgIG9uQ2FuY2VsPXsodykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJtZWQgPSByZWZzLndha2V1cENhbmNlbEFybVxuICAgICAgICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gdy5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICAgICAgICAgIHJlZnMud2FrZXVwQ2FuY2VsQXJtID0geyBpZDogdy5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgICByZXR1cm4gZmxhc2goYGFnYWluIHRvIGNhbmNlbCB3YWtlLXVwICR7dy5pZH0gKCR7dy5ub3RlLnNwbGl0KCdcXG4nKVswXS5zbGljZSgwLCA0MCl9KWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IG51bGxcbiAgICAgICAgICAgIGN0bC5jYW5jZWxXYWtldXAodylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dXYWtldXBzUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snICYmIChcbiAgICAgICAgPFJld2luZFBpY2tQYW5lbFxuICAgICAgICAgIGVudHJpZXM9e1suLi5yZXdpbmRFbnRyaWVzKCldLnJldmVyc2UoKX1cbiAgICAgICAgICBzdGF0cz17KGluZGV4KSA9PiByZXdpbmRTdGF0cyhkZXJpdmVkKCksIGluZGV4KX1cbiAgICAgICAgICBmb2N1c2VkPXtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJ31cbiAgICAgICAgICBvblBpY2s9eyhlbnRyeSkgPT4geyBzZXRSZXdpbmRUYXJnZXQoZW50cnkpOyBzZXRSZXdpbmRTdGVwKCdhY3Rpb24nKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFJld2luZFN0ZXAobnVsbCl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJyAmJiByZXdpbmRUYXJnZXQoKSAmJiAoXG4gICAgICAgIDxSZXdpbmRBY3Rpb25QYW5lbFxuICAgICAgICAgIHRhcmdldD17cmV3aW5kVGFyZ2V0KCl9XG4gICAgICAgICAgb3B0aW9ucz17cmV3aW5kT3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nfVxuICAgICAgICAgIG9uU3VibWl0PXtwZXJmb3JtUmV3aW5kfVxuICAgICAgICAgIG9uQmFjaz17KCkgPT4gc2V0UmV3aW5kU3RlcCgncGljaycpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2NvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50fSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnYWN0aXZpdHktbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnQgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7dmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogY29tYmluZWRBY3Rpdml0eSB8fCBzaG93Q29tcG9zZXJBY3Rpb25zID8gMCA6IDEgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NoZWxsQWN0aW9uSGludCA/IGAke3NoZWxsQWN0aW9uSGludH0gIGAgOiAnJ31qL2sgbW92ZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICAgIHshY29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsfSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnc2hlbGwtbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRTaGVsbCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hlbGxXaW5kb3cubWFwKChzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgc2hlbGwtJHtzLmlkfWBcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdmlld2VkU2hlbGxJZCgpID09PSBzLmlkXG4gICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gYWdlbnRFbGFwc2VkKHsgc3RhcnRlZEF0OiBzLnN0YXJ0ZWRBdCwgZW5kZWRBdDogcy5lbmRlZEF0IH0pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BzaGVsbC0ke3MuaWR9YH0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBzaGVsbC0ke3MuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQocy5pZCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdydW5uaW5nJyA/IDxTcGlubmVyIGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSB2YXJpYW50PVwiZG90c1wiIC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogcy5leGl0Q29kZSA9PT0gMCA/IEdSRUVOIDogUkVEIH19PntzLmV4aXRDb2RlID09PSAwID8gJ1x1MjVDRicgOiAnXHUwMEQ3J308L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0PnsnICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHNlbGVjdGVkID8gRkcgOiBNVVRFRCB9fT57YHNoZWxsIFske3MuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntzLmRlc2NyaXB0aW9uIHx8IHMuY29tbWFuZC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7cy5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICcnIDogYGV4aXQgJHtzLmV4aXRDb2RlfSAgYH0ke2VsYXBzZWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZVNoZWxscy5sZW5ndGggPiBzaGVsbFN0cmlwU2l6ZSAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7c2hlbGxXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7c2hlbGxXaW5kb3dTdGFydH1gIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ID4gMCAmJiBzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyAnICAnIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZVNoZWxscy5sZW5ndGggLSBzaGVsbFdpbmRvd1N0YXJ0IC0gc2hlbGxXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHthZ2VudEFjdGlvbkhpbnQgPyBgJHthZ2VudEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FnZW50LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthZ2VudFdpbmRvdy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGFnZW50U3RhdHVzKGEpXG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgYWdlbnQtJHthLmlkfWBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YGFnZW50LSR7YS5pZH1gfSBzZWxlY3RlZD17dmlld2VkQWdlbnRJZCgpID09PSBhLmlkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBhZ2VudC0ke2EuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQoYS5pZCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgICAge2Euc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57c3RhdHVzLmljb259PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiB2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWQgPyBGRyA6IE1VVEVEIH19PntgJHthLnJvbGUgfHwgJ2FnZW50J30gWyR7YS5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2EuZGVzY3JpcHRpb259PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIHtzdGF0dXMubGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntgICAke3N0YXR1cy5sYWJlbH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2Ake3N0YXR1cy5sYWJlbCA/ICcgICcgOiAnICAnfSAke2FnZW50RWxhcHNlZChhKX0gIFx1MjE5MyBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17YS51c2FnZT8udG90YWxUb2tlbnMgfHwgYS51c2FnZT8ucHJvbXB0VG9rZW5zIHx8IDB9IGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEfSBoaWdobGlnaHQ9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IHRva2Vuc2B9IC8+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZUFnZW50cy5sZW5ndGggPiBhZ2VudFN0cmlwU2l6ZSAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7YWdlbnRXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7YWdlbnRXaW5kb3dTdGFydH1gIDogJyd9JHthZ2VudFdpbmRvd1N0YXJ0ID4gMCAmJiBhZ2VudFdpbmRvd1N0YXJ0ICsgYWdlbnRXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZUFnZW50cy5sZW5ndGggPyAnICAnIDogJyd9JHthZ2VudFdpbmRvd1N0YXJ0ICsgYWdlbnRXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZUFnZW50cy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZUFnZW50cy5sZW5ndGggLSBhZ2VudFdpbmRvd1N0YXJ0IC0gYWdlbnRXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3dpZGVMYXlvdXQgJiYgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPn1cblxuICAgICAge3dpZGVMYXlvdXQgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICAgIHtidXN5KCkgJiYgKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPXthY2NlbnQoKX0gaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfSByZXZlcnNlPlxuICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgOiB0dXJuUGhhc2UoKSA9PT0gJ3RoaW5raW5nJyA/ICdUaGlua2luZycgOiB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyA/ICdXb3JraW5nJyA6ICdSZXNwb25kaW5nJ31cbiAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2VsYXBzZWR9ICBlc2MgdG8gaW50ZXJydXB0YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7Y29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnICYmIDxQcm9ncmVzc0JhciB2YXJpYW50PVwidGhpblwiIHZhbHVlPXtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbiAvIDh9IHdpZHRoPXszMH0gcGVyY2VudGFnZT17ZmFsc2V9IGNvbG9yPXthY2NlbnQoKX0gLz59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtnaXRJbmZvPy5icmFuY2ggJiYgKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSB9fT57J1JlcG9zaXRvcnknfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydCcmFuY2ggICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Z2l0SW5mby5icmFuY2h9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDaGFuZ2VzICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+e2Ake2dpdEluZm8uYWRkZWR9IGFkZGVkYH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID4gMCAmJiBnaXRJbmZvLnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+e2Ake2dpdEluZm8ucmVtb3ZlZH0gcmVtb3ZlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA9PT0gMCAmJiBnaXRJbmZvLnJlbW92ZWQgPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnY2xlYW4nfTwvdGV4dD59XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydTZXNzaW9uJ308L3RleHQ+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0RpcmVjdG9yeSAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnTW9kZWwgICAgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PntzcGVlZEFwcGxpZXMoKSAmJiBzcGVlZCgpID09PSAnZmFzdCcgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnIEZhc3QnfTwvdGV4dD59PC9ib3g+XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnRWZmb3J0ICAgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2VmZm9ydCgpfTwvdGV4dD48L2JveD59XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0lucHV0IHRva2VucyAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntNYXRoLnJvdW5kKHVzYWdlLnByb21wdFRva2VucykudG9Mb2NhbGVTdHJpbmcoKX08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J091dHB1dCB0b2tlbnMgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntNYXRoLnJvdW5kKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAge3VzYWdlLnRob3VnaHRUb2tlbnMgPiAwICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnVGhvdWdodCB0b2tlbnMgJ308L3RleHQ+PEFuaW1hdGVkVmFsdWUgdmFsdWU9e3VzYWdlLnRob3VnaHRUb2tlbnN9IGNvbG9yPXtGR19TT0ZUfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBNYXRoLnJvdW5kKG4pLnRvTG9jYWxlU3RyaW5nKCl9IC8+PC9ib3g+fVxuICAgICAgICAgICAge2NvbnRleHRQZXJjZW50ID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0NvbnRleHQgdXNlZCAgICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXtjb250ZXh0UGVyY2VudH0gY29sb3I9e2NvbnRleHRQZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7TWF0aC5yb3VuZChuKX0lYH0gLz48L2JveD59XG4gICAgICAgICAgICB7cGVuZGluZ1dha2V1cHMgPiAwICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnV2FrZS11cHMgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e3BlbmRpbmdXYWtldXBzfTwvdGV4dD48L2JveD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGhlaWdodDogMSB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e21vZGVsKCkubmFtZX08L3RleHQ+XG4gICAgICAgICAgICB7c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5GYXN0PC90ZXh0Pn1cbiAgICAgICAgICAgIHtlZmZvcnRBcHBsaWVzKCkgJiYgZWZmb3J0KCkgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntlZmZvcnQoKX08L3RleHQ+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIzRjAgJHtwZW5kaW5nV2FrZXVwc31gfTwvdGV4dD59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2NvbXBhY3ROdW1iZXIodXNhZ2UucHJvbXB0VG9rZW5zKX0gXHUyMTkzYH08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2NvbXBhY3ROdW1iZXIodXNhZ2UuY29tcGxldGlvblRva2Vucyl9IFx1MjE5MWB9PC90ZXh0PlxuICAgICAgICAgICAge3VzYWdlLnRob3VnaHRUb2tlbnMgPiAwICYmIDxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17TVVURUR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IFx1MjVDOGB9IC8+fVxuICAgICAgICAgICAge2NvbnRleHRQZXJjZW50ID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IE1VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBiYWNrZ3JvdW5kPXtQQU5FTF9CR30gZm9ybWF0PXtjb250ZXh0QmFyfSAvPn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICB7IXdvcmtzcGFjZU9wZW4oKSAmJiA8RGljdGF0aW9uS2V5cyBpbnB1dD17cmVmcy5kaWN0YXRpb25JbnB1dH0gLz59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjb21tYW5kQXQodGV4dCwgY3Vyc29yID0gdGV4dC5sZW5ndGgpIHtcbiAgY29uc3QgbWF0Y2ggPSB0ZXh0LnNsaWNlKDAsIGN1cnNvcikubWF0Y2goLyhefFtcXHMoXSlcXC8oW0EtWmEtejAtOV8tXSopJC8pXG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsXG4gIGNvbnN0IHN0YXJ0ID0gY3Vyc29yIC0gbWF0Y2hbMl0ubGVuZ3RoIC0gMVxuICBjb25zdCBzdWZmaXggPSB0ZXh0LnNsaWNlKGN1cnNvcikubWF0Y2goL15bQS1aYS16MC05Xy1dKi8pWzBdXG4gIHJldHVybiB7IHN0YXJ0LCBlbmQ6IGN1cnNvciArIHN1ZmZpeC5sZW5ndGgsIHF1ZXJ5OiBtYXRjaFsyXSB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ29tbWFuZCh0ZXh0LCByYW5nZSwgYm9keSkge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHRleHQuc2xpY2UoMCwgcmFuZ2Uuc3RhcnQpICsgYm9keSArIHRleHQuc2xpY2UocmFuZ2UuZW5kKSxcbiAgICBjdXJzb3I6IHJhbmdlLnN0YXJ0ICsgYm9keS5sZW5ndGgsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRGaWVsZHMoY29tbWFuZCwgYm9keSwgYXJncyA9ICcnKSB7XG4gIGNvbnN0IGZpZWxkcyA9IFsuLi4oY29tbWFuZC5hcmd1bWVudHMgPz8gW10pXVxuICBpZiAoYm9keS5pbmNsdWRlcygnJEFSR1VNRU5UUycpICYmICFhcmdzKSB7XG4gICAgZmllbGRzLnB1c2goeyBuYW1lOiAnJGFyZ3MnLCBsYWJlbDogJ0FyZ3VtZW50cycsIHR5cGU6ICd0ZXh0JyB9KVxuICB9XG4gIHJldHVybiBmaWVsZHNcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRBcmVhLCBNZW51LCBCdXR0b24sIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgZnV6enlTY29yZSwgcmFua0Z1enp5IH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBDb21tYW5kRm9ybSh7IG5hbWUsIGZpZWxkcywgZmlsZXMsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gY3JlYXRlU2lnbmFsKHt9KVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgZmllbGQgPSBmaWVsZHNbc3RlcCgpXVxuICBjb25zdCBvcHRpb25zID0gZmllbGQudHlwZSA9PT0gJ2Nob2ljZScgPyBmaWVsZC5jaG9pY2VzIDogZmllbGQudHlwZSA9PT0gJ3BhdGgnID8gZmlsZXMgOiBbXVxuICBjb25zdCBtYXRjaGVzID0gcmFua0Z1enp5KG9wdGlvbnMsIHF1ZXJ5KCksIChxLCB2YWx1ZSkgPT4gZnV6enlTY29yZShxLCB2YWx1ZSkpXG5cbiAgZnVuY3Rpb24gYWR2YW5jZSh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHQgPSB7IC4uLnZhbHVlcygpLCBbZmllbGQubmFtZV06IHZhbHVlIH1cbiAgICBzZXRWYWx1ZXMobmV4dClcbiAgICBpZiAoc3RlcCgpID09PSBmaWVsZHMubGVuZ3RoIC0gMSkgcmV0dXJuIG9uU3VibWl0KG5leHQpXG4gICAgc2V0U3RlcChzdGVwKCkgKyAxKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldFNlbGVjdGVkKDApXG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZ2FwOiAyIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e2AvJHtuYW1lfWB9PC90ZXh0PlxuICAgICAgICB7ZmllbGRzLnNsaWNlKDAsIHN0ZXAoKSkubWFwKChpdGVtKSA9PiA8dGV4dCBrZXk9e2l0ZW0ubmFtZX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnt2YWx1ZXMoKVtpdGVtLm5hbWVdfTwvdGV4dD4pfVxuICAgICAgICA8QnV0dG9uIGxhYmVsPVwiQ2FuY2VsXCIgb25QcmVzcz17b25DYW5jZWx9IC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57ZmllbGQubGFiZWx9PC90ZXh0PlxuICAgICAgPFRleHRBcmVhXG4gICAgICAgIGtleT17ZmllbGQubmFtZX1cbiAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgdmFsdWU9e3F1ZXJ5KCl9XG4gICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgIG1heEhlaWdodD17MX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e2ZpZWxkLmxhYmVsfVxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+IHsgc2V0UXVlcnkodmFsdWUpOyBzZXRTZWxlY3RlZCgwKSB9fVxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIGFkdmFuY2UobWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICB9IGVsc2UgYWR2YW5jZShmaWVsZC50eXBlID09PSAncGF0aCcgJiYgbWF0Y2hlcy5sZW5ndGggJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJy8nKSAmJiAhdmFsdWUuc3RhcnRzV2l0aCgnficpID8gbWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSA6IHZhbHVlKVxuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdkb3duJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5taW4oc2VsZWN0ZWQoKSArIDEsIG1hdGNoZXMubGVuZ3RoIC0gMSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChNYXRoLm1heCgwLCBzZWxlY3RlZCgpIC0gMSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0UXVlcnkobWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIHttYXRjaGVzLmxlbmd0aCA+IDAgJiYgPE1lbnVcbiAgICAgICAgaXRlbXM9e21hdGNoZXN9XG4gICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZCgpfVxuICAgICAgICBvblNlbGVjdD17c2V0U2VsZWN0ZWR9XG4gICAgICAgIG9uU3VibWl0PXthZHZhbmNlfVxuICAgICAgICBmb2N1c2VkPXtmYWxzZX1cbiAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgcmVuZGVySXRlbT17KHZhbHVlLCB7IGFjdGl2ZSB9KSA9PiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YCR7YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ30ke3ZhbHVlfWB9PC90ZXh0Pn1cbiAgICAgIC8+fVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiY29uc3QgZmlsbGVyID0gLyg/PCFbXlxccyw7OiE/XSkoPzp1aHx1bSkoPz0kfFtcXHMsOzouIT9dKShbIFxcdF0qWyw7Oi4hP10qKVsgXFx0XSovZ2l1XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRpY3RhdGlvbih0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoY2xlYW5MaW5lKS5qb2luKCdcXG4nKS50cmltKClcbn1cblxuZnVuY3Rpb24gY2xlYW5MaW5lKGxpbmUpIHtcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBvZmZzZXQgPSAwXG4gIGxldCBjYXBpdGFsaXplID0gZmFsc2VcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBsaW5lLm1hdGNoQWxsKGZpbGxlcikpIHtcbiAgICBsZXQgYmVmb3JlID0gbGluZS5zbGljZShvZmZzZXQsIG1hdGNoLmluZGV4KVxuICAgIGlmIChjYXBpdGFsaXplKSBiZWZvcmUgPSB1cHBlckZpcnN0KGJlZm9yZSlcbiAgICByZXN1bHQgKz0gYmVmb3JlXG4gICAgY29uc3QgYWZ0ZXIgPSBsaW5lLnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgIGNvbnN0IHRlcm1pbmFsID0gbWF0Y2hbMV0ubWF0Y2goL1suIT9dKy8pPy5bMF0gPz8gJydcbiAgICByZXN1bHQgPSByZXN1bHQudHJpbUVuZCgpXG4gICAgY29uc3Qgc2VudGVuY2VTdGFydCA9ICFyZXN1bHQgfHwgL1suIT9dJC8udGVzdChyZXN1bHQpXG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLywkLywgJycpXG4gICAgaWYgKCFhZnRlcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1s7Ol0kLywgJycpXG4gICAgaWYgKHRlcm1pbmFsICYmICFzZW50ZW5jZVN0YXJ0KSByZXN1bHQgKz0gdGVybWluYWxcbiAgICBjYXBpdGFsaXplID0gc2VudGVuY2VTdGFydCB8fCBCb29sZWFuKHRlcm1pbmFsKVxuICAgIGlmIChyZXN1bHQgJiYgYWZ0ZXIpIHJlc3VsdCArPSAnICdcbiAgICBvZmZzZXQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICB9XG4gIGNvbnN0IHRhaWwgPSBsaW5lLnNsaWNlKG9mZnNldClcbiAgcmV0dXJuIHJlc3VsdCArIChjYXBpdGFsaXplID8gdXBwZXJGaXJzdCh0YWlsKSA6IHRhaWwpXG59XG5cbmZ1bmN0aW9uIHVwcGVyRmlyc3QodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9eKFxccyopKFxccHtMbH0pKD8hXFxwe0x1fSkvdSwgKF8sIHNwYWNlLCBsZXR0ZXIpID0+IHNwYWNlICsgbGV0dGVyLnRvVXBwZXJDYXNlKCkpXG59XG5cbiIsICJpbXBvcnQgeyBjbGVhbkRpY3RhdGlvbiB9IGZyb20gJy4vZGljdGF0aW9uLXRleHQuanMnXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGljdGF0aW9uSGVscGVyUGF0aChwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0pIHtcbiAgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgY29uc3QgYnVuZGxlZCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9saW51eC1kaWN0YXRlLmpzJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgICByZXR1cm4gZXhpc3RzU3luYyhidW5kbGVkKSA/IGJ1bmRsZWQgOiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uL2hlbHBlci9saW51eC1kaWN0YXRlLmpzJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgfVxuICBjb25zdCBidW5kbGVkID0gZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL3BpY28tZGljdGF0ZScsIGltcG9ydC5tZXRhLnVybCkpXG4gIHJldHVybiBleGlzdHNTeW5jKGJ1bmRsZWQpID8gYnVuZGxlZCA6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vaGVscGVyLy5idWlsZC9yZWxlYXNlL3BpY28tZGljdGF0ZScsIGltcG9ydC5tZXRhLnVybCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWN0YXRpb24oeyBvblN0YXR1cyA9ICgpID0+IHt9LCBvbkxldmVsID0gKCkgPT4ge30sIG9uRXJyb3IgPSAoKSA9PiB7fSwgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBhcmNoID0gcHJvY2Vzcy5hcmNoLCBsYXVuY2ggPSAoKSA9PiBzcGF3bihwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/IHByb2Nlc3MuZXhlY1BhdGggOiBkaWN0YXRpb25IZWxwZXJQYXRoKHBsYXRmb3JtKSwgcGxhdGZvcm0gPT09ICdsaW51eCcgPyBbZGljdGF0aW9uSGVscGVyUGF0aChwbGF0Zm9ybSldIDogW10sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KSwgbG9hZGluZ1RpbWVvdXQgPSA2MDAwMDAsIHJlcXVlc3RUaW1lb3V0ID0gcGxhdGZvcm0gPT09ICdsaW51eCcgPyAxODAwMDAgOiA0NTAwMCB9ID0ge30pIHtcbiAgbGV0IGNoaWxkID0gbnVsbFxuICBsZXQgc3RhdHVzID0gJ2lkbGUnXG4gIGxldCBzZXF1ZW5jZSA9IDBcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG4gIGxldCByZWFkeSA9IG51bGxcbiAgbGV0IGRpc3Bvc2VkID0gZmFsc2VcbiAgY29uc3QgcGVuZGluZyA9IG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXR1cyh2YWx1ZSkge1xuICAgIHN0YXR1cyA9IHZhbHVlXG4gICAgb25TdGF0dXModmFsdWUpXG4gIH1cblxuICBmdW5jdGlvbiByZXNldChlcnJvciA9IG5ldyBFcnJvcignZGljdGF0aW9uIGNhbmNlbGxlZCcpKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBjaGlsZFxuICAgIGNoaWxkID0gbnVsbFxuICAgIHJlYWR5ID0gbnVsbFxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGVuZGluZy52YWx1ZXMoKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgICAgZW50cnkucmVqZWN0KGVycm9yKVxuICAgIH1cbiAgICBwZW5kaW5nLmNsZWFyKClcbiAgICBwcmV2aW91cz8uc3RkaW4uZW5kKClcbiAgICBwcmV2aW91cz8ua2lsbCgpXG4gICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhaXRGb3IoaWQsIHRpbWVvdXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc2V0KG5ldyBFcnJvcignZGljdGF0aW9uIHRpbWVkIG91dCcpKSwgdGltZW91dClcbiAgICAgIHBlbmRpbmcuc2V0KGlkLCB7IHJlc29sdmUsIHJlamVjdCwgdGltZXIgfSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGlkLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZW50cnkgPSBwZW5kaW5nLmdldChpZClcbiAgICBpZiAoIWVudHJ5KSByZXR1cm5cbiAgICBwZW5kaW5nLmRlbGV0ZShpZClcbiAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpXG4gICAgaWYgKG1lc3NhZ2UuZXJyb3IpIGVudHJ5LnJlamVjdChuZXcgRXJyb3IobWVzc2FnZS5lcnJvcikpXG4gICAgZWxzZSBlbnRyeS5yZXNvbHZlKG1lc3NhZ2UpXG4gIH1cblxuICBmdW5jdGlvbiBsb2FkKCkge1xuICAgIGlmIChyZWFkeSkgcmV0dXJuIHJlYWR5XG4gICAgaWYgKHBsYXRmb3JtICE9PSAnbGludXgnICYmIChwbGF0Zm9ybSAhPT0gJ2RhcndpbicgfHwgYXJjaCAhPT0gJ2FybTY0JykpIHRocm93IG5ldyBFcnJvcignZGljdGF0aW9uIHJlcXVpcmVzIExpbnV4IG9yIGFuIEFwcGxlIFNpbGljb24gTWFjJylcbiAgICBjb25zdCBpbnN0YW5jZSA9IGxhdW5jaCgpXG4gICAgY2hpbGQgPSBpbnN0YW5jZVxuICAgIHJlYWR5ID0gd2FpdEZvcigncmVhZHknLCBsb2FkaW5nVGltZW91dClcbiAgICBsZXQgYnVmZmVyID0gJydcbiAgICBpbnN0YW5jZS5zdGRvdXQub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIGlmIChjaGlsZCAhPT0gaW5zdGFuY2UpIHJldHVyblxuICAgICAgYnVmZmVyICs9IGNodW5rLnRvU3RyaW5nKClcbiAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gMTAyNCAqIDEwMjQpIHJldHVybiByZXNldChuZXcgRXJyb3IoJ2ludmFsaWQgZGljdGF0aW9uIGhlbHBlciBvdXRwdXQnKSlcbiAgICAgIGxldCBhdFxuICAgICAgd2hpbGUgKChhdCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKSkgPj0gMCkge1xuICAgICAgICBjb25zdCBsaW5lID0gYnVmZmVyLnNsaWNlKDAsIGF0KVxuICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXQgKyAxKVxuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICB0cnkgeyBtZXNzYWdlID0gSlNPTi5wYXJzZShsaW5lKSB9IGNhdGNoIHsgY29udGludWUgfVxuICAgICAgICBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdsZXZlbCcpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAncmVjb3JkaW5nJyAmJiBOdW1iZXIuaXNGaW5pdGUobWVzc2FnZS5sZXZlbCkpIG9uTGV2ZWwoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbWVzc2FnZS5sZXZlbCkpKVxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAncmVhZHknKSBzZXR0bGUoJ3JlYWR5JywgbWVzc2FnZSlcbiAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlLm1lc3NhZ2UgfHwgJ2RpY3RhdGlvbiBmYWlsZWQnKVxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgICAgICByZXNldChlcnJvcilcbiAgICAgICAgICBpZiAoIWFjdGl2ZSkgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaWQgIT0gbnVsbCkgc2V0dGxlKG1lc3NhZ2UuaWQsIG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSlcbiAgICBpbnN0YW5jZS5zdGRlcnIub24oJ2RhdGEnLCAoKSA9PiB7fSlcbiAgICBjb25zdCBmYWlsZWQgPSAoZXJyb3IpID0+IHtcbiAgICAgIGlmIChjaGlsZCAhPT0gaW5zdGFuY2UpIHJldHVyblxuICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgY29uc3QgcmVjb3JkaW5nID0gc3RhdHVzID09PSAncmVjb3JkaW5nJ1xuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBpZiAoIWFjdGl2ZSAmJiByZWNvcmRpbmcpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gICAgaW5zdGFuY2Uub24oJ2Vycm9yJywgKGVycm9yKSA9PiBmYWlsZWQobmV3IEVycm9yKGBkaWN0YXRpb24gaGVscGVyIHVuYXZhaWxhYmxlOiAke2Vycm9yLm1lc3NhZ2V9YCkpKVxuICAgIGluc3RhbmNlLnN0ZGluLm9uKCdlcnJvcicsIGZhaWxlZClcbiAgICBpbnN0YW5jZS5vbignZXhpdCcsICgpID0+IGZhaWxlZChuZXcgRXJyb3IoJ2RpY3RhdGlvbiBoZWxwZXIgZXhpdGVkJykpKVxuICAgIHJldHVybiByZWFkeVxuICB9XG5cbiAgZnVuY3Rpb24gcmVxdWVzdChvcCkge1xuICAgIGNvbnN0IGlkID0gKytzZXF1ZW5jZVxuICAgIGNvbnN0IHJlc3VsdCA9IHdhaXRGb3IoaWQsIHJlcXVlc3RUaW1lb3V0KVxuICAgIHRyeSB7IGNoaWxkLnN0ZGluLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHsgaWQsIG9wIH0pfVxcbmApIH0gY2F0Y2ggKGVycm9yKSB7IHJlc2V0KGVycm9yKSB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJlbG9hZCgpIHtcbiAgICBpZiAoZGlzcG9zZWQpIHJldHVyblxuICAgIHRyeSB7IGF3YWl0IGxvYWQoKSB9IGNhdGNoIHt9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICBpZiAoZGlzcG9zZWQgfHwgc3RhdHVzICE9PSAnaWRsZScpIHJldHVyblxuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgc2V0U3RhdHVzKCdsb2FkaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgc2V0U3RhdHVzKCdzdGFydGluZycpXG4gICAgICBhd2FpdCByZXF1ZXN0KCdzdGFydCcpXG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHNldFN0YXR1cygncmVjb3JkaW5nJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBudWxsXG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgc2V0U3RhdHVzKCd0cmFuc2NyaWJpbmcnKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0KCdzdG9wJylcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuIG51bGxcbiAgICAgIHNldFN0YXR1cygnaWRsZScpXG4gICAgICByZXR1cm4gY2xlYW5EaWN0YXRpb24ocmVzdWx0LnRleHQgfHwgJycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikge1xuICAgICAgICByZXNldChlcnJvcilcbiAgICAgICAgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVyblxuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gcmVzZXQoKVxuICAgIHNldFN0YXR1cygnY2FuY2VsbGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ2NhbmNlbCcpXG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHNldFN0YXR1cygnaWRsZScpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgcmVzZXQoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgICArK2dlbmVyYXRpb25cbiAgICByZXNldCgpXG4gIH1cblxuICByZXR1cm4geyBwcmVsb2FkLCBzdGFydCwgc3RvcCwgY2FuY2VsLCBkaXNwb3NlLCBnZXQgc3RhdHVzKCkgeyByZXR1cm4gc3RhdHVzIH0gfVxufVxuIiwgImltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJ1xuaW1wb3J0IHsgbWtkdGVtcCwgd3JpdGVGaWxlLCBybSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBybVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5cbmNvbnN0IGV4ZWN1dGUgPSBwcm9taXNpZnkoZXhlY0ZpbGUpXG5jb25zdCBkaXJlY3RvcmllcyA9IG5ldyBTZXQoKVxucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykgcm1TeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59KVxuXG5jb25zdCBtYWNTY3JpcHQgPSBgT2JqQy5pbXBvcnQoJ0FwcEtpdCcpOyBPYmpDLmltcG9ydCgnRm91bmRhdGlvbicpO1xuY29uc3QgcGFzdGVib2FyZCA9ICQuTlNQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0ZWJvYXJkO1xuY29uc3QgZmlsZXMgPSBwYXN0ZWJvYXJkLnByb3BlcnR5TGlzdEZvclR5cGUoJ05TRmlsZW5hbWVzUGJvYXJkVHlwZScpO1xubGV0IGltYWdlID0gbnVsbDtcbmlmICghZmlsZXMuaXNOaWwoKSAmJiBmaWxlcy5jb3VudCA+IDApIHtcbiAgY29uc3QgcGF0aCA9IE9iakMudW53cmFwKGZpbGVzLm9iamVjdEF0SW5kZXgoMCkpO1xuICBpZiAoL1xcXFwuKHBuZ3xqcGU/Z3xnaWZ8d2VicCkkL2kudGVzdChwYXRoKSkgaW1hZ2UgPSAkLk5TSW1hZ2UuYWxsb2MuaW5pdFdpdGhDb250ZW50c09mRmlsZShwYXRoKTtcbn1cbmlmICghaW1hZ2UgfHwgaW1hZ2UuaXNOaWwoKSkgaW1hZ2UgPSAkLk5TSW1hZ2UuYWxsb2MuaW5pdFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpO1xubGV0IGRhdGEgPSBudWxsO1xuaWYgKCFpbWFnZS5pc05pbCgpKSB7XG4gIGNvbnN0IGJpdG1hcCA9ICQuTlNCaXRtYXBJbWFnZVJlcC5pbWFnZVJlcFdpdGhEYXRhKGltYWdlLlRJRkZSZXByZXNlbnRhdGlvbik7XG4gIGRhdGEgPSBiaXRtYXAucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVQcm9wZXJ0aWVzKCQuTlNCaXRtYXBJbWFnZUZpbGVUeXBlUE5HLCAkKHt9KSk7XG59XG5kYXRhID8gT2JqQy51bndyYXAoZGF0YS5iYXNlNjRFbmNvZGVkU3RyaW5nV2l0aE9wdGlvbnMoMCkpIDogJydgXG5cbmNvbnN0IHdpbmRvd3NTY3JpcHQgPSBgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uV2luZG93cy5Gb3JtczsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uRHJhd2luZztcbmlmIChbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6Q29udGFpbnNJbWFnZSgpKSB7XG4gICRpbWFnZSA9IFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpHZXRJbWFnZSgpO1xuICAkc3RyZWFtID0gTmV3LU9iamVjdCBTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtO1xuICB0cnkgeyAkaW1hZ2UuU2F2ZSgkc3RyZWFtLCBbU3lzdGVtLkRyYXdpbmcuSW1hZ2luZy5JbWFnZUZvcm1hdF06OlBuZyk7IFtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJHN0cmVhbS5Ub0FycmF5KCkpIH1cbiAgZmluYWxseSB7ICRzdHJlYW0uRGlzcG9zZSgpOyAkaW1hZ2UuRGlzcG9zZSgpIH1cbn1gXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ2xpcGJvYXJkSW1hZ2UoeyBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGVudiA9IHByb2Nlc3MuZW52LCBydW4gPSBleGVjdXRlIH0gPSB7fSkge1xuICBpZiAoZW52LlNTSF9DT05ORUNUSU9OIHx8IGVudi5TU0hfVFRZKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuYXZhaWxhYmxlIG92ZXIgU1NIJylcbiAgY29uc3Qgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6ICdidWZmZXInLCB0aW1lb3V0OiAxMDAwMCwgbWF4QnVmZmVyOiAzMiAqIDEwMjQgKiAxMDI0IH1cbiAgbGV0IGRhdGFcbiAgdHJ5IHtcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdvc2FzY3JpcHQnLCBbJy1sJywgJ0phdmFTY3JpcHQnLCAnLWUnLCBtYWNTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bigncG93ZXJzaGVsbC5leGUnLCBbJy1Ob1Byb2ZpbGUnLCAnLU5vbkludGVyYWN0aXZlJywgJy1TVEEnLCAnLUNvbW1hbmQnLCB3aW5kb3dzU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgIGNvbnN0IHdheWxhbmQgPSBCb29sZWFuKGVudi5XQVlMQU5EX0RJU1BMQVkpXG4gICAgICBjb25zdCBjb21tYW5kID0gd2F5bGFuZCA/ICd3bC1wYXN0ZScgOiAneGNsaXAnXG4gICAgICBjb25zdCB7IHN0ZG91dDogdHlwZXMgfSA9IGF3YWl0IHJ1bihjb21tYW5kLCB3YXlsYW5kID8gWyctLWxpc3QtdHlwZXMnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnVEFSR0VUUycsICctbyddLCBvcHRpb25zKVxuICAgICAgaWYgKCF0eXBlcy50b1N0cmluZygpLnNwbGl0KC9cXHMrLykuaW5jbHVkZXMoJ2ltYWdlL3BuZycpKSByZXR1cm4gbnVsbFxuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bihjb21tYW5kLCB3YXlsYW5kID8gWyctLXR5cGUnLCAnaW1hZ2UvcG5nJywgJy0tbm8tbmV3bGluZSddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdpbWFnZS9wbmcnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5zdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybScpXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgcmVhZGVyIHVuYXZhaWxhYmxlOiBpbnN0YWxsICcgKyAoZW52LldBWUxBTkRfRElTUExBWSA/ICd3bC1jbGlwYm9hcmQnIDogcGxhdGZvcm0gPT09ICdsaW51eCcgPyAneGNsaXAnIDogJ3RoZSBzeXN0ZW0gY2xpcGJvYXJkIHRvb2xzJykpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuICBpZiAoIWRhdGEubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBpZiAoIWRhdGEuc3ViYXJyYXkoMCwgOCkuZXF1YWxzKEJ1ZmZlci5mcm9tKFsxMzcsIDgwLCA3OCwgNzEsIDEzLCAxMCwgMjYsIDEwXSkpKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBkaWQgbm90IHJldHVybiBhIFBORyBpbWFnZScpXG4gIGNvbnN0IGRpciA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2xpcGJvYXJkLScpKVxuICBkaXJlY3Rvcmllcy5hZGQoZGlyKVxuICBjb25zdCBkaXNwb3NlID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgZGlyZWN0b3JpZXMuZGVsZXRlKGRpcilcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbihkaXIsICdjbGlwYm9hcmQucG5nJylcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgZGF0YSwgeyBtb2RlOiAwbzYwMCB9KVxuICAgIHJldHVybiB7IHBhdGgsIGRpc3Bvc2UgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF3YWl0IGRpc3Bvc2UoKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoeyByZWFkSW1hZ2UsIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IgfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBwYXN0ZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCByZWFkSW1hZ2UoKVxuICAgICAgaWYgKCFpbWFnZSkge1xuICAgICAgICBvbkVycm9yKCdObyBpbWFnZSBvbiB0aGUgY2xpcGJvYXJkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignQ2xpcGJvYXJkIGltYWdlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgQ2xpcGJvYXJkIHBhc3RlIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBlbmRpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbiwgZ2V0SW5wdXQsIHNldElucHV0IH0pIHtcbiAgbGV0IGRyYWZ0ID0gbnVsbFxuICBsZXQgZ2VuZXJhdGlvbiA9IDBcblxuICBmdW5jdGlvbiBzdGFydCh7IHZhbHVlLCBjdXJzb3IgfSkge1xuICAgIGlmIChkaWN0YXRpb24uc3RhdHVzICE9PSAnaWRsZScpIHJldHVyblxuICAgIGRyYWZ0ID0geyB2YWx1ZSwgY3Vyc29yIH1cbiAgICArK2dlbmVyYXRpb25cbiAgICB2b2lkIGRpY3RhdGlvbi5zdGFydCgpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIGNvbnN0IHRhcmdldCA9IGRyYWZ0XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGRpY3RhdGlvbi5zdG9wKClcbiAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24gfHwgIXRhcmdldCB8fCB0ZXh0ID09IG51bGwgfHwgZ2V0SW5wdXQoKSAhPT0gdGFyZ2V0LnZhbHVlKSByZXR1cm5cbiAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCBsZWFkID0gdGV4dCAmJiBiZWZvcmUgJiYgIS9cXHMkLy50ZXN0KGJlZm9yZSkgJiYgIS9eXFxzLy50ZXN0KHRleHQpID8gJyAnIDogJydcbiAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IHRyYWlsID0gdGV4dCAmJiBhZnRlciAmJiAhL1xccyQvLnRlc3QodGV4dCkgJiYgIS9eW1xccy4sOzohP10vLnRlc3QoYWZ0ZXIpID8gJyAnIDogJydcbiAgICBzZXRJbnB1dChiZWZvcmUgKyBsZWFkICsgdGV4dCArIHRyYWlsICsgYWZ0ZXIpXG4gICAgZHJhZnQgPSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgKytnZW5lcmF0aW9uXG4gICAgZHJhZnQgPSBudWxsXG4gICAgdm9pZCBkaWN0YXRpb24uY2FuY2VsKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgIGlmIChkaWN0YXRpb24uc3RhdHVzID09PSAnaWRsZScpIHJldHVybiBmYWxzZVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnIHx8IChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2MnKSkgY2FuY2VsKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nICYmICFldmVudC5zaGlmdCAmJiAhZXZlbnQubWV0YSAmJiBkaWN0YXRpb24uc3RhdHVzID09PSAncmVjb3JkaW5nJykgdm9pZCBzdG9wKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHsgc3RhcnQsIHN0b3AsIGNhbmNlbCwgaGFuZGxlIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0KHsgY2FwdHVyZVJlZ2lvbiwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciwgb25TdGF0dXMgPSAoKSA9PiB7fSB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVJbWFnZSgpIHtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBvblN0YXR1cygnY2FwdHVyaW5nJylcbiAgICBjb25zdCB0YXJnZXQgPSBnZXREcmFmdCgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgY2FwdHVyZVJlZ2lvbigpXG4gICAgICBpZiAoIWltYWdlKSByZXR1cm5cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdTY3JlZW4gY2FwdHVyZSBub3QgYXR0YWNoZWQ6IHRoZSBkcmFmdCBjaGFuZ2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGF3YWl0IGF0dGFjaEltYWdlKGltYWdlLnBhdGgpXG4gICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIGF0dGFjaG1lbnQgZmFpbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICAgIHNldElucHV0KGJlZm9yZSArIGxhYmVsICsgYWZ0ZXIsIGJlZm9yZS5sZW5ndGggKyBsYWJlbC5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoYFNjcmVlbiBjYXB0dXJlIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBlbmRpbmcgPSBmYWxzZVxuICAgICAgb25TdGF0dXMoJ2lkbGUnKVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgbWtkdGVtcCwgdW5saW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5cbmxldCBjYXB0dXJlRGlyID0gbnVsbFxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVDYXB0dXJlRGlyKCkge1xuICBjYXB0dXJlRGlyID8/PSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdwaWNvLWNhcHR1cmUtJykpXG4gIHJldHVybiBjYXB0dXJlRGlyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlQ29tbWFuZHMocGxhdGZvcm0sIGZpbGUsIGVudiA9IHByb2Nlc3MuZW52KSB7XG4gIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHJldHVybiBbWydzY3JlZW5jYXB0dXJlJywgWyctaScsICcteCcsIGZpbGVdXV1cbiAgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgaWYgKGVudi5YREdfU0VTU0lPTl9UWVBFID09PSAnd2F5bGFuZCcpIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gW1snZ25vbWUtc2NyZWVuc2hvdCcsIFsnLWEnLCAnLWYnLCBmaWxlXV0sIFsnc3BlY3RhY2xlJywgWyctcicsICctYicsICctbicsICctbycsIGZpbGVdXV1cbiAgICAgIHJldHVybiBlbnYuU1dBWVNPQ0sgfHwgZW52LlhER19DVVJSRU5UX0RFU0tUT1A/LnNwbGl0KCc6JykuaW5jbHVkZXMoJ3N3YXknKVxuICAgICAgICA/IFtbJ3NsdXJwJywgW11dLCAuLi5mYWxsYmFja11cbiAgICAgICAgOiBmYWxsYmFja1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgWyd4ZmNlNC1zY3JlZW5zaG9vdGVyJywgWyctLXJlZ2lvbicsICctLXNhdmUnLCBmaWxlXV0sXG4gICAgICBbJ2dub21lLXNjcmVlbnNob3QnLCBbJy1hJywgJy1mJywgZmlsZV1dLFxuICAgICAgWydzY3JvdCcsIFsnLS1zZWxlY3QnLCBmaWxlXV0sXG4gICAgXVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignc2NyZWVuIGNhcHR1cmUgcmVxdWlyZXMgbWFjT1Mgb3IgTGludXgnKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FwdHVyZVJlZ2lvbih7IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgZW52ID0gcHJvY2Vzcy5lbnYsIHJ1biA9IGV4ZWNGaWxlLCBleGlzdHMgPSBleGlzdHNTeW5jIH0gPSB7fSkge1xuICBjb25zdCBmaWxlID0gam9pbihhd2FpdCBlbnN1cmVDYXB0dXJlRGlyKCksIGBjYXB0dXJlLSR7RGF0ZS5ub3coKX0ucG5nYClcbiAgY29uc3QgY29tbWFuZHMgPSBjYXB0dXJlQ29tbWFuZHMocGxhdGZvcm0sIGZpbGUsIGVudilcbiAgZm9yIChjb25zdCBbY29tbWFuZCwgYXJnc10gb2YgY29tbWFuZHMpIHtcbiAgICBsZXQgZXJyb3JcbiAgICBpZiAoY29tbWFuZCA9PT0gJ3NsdXJwJykge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gcnVuKGNvbW1hbmQsIGFyZ3MsIChlcnJvciwgc3Rkb3V0KSA9PiByZXNvbHZlKHsgZXJyb3IsIHN0ZG91dCB9KSlcbiAgICAgICAgLy8gc2x1cnAgY29uc3VtZXMgb3B0aW9uYWwgcmVjdGFuZ2xlcyBmcm9tIHN0ZGluIGJlZm9yZSBzaG93aW5nIGl0cyBVSS5cbiAgICAgICAgLy8gZXhlY0ZpbGUgbGVhdmVzIHRoYXQgcGlwZSBvcGVuOyBzaWduYWwgRU9GIHNvIHNlbGVjdGlvbiBjYW4gc3RhcnQuXG4gICAgICAgIGNoaWxkPy5zdGRpbj8uZW5kKClcbiAgICAgIH0pXG4gICAgICBlcnJvciA9IHNlbGVjdGlvbi5lcnJvclxuICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IHNlbGVjdGlvbi5zdGRvdXQ/LnRyaW0oKVxuICAgICAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm4gbnVsbFxuICAgICAgICBlcnJvciA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIHJ1bignZ3JpbScsIFsnLWcnLCBnZW9tZXRyeSwgZmlsZV0sIGVycm9yID0+IHJlc29sdmUoZXJyb3IpKVxuICAgICAgICB9KVxuICAgICAgICBpZiAoZXJyb3I/LmNvZGUgPT09ICdFTk9FTlQnKSB0aHJvdyBuZXcgRXJyb3IoJ0luc3RhbGwgZ3JpbSBhbmQgc2x1cnAgZm9yIFN3YXkgcmVnaW9uIGNhcHR1cmU6IHN1ZG8gYXB0IGluc3RhbGwgZ3JpbSBzbHVycC4nKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBydW4oY29tbWFuZCwgYXJncywgZXJyb3IgPT4gcmVzb2x2ZShlcnJvcikpXG4gICAgICB9KVxuICAgIH1cbiAgICAvLyBUcnkgYW5vdGhlciBiYWNrZW5kIG9ubHkgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBtaXNzaW5nLCBub3Qgb24gY2FuY2VsLlxuICAgIGlmIChlcnJvcj8uY29kZSA9PT0gJ0VOT0VOVCcpIGNvbnRpbnVlXG4gICAgaWYgKCFleGlzdHMoZmlsZSkpIHtcbiAgICAgIGlmIChlcnJvciAmJiBwbGF0Zm9ybSAhPT0gJ2RhcndpbicpIHtcbiAgICAgICAgY29uc3QgZGV0YWlsID0gZXJyb3Iuc3RkZXJyIHx8IGVycm9yLm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKVxuICAgICAgICBpZiAoZXJyb3IuY29kZSAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKGBzY3JlZW4gY2FwdHVyZSBmYWlsZWQ6ICR7ZGV0YWlsfWApXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHVubGluayhmaWxlKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICAgIHJldHVybiB7IHBhdGg6IGZpbGUsIGRpc3Bvc2U6ICgpID0+IHVubGluayhmaWxlKS5jYXRjaCgoKSA9PiB7fSkgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihlbnYuWERHX1NFU1NJT05fVFlQRSA9PT0gJ3dheWxhbmQnXG4gICAgPyAnSW5zdGFsbCBnbm9tZS1zY3JlZW5zaG90IG9yIHNwZWN0YWNsZSBmb3IgTGludXggcmVnaW9uIGNhcHR1cmUuIFN1cHBvcnQgZGVwZW5kcyBvbiB5b3VyIFdheWxhbmQgY29tcG9zaXRvci4nXG4gICAgOiAnSW5zdGFsbCBhIHJlZ2lvbiBjYXB0dXJlIHRvb2w6IHN1ZG8gYXB0IGluc3RhbGwgeGZjZTQtc2NyZWVuc2hvb3RlciAob3IgZ25vbWUtc2NyZWVuc2hvdCAvIHNjcm90KS4nKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21wb3NlckZpbGVzKCkge1xuICBsZXQgdGV4dCA9ICcnXG4gIGxldCByZWZlcmVuY2VzID0gW11cblxuICBmdW5jdGlvbiB1cGRhdGUodmFsdWUsIGF0dGFjaG1lbnRzKSB7XG4gICAgbGV0IHN0YXJ0ID0gMFxuICAgIHdoaWxlIChzdGFydCA8IHRleHQubGVuZ3RoICYmIHN0YXJ0IDwgdmFsdWUubGVuZ3RoICYmIHRleHRbc3RhcnRdID09PSB2YWx1ZVtzdGFydF0pIHN0YXJ0KytcbiAgICBsZXQgZW5kID0gdGV4dC5sZW5ndGhcbiAgICBsZXQgbmV4dEVuZCA9IHZhbHVlLmxlbmd0aFxuICAgIHdoaWxlIChlbmQgPiBzdGFydCAmJiBuZXh0RW5kID4gc3RhcnQgJiYgdGV4dFtlbmQgLSAxXSA9PT0gdmFsdWVbbmV4dEVuZCAtIDFdKSB7XG4gICAgICBlbmQtLVxuICAgICAgbmV4dEVuZC0tXG4gICAgfVxuICAgIGNvbnN0IGRlbHRhID0gbmV4dEVuZCAtIGVuZFxuICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLmZsYXRNYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgaWYgKHJlZmVyZW5jZS5lbmQgPD0gc3RhcnQpIHJldHVybiBbcmVmZXJlbmNlXVxuICAgICAgaWYgKHJlZmVyZW5jZS5zdGFydCA+PSBlbmQpIHJldHVybiBbeyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBkZWx0YSwgZW5kOiByZWZlcmVuY2UuZW5kICsgZGVsdGEgfV1cbiAgICAgIHJldHVybiBbXVxuICAgIH0pXG4gICAgdGV4dCA9IHZhbHVlXG4gICAgY29uc3QgbWF0Y2hlcyA9IFsuLi50ZXh0Lm1hdGNoQWxsKC9cXFtGaWxlICNcXGQrXFxdL2cpXS5yZXZlcnNlKClcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50cy5nZXQobWF0Y2hbMF0pXG4gICAgICBpZiAoYXR0YWNobWVudD8ua2luZCAhPT0gJ2ZpbGUnKSBjb250aW51ZVxuICAgICAgY29uc3QgcGF0aCA9IGF0dGFjaG1lbnQucGF0aFxuICAgICAgY29uc3Qgb2Zmc2V0ID0gcGF0aC5sZW5ndGggLSBtYXRjaFswXS5sZW5ndGhcbiAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2Uuc3RhcnQgPj0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgPyB7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIG9mZnNldCwgZW5kOiByZWZlcmVuY2UuZW5kICsgb2Zmc2V0IH1cbiAgICAgICAgOiByZWZlcmVuY2UpXG4gICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyBwYXRoICsgdGV4dC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7IHN0YXJ0OiBtYXRjaC5pbmRleCwgZW5kOiBtYXRjaC5pbmRleCArIHBhdGgubGVuZ3RoLCBwbGFjZWhvbGRlcjogbWF0Y2hbMF0gfSlcbiAgICB9XG4gICAgcmVmZXJlbmNlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydClcbiAgICByZXR1cm4gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gY29udGVudCgpIHtcbiAgICBsZXQgdmFsdWUgPSB0ZXh0XG4gICAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgWy4uLnJlZmVyZW5jZXNdLnJldmVyc2UoKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCByZWZlcmVuY2Uuc3RhcnQpICsgcmVmZXJlbmNlLnBsYWNlaG9sZGVyICsgdmFsdWUuc2xpY2UocmVmZXJlbmNlLmVuZClcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByZXR1cm4geyB1cGRhdGUsIGNvbnRlbnQgfVxufVxuIiwgImNvbnN0IGJhcnMgPSAnXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4J1xuY29uc3Qgd2lkdGggPSAxNlxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kTGV2ZWwobGV2ZWxzLCBsZXZlbCkge1xuICByZXR1cm4gWy4uLmxldmVscy5zbGljZSgxIC0gd2lkdGgpLCBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBsZXZlbCkpXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGljdGF0aW9uSW5kaWNhdG9yKHN0YXR1cywgbGV2ZWxzKSB7XG4gIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuICcnXG4gIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gYCAke3N0YXR1c30gYFxuICBjb25zdCBzYW1wbGVzID0gWy4uLkFycmF5KE1hdGgubWF4KDAsIHdpZHRoIC0gbGV2ZWxzLmxlbmd0aCkpLmZpbGwoMCksIC4uLmxldmVscy5zbGljZSgtd2lkdGgpXVxuICByZXR1cm4gYCAke3NhbXBsZXMubWFwKChsZXZlbCkgPT4gYmFyc1tNYXRoLnJvdW5kKGxldmVsICogKGJhcnMubGVuZ3RoIC0gMSkpXSkuam9pbignJyl9IHJlY29yZGluZyBgXG59XG4iLCAiaW1wb3J0IHsgY29kZVRvQU5TSSB9IGZyb20gJ0BzaGlraWpzL2NsaSdcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHNoaWtpVGhlbWUgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBMQU5HUyA9IHtcbiAganM6ICdqcycsIG1qczogJ2pzJywgY2pzOiAnanMnLCBqc3g6ICdqc3gnLCB0czogJ3RzJywgdHN4OiAndHN4JyxcbiAganNvbjogJ2pzb24nLCBqc29ubDogJ2pzb24nLCBtZDogJ21kJywgcHk6ICdweXRob24nLCByYjogJ3J1YnknLCBnbzogJ2dvJyxcbiAgcnM6ICdydXN0JywgYzogJ2MnLCBoOiAnYycsIGNwcDogJ2NwcCcsIGphdmE6ICdqYXZhJywgY3NzOiAnY3NzJyxcbiAgaHRtbDogJ2h0bWwnLCB2dWU6ICd2dWUnLCBzaDogJ2Jhc2gnLCBiYXNoOiAnYmFzaCcsIHpzaDogJ2Jhc2gnLFxuICB5bWw6ICd5YW1sJywgeWFtbDogJ3lhbWwnLCB0b21sOiAndG9tbCcsIHNxbDogJ3NxbCcsIHN2ZWx0ZTogJ3N2ZWx0ZScsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYW5nRm9yUGF0aChwYXRoKSB7XG4gIGNvbnN0IGV4dCA9IFN0cmluZyhwYXRoKS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIExBTkdTW2V4dF0gfHwgJ3R4dCdcbn1cblxuY29uc3QgY2FjaGUgPSBuZXcgTWFwKClcbmNvbnN0IHBlbmRpbmcgPSBuZXcgU2V0KClcbmNvbnN0IGZhaWxlZCA9IG5ldyBTZXQoKVxuY29uc3QgW3ZlcnNpb24sIHNldFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG5cbmV4cG9ydCBjb25zdCBoaWdobGlnaHRWZXJzaW9uID0gdmVyc2lvblxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0KGNvZGUsIGxhbmcpIHtcbiAgY29uc3Qgc2FmZUxhbmcgPSBsYW5nICYmICFmYWlsZWQuaGFzKGxhbmcpID8gbGFuZyA6ICd0eHQnXG4gIGNvbnN0IHRoZW1lID0gc2hpa2lUaGVtZSgpXG4gIHJldHVybiBjb2RlXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3RoZW1lfVxcbiR7c2FmZUxhbmd9XFxuJHtsaW5lfWBcbiAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkgcmV0dXJuIGNhY2hlLmdldChrZXkpXG4gICAgICB3YXJtKGxpbmUsIHNhZmVMYW5nLCB0aGVtZSwga2V5KVxuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKVxufVxuXG5mdW5jdGlvbiB3YXJtKGxpbmUsIGxhbmcsIHRoZW1lLCBrZXkpIHtcbiAgaWYgKHBlbmRpbmcuaGFzKGtleSkpIHJldHVyblxuICBwZW5kaW5nLmFkZChrZXkpXG4gIGNvZGVUb0FOU0kobGluZSwgbGFuZywgdGhlbWUpXG4gICAgLnRoZW4oKGFuc2kpID0+IGNhY2hlLnNldChrZXksIGFuc2kucmVwbGFjZSgvXFxuJC8sICcnKSkpXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIGZhaWxlZC5hZGQobGFuZylcbiAgICAgIGNhY2hlLnNldChrZXksIGxpbmUpXG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICBwZW5kaW5nLmRlbGV0ZShrZXkpXG4gICAgICBzZXRWZXJzaW9uKCh2KSA9PiB2ICsgMSlcbiAgICB9KVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBhY3Rpdml0eVJvd3Mocm93cykge1xuICBjb25zdCBhY3RpdmUgPSAocm93KSA9PiByb3cuc3RhdHVzID09PSAncnVubmluZycgfHwgcm93LnN0YXR1cyA9PT0gJ3F1ZXVlZCdcbiAgcmV0dXJuIFsuLi5yb3dzXS5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYWN0aXZlKGIpKSAtIE51bWJlcihhY3RpdmUoYSkpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aXZpdHlTdHJpcFNpemVzKGhlaWdodCwgbGVuZ3RocywgbWFyZ2luID0gMSkge1xuICBjb25zdCBncm91cHMgPSBsZW5ndGhzLmZpbHRlcihCb29sZWFuKS5sZW5ndGhcbiAgaWYgKCFncm91cHMpIHJldHVybiBsZW5ndGhzLm1hcCgoKSA9PiAwKVxuICBjb25zdCBidWRnZXQgPSBNYXRoLmZsb29yKGhlaWdodCAqIDAuMilcbiAgY29uc3Qgc2l6ZXMgPSBsZW5ndGhzLm1hcCgobGVuZ3RoKSA9PiBsZW5ndGggPyAxIDogMClcbiAgY29uc3QgdXNlZCA9ICgpID0+IG1hcmdpbiArIDEgKyBncm91cHMgKyBzaXplcy5yZWR1Y2UoKHN1bSwgc2l6ZSwgaSkgPT4gc3VtICsgc2l6ZSArIE51bWJlcihzaXplIDwgbGVuZ3Roc1tpXSksIDApXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IHNpemVzLm1hcCgoc2l6ZSwgaSkgPT4gaSlcbiAgICAgIC5maWx0ZXIoKGkpID0+IHNpemVzW2ldIDwgbGVuZ3Roc1tpXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBzaXplc1thXSAtIHNpemVzW2JdIHx8IGEgLSBiKVxuICAgIGNvbnN0IG5leHQgPSBjYW5kaWRhdGVzLmZpbmQoKGkpID0+IHVzZWQoKSArIE51bWJlcihzaXplc1tpXSArIDEgPCBsZW5ndGhzW2ldKSA8PSBidWRnZXQpXG4gICAgaWYgKG5leHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHNpemVzXG4gICAgc2l6ZXNbbmV4dF0rK1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFdpbmRvd1N0YXJ0KGN1cnJlbnQsIHRhcmdldCwgbGVuZ3RoLCBzaXplKSB7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3VycmVudCwgbWF4KSlcbiAgY29uc3Qgc2Nyb2xsb2ZmID0gc2l6ZSA+IDIgPyAxIDogMFxuICBpZiAodGFyZ2V0IDwgMCkgcmV0dXJuIHN0YXJ0XG4gIGlmICh0YXJnZXQgPCBzdGFydCArIHNjcm9sbG9mZikgcmV0dXJuIE1hdGgubWF4KDAsIHRhcmdldCAtIHNjcm9sbG9mZilcbiAgaWYgKHRhcmdldCA+PSBzdGFydCArIHNpemUgLSBzY3JvbGxvZmYpIHJldHVybiBNYXRoLm1pbihtYXgsIHRhcmdldCAtIHNpemUgKyBzY3JvbGxvZmYgKyAxKVxuICByZXR1cm4gc3RhcnRcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIERpZmYsIGVhc2UsIEhvcml6b250YWxTY3JvbGxCb3gsIGxpbmVhciwgTWFya2Rvd24sIFNjcm9sbEJveCwgU3Bpbm5lciwgdXNlQW5pbWF0ZWQsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VNb3VzZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOLCBQRUVSIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGhpZ2hsaWdodCwgbGFuZ0ZvclBhdGggfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5cbmV4cG9ydCB7IGRlZmF1bHRUaXRsZSBhcyB1aVRpdGxlIH0gZnJvbSAncGljb2NvZGUtY29yZS90b29scy9yZWNvcmRlci5qcydcblxuZnVuY3Rpb24gUHJvc2VTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBiZzogY29kZUJnLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgIDx0ZXh0PntzaG93bn08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29kZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgY29uc3QgY29udGVudFdpZHRoID0gTWF0aC5tYXgoMCwgLi4udmFsdWUuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gWy4uLmxpbmVdLmxlbmd0aCkpICsgMlxuICByZXR1cm4gKFxuICAgIDxIb3Jpem9udGFsU2Nyb2xsQm94IGNvbnRlbnRXaWR0aD17Y29udGVudFdpZHRofSBzdHlsZT17eyBiZzogY29kZUJnLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtzaG93bi5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBrZXkpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e2tleX0gc3R5bGU9e3sgb3ZlcmZsb3c6ICdub3dyYXAnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICkpfVxuICAgICAgPC9ib3g+XG4gICAgPC9Ib3Jpem9udGFsU2Nyb2xsQm94PlxuICApXG59XG5cbmZ1bmN0aW9uIFRyYW5zY3JpcHRDb2RlQmxvY2socHJvcHMpIHtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBwcm9wcy5sYW5ndWFnZT8udG9Mb3dlckNhc2UoKVxuICBjb25zdCBDb21wb25lbnQgPSBbJ21kJywgJ21hcmtkb3duJywgJ3RleHQnLCAndHh0JywgJ3BsYWludGV4dCddLmluY2x1ZGVzKGxhbmd1YWdlKSA/IFByb3NlU25pcHBldCA6IENvZGVTbmlwcGV0XG4gIHJldHVybiA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KSB7XG4gIGlmICghZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIHsgYmVmb3JlOiBTdHJpbmcocmV2ZXJ0Py5iZWZvcmUgfHwgJycpLCBhZnRlcjogU3RyaW5nKHJldmVydD8uYWZ0ZXIgfHwgJycpIH1cbiAgY29uc3QgYmVmb3JlID0gW11cbiAgY29uc3QgYWZ0ZXIgPSBbXVxuICBkaWZmLmh1bmtzLmZvckVhY2goKGh1bmssIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4KSB7XG4gICAgICBiZWZvcmUucHVzaCgnXHUyMkVGJylcbiAgICAgIGFmdGVyLnB1c2goJ1x1MjJFRicpXG4gICAgfVxuICAgIGZvciAoY29uc3QgbGluZSBvZiBodW5rLmxpbmVzKSB7XG4gICAgICBpZiAobGluZS50eXBlICE9PSAnYWRkJykgYmVmb3JlLnB1c2gobGluZS50ZXh0KVxuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ3JlbW92ZScpIGFmdGVyLnB1c2gobGluZS50ZXh0KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHsgYmVmb3JlOiBiZWZvcmUuam9pbignXFxuJyksIGFmdGVyOiBhZnRlci5qb2luKCdcXG4nKSB9XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSB7XG4gIGlmIChkaWZmPy5odW5rcz8ubGVuZ3RoKSByZXR1cm4gZGlmZi5odW5rcy5yZWR1Y2UoKHN1bSwgaCkgPT4gc3VtICsgaC5saW5lcy5sZW5ndGgsIDApXG4gIGNvbnN0IHByZXZpZXcgPSBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpXG4gIHJldHVybiBNYXRoLm1heChwcmV2aWV3LmFmdGVyLnNwbGl0KCdcXG4nKS5sZW5ndGgsIHByZXZpZXcuYmVmb3JlLnNwbGl0KCdcXG4nKS5sZW5ndGgsIDIpXG59XG5cbmZ1bmN0aW9uIGZtdER1cmF0aW9uKG1zKSB7XG4gIGlmIChtcyA8IDYwMDAwKSByZXR1cm4gYCR7KG1zIC8gMTAwMCkudG9GaXhlZCgyKX1zYFxuICBjb25zdCBzZWNzID0gTWF0aC5yb3VuZChtcyAvIDEwMDApXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKHNlY3MgLyA2MCl9bSAke3NlY3MgJSA2MH1zYFxufVxuXG5mdW5jdGlvbiBmbXRSdW5uaW5nKG1zKSB7XG4gIGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKG1zIC8gMTAwMClcbiAgcmV0dXJuIHNlY3MgPCA2MCA/IGAke3NlY3N9c2AgOiBgJHtNYXRoLmZsb29yKHNlY3MgLyA2MCl9bSAke3NlY3MgJSA2MH1zYFxufVxuXG5mdW5jdGlvbiBtaXhDb2xvcihmcm9tLCB0bywgYW1vdW50KSB7XG4gIGNvbnN0IHJnYiA9IChjb2xvcikgPT4gY29sb3I/LnN0YXJ0c1dpdGgoJyMnKSAmJiBjb2xvci5sZW5ndGggPT09IDdcbiAgICA/IFsxLCAzLCA1XS5tYXAoKGkpID0+IHBhcnNlSW50KGNvbG9yLnNsaWNlKGksIGkgKyAyKSwgMTYpKVxuICAgIDogWzEyNywgMTI3LCAxMjddXG4gIGNvbnN0IGEgPSByZ2IoZnJvbSlcbiAgY29uc3QgYiA9IHJnYih0bylcbiAgcmV0dXJuIGAjJHthLm1hcCgodmFsdWUsIGkpID0+IE1hdGgucm91bmQodmFsdWUgKyAoYltpXSAtIHZhbHVlKSAqIGFtb3VudCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbn1cblxuY29uc3QgVE9PTF9ERVNDUklQVElPTl9MSU1JVCA9IDVcbmNvbnN0IEJBU0hfT1VUUFVUX0xJTkVTID0gMTBcbmNvbnN0IFRPT0xfTkFNRV9GTEFTSF9NUyA9IDkwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TID0gNTAwXG5jb25zdCBERVNDUklQVElPTl9SRVZFQUxfTVMgPSA3MDBcblxuZnVuY3Rpb24gZGVsYXllZExpbmVhcih0KSB7XG4gIGNvbnN0IGRlbGF5ID0gREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TIC8gKERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyArIERFU0NSSVBUSU9OX1JFVkVBTF9NUylcbiAgcmV0dXJuIHQgPD0gZGVsYXkgPyAwIDogKHQgLSBkZWxheSkgLyAoMSAtIGRlbGF5KVxufVxuXG5mdW5jdGlvbiBEZXNjcmlwdGlvblJldmVhbCh7IGNoaWxkcmVuLCBydW5uaW5nIH0pIHtcbiAgY29uc3QgcmV2ZWFsID0gdXNlQW5pbWF0ZWQocnVubmluZyA/IDAgOiAxLCBlYXNlKERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyArIERFU0NSSVBUSU9OX1JFVkVBTF9NUywgZGVsYXllZExpbmVhcikpXG4gIGlmICghcnVubmluZykgcmV2ZWFsLnNldCgxKVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IG1peENvbG9yKGFjY2VudCgpLCBGRywgcmV2ZWFsKCkpLCBvdmVyZmxvdzogJ3RydW5jYXRlJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwIH19PntjaGlsZHJlbn08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIG91dHB1dExpbmVzKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBbXVxuICBjb25zdCBsaW5lcyA9IHZhbHVlLnNwbGl0KCdcXG4nKVxuICBpZiAobGluZXMuYXQoLTEpID09PSAnJykgbGluZXMucG9wKClcbiAgcmV0dXJuIGxpbmVzXG59XG5cbmZ1bmN0aW9uIEJhc2hPdXRwdXQoeyB2YWx1ZSwgbGluZVN0YXJ0LCBsaW5lQ291bnQgfSkge1xuICBjb25zdCBsaW5lcyA9IG91dHB1dExpbmVzKHZhbHVlKVxuICBpZiAoIWxpbmVzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvd24gPSBsaW5lcy5zbGljZSgtQkFTSF9PVVRQVVRfTElORVMpXG4gIGNvbnN0IGZpcnN0ID0gbGluZVN0YXJ0IHx8IChsaW5lQ291bnQgPyBsaW5lQ291bnQgLSBzaG93bi5sZW5ndGggKyAxIDogbGluZXMubGVuZ3RoIC0gc2hvd24ubGVuZ3RoICsgMSlcbiAgY29uc3QgbGFzdCA9IGxpbmVDb3VudCB8fCBmaXJzdCArIHNob3duLmxlbmd0aCAtIDFcbiAgY29uc3QgZ3V0dGVyV2lkdGggPSBTdHJpbmcobGFzdCkubGVuZ3RoXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge3Nob3duLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICA8Ym94IGtleT17Zmlyc3QgKyBpfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake1N0cmluZyhmaXJzdCArIGkpLnBhZFN0YXJ0KGd1dHRlcldpZHRoKX0gYH08L3RleHQ+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29tcGFjdFRvb2xTaWduKHsgdG9vbCB9KSB7XG4gIGlmICh0b29sLm5hbWUgIT09ICdiYXNoJykgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuYmFja2dyb3VuZCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57J1x1MjFBQSAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuc3RhdHVzID09PSAncnVubmluZycpIHJldHVybiA8Ym94IHN0eWxlPXt7IHdpZHRoOiAyIH19PjxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz48L2JveD5cbiAgaWYgKHRvb2wuZXhpdENvZGUgPT09IDApIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+eydcdTI3MTMgJ308L3RleHQ+XG4gIGlmICh0b29sLmV4aXRDb2RlICE9IG51bGwpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PnsnXHUwMEQ3ICd9PC90ZXh0PlxuICByZXR1cm4gPHRleHQ+eycgICd9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBUb29sR3JvdXAoeyBpdGVtLCB2ZXJib3NlIH0pIHtcbiAgY29uc3QgbGF0ZXN0Q2FsbElkID0gaXRlbS50b29scy5hdCgtMSk/LmNhbGxJZFxuICBjb25zdCBnbG93ID0gdXNlQW5pbWF0ZWQoMCwgZWFzZShUT09MX05BTUVfRkxBU0hfTVMsIGxpbmVhcikpXG4gIGlmIChsYXRlc3RDYWxsSWQgIT09IGdsb3cuX2NhbGxJZCkge1xuICAgIGdsb3cuX2NhbGxJZCA9IGxhdGVzdENhbGxJZFxuICAgIGlmIChpdGVtLmFjdGl2ZSkge1xuICAgICAgZ2xvdy5zbmFwKDEpXG4gICAgICBnbG93LnNldCgwKVxuICAgIH1cbiAgfVxuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHsoaXRlbS5pdGVtcyB8fCBpdGVtLnRvb2xzKS5tYXAoKGVudHJ5LCBpKSA9PiBlbnRyeS5raW5kID09PSAndGhvdWdodHMnXG4gICAgICAgICAgPyA8TWVzc2FnZSBrZXk9e2l9IGl0ZW09e2VudHJ5fSB2ZXJib3NlIC8+XG4gICAgICAgICAgOiA8VG9vbENhcmQga2V5PXtpfSB7Li4uZW50cnl9IHZlcmJvc2UgLz4pfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgY291bnRzID0gbmV3IE1hcCgpXG4gIGZvciAoY29uc3QgdG9vbCBvZiBpdGVtLnRvb2xzKSBjb3VudHMuc2V0KHRvb2wubmFtZSwgKGNvdW50cy5nZXQodG9vbC5uYW1lKSB8fCAwKSArIDEpXG4gIGNvbnN0IGVudHJpZXMgPSBbLi4uY291bnRzXVxuICBjb25zdCB0b3RhbE1zID0gaXRlbS50b29scy5yZWR1Y2UoKHN1bSwgdG9vbCkgPT4gc3VtICsgKHRvb2wuZHVyYXRpb25NcyB8fCAwKSwgMClcbiAgY29uc3QgbGF0ZXN0TmFtZSA9IGl0ZW0udG9vbHMuYXQoLTEpPy5uYW1lXG4gIGNvbnN0IGFjdGl2aXR5ID0gKGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgID8geyAuLi5lbnRyeSwgbmFtZTogJ3Rob3VnaHRzJywgZGVzY3JpcHRpb246IGVudHJ5LnRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSwgdGhvdWdodDogdHJ1ZSB9XG4gICAgOiBlbnRyeSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuZGVzY3JpcHRpb24pXG4gIGNvbnN0IGRlc2NyaXB0aW9ucyA9IGFjdGl2aXR5LnNsaWNlKC1UT09MX0RFU0NSSVBUSU9OX0xJTUlUKVxuICBjb25zdCBoaWRkZW5EZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5sZW5ndGggLSBkZXNjcmlwdGlvbnMubGVuZ3RoXG4gIGNvbnN0IHRvb2xOYW1lV2lkdGggPSBNYXRoLm1heCgwLCAuLi5kZXNjcmlwdGlvbnMubWFwKChlbnRyeSkgPT4gZW50cnkubmFtZS5sZW5ndGgpKVxuICBjb25zdCB2aXNpYmxlQmFzaCA9IGl0ZW0uYWN0aXZlICYmIGl0ZW0udG9vbHMuYXQoLTEpPy5uYW1lID09PSAnYmFzaCcgPyBpdGVtLnRvb2xzLmF0KC0xKSA6IG51bGxcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgIHtpdGVtLmFjdGl2ZSA/IDxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+XHUyNzEzPC90ZXh0Pn1cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFdyYXA6ICd3cmFwJywgZmxleEdyb3c6IDEsIG1hcmdpblJpZ2h0OiAyIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLmFjdGl2ZSA/IEZHIDogTVVURUQgfX0+IENhbGxlZCA8L3RleHQ+XG4gICAgICAgICAge2VudHJpZXMubWFwKChbbmFtZSwgY291bnRdLCBpKSA9PiAoXG4gICAgICAgICAgICA8dGV4dCBrZXk9e25hbWV9IHN0eWxlPXt7IGNvbG9yOiBpdGVtLmFjdGl2ZSAmJiBuYW1lID09PSBsYXRlc3ROYW1lID8gbWl4Q29sb3IoRkcsIGFjY2VudCgpLCBnbG93KCkpIDogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICB7YCR7aSA/ICcsICcgOiAnJ30ke25hbWV9JHtjb3VudCA9PT0gMSA/ICcnIDogYCAke2NvdW50fSB0aW1lc2B9YH1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt0b3RhbE1zID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAgfX0+e2ZtdER1cmF0aW9uKHRvdGFsTXMpfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICB7aGlkZGVuRGVzY3JpcHRpb25zID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDx0ZXh0PnsnICcucmVwZWF0KHRvb2xOYW1lV2lkdGggKyA0KX08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AuLi4ke2hpZGRlbkRlc2NyaXB0aW9uc30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVzY3JpcHRpb25zLm1hcCgodG9vbCwgaSkgPT4gKFxuICAgICAgICAgIDxib3gga2V5PXt0b29sLmNhbGxJZCB8fCBgdGhvdWdodC0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0ID8gPHRleHQ+eycgICd9PC90ZXh0PiA6IDxDb21wYWN0VG9vbFNpZ24gdG9vbD17dG9vbH0gLz59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdG9vbC50aG91Z2h0IH19PntgJHt0b29sLm5hbWUucGFkU3RhcnQodG9vbE5hbWVXaWR0aCl9ICBgfTwvdGV4dD5cbiAgICAgICAgICAgIHt0b29sLnRob3VnaHRcbiAgICAgICAgICAgICAgPyA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+PE1hcmtkb3duIHRleHQ9e3Rvb2wuZGVzY3JpcHRpb259IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fSAvPjwvYm94PlxuICAgICAgICAgICAgICA6IDxEZXNjcmlwdGlvblJldmVhbCBydW5uaW5nPXt0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnfT57dG9vbC5kZXNjcmlwdGlvbn08L0Rlc2NyaXB0aW9uUmV2ZWFsPn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIHt2aXNpYmxlQmFzaD8udGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHZpc2libGVCYXNoLnRpdGxlLCAnYmFzaCcpfTwvdGV4dD59XG4gICAgICAgIHt2aXNpYmxlQmFzaD8uZnVsbE91dHB1dCAmJiA8QmFzaE91dHB1dCB2YWx1ZT17dmlzaWJsZUJhc2guZnVsbE91dHB1dH0gbGluZVN0YXJ0PXt2aXNpYmxlQmFzaC5vdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17dmlzaWJsZUJhc2gub3V0cHV0TGluZUNvdW50fSAvPn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIFRvb2xDYXJkKHsgbmFtZSwgdGl0bGUsIHRpdGxlTGFuZywgZGVzY3JpcHRpb24sIHN0YXR1cywgZGlmZiwgcmV2ZXJ0LCBmdWxsT3V0cHV0LCBvdXRwdXRMaW5lU3RhcnQsIG91dHB1dExpbmVDb3VudCwgZXJyb3IsIGJhY2tncm91bmQsIHZlcmJvc2UsIHN0YXJ0ZWRBdCwgZHVyYXRpb25NcyB9KSB7XG4gIGNvbnN0IHNob3duVGl0bGUgPSBuYW1lID09PSAnYmFzaCcgPyBudWxsIDogdGl0bGVMYW5nICYmIHRpdGxlID8gaGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcpIDogdGl0bGVcbiAgY29uc3QgaW5saW5lRGVzY3JpcHRpb24gPSAhc2hvd25UaXRsZVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICBjb25zdCBydW5uaW5nID0gc3RhdHVzID09PSAncnVubmluZydcbiAgY29uc3QgaW50ZXJydXB0ZWQgPSBzdGF0dXMgPT09ICdpbnRlcnJ1cHRlZCdcbiAgY29uc3QgcmV2ZXJ0ZWQgPSBzdGF0dXMgPT09ICdyZXZlcnRlZCdcbiAgY29uc3QgZmFpbGVkID0gc3RhdHVzID09PSAnZXJyb3InXG4gIGNvbnN0IG91dExpbmVzID0gZnVsbE91dHB1dCA/IGZ1bGxPdXRwdXQuc3BsaXQoJ1xcbicpIDogbnVsbFxuXG4gIGNvbnN0IGVsYXBzZWQgPSBydW5uaW5nICYmIHN0YXJ0ZWRBdCA/IERhdGUubm93KCkgLSBzdGFydGVkQXQgOiAwXG4gIGNvbnN0IHRvb2sgPSAhcnVubmluZyAmJiAhYmFja2dyb3VuZCAmJiBkdXJhdGlvbk1zICE9IG51bGwgPyBmbXREdXJhdGlvbihkdXJhdGlvbk1zKSA6IG51bGxcblxuICBjb25zdCBpbmZvID0gcnVubmluZyA/IChlbGFwc2VkID49IDUwMDAgPyBgcnVubmluZyAoJHtmbXRSdW5uaW5nKGVsYXBzZWQpfSlgIDogJ3J1bm5pbmcnKVxuICAgIDogaW50ZXJydXB0ZWQgPyAnaW50ZXJydXB0ZWQnXG4gICAgOiByZXZlcnRlZCA/ICdyZXZlcnRlZCdcbiAgICA6IGZhaWxlZCA/IGBmYWlsZWQke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IGJhY2tncm91bmQgPyAnYmFja2dyb3VuZCAgc2hlbGwgbGlzdGVkIGJlbG93J1xuICAgIDogZGlmZiA/IGArJHtkaWZmLmFkZGl0aW9uc30gLSR7ZGlmZi5kZWxldGlvbnN9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBvdXRMaW5lcyA/IGAke291dHB1dExpbmVDb3VudCB8fCBvdXRMaW5lcy5sZW5ndGh9ICR7KG91dHB1dExpbmVDb3VudCB8fCBvdXRMaW5lcy5sZW5ndGgpID09PSAxID8gJ2xpbmUnIDogJ2xpbmVzJ30ke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IGBkb25lJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG92ZXJmbG93OiAnY2xpcCcgfX0+XG4gICAgICAgIHtydW5uaW5nXG4gICAgICAgICAgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+XG4gICAgICAgICAgOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaW50ZXJydXB0ZWQgfHwgZmFpbGVkID8gUkVEIDogcmV2ZXJ0ZWQgPyBNVVRFRCA6IGFjY2VudCgpIH19PntpbnRlcnJ1cHRlZCA/ICdcdTI3MTcnIDogZmFpbGVkID8gJ1x1MjcxNycgOiByZXZlcnRlZCA/ICdcdTIxQTknIDogJ1x1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntgJHtuYW1lLnBhZEVuZCg1KX0gYH08L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGRyB9fT57c2hvd25UaXRsZSB8fCBkZXNjcmlwdGlvbiB8fCBuYW1lfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7aW5mb31gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAge2Rlc2NyaXB0aW9uICYmICFpbmxpbmVEZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGVzY3JpcHRpb259PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIHRpdGxlICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntoaWdobGlnaHQodGl0bGUsIHRpdGxlTGFuZyB8fCAnYmFzaCcpfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge2ZhaWxlZCAmJiBlcnJvciAmJiAoXG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7ZXJyb3J9YH08L3RleHQ+XG4gICAgICApfVxuICAgICAge3JldmVydCAmJiAhcnVubmluZyAmJiAhcmV2ZXJ0ZWQgJiYgIShkaWZmICYmIGRpZmYuYWRkaXRpb25zID09PSAwICYmIGRpZmYuZGVsZXRpb25zID09PSAwKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogZGlmZlByZXZpZXdMaW5lcyhkaWZmLCByZXZlcnQpLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDxEaWZmXG4gICAgICAgICAgICBiZWZvcmU9e3ByZXZpZXcuYmVmb3JlfVxuICAgICAgICAgICAgYWZ0ZXI9e3ByZXZpZXcuYWZ0ZXJ9XG4gICAgICAgICAgICBsYW5ndWFnZT17bGFuZ0ZvclBhdGgocmV2ZXJ0LnBhdGgpfVxuICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICBjb250ZXh0PXszfVxuICAgICAgICAgICAgZm9sZHM9e2ZhbHNlfVxuICAgICAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXI9e2ZhbHNlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtuYW1lID09PSAnYmFzaCcgJiYgZnVsbE91dHB1dCAmJiA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PjxCYXNoT3V0cHV0IHZhbHVlPXtmdWxsT3V0cHV0fSBsaW5lU3RhcnQ9e291dHB1dExpbmVTdGFydH0gbGluZUNvdW50PXtvdXRwdXRMaW5lQ291bnR9IC8+PC9ib3g+fVxuICAgICAge291dExpbmVzICYmIHZlcmJvc2UgJiYgbmFtZSAhPT0gJ2Jhc2gnICYmICFydW5uaW5nICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtvdXRMaW5lcy5zbGljZSgwLCAyMDApLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7b3V0TGluZXMubGVuZ3RoID4gMjAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjAyNiAke291dExpbmVzLmxlbmd0aCAtIDIwMH0gbW9yZSBsaW5lc2B9PC90ZXh0Pn1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIERlbGliZXJhdGlvblR1cm4oeyBpdGVtLCB2ZXJib3NlLCBjb21wYWN0VG9vbEhpc3RvcnkgPSBmYWxzZSwgcGFpcmVkID0gZmFsc2UsIGJvcmRlciA9IHRydWUsIHBhbmVIZWlnaHQsIGZvY3VzZWQgPSBmYWxzZSwgb25Gb2N1cyB9KSB7XG4gIGNvbnN0IHBhcnRpY2lwYW50QSA9IGl0ZW0ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IGl0ZW0ucm9sZSA9PT0gJ3Byb3Bvc2VyJ1xuICBjb25zdCBzeW50aGVzaXMgPSBpdGVtLnJvbGUgPT09ICdzeW50aGVzaXMnXG4gIGNvbnN0IGxhYmVsID0gc3ludGhlc2lzID8gJ1N5bnRoZXNpcycgOiBgJHtwYXJ0aWNpcGFudEEgPyAnUGFydGljaXBhbnQgQScgOiAnUGFydGljaXBhbnQgQid9ICByb3VuZCAke2l0ZW0ucm91bmR9YFxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmb2xsb3csIHNldEZvbGxvd10gPSBjcmVhdGVTaWduYWwodHJ1ZSlcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAocGFuZUhlaWdodCAmJiBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpICYmIChldmVudC5hY3Rpb24gPT09ICdzY3JvbGwnIHx8IGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJykpIG9uRm9jdXM/LigpXG4gIH0pXG4gIGNvbnN0IHRvb2xzID0gY29tcGFjdFRvb2xIaXN0b3J5ID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW0udG9vbHMgfHwgW10sICEhaXRlbS5hY3RpdmUgJiYgIWl0ZW0udGV4dCkgOiBpdGVtLnRvb2xzIHx8IFtdXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBwYWRkaW5nWDogcGFpcmVkID8gMCA6IDIsIGhlaWdodDogcGFuZUhlaWdodCwgYmc6IHBhaXJlZCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleEdyb3c6IHBhbmVIZWlnaHQgPyAxIDogdW5kZWZpbmVkIH19PlxuICAgICAgICB7Ym9yZGVyICYmIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCB9fSAvPn1cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIGJnOiBzeW50aGVzaXMgPyBTRUxFQ1RfQkcgOiBwYXJ0aWNpcGFudEEgfHwgcGFpcmVkID8gUEFORUxfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgfHwgc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgICAgICB7cGFuZUhlaWdodCA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEgfX1cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0PXtmb2xsb3coKSA/IDFlOSA6IG9mZnNldCgpfVxuICAgICAgICAgICAgICBvblNjcm9sbD17KG5leHQsIG1ldGEpID0+IHsgc2V0T2Zmc2V0KG5leHQpOyBzZXRGb2xsb3coISFtZXRhPy5hdEJvdHRvbSkgfX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxEZWxpYmVyYXRpb25Db250ZW50IHRvb2xzPXt0b29sc30gdGV4dD17dGV4dH0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICAgICkgOiA8RGVsaWJlcmF0aW9uQ29udGVudCB0b29scz17dG9vbHN9IHRleHQ9e3RleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+fVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIERlbGliZXJhdGlvbkNvbnRlbnQoeyB0b29scywgdGV4dCwgdmVyYm9zZSB9KSB7XG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgIHt0b29scy5tYXAoKHRvb2wpID0+IDxNZXNzYWdlIGtleT17dG9vbC5jYWxsSWR9IGl0ZW09e3Rvb2x9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+KX1cbiAgICAgICAgICB7dGV4dCAmJiB0b29scy5sZW5ndGggPiAwICYmIDx0ZXh0PiA8L3RleHQ+fVxuICAgICAgICAgIHt0ZXh0ICYmIChcbiAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgICBjb2RlQmxvY2s9e1RyYW5zY3JpcHRDb2RlQmxvY2t9XG4gICAgICAgICAgICAgIHRhYmxlQm9yZGVyQ29sb3I9e01VVEVEfVxuICAgICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICA8L2JveD5cbn1cblxuZnVuY3Rpb24gZGVsaWJlcmF0aW9uUm93cyh0dXJucykge1xuICBjb25zdCByb3dzID0gW11cbiAgZm9yIChjb25zdCB0dXJuIG9mIHR1cm5zKSB7XG4gICAgaWYgKHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycgfHwgIXR1cm4ucGFyYWxsZWxHcm91cCkge1xuICAgICAgcm93cy5wdXNoKFt0dXJuXSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gcm93cy5maW5kKChyb3cpID0+IHJvd1swXT8ucGFyYWxsZWxHcm91cCA9PT0gdHVybi5wYXJhbGxlbEdyb3VwKVxuICAgIGlmIChleGlzdGluZykgZXhpc3RpbmcucHVzaCh0dXJuKVxuICAgIGVsc2Ugcm93cy5wdXNoKFt0dXJuXSlcbiAgfVxuICByZXR1cm4gcm93c1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGVsaWJlcmF0aW9uRXhjaGFuZ2UoeyB0dXJucywgdmVyYm9zZSwgd2lkZSwgY29tcGFjdFRvb2xIaXN0b3J5ID0gZmFsc2UsIHZpZXdwb3J0SGVpZ2h0LCBmb2N1c2VkID0gZmFsc2UsIG9uRm9jdXMgfSkge1xuICBjb25zdCBbc2VsZWN0ZWQsIHNldFNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBpZCA9IHR1cm4gPT4gYCR7dHVybi5yb2xlfToke3R1cm4ucm91bmQgPz8gJ3N5bnRoZXNpcyd9YFxuICBjb25zdCBzZWxlY3RlZElkID0gc2VsZWN0ZWQoKSB8fCAodHVybnNbMF0gJiYgaWQodHVybnNbMF0pKVxuICBjb25zdCBmb2N1c1R1cm4gPSB0dXJuID0+IHsgc2V0U2VsZWN0ZWQoaWQodHVybikpOyBvbkZvY3VzPy4oKSB9XG4gIHVzZUlucHV0KGV2ZW50ID0+IHtcbiAgICBpZiAoIWZvY3VzZWQgfHwgKGV2ZW50LmtleSAhPT0gJ2xlZnQnICYmIGV2ZW50LmtleSAhPT0gJ3JpZ2h0JykpIHJldHVyblxuICAgIGNvbnN0IGluZGV4ID0gdHVybnMuZmluZEluZGV4KHR1cm4gPT4gaWQodHVybikgPT09IHNlbGVjdGVkSWQpXG4gICAgY29uc3QgbmV4dCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHR1cm5zLmxlbmd0aCAtIDEsIGluZGV4ICsgKGV2ZW50LmtleSA9PT0gJ2xlZnQnID8gLTEgOiAxKSkpXG4gICAgaWYgKHR1cm5zW25leHRdKSBmb2N1c1R1cm4odHVybnNbbmV4dF0pXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcbiAgY29uc3QgcGFuZUhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0ID8gTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih2aWV3cG9ydEhlaWdodCAqICh0dXJucy5zb21lKHR1cm4gPT4gdHVybi5yb2xlID09PSAnc3ludGhlc2lzJykgPyAwLjYgOiAxKSkgLSAxKSA6IHVuZGVmaW5lZFxuICBjb25zdCBwYW5lUHJvcHMgPSB0dXJuID0+ICh7IHBhbmVIZWlnaHQ6IHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycgJiYgdmlld3BvcnRIZWlnaHQgPyBNYXRoLm1heCg2LCBNYXRoLmZsb29yKHZpZXdwb3J0SGVpZ2h0ICogMC4zNSkpIDogcGFuZUhlaWdodCwgZm9jdXNlZDogZm9jdXNlZCAmJiBzZWxlY3RlZElkID09PSBpZCh0dXJuKSwgb25Gb2N1czogKCkgPT4gZm9jdXNUdXJuKHR1cm4pIH0pXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7ZGVsaWJlcmF0aW9uUm93cyh0dXJucykubWFwKChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHN5bnRoZXNpcyA9IHJvd1swXT8ucm9sZSA9PT0gJ3N5bnRoZXNpcydcbiAgICAgICAgaWYgKCF3aWRlIHx8IHN5bnRoZXNpcykgcmV0dXJuIHJvdy5tYXAoKHR1cm4pID0+IDxEZWxpYmVyYXRpb25UdXJuIGtleT17YCR7dHVybi5yb2xlfToke3R1cm4ucm91bmQgPz8gJ3N5bnRoZXNpcyd9YH0gaXRlbT17dHVybn0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHsuLi5wYW5lUHJvcHModHVybil9IC8+KVxuICAgICAgICBjb25zdCBsZWZ0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IHR1cm4ucm9sZSA9PT0gJ3Byb3Bvc2VyJylcbiAgICAgICAgY29uc3QgcmlnaHQgPSByb3cuZmluZCgodHVybikgPT4gdHVybi5yb2xlID09PSAncGFydGljaXBhbnQtYicgfHwgdHVybi5yb2xlID09PSAncmV2aWV3ZXInKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxib3gga2V5PXtyb3dbMF0/LnBhcmFsbGVsR3JvdXAgfHwgYCR7cm93WzBdPy5yb2xlfToke3Jvd1swXT8ucm91bmR9OiR7aW5kZXh9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHdpZHRoOiAnMTAwJScsIG92ZXJmbG93OiAnY2xpcCcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogJzUwJScsIG1pbldpZHRoOiAwLCBvdmVyZmxvdzogJ2NsaXAnIH19PntsZWZ0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e2xlZnR9IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSBwYWlyZWQgYm9yZGVyPXtmYWxzZX0gey4uLnBhbmVQcm9wcyhsZWZ0KX0gLz59PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57cmlnaHQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17cmlnaHR9IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSBwYWlyZWQgYm9yZGVyPXtmYWxzZX0gey4uLnBhbmVQcm9wcyhyaWdodCl9IC8+fTwvYm94PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNob3dMb2NrZWQgPSBmYWxzZSB9KSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIDxUb29sR3JvdXAgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicgJiYgaXRlbS5vcmlnaW4gPT09ICd2aWV3Jykge1xuICAgIGNvbnN0IGxhYmVsID0gL15cXFt2aWV3OiAoW15cXF1dKylcXF0vLmV4ZWMoaXRlbS50ZXh0KT8uWzFdIHx8ICdpbWFnZSdcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjcxMyBWaWV3ZWQgJHtsYWJlbH1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS5ub3RpY2VzLmxlbmd0aH0gYWdlbnRzIGZpbmlzaGVkYH08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtpdGVtLm5vdGljZXMubWFwKChub3RpY2UsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bm90aWNlLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKSB7XG4gICAgcmV0dXJuIDxUb29sQ2FyZCB7Li4uaXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdW1tYXJ5Jykge1xuICAgIGNvbnN0IGxpbmVzID0gaXRlbS50ZXh0LnNwbGl0KCdcXG4nKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57aXRlbS5zb3VyY2UgPT09ICdjb21wYWN0JyA/ICdcdTI3MjYgc3VtbWFyeSAgY29udmVyc2F0aW9uIGNvbXBhY3RlZCBhYm92ZSB0aGlzIHBvaW50JyA6ICdcdTI3MjYgc3VtbWFyeSAgcmV3b3VuZCBjb252ZXJzYXRpb24nfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsaW5lcy5sZW5ndGh9ICR7bGluZXMubGVuZ3RoID09PSAxID8gJ2xpbmUnIDogJ2xpbmVzJ31gfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7bGluZXMuc2xpY2UoMCwgNTAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7bGluZXMubGVuZ3RoID4gNTAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjAyNiAke2xpbmVzLmxlbmd0aCAtIDUwMH0gbW9yZSBsaW5lc2B9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgPE1hcmtkb3duIHRleHQ9e2l0ZW0udGV4dH0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKSB7XG4gICAgcmV0dXJuIDxib3ggc3R5bGU9e3sgbWFyZ2luVG9wOiAxIH19PjxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+PC9ib3g+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnbm90aWNlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI3MjYgc2tpbGw6ICR7aXRlbS5uYW1lfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N0ZWVyLXRvb2xzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI1MDBcdTI1MDAgJHtpdGVtLmNvdW50fSB0b29sICR7aXRlbS5jb3VudCA9PT0gMSA/ICdpbnRlcmFjdGlvbicgOiAnaW50ZXJhY3Rpb25zJ30gaGlkZGVuIFx1MjUwMFx1MjUwMGB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLWNvbW1hbmQnKSB7XG4gICAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHQoaXRlbS50ZXh0LCAnYmFzaCcpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydjb21tYW5kJ308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtzaG93bi5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9PntgJHtpID09PSAwID8gJyQgJyA6ICcgICd9JHtsaW5lIHx8ICcgJ31gfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1vdXRwdXQnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydvdXRwdXQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge2l0ZW0udGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAncGVlcicpIHtcbiAgICBjb25zdCBpbmNvbWluZyA9IGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnXG4gICAgY29uc3QgdW5yZWFkID0gaW5jb21pbmcgJiYgIWl0ZW0ucmVhZFxuICAgIGNvbnN0IGNvbG9yID0gaW5jb21pbmcgJiYgaXRlbS5yZWFkID8gTVVURUQgOiBQRUVSXG4gICAgY29uc3QgZGVsaXZlcnlTdGF0dXMgPSBpdGVtLnN0YXR1cyB8fCAndW5rbm93bidcbiAgICBjb25zdCBzdGF0dXMgPSBpbmNvbWluZyA/IGAgKCR7dW5yZWFkID8gJ3VucmVhZCcgOiAncmVhZCd9KTpgIDogZGVsaXZlcnlTdGF0dXMgPT09ICdkZWxpdmVyZWQnID8gJzonIDogYCAoJHtkZWxpdmVyeVN0YXR1c30pOmBcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFBFRVIsIGJvbGQ6IHRydWUgfX0+e2Ake2luY29taW5nID8gJ2Zyb20nIDogJ3RvJ30gQCR7aW5jb21pbmcgPyBpdGVtLmZyb20ubmFtZSA6IGl0ZW0udG8ubmFtZX1gfTwvdGV4dD5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvciwgYm9sZDogdW5yZWFkIH19PntzdGF0dXN9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3IgfX0+e2l0ZW0udGV4dH08L3RleHQ+XG4gICAgICAgIHtpdGVtLmVycm9yICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+e2l0ZW0uZXJyb3J9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJykge1xuICAgIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ1VzZXInIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IFBBTkVMX0JHIH19IC8+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gU0VMRUNUX0JHIDogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgcGFkZGluZ0xlZnQ6IDEsIHBhZGRpbmdSaWdodDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2l0ZW0udGV4dH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgbGFiZWwgPSBzaG93TG9ja2VkICYmIGl0ZW0ubG9ja2VkID8gJ0xvY2tlZCAgY29tcGFjdGVkJyA6IHNob3dMb2NrZWQgPyAnQXNzaXN0YW50JyA6IG51bGxcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCB9fSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgcGFkZGluZ0xlZnQ6IDEsIHBhZGRpbmdSaWdodDogMiwgcGFkZGluZ1k6IHNob3dMb2NrZWQgPyAxIDogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICBjb2RlQmc9e251bGx9XG4gICAgICAgICAgICBjb2RlQmxvY2s9e1RyYW5zY3JpcHRDb2RlQmxvY2t9XG4gICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgIHRhYmxlUm93SG92ZXJCZz17UEFORUxfQkd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoaXRlbXMsIGFjdGl2ZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOykge1xuICAgIGlmIChpdGVtc1tpXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbaV0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIChpdGVtc1tlbmRdLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tlbmRdLmtpbmQgPT09ICd0aG91Z2h0cycpKSBlbmQrK1xuICAgICAgY29uc3QgcnVuID0gaXRlbXMuc2xpY2UoaSwgZW5kKVxuICAgICAgY29uc3QgdG9vbHMgPSBydW4uZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICd0b29sJylcbiAgICAgIHJlc3VsdC5wdXNoKHsga2luZDogJ3Rvb2wtZ3JvdXAnLCBjYWxsSWQ6IHRvb2xzLmF0KC0xKT8uY2FsbElkLCBpdGVtczogcnVuLCB0b29scywgYWN0aXZlOiBhY3RpdmUgJiYgZW5kID09PSBpdGVtcy5sZW5ndGggfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChpdGVtc1tpXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tpXS5hZ2VudENvbXBsZXRpb24pIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiBpdGVtc1tlbmRdLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2VuZF0uYWdlbnRDb21wbGV0aW9uKSBlbmQrK1xuICAgICAgY29uc3QgcnVuID0gaXRlbXMuc2xpY2UoaSwgZW5kKVxuICAgICAgcmVzdWx0LnB1c2gocnVuLmxlbmd0aCA9PT0gMSA/IHJ1blswXSA6IHsga2luZDogJ2FnZW50LW5vdGljZS1ncm91cCcsIG5vdGljZXM6IHJ1biB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbaSsrXSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2NyaXB0V2luZG93KGl0ZW1zLCBzaXplKSB7XG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgaXRlbXMubGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3QgaGlkZGVuID0gaXRlbXMuc2xpY2UoMCwgc3RhcnQpXG4gIHJldHVybiB7XG4gICAgaXRlbXM6IGl0ZW1zLnNsaWNlKHN0YXJ0KSxcbiAgICBoaWRkZW5JdGVtczogaGlkZGVuLmxlbmd0aCxcbiAgICBoaWRkZW5Db3VudDogaGlkZGVuLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHRvdGFsICsgc291cmNlSXRlbUNvdW50KGl0ZW0pLCAwKSxcbiAgfVxufVxuXG5mdW5jdGlvbiBzb3VyY2VJdGVtQ291bnQoaXRlbSkge1xuICBpZiAoaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcpIHJldHVybiBpdGVtLml0ZW1zLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnYWdlbnQtbm90aWNlLWdyb3VwJykgcmV0dXJuIGl0ZW0ubm90aWNlcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N0ZWVyLXRvb2xzJykgcmV0dXJuIGl0ZW0uY291bnRcbiAgcmV0dXJuIDFcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRJbnB1dCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgY29udmVyc2F0aW9uTWF0Y2hlcywgaGlnaGxpZ2h0Q29udmVyc2F0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb252ZXJzYXRpb24tc2VhcmNoLmpzJ1xuXG5mdW5jdGlvbiBTY3JvbGxBbmNob3IoeyB0YXJnZXQgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICB0YXJnZXQuYW5jaG9yWSA9IGxheW91dC55XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIFNlYXJjaE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBjdXJyZW50TWF0Y2gsIHNlYXJjaCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGlmIChjdXJyZW50TWF0Y2gpIHNlYXJjaC5zY3JvbGxUb01hdGNoKGxheW91dCwgY3VycmVudE1hdGNoKVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KSB7XG4gIGNvbnN0IFthY3RpdmUsIHNldEFjdGl2ZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbY29tbWl0dGVkLCBzZXRDb21taXR0ZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZW50ZXJGb2N1cywgc2V0RW50ZXJGb2N1c10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzY3JvbGxSZXF1ZXN0LCBzZXRTY3JvbGxSZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2Nyb2xsXSA9IGNyZWF0ZVNpZ25hbCh7IGFuY2hvclk6IDAsIGtleTogbnVsbCB9KVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRm9jdXMoKSB7XG4gICAgaWYgKCFhY3RpdmUoKSkgcmV0dXJuXG4gICAgZm0uaXRlbSgnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgaWYgKGVudGVyRm9jdXMoKSkge1xuICAgICAgc2V0RW50ZXJGb2N1cyhmYWxzZSlcbiAgICAgIGZtLmZvY3VzKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuKCkge1xuICAgIHNldEFjdGl2ZSh0cnVlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldEVudGVyRm9jdXModHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKHsgcmVzdG9yZUZvY3VzID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgaWYgKHJlc3RvcmVGb2N1cyAmJiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSBmbS5mb2N1cygnZmVlZCcpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCwgbWF0Y2hlcykge1xuICAgIGlmIChhY3RpdmUoKSAmJiAhZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkge1xuICAgICAgY2xvc2UoeyByZXN0b3JlRm9jdXM6IGZhbHNlIH0pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoIWFjdGl2ZSgpIHx8ICFjb21taXR0ZWQoKSkgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgY291bnQgPSBtYXRjaGVzLmxlbmd0aFxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZSgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnbicgJiYgIWV2ZW50LnNoaWZ0KSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgKyAxKSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ04nIHx8IChldmVudC5zaGlmdCAmJiBldmVudC5rZXkgPT09ICduJykpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSAtIDEgKyBjb3VudCkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ28nKSByZXR1cm4gZmFsc2VcbiAgICBlbHNlIHJldHVybiB0cnVlXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZShpdGVtcykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb252ZXJzYXRpb25NYXRjaGVzKGl0ZW1zLCBxdWVyeSgpLCB2ZXJib3NlKCkpXG4gICAgY29uc3QgbGFzdEluZGV4ID0gTWF0aC5tYXgoMCwgbWF0Y2hlcy5sZW5ndGggLSAxKVxuICAgIGlmIChpbmRleCgpID4gbGFzdEluZGV4KSBzZXRJbmRleChsYXN0SW5kZXgpXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXMsXG4gICAgICBpdGVtczogYWN0aXZlKCkgPyBoaWdobGlnaHRDb252ZXJzYXRpb24oaXRlbXMsIHF1ZXJ5KCksIGluZGV4KCksIHZlcmJvc2UoKSkgOiBpdGVtcyxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxUb01hdGNoKGxheW91dCwgbWF0Y2gpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzY3JvbGwoKVxuICAgIGNvbnN0IGtleSA9IGAke3F1ZXJ5KCl9XFwwJHtpbmRleCgpfVxcMCR7dmVyYm9zZSgpfVxcMCR7c2Nyb2xsUmVxdWVzdCgpfWBcbiAgICBpZiAodGFyZ2V0LmtleSA9PT0ga2V5KSByZXR1cm5cbiAgICB0YXJnZXQua2V5ID0ga2V5XG4gICAgc2V0Rm9sbG93KGZhbHNlKVxuICAgIHNldE9mZnNldChNYXRoLm1heCgwLCBsYXlvdXQueSAtIHRhcmdldC5hbmNob3JZICsgbWF0Y2gubGluZSAtIDMpKVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUXVlcnkodmFsdWUpIHtcbiAgICBzZXRRdWVyeSh2YWx1ZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmUsXG4gICAgcXVlcnksXG4gICAgY29tbWl0dGVkLFxuICAgIGluZGV4LFxuICAgIGZvY3VzZWQ6ICgpID0+IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJyksXG4gICAgcmVnaXN0ZXJGb2N1cyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIGhhbmRsZUlucHV0LFxuICAgIHByZXBhcmUsXG4gICAgc2Nyb2xsOiBzY3JvbGwoKSxcbiAgICBzY3JvbGxUb01hdGNoLFxuICAgIGNvbW1pdDogKCkgPT4gc2V0Q29tbWl0dGVkKHRydWUpLFxuICAgIHVwZGF0ZVF1ZXJ5LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJzYXRpb25TZWFyY2hCYXIoeyBzZWFyY2gsIG1hdGNoZXMgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57Jy8gJ308L3RleHQ+XG4gICAgICB7c2VhcmNoLmNvbW1pdHRlZCgpXG4gICAgICAgID8gPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBmbGV4R3JvdzogMSB9fT57c2VhcmNoLnF1ZXJ5KCl9PC90ZXh0PlxuICAgICAgICA6IDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e3NlYXJjaC5mb2N1c2VkKCl9XG4gICAgICAgICAgICB2YWx1ZT17c2VhcmNoLnF1ZXJ5KCl9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2VhcmNoLnVwZGF0ZVF1ZXJ5fVxuICAgICAgICAgICAgb25TdWJtaXQ9e3NlYXJjaC5jb21taXR9XG4gICAgICAgICAgICBvbkNhbmNlbD17c2VhcmNoLmNsb3NlfVxuICAgICAgICAgIC8+fVxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnttYXRjaGVzLmxlbmd0aCA/IGAke3NlYXJjaC5pbmRleCgpICsgMX0vJHttYXRjaGVzLmxlbmd0aH1gIDogJzAvMCd9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFuY2hvciBhcyBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIFNlYXJjaE1lc3NhZ2UgYXMgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSB9XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIFRleHRJbnB1dCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVELCBGRywgRkdfU09GVCwgUEFORUxfQkcsIFNFTEVDVF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmZ1bmN0aW9uIGFuc3dlclRleHQocXVlc3Rpb24sIGFuc3dlcikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmpvaW4oJywgJylcbiAgcmV0dXJuIGFuc3dlciB8fCAnTm90IGFuc3dlcmVkJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUXVlc3Rpb25Gb3JtKHsgcmVxdWVzdCwgZm9jdXNlZCwgb25TdWJtaXQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgcXVlc3Rpb25zID0gcmVxdWVzdC5xdWVzdGlvbnNcbiAgY29uc3QgcmV2aWV3aW5nID0gcXVlc3Rpb25zLmxlbmd0aCA+IDFcbiAgY29uc3QgW3N0ZXAsIHNldFN0ZXBdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFthbnN3ZXJzLCBzZXRBbnN3ZXJzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY3VzdG9tLCBzZXRDdXN0b21dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmV2aWV3LCBzZXRSZXZpZXddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29udHJvbCwgc2V0Q29udHJvbF0gPSBjcmVhdGVTaWduYWwoJ2Fuc3dlcicpXG5cbiAgY29uc3QgcXVlc3Rpb24gPSAoKSA9PiBxdWVzdGlvbnNbc3RlcCgpXVxuICBjb25zdCBvcHRpb25zID0gKCkgPT4gcXVlc3Rpb24oKS5vcHRpb25zIHx8IFtdXG4gIGNvbnN0IHJvd3MgPSAoKSA9PiBbLi4ub3B0aW9ucygpLCAuLi4ocXVlc3Rpb24oKS5hbGxvd090aGVyID09PSBmYWxzZSA/IFtdIDogW3sgbGFiZWw6ICdPdGhlcicsIG90aGVyOiB0cnVlIH1dKV1cbiAgY29uc3Qgc2VsZWN0ZWQgPSAobGFiZWwpID0+IChhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW10pLmluY2x1ZGVzKGxhYmVsKVxuICBjb25zdCBvdGhlckFuc3dlciA9ICgpID0+IHtcbiAgICBjb25zdCBhbnN3ZXIgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF1cbiAgICBjb25zdCBsYWJlbHMgPSBuZXcgU2V0KG9wdGlvbnMoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmZpbmQoKHZhbHVlKSA9PiAhbGFiZWxzLmhhcyh2YWx1ZSkpIHx8ICcnXG4gICAgcmV0dXJuIGFuc3dlciAmJiAhbGFiZWxzLmhhcyhhbnN3ZXIpID8gYW5zd2VyIDogJydcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEFuc3dlcih2YWx1ZSkge1xuICAgIHNldEFuc3dlcnMoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIFtxdWVzdGlvbigpLmlkXTogdmFsdWUgfSkpXG4gIH1cblxuICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICBzZXRDdXJzb3IoMClcbiAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgIGlmIChzdGVwKCkgPCBxdWVzdGlvbnMubGVuZ3RoIC0gMSkgc2V0U3RlcChzdGVwKCkgKyAxKVxuICAgIGVsc2UgaWYgKHJldmlld2luZykgeyBzZXRDdXJzb3IocXVlc3Rpb25zLmxlbmd0aCk7IHNldFJldmlldyh0cnVlKSB9XG4gICAgZWxzZSBmaW5pc2goKVxuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgIG9uU3VibWl0KHF1ZXN0aW9ucy5tYXAoKGl0ZW0pID0+ICh7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyOiBhbnN3ZXJzKClbaXRlbS5pZF0gPz8gJycgfSkpKVxuICB9XG5cbiAgZnVuY3Rpb24gc3VibWl0VGV4dCh2YWx1ZSkge1xuICAgIGNvbnN0IGFuc3dlciA9IHZhbHVlLnRyaW0oKVxuICAgIGlmICghYW5zd2VyKSByZXR1cm5cbiAgICBzZXRBbnN3ZXIoYW5zd2VyKVxuICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlciB9XSlcbiAgICBlbHNlIGFkdmFuY2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gc3VibWl0T3RoZXIodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBjb25zdCBrbm93biA9IG5ldyBTZXQoKGl0ZW0ub3B0aW9ucyB8fCBbXSkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgY29uc3QgY2hvaWNlcyA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IChhbnN3ZXJzKClbaXRlbS5pZF0gfHwgW10pLmZpbHRlcigoZW50cnkpID0+IGtub3duLmhhcyhlbnRyeSkpIDogW11cbiAgICBjb25zdCBuZXh0QW5zd2VyID0gaXRlbS50eXBlID09PSAnbXVsdGknID8gWy4uLmNob2ljZXMsIC4uLihhbnN3ZXIgPyBbYW5zd2VyXSA6IFtdKV0gOiBhbnN3ZXJcbiAgICBzZXRBbnN3ZXIobmV4dEFuc3dlcilcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3NpbmdsZScgJiYgYW5zd2VyKSB7XG4gICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgICBlbHNlIGFkdmFuY2UoKVxuICAgIH1cbiAgfVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIGlmIChjdXN0b20oKSkgeyBzZXRDdXN0b20oZmFsc2UpOyBzZXRDb250cm9sKCdhbnN3ZXInKSB9XG4gICAgICBlbHNlIGlmIChyZXZpZXcoKSkgc2V0UmV2aWV3KGZhbHNlKVxuICAgICAgZWxzZSBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZXZpZXcoKSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykgc2V0Q3Vyc29yKE1hdGgubWF4KDAsIGN1cnNvcigpIC0gMSkpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHF1ZXN0aW9ucy5sZW5ndGgsIGN1cnNvcigpICsgMSkpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICAgIGlmIChjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCkgZmluaXNoKClcbiAgICAgICAgZWxzZSB7IHNldFN0ZXAoY3Vyc29yKCkpOyBzZXRDdXJzb3IoMCk7IHNldENvbnRyb2woJ2Fuc3dlcicpOyBzZXRSZXZpZXcoZmFsc2UpIH1cbiAgICAgIH0gZWxzZSByZXR1cm5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0ZXAoKSA+IDAgJiYgKGV2ZW50LmtleSA9PT0gJ3RhYicgfHwgZXZlbnQua2V5ID09PSAnc2hpZnQtdGFiJykpIHtcbiAgICAgIHNldENvbnRyb2woY29udHJvbCgpID09PSAnYmFjaycgPyAnYW5zd2VyJyA6ICdiYWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNvbnRyb2woKSA9PT0gJ2JhY2snKSByZXR1cm5cbiAgICBpZiAoY3VzdG9tKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpIHtcbiAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChxdWVzdGlvbigpPy50eXBlID09PSAndGV4dCcpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSBzZXRDdXJzb3IoTWF0aC5taW4ocm93cygpLmxlbmd0aCAtIDEsIGN1cnNvcigpICsgMSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnc3BhY2UnICYmIHF1ZXN0aW9uKCkudHlwZSA9PT0gJ211bHRpJykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cygpW2N1cnNvcigpXVxuICAgICAgaWYgKHJvdy5vdGhlcikge1xuICAgICAgICBpZiAob3RoZXJBbnN3ZXIoKSkge1xuICAgICAgICAgIGNvbnN0IGtub3duID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgICAgICAgc2V0QW5zd2VyKChhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW10pLmZpbHRlcigoZW50cnkpID0+IGtub3duLmhhcyhlbnRyeSkpKVxuICAgICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgfSBlbHNlIHNldEN1c3RvbSh0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXVxuICAgICAgICBzZXRBbnN3ZXIoY3VycmVudC5pbmNsdWRlcyhyb3cubGFiZWwpID8gY3VycmVudC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93LmxhYmVsKSA6IFsuLi5jdXJyZW50LCByb3cubGFiZWxdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cygpW2N1cnNvcigpXVxuICAgICAgaWYgKHF1ZXN0aW9uKCkudHlwZSA9PT0gJ211bHRpJykgYWR2YW5jZSgpXG4gICAgICBlbHNlIGlmIChyb3cub3RoZXIpIHNldEN1c3RvbSh0cnVlKVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNldEFuc3dlcihyb3cubGFiZWwpXG4gICAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogcXVlc3Rpb24oKS5pZCwgcXVlc3Rpb246IHF1ZXN0aW9uKCkucXVlc3Rpb24sIGFuc3dlcjogcm93LmxhYmVsIH1dKVxuICAgICAgICBlbHNlIGFkdmFuY2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuXG4gIGlmIChyZXZpZXcoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXZpZXcgYW5zd2VyczwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyOiBlZGl0IG9yIHN1Ym1pdCAgZXNjOiBiYWNrPC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3F1ZXN0aW9ucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IGN1cnNvcigpID09PSBpbmRleCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT57aXRlbS5xdWVzdGlvbn08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Fuc3dlclRleHQoaXRlbSwgYW5zd2VycygpW2l0ZW0uaWRdKX08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICA8dGV4dCBzdHlsZT17eyBiZzogY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGggPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCwgY29sb3I6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gJ2JsYWNrJyA6IEZHLCBib2xkOiB0cnVlIH19PiBTdWJtaXQgYW5zd2VycyA8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBpdGVtID0gcXVlc3Rpb24oKVxuICBjb25zdCBwcm9ncmVzcyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxID8gYCR7c3RlcCgpICsgMX0gb2YgJHtxdWVzdGlvbnMubGVuZ3RofWAgOiAnUXVlc3Rpb24nXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIHtzdGVwKCkgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBsYWJlbD1cIkJhY2tcIlxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2JhY2snfVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RlcChzdGVwKCkgLSAxKVxuICAgICAgICAgICAgICAgIHNldEN1cnNvcigwKVxuICAgICAgICAgICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgICAgICAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx0ZXh0PiAgPC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3Byb2dyZXNzfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2l0ZW0udHlwZSA9PT0gJ211bHRpJyA/ICdzcGFjZTogc2VsZWN0ICBlbnRlcjogY29udGludWUnIDogJ2VudGVyOiBhbnN3ZXInfSAgZXNjOiBjYW5jZWw8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgYm9sZDogdHJ1ZSB9fT57aXRlbS5xdWVzdGlvbn08L3RleHQ+XG4gICAgICB7aXRlbS5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57aXRlbS5kZXNjcmlwdGlvbn08L3RleHQ+fVxuICAgICAge2l0ZW0udHlwZSA9PT0gJ3RleHQnID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBTRUxFQ1RfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAga2V5PXtgJHtpdGVtLmlkfTp0ZXh0YH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY29udHJvbCgpID09PSAnYW5zd2VyJ31cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB5b3VyIGFuc3dlclwiXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3R5cGVvZiBhbnN3ZXJzKClbaXRlbS5pZF0gPT09ICdzdHJpbmcnID8gYW5zd2VycygpW2l0ZW0uaWRdIDogJyd9XG4gICAgICAgICAgICBvblN1Ym1pdD17c3VibWl0VGV4dH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7cm93cygpLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IGN1cnNvcigpID09PSBpbmRleCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBhY2NlbnQoKSA6IEZHIH19PlxuICAgICAgICAgICAgICAgIHtpdGVtLnR5cGUgPT09ICdtdWx0aSdcbiAgICAgICAgICAgICAgICAgID8gYCR7b3B0aW9uLm90aGVyID8gKG90aGVyQW5zd2VyKCkgPyAnW3hdJyA6ICdbIF0nKSA6IChzZWxlY3RlZChvcHRpb24ubGFiZWwpID8gJ1t4XScgOiAnWyBdJyl9IGBcbiAgICAgICAgICAgICAgICAgIDogYCR7Y3Vyc29yKCkgPT09IGluZGV4ID8gJ1x1MjAzQScgOiAnICd9IGB9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICB7b3B0aW9uLmRlc2NyaXB0aW9uICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntgICAke29wdGlvbi5kZXNjcmlwdGlvbn1gfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtvcHRpb24ub3RoZXIgJiYgKGN1c3RvbSgpIHx8IG90aGVyQW5zd2VyKCkpICYmIChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBjdXN0b20oKSA/IFBBTkVMX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nTGVmdDogNCB9fT5cbiAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpdGVtLmlkfTpvdGhlcmB9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY3VzdG9tKCl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBhbm90aGVyIGFuc3dlclwiXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17b3RoZXJBbnN3ZXIoKX1cbiAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdE90aGVyfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCB1c2VNb3VzZSwgdXNlUmVzaXplIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmZ1bmN0aW9uIEVtcHR5Q2xvdWQoeyB3aWR0aCwgaGVpZ2h0LCB2ZXJzaW9uIH0pIHtcbiAgY29uc3QgW3BoYXNlLCBzZXRQaGFzZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3dha2UsIHNldFdha2VdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBsZXQgcHJldmlvdXMgPSBudWxsXG5cbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbiAhPT0gJ21vdmUnICYmIGV2ZW50LmFjdGlvbiAhPT0gJ2RyYWcnKSByZXR1cm5cbiAgICBjb25zdCB4ID0gZXZlbnQueFxuICAgIGNvbnN0IHkgPSBldmVudC55XG4gICAgaWYgKHggPCAwIHx8IHggPj0gd2lkdGggfHwgeSA8IDAgfHwgeSA+PSBoZWlnaHQpIHJldHVyblxuICAgIGNvbnN0IGR4ID0gcHJldmlvdXMgPyB4IC0gcHJldmlvdXMueCA6IDBcbiAgICBjb25zdCBkeSA9IHByZXZpb3VzID8geSAtIHByZXZpb3VzLnkgOiAwXG4gICAgcHJldmlvdXMgPSB7IHgsIHkgfVxuICAgIGNvbnN0IHNwZWVkID0gTWF0aC5oeXBvdChkeCAqIDAuNSwgZHkpXG4gICAgaWYgKHNwZWVkID09PSAwKSByZXR1cm5cbiAgICBzZXRXYWtlKHBvaW50cyA9PiBbLi4ucG9pbnRzLnNsaWNlKC0yMCksIHsgeCwgeSwgZHgsIGR5LCBzcGVlZDogTWF0aC5taW4oNCwgc3BlZWQpLCBhZ2U6IDAgfV0pXG4gIH0pXG5cbiAgdXNlSW50ZXJ2YWwoKCkgPT4ge1xuICAgIHNldFBoYXNlKHZhbHVlID0+IHZhbHVlICsgMC4xNilcbiAgICBzZXRXYWtlKHBvaW50cyA9PiBwb2ludHMubWFwKHBvaW50ID0+ICh7IC4uLnBvaW50LCBhZ2U6IHBvaW50LmFnZSArIDEgfSkpLmZpbHRlcihwb2ludCA9PiBwb2ludC5hZ2UgPCAxOCkpXG4gIH0sIDkwKVxuXG4gIGNvbnN0IGdseXBocyA9ICcgIC4uOjorKyoqXHUyNTkxXHUyNTkyJ1xuICBjb25zdCByb3dzID0gW11cbiAgY29uc3QgYmFzZSA9IGFjY2VudCgpXG4gIGNvbnN0IHJnYiA9IC9eIyhbMC05YS1mXXs2fSkkL2kuZXhlYyhiYXNlKVxuICBjb25zdCBuZWlnaGJvcmluZyA9IHJnYlxuICAgID8gYCMke1tcbiAgICAgIE1hdGgubWF4KDAsIHBhcnNlSW50KHJnYlsxXS5zbGljZSgwLCAyKSwgMTYpIC0gMTgpLFxuICAgICAgTWF0aC5taW4oMjU1LCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMiwgNCksIDE2KSArIDgpLFxuICAgICAgTWF0aC5taW4oMjU1LCBwYXJzZUludChyZ2JbMV0uc2xpY2UoNCwgNiksIDE2KSArIDI0KSxcbiAgICBdLm1hcCh2YWx1ZSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxuICAgIDogYmFzZVxuXG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICBjb25zdCByb3cgPSBbXVxuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgY29uc3QgcCA9IHBoYXNlKClcbiAgICAgIGNvbnN0IGJyb2FkID0gTWF0aC5zaW4oeCAqIDAuMDggKyBwKSArIE1hdGguc2luKHkgKiAwLjI5IC0gcCAqIDAuNykgKyBNYXRoLnNpbigoeCArIHkpICogMC4wNSArIHAgKiAwLjM1KVxuICAgICAgY29uc3Qgd2lzcHMgPSBNYXRoLnNpbih4ICogMC4xOSAtIHkgKiAwLjExIC0gcCAqIDAuNTUpICsgTWF0aC5zaW4oeCAqIDAuMDMgKyB5ICogMC40MyArIHAgKiAwLjQpXG4gICAgICBjb25zdCBwb2NrZXRzID0gTWF0aC5zaW4oeCAqIDAuMzEgKyBwICogMC44KSAqIE1hdGguc2luKHkgKiAwLjQ3IC0gcCAqIDAuMylcbiAgICAgIGxldCBicm9hZERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCB3aXNwRGlzcGxhY2VtZW50ID0gMFxuICAgICAgbGV0IGludGVyYWN0aW9uID0gMFxuICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB3YWtlKCkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5oeXBvdChwb2ludC5keCAqIDAuNSwgcG9pbnQuZHkpIHx8IDFcbiAgICAgICAgY29uc3QgdXggPSBwb2ludC5keCAqIDAuNSAvIGxlbmd0aFxuICAgICAgICBjb25zdCB1eSA9IHBvaW50LmR5IC8gbGVuZ3RoXG4gICAgICAgIGNvbnN0IHJ4ID0gKHggLSBwb2ludC54KSAqIDAuNVxuICAgICAgICBjb25zdCByeSA9IHkgLSBwb2ludC55XG4gICAgICAgIGNvbnN0IGFsb25nID0gcnggKiB1eCArIHJ5ICogdXlcbiAgICAgICAgY29uc3QgYWNyb3NzID0gLXJ4ICogdXkgKyByeSAqIHV4XG4gICAgICAgIGNvbnN0IHRyYWlsaW5nID0gYWxvbmcgPD0gMiAmJiBhbG9uZyA+PSAtMTggLSBwb2ludC5zcGVlZCAqIDNcbiAgICAgICAgaWYgKCF0cmFpbGluZykgY29udGludWVcbiAgICAgICAgY29uc3QgYWdlID0gMSAtIHBvaW50LmFnZSAvIDE4XG4gICAgICAgIGNvbnN0IHRyYWlsID0gTWF0aC5leHAoLU1hdGgucG93KChhbG9uZyArIDQgKyBwb2ludC5hZ2UgKiAwLjM1KSAvICg3ICsgcG9pbnQuc3BlZWQgKiAyKSwgMikpXG4gICAgICAgIGNvbnN0IGNlbnRlciA9IE1hdGguZXhwKC0oYWNyb3NzICogYWNyb3NzKSAvIDUpXG4gICAgICAgIGNvbnN0IGVkZ2VzID0gTWF0aC5leHAoLU1hdGgucG93KE1hdGguYWJzKGFjcm9zcykgLSAzLjIsIDIpIC8gMylcbiAgICAgICAgY29uc3QgZm9yY2UgPSBhZ2UgKiB0cmFpbCAqICgwLjUgKyBwb2ludC5zcGVlZCAqIDAuNDUpXG4gICAgICAgIGNvbnN0IHJhZGlhbERpc3RhbmNlID0gTWF0aC5zcXJ0KHJ4ICogcnggKyByeSAqIHJ5KVxuICAgICAgICBjb25zdCByaXBwbGVFbnZlbG9wZSA9IE1hdGguZXhwKC0ocmFkaWFsRGlzdGFuY2UgKiByYWRpYWxEaXN0YW5jZSkgLyAoMzUgKyBwb2ludC5zcGVlZCAqIDEyKSlcbiAgICAgICAgY29uc3QgcmlwcGxlID0gTWF0aC5zaW4ocmFkaWFsRGlzdGFuY2UgKiAxLjM1IC0gcG9pbnQuYWdlICogMC43NSkgKiByaXBwbGVFbnZlbG9wZSAqIGFnZVxuICAgICAgICB3aXNwRGlzcGxhY2VtZW50ICs9IChlZGdlcyAqIDAuOSAtIGNlbnRlcikgKiBmb3JjZSAqIDEuNSArIHJpcHBsZSAqICgxLjIgKyBwb2ludC5zcGVlZCAqIDAuMjUpXG4gICAgICAgIGJyb2FkRGlzcGxhY2VtZW50ICs9IChlZGdlcyAqIDAuNDUgLSBjZW50ZXIgKiAwLjM1KSAqIGZvcmNlICogMC41NSArIHJpcHBsZSAqIDAuMjVcbiAgICAgICAgaW50ZXJhY3Rpb24gPSBNYXRoLm1heChpbnRlcmFjdGlvbiwgTWF0aC5hYnMocmlwcGxlKSAqICgwLjUgKyBwb2ludC5zcGVlZCAqIDAuMTUpKVxuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAoXG4gICAgICAgIGJyb2FkICsgYnJvYWREaXNwbGFjZW1lbnQgKyAod2lzcHMgKyB3aXNwRGlzcGxhY2VtZW50KSAqIDAuNjUgKyBwb2NrZXRzICogMC44ICsgMy4yXG4gICAgICApIC8gNy40KSlcbiAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5taW4oZ2x5cGhzLmxlbmd0aCAtIDEsIE1hdGguZmxvb3IodmFsdWUgKiBnbHlwaHMubGVuZ3RoKSlcbiAgICAgIHJvdy5wdXNoKHsgZ2x5cGg6IGdseXBoc1tpbmRleF0sIGNvbG9yOiBpbnRlcmFjdGlvbiA+IDAuMTYgPyBuZWlnaGJvcmluZyA6IGJhc2UsIGRpbTogaW5kZXggPCA4IH0pXG4gICAgfVxuICAgIHJvd3MucHVzaChyb3cpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxIH19PlxuICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpID09PSAxID8gJ3BpY28nIDogaSA9PT0gMiA/IGB2JHt2ZXJzaW9ufWAgOiAnJ1xuICAgICAgICBjb25zdCBpbkJyYW5kQm94ID0gaSA+PSAxICYmIGkgPD0gMlxuICAgICAgICBjb25zdCBib3hTdGFydCA9IDFcbiAgICAgICAgY29uc3QgYm94V2lkdGggPSBgdiR7dmVyc2lvbn1gLmxlbmd0aCArIDJcbiAgICAgICAgY29uc3QgY2xvdWQgPSAoY2VsbHMpID0+IGNlbGxzLm1hcCgoY2VsbCwgeCkgPT4gKFxuICAgICAgICAgIDx0ZXh0IGtleT17eH0gc3R5bGU9e3sgY29sb3I6IGNlbGwuY29sb3IsIGRpbTogY2VsbC5kaW0gfX0+e2NlbGwuZ2x5cGh9PC90ZXh0PlxuICAgICAgICApKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxib3gga2V5PXtpfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgY2xvdWQocm93LnNsaWNlKDAsIGJveFN0YXJ0KSl9XG4gICAgICAgICAgICB7aW5CcmFuZEJveCAmJiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IGJveFdpZHRoLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgYm9sZDogaSA9PT0gMSwgY29sb3I6IGkgPT09IDEgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y2xvdWQocm93LnNsaWNlKGluQnJhbmRCb3ggPyBib3hTdGFydCArIGJveFdpZHRoIDogMCkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRW1wdHlTdGF0ZSh7IHZlcnNpb24sIGNsb3VkcyA9IGZhbHNlIH0pIHtcbiAgY29uc3QgW3NpemUsIHNldFNpemVdID0gY3JlYXRlU2lnbmFsKHsgd2lkdGg6IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODAsIGhlaWdodDogcHJvY2Vzcy5zdGRvdXQucm93cyB8fCAyNCB9KVxuICB1c2VSZXNpemUoc2V0U2l6ZSlcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBzaXplKCkud2lkdGgpXG4gIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIHNpemUoKS5oZWlnaHQgLSA0KVxuICBpZiAoIWNsb3Vkcykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IHRydWUsIGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgcGljbyd9PC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIHYke3ZlcnNpb259YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoLCBoZWlnaHQgfX0+XG4gICAgICA8RW1wdHlDbG91ZCB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fSB2ZXJzaW9uPXt2ZXJzaW9ufSAvPlxuICAgIDwvYm94PlxuICApXG59XG5cbiIsICJpbXBvcnQgeyBNYXJrZG93biwgU2Nyb2xsQm94LCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBIRUxQX1RFWFQgPSAoY29tbWFuZHMpID0+IGBwaWNvIGlzIGEgY29kaW5nIGFnZW50IGluIHlvdXIgdGVybWluYWwuIEl0IHJlYWRzLCBlZGl0cywgYW5kIHNlYXJjaGVzIGZpbGVzLCBydW5zIGNvbW1hbmRzLCBhbmQgc3RyZWFtcyBpdHMgd29yayBpbnRvIHRoaXMgdHJhbnNjcmlwdC5cblxuIyMgQ29tbWFuZHNcblxuVHlwZSBcXGAvXFxgIGluIHRoZSBjb21wb3NlciB0byBmaWx0ZXIgdGhlc2UgYXMgeW91IHR5cGUuXG5cbiR7Y29tbWFuZHMubWFwKChjKSA9PiBgLSBcXGAvJHtjLm5hbWV9XFxgIC0gJHtjLmRlc2N9YCkuam9pbignXFxuJyl9XG5cblR3byBraW5kcyBvZiB1c2VyLWRlZmluZWQgZW50cmllcyBqb2luIHRoaXMgbWVudTpcblxuLSAqKmNvbW1hbmRzKiogKFxcYH4vLnBpY28vY29tbWFuZHMvPG5hbWU+Lm1kXFxgIG9yIFxcYC5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCk6IHByb21wdCB0ZW1wbGF0ZXMgeW91IGludm9rZSBhcyBcXGAvPG5hbWU+IFthcmdzXVxcYC4gXFxgJEFSR1VNRU5UU1xcYCBpbiB0aGUgYm9keSBpcyByZXBsYWNlZCB3aXRoIHdoYXRldmVyIGZvbGxvd3MgdGhlIGNvbW1hbmQ7IHdpdGhvdXQgYSBwbGFjZWhvbGRlciwgYXJncyBhcmUgYXBwZW5kZWQuIFRoZSBtb2RlbCBuZXZlciBzZWVzIHRoZXNlIHVudGlsIHlvdSBydW4gb25lLlxuLSAqKnNraWxscyoqIChcXGB+Ly5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGAgb3IgXFxgLnBpY28vc2tpbGxzLzxuYW1lPi9TS0lMTC5tZFxcYCk6IGNhcGFiaWxpdGllcyB3aXRoIGEgbmFtZSBhbmQgZGVzY3JpcHRpb24uIFlvdSBjYW4gaW52b2tlIHRoZW0gbGlrZSBjb21tYW5kcywgYW5kIHRoZSBhZ2VudCBjYW4gYWxzbyBkaXNjb3ZlciBhbmQgbG9hZCB0aGVtIGl0c2VsZiB2aWEgdGhlIHNraWxsIHRvb2wuXG4tICoqdG9vbHMqKiAoXFxgfi8ucGljby90b29scy88bmFtZT4uanNcXGAgb3IgXFxgLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgKTogRVMgbW9kdWxlcyBkZWZhdWx0LWV4cG9ydGluZyBcXGB7IG5hbWUsIGRlc2NyaXB0aW9uLCBzY2hlbWEsIGV4ZWN1dGUgfVxcYCAob3IgYSBmYWN0b3J5IHJlY2VpdmluZyBcXGB7IGN3ZCwgcm9vdCB9XFxgKS4gVGhleSBqb2luIHRoZSBhZ2VudCdzIHRvb2xzZXQgYW5kIGFyZSByZXNjYW5uZWQgZXZlcnkgdHVybiwgc28gZWRpdHMgYXBwbHkgb24gdGhlIG5leHQgbWVzc2FnZS4gQXNrIHRoZSBhZ2VudCB0byBidWlsZCBvbmUgZm9yIHlvdTogdGhlIGJ1aWx0LWluIFxcYC9uZXctdG9vbFxcYCBza2lsbCB0ZWFjaGVzIGl0IHRoZSBmb3JtYXQuXG5cbkluIHRoZSBNQ1AgcGFuZWw6IGVudGVyIGVuYWJsZXMvZGlzYWJsZXMgYSBzZXJ2ZXIgKGRpc2FibGVkIGlzIHN0aWNreSBhY3Jvc3MgcmVzdGFydHMgLSBjb25maWcga2VwdCwgbm8gY29ubmVjdGlvbiwgbm8gdG9vbHMgb2ZmZXJlZCB0byB0aGUgbW9kZWwsIHBlciBwcm9qZWN0KSwgXFxgdFxcYCBsaXN0cyBpdHMgdG9vbHMsIFxcYHJcXGAgcmVjb25uZWN0cywgXFxgYVxcYCBhZGRzLCBcXGBjdHJsK3hcXGAgcmVtb3ZlcyAocHJlc3MgdHdpY2UpLiBVbmZpbHRlcmVkIGxpc3RzIChlZmZvcnQsIHJld2luZCBvcHRpb25zLCBNQ1ApIGFsc28gbW92ZSB3aXRoIFxcYGpcXGAvXFxga1xcYCBhbmQganVtcCB3aXRoIFxcYGdcXGAvXFxgR1xcYC5cblxuIyMgQ29tcG9zZXJcblxuLSBcXGBjdHJsK3ZcXGA6IEF0dGFjaCBjbGlwYm9hcmQgaW1hZ2Vcbi0gXFxgY3RybCtvXFxgOiBDYXB0dXJlIHNjcmVlbiByZWdpb24gKG1hY09TKVxuLSBcXGBjdHJsK2dcXGA6IFJlY29yZCAobWFjT1MpXG4tIFxcYGVudGVyXFxgOiBUcmFuc2NyaWJlIHJlY29yZGluZ1xuLSBcXGBlc2NcXGA6IENhbmNlbCBkaWN0YXRpb25cblxuLSBcXGBlbnRlclxcYCBzZW5kczsgXFxgc2hpZnQrZW50ZXJcXGAgb3IgXFxgXFxcXDxlbnRlcj5cXGAgaW5zZXJ0cyBhIG5ld2xpbmVcbi0gXFxgQFxcYCBvcGVucyBhIGZ1enp5IGZpbGUgcGlja2VyOyBlbnRlciBpbnNlcnRzIHRoZSBzZWxlY3RlZCBwYXRoXG4tIGRyYWcgYW4gaW1hZ2UgZmlsZSBpbnRvIHRoZSB0ZXJtaW5hbCB0byBhdHRhY2ggaXQ6IGl0IGFwcGVhcnMgaW5saW5lIGFzIFxcYFtJbWFnZSAjTl1cXGAsIGV4YWN0bHkgd2hlcmUgeW91ciBjdXJzb3IgaXMsIHNvIGltYWdlcyBjYW4gc2l0IGJldHdlZW4gc2VudGVuY2VzOyBiYWNrc3BhY2UgYWZ0ZXIgb25lIHJlbW92ZXMgdGhlIHdob2xlIGF0dGFjaG1lbnRcbi0gXFxgdGFiXFxgIGNvbXBsZXRlczogXFxgL3N1bW08dGFiPlxcYCBmaW5pc2hlcyB0aGUgY29tbWFuZCBuYW1lIGFuZCBjeWNsZXMgdGhyb3VnaCBtYXRjaGVzIG9uIHJlcGVhdDsgYWZ0ZXIgYW4gYXJndW1lbnQgc3BhY2UgaXQgY29tcGxldGVzIHZhbHVlcyAoXFxgL21vZGVsIGZsYTx0YWI+XFxgLCBcXGAvY29sb3IgPHRhYj5cXGAsIFxcYC9lZmZvcnQgPHRhYj5cXGApIGFuZCBmaWxlIHBhdGhzIGZvciBza2lsbHMgYW5kIGNvbW1hbmRzLiBLZWVwIHR5cGluZyB0byBuYXJyb3csIHRhYiBvciBlbnRlciBpbnNlcnRzXG4tIFxcYHVwXFxgIGFuZCBcXGBkb3duXFxgIG9uIGFuIGVtcHR5IGNvbXBvc2VyIHJlY2FsbCBtZXNzYWdlcyB5b3UgYWxyZWFkeSBzZW50XG4tIFxcYGN0cmwrclxcYCBvcGVucyByZXdpbmQgKHNhbWUgYXMgXFxgL3Jld2luZFxcYCk7IFxcYC9oaXN0b3J5XFxgIGZ1enp5LXNlYXJjaGVzIHlvdXIgb2xkIHByb21wdHMgYW5kIHB1dHMgdGhlIHNlbGVjdGVkIG9uZSBiYWNrIGluIHRoZSBjb21wb3NlclxuLSBcXGBjdHJsK3NcXGAgb3BlbnMgdGhlIHNlc3Npb24gcGlja2VyIChzYW1lIGFzIFxcYC9yZXN1bWVcXGApOyBcXGBjdHJsK3RcXGAgb3BlbnMgdGhlIG1vZGVsIHBpY2tlclxuLSBcXGBjdHJsK3BcXGAgc3dpdGNoZXMgcHJvamVjdHM6IHBpY2sgb25lIGFuZCBwaWNvIGp1bXBzIHRvIGl0cyBtb3N0IHJlY2VudCBzZXNzaW9uLCBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnksIHRvb2xzLCBjb250ZXh0LCBhbmQgTUNQIHNlcnZlcnMgdG8gbWF0Y2g7IFxcYGN0cmwreFxcYCB0d2ljZSBkZWxldGVzIGEgcHJvamVjdCdzIHBpY28gaGlzdG9yeSAoYWxsIGl0cyBzZXNzaW9ucyBhbmQgbWVtb3JpZXMpOyBcXGAvbmV3XFxgIHN0YXJ0cyBhIGZyZXNoIHNlc3Npb24gaW4gdGhlIGN1cnJlbnQgcHJvamVjdFxuLSBcXGBjdHJsK2JcXGAgY3ljbGVzIHRoaW5raW5nIGVmZm9ydCAoZGVmYXVsdCwgbG93LCBtZWRpdW0sIGhpZ2gsIG1heCkgb24gbW9kZWxzIHRoYXQgc3VwcG9ydCBpdDsgXFxgL2VmZm9ydFxcYCBvcGVucyB0aGUgZnVsbCBwaWNrZXJcbi0gaW5zaWRlIGEgc2VhcmNoIHBhbmVsLCBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBpbnN0ZWFkOiB0aGlzIHNlc3Npb24sIHRoaXMgcHJvamVjdCwgb3IgZXZlcnl3aGVyZVxuLSBcXGAvcmV3aW5kXFxgIHJlc3RvcmVzIHRoZSBjb252ZXJzYXRpb24gdG8gYW4gZWFybGllciBtZXNzYWdlOyBhIHJld2luZCBjYW4gYmUgdW5kb25lIHdpdGggXFxgY3RybCt6XFxgXG4tIG1lc3NhZ2VzIHNlbnQgd2hpbGUgdGhlIGFnZW50IGlzIHJlc3BvbmRpbmcgcXVldWUgdXAgYWJvdmUgdGhlIGNvbXBvc2VyIGFuZCBhcmUgZGVsaXZlcmVkIGFzIG9uZSBtZXNzYWdlIHdoZW4gdGhlIHR1cm4gZmluaXNoZXM7IFxcYHVwXFxgIHB1bGxzIHRoZW0gYmFjayBmb3IgZWRpdGluZ1xuLSBcXGBlc2NcXGAgaW50ZXJydXB0cyBhIHN0cmVhbWluZyByZXNwb25zZSwgb3IgY2xlYXJzIHRoZSBjb21wb3NlciB3aGVuIGlkbGVcblxuIyMgTW92aW5nIGFyb3VuZFxuXG4tIFxcYHRhYlxcYCBzd2l0Y2hlcyBmb2N1cyBiZXR3ZWVuIHRoZSB0cmFuc2NyaXB0IGFuZCB0aGUgY29tcG9zZXJcbi0gd2l0aCB0aGUgdHJhbnNjcmlwdCBmb2N1c2VkLCBcXGB1cFxcYC9cXGBkb3duXFxgL1xcYGpcXGAvXFxga1xcYCBzY3JvbGwgYW5kIFxcYGdcXGAvXFxgR1xcYCBqdW1wIHRvIHRoZSBlbmRzXG4tIGxvbmcgc2Vzc2lvbnMgcmVuZGVyIG9ubHkgdGhlIG5ld2VzdCA1MCBtZXNzYWdlczsgc2Nyb2xsaW5nIHRvIHRoZSB2ZXJ5IHRvcCBsb2FkcyBvbGRlciBvbmVzIGluIGJhdGNoZXMgKHRoZSB0b3AgbGluZSBzaG93cyBob3cgbWFueSBhcmUgaGlkZGVuKVxuLSB0aGUgbW91c2Ugd2hlZWwgc2Nyb2xsczsgY2xpY2stZHJhZyBzZWxlY3RzIHRleHQgYW5kIGNvcGllcyBpdCBvbiByZWxlYXNlXG4tIFxcYGN0cmwrY1xcYCB0d2ljZSBleGl0c1xuXG4jIyBTaGVsbHNcblxuVGhlIGFnZW50IGNhbiBydW4gbG9uZy1saXZlZCBwcm9jZXNzZXMgKGRldiBzZXJ2ZXJzLCB3YXRjaGVycykgd2l0aCBcXGBiYXNoIGJhY2tncm91bmQ6IHRydWVcXGAsIHRoZW4gcmVhZCB0aGVpciBvdXRwdXQgYW5kIHN0b3AgdGhlbSBpdHNlbGYuIFNoZWxscyBhcHBlYXIgYmVsb3cgdGhlIGNvbXBvc2VyIGFuZCByZW1haW4gdGhlcmUgYWZ0ZXIgZXhpdDogdGFiIGZvY3VzZXMgdGhlIGxpc3QsIGovayBtb3ZlcywgZW50ZXIgb3BlbnMgdGhlIGNvbW1hbmQgYW5kIGxpdmUgb3V0cHV0LCBhbmQgXFxgY3RybCt4XFxgIGtpbGxzIGEgcnVubmluZyBzaGVsbCBvciBkaXNtaXNzZXMgYSBmaW5pc2hlZCBvbmUuIFdoZW4gYSBzaGVsbCBleGl0cyBvbiBpdHMgb3duLCB0aGUgYWdlbnQgaXMgbm90aWZpZWQgYW5kIHJlc3BvbmRzOyBzaGVsbHMgZGllIHdpdGggcGljbywgYW5kIHF1aXR0aW5nIHdhcm5zIHlvdSBpZiBhbnkgYXJlIHN0aWxsIHVwLlxuXG4jIyBTdWJzY3JpcHRpb25zXG5cblxcYC9jb25uZWN0XFxgIGxpc3RzIHN1YnNjcmlwdGlvbiBwcm92aWRlcnMgeW91IGNhbiBzaWduIGluIHdpdGggaW5zdGVhZCBvZiBBUEkga2V5cy4gT3BlbkFJIChDaGF0R1BUIC8gQ29kZXggcGxhbikgYW5kIEdyb2sgKFN1cGVyR3Jvaykgc2lnbiBpbiB0aHJvdWdoIHlvdXIgYnJvd3NlciB2aWEgT0F1dGg7IHRva2VucyBhcmUgc3RvcmVkIGluIFxcYH4vLnBpY28vYXV0aC5qc29uXFxgIGFuZCByZWZyZXNoZWQgYXV0b21hdGljYWxseSwgc28geW91IHNpZ24gaW4gb25jZS4gT25jZSBjb25uZWN0ZWQsIHN1YnNjcmlwdGlvbiBtb2RlbHMgYXBwZWFyIGluIFxcYC9tb2RlbFxcYCwgYmlsbGVkIHRvIHlvdXIgcGxhbi4gXFxgY3RybCt4XFxgIHR3aWNlIGluIHRoZSBwYW5lbCBkaXNjb25uZWN0cy4gR3JvayB3ZWVrbHkgcXVvdGEgYXBwZWFycyBpbiB0aGUgY29ubmVjdGlvbiBwaWNrZXI7IHN1YnNjcmlwdGlvbiByZXF1ZXN0cyBuZXZlciBmYWxsIGJhY2sgdG8gcGFpZCBBUEkga2V5cy5cblxuIyMgTWVtb3J5XG5cblRoZSBhZ2VudCBzYXZlcyBkdXJhYmxlIGZhY3RzIHdpdGggdGhlIHJlbWVtYmVyIHRvb2w6IG9uZSBmaWxlIHBlciBtZW1vcnkgdW5kZXIgXFxgfi8ucGljby9tZW1vcnlcXGAgKGdsb2JhbCkgb3IgdGhlIHByb2plY3QncyBkaXJlY3RvcnkgaW4gXFxgfi8ucGljby9wcm9qZWN0c1xcYC4gT25seSBhIG9uZS1saW5lIGluZGV4IGlzIGluIGl0cyBjb250ZXh0OyBpdCBsb2FkcyBhIHNwZWNpZmljIG1lbW9yeSB3aXRoIHRoZSByZWNhbGwgdG9vbCB3aGVuIHJlbGV2YW50LiBcXGAvbWVtb3J5XFxgIGxpc3RzIGV2ZXJ5dGhpbmcgaXQga25vd3Mgd2l0aCBhIGNvbnRlbnQgcHJldmlldzogXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgZmlsdGVyIChhbGwsIHByb2plY3QsIGdsb2JhbCkgYW5kIFxcYGN0cmwreFxcYCB0d2ljZSBmb3JnZXRzIHRoZSBzZWxlY3RlZCBtZW1vcnkuIFlvdSBjYW4gYWxzbyBhc2sgdGhlIGFnZW50IHRvIHJlbWVtYmVyLCBmb3JnZXQsIG9yIGNsZWFuIHVwIGl0cyBtZW1vcmllcyBpbiBwbGFpbiBsYW5ndWFnZS5cblxuIyMgV2FrZS11cHNcblxuVGhlIGFnZW50IGNhbiBzY2hlZHVsZSBvbmUtdGltZSB3YWtlLXVwcyBmb3IgaXRzZWxmIHdpdGggdGhlIHNjaGVkdWxlX3dha2V1cCB0b29sOiBhZnRlciB0aGUgZGVsYXkgaXQgcmVjZWl2ZXMgaXRzIG93biBub3RlIGFzIGEgc3lzdGVtIG5vdGlmaWNhdGlvbiBhbmQgYWN0cyBvbiBpdC4gUmVjdXJyaW5nIGxvb3BzIGFyZSBqdXN0IHRoZSBhZ2VudCByZXNjaGVkdWxpbmcgYXQgdGhlIGVuZCBvZiBlYWNoIHdha2UtdXAuIFxcYC93YWtldXBzXFxgIGxpc3RzIHBlbmRpbmcgb25lcyB3aXRoIGxpdmUgY291bnRkb3duczsgZW50ZXIgb3IgXFxgY3RybCt4XFxgIGNhbmNlbHMgKHByZXNzIHR3aWNlKS4gQSBcXGBcdTIzRjAgTlxcYCBpbiB0aGUgZm9vdGVyIHNob3dzIGhvdyBtYW55IGFyZSBwZW5kaW5nLiBXYWtlLXVwcyBsaXZlIGluIG1lbW9yeSBhbmQgYXJlIGxvc3Qgd2hlbiBwaWNvIGV4aXRzLlxuXG4jIyBBcHBlYXJhbmNlXG5cbnBpY28gcGlja3MgYSBsaWdodCBvciBkYXJrIHBhbGV0dGUgYXQgc3RhcnR1cCBieSBhc2tpbmcgdGhlIHRlcm1pbmFsIGZvciBpdHMgYmFja2dyb3VuZCBjb2xvciAoT1NDIDExKSwgc28gaXQgbWF0Y2hlcyB3aGF0ZXZlciB0aGVtZSB5b3VyIHRlcm1pbmFsIHVzZXMuIEluIGF1dG8gbW9kZSBpdCBhbHNvIGZvbGxvd3MgdGhlIHRlcm1pbmFsIHdoZW4gaXQgc3dpdGNoZXMgYmV0d2VlbiBsaWdodCBhbmQgZGFyayB3aGlsZSBwaWNvIGlzIHJ1bm5pbmcgKHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgY29sb3Igc2NoZW1lIG5vdGlmaWNhdGlvbnMsIG1vZGUgMjAzMSwgc3VjaCBhcyBraXR0eSwgZ2hvc3R0eSwgZm9vdCwgYW5kIGNvbnRvdXIpLiBcXGAvdGhlbWVcXGAgb3BlbnMgYSBwaWNrZXIgdGhhdCBwcmV2aWV3cyBlYWNoIHRoZW1lIGFzIHlvdSBtb3ZlIGFuZCBwZXJzaXN0cyB5b3VyIGNob2ljZSBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgOyBcXGAvdGhlbWUgbGlnaHRcXGAsIFxcYC90aGVtZSBkYXJrXFxgLCBvciBcXGAvdGhlbWUgYXV0b1xcYCBhcHBsaWVzIG9uZSBkaXJlY3RseS4gXFxgL2NvbG9yXFxgIHRpbnRzIGEgc2luZ2xlIHNlc3Npb24ncyBhY2NlbnQgYW5kIGlzIGluZGVwZW5kZW50IG9mIHRoZSBwYWxldHRlLlxuXG4jIyBDb250ZXh0XG5cbnBpY28gcmVhZHMgQUdFTlRTLm1kIGZpbGVzIGF1dG9tYXRpY2FsbHk6IGEgZ2xvYmFsIG9uZSBmcm9tIH4vLnBpY28sIHRoZW4gZXZlcnkgYW5jZXN0b3Igb2YgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB1cCB0byB0aGUgZ2l0IHJvb3QuIERlZXBlciBmaWxlcyB3aW4uIEFHRU5UUy5tZCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBsb2FkIGxhemlseSB0aGUgZmlyc3QgdGltZSBhIHRvb2wgdG91Y2hlcyB0aGF0IHN1YnRyZWUuIEluIGFueSBwcm9qZWN0IGRpcmVjdG9yeSB3aXRob3V0IGFuIEFHRU5UUy5tZCwgYSBDTEFVREUubWQgaXMgaG9ub3JlZCBhcyBhIGZhbGxiYWNrIHNvIGV4aXN0aW5nIHJlcG9zIHdvcmsgdW5jaGFuZ2VkOyBBR0VOVFMubWQgYWx3YXlzIHdpbnMgd2hlbiBib3RoIGV4aXN0LCBhbmQgdGhlIGZhbGxiYWNrIG5ldmVyIGFwcGxpZXMgdG8gdGhlIGdsb2JhbCBmaWxlLlxuXG5TZXNzaW9ucyBhcmUgc3RvcmVkIHVuZGVyIH4vLnBpY28gYXMganNvbmwgZXZlbnQgbG9nczsgXFxgL3Jlc3VtZVxcYCBmb2xkcyBvbmUgYmFjayBpbnRvIGV4YWN0bHkgdGhpcyB2aWV3LlxuXG5cXGAvY29udGV4dFxcYCBicmVha3MgZG93biB3aGF0IHRoZSBuZXh0IHJlcXVlc3Qgd2lsbCBjb250YWluIC0gc3lzdGVtIHByb21wdCwgdG9vbCBzY2hlbWFzLCBwcm9qZWN0IGluc3RydWN0aW9ucywgbWVtb3J5IGluZGV4LCBjb21wYWN0aW9uIHN1bW1hcnksIGFuZCBjb252ZXJzYXRpb24gLSB3aXRoIGFuIGVzdGltYXRlZCBzaXplIGZvciBlYWNoIHBpZWNlIG5leHQgdG8gdGhlIHByb3ZpZGVyLW1lYXN1cmVkIHRvdGFsLlxuXG5UaGUgZm9vdGVyJ3MgXFxgY3R4ICVcXGAgc2hvd3MgaG93IGZ1bGwgdGhlIG1vZGVsJ3MgY29udGV4dCBpcy4gQXQgODUlIHBpY28gYXV0by1jb21wYWN0czogdGhlIG9sZGVyIGNvbnZlcnNhdGlvbiBpcyBzdW1tYXJpemVkIGluIGEgc3RydWN0dXJlZCBmb3JtLCB0aGUgbW9zdCByZWNlbnQgdHVybnMgYXJlIGtlcHQgdmVyYmF0aW0sIGFuZCB0aGUgbW9kZWwgaXMgdG9sZCB3aGVyZSB0aGUgZnVsbCBzZXNzaW9uIGZpbGUgbGl2ZXMgc28gaXQgY2FuIHJlYWQgZXhhY3QgZGV0YWlscyBiYWNrIG9uIGRlbWFuZC4gTm90aGluZyB2aXNpYmxlIGNoYW5nZXMgaW4gdGhlIHRyYW5zY3JpcHQsIGFuZCByZXdpbmQgc3RpbGwgd29ya3MgYWNyb3NzIGl0LiBcXGAvY29tcGFjdFxcYCBydW5zIGl0IG1hbnVhbGx5IGFuZCB0YWtlcyBvcHRpb25hbCBmb2N1cyBpbnN0cnVjdGlvbnMgKFxcYC9jb21wYWN0IGZvY3VzIG9uIHRoZSBBUEkgY2hhbmdlc1xcYCkuIFNldCBcXGBcImF1dG9Db21wYWN0XCI6IGZhbHNlXFxgIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGAgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIHRyaWdnZXIuXG5cbi0tLVxuXG4qZXNjIHRha2VzIHlvdSBiYWNrIHRvIHRoZSBjb252ZXJzYXRpb24qYFxuXG5leHBvcnQgZnVuY3Rpb24gSGVscCh7IGNvbW1hbmRzLCBvbkNsb3NlIH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICcxMDAlJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnBpY28gIGhlbHA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjE5MVx1MjE5MyBzY3JvbGwgIGVzYyBiYWNrPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkIHNjcm9sbGJhcj5cbiAgICAgICAgPE1hcmtkb3duIHRleHQ9e0hFTFBfVEVYVChjb21tYW5kcyl9IGNvZGVCZz17bnVsbH0gLz5cbiAgICAgIDwvU2Nyb2xsQm94PlxuICAgIDwvYm94PlxuICApXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7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S0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDNUgsS0FBSyxXQUFXLElBQUk7IiwKICAibmFtZXMiOiBbInByb3ZpZGVycyIsICJqb2luIiwgIm1ha2VFdmVudCIsICJwcm92aWRlcnMiLCAiY29uZmlnIiwgImJvb3QiLCAicnVuVHVybiIsICJyZWFkQ29uZmlnIiwgImNvbmZpZyIsICJmaWxlVVJMVG9QYXRoIiwgInJlYWRDb25maWciLCAiU2Nyb2xsQm94IiwgInVzZUZvY3VzIiwgInVzZUxheW91dCIsICJ1c2VJbnRlcnZhbCIsICJjcmVhdGVTaWduYWwiLCAiaG9tZWRpciIsICJjcmVhdGVTaWduYWwiLCAiZWFzZSIsICJ1c2VBbmltYXRlZCIsICJoaWdobGlnaHQiLCAid2lkdGgiLCAiZnV6enlTY29yZSIsICJqc3giLCAiY3JlYXRlU2lnbmFsIiwgInVzZUFuaW1hdGVkIiwgImVhc2UiLCAid2lkdGgiLCAidXNlZCIsICJwcm92aWRlcnMiLCAibmFtZSIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAid2lkdGgiLCAidXNlRm9jdXMiLCAiY3JlYXRlU2lnbmFsIiwgInVzZUludGVydmFsIiwgImhvbWVkaXIiLCAiU2Nyb2xsQm94IiwgInBlbmRpbmciLCAiY3JlYXRlU2lnbmFsIiwgIk1lbnUiLCAiQnV0dG9uIiwgInVzZUlucHV0IiwgImZ1enp5U2NvcmUiLCAicmFua0Z1enp5IiwgImpzeCIsICJqc3hzIiwgImNyZWF0ZVNpZ25hbCIsICJyYW5rRnV6enkiLCAiZnV6enlTY29yZSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiTWVudSIsICJob21lZGlyIiwgImJ1bmRsZWQiLCAicGVuZGluZyIsICJmYWlsZWQiLCAicGVuZGluZyIsICJjYXB0dXJlUmVnaW9uIiwgInBlbmRpbmciLCAiZXhlY0ZpbGUiLCAibWtkdGVtcCIsICJleGlzdHNTeW5jIiwgInRtcGRpciIsICJqb2luIiwgImVycm9yIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJNZW51IiwgIlNjcm9sbEJveCIsICJTcGlubmVyIiwgIlRleHRBcmVhIiwgInVzZUZvY3VzIiwgInVzZUhpdFRlc3QiLCAidXNlSW5wdXQiLCAidXNlTGF5b3V0IiwgInVzZU1vdXNlIiwgInVzZVJlc2l6ZSIsICJ4YWlDb25uZWN0ZWQiLCAiU0VTU0lPTl9DT0xPUlMiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAibGluZWFyIiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAiY3JlYXRlU2lnbmFsIiwgIlNjcm9sbEJveCIsICJ1c2VJbnB1dCIsICJsYWJlbCIsICJjcmVhdGVTaWduYWwiLCAiVGV4dElucHV0IiwgInVzZUxheW91dCIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJ1c2VNb3VzZSIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJ1c2VJbnRlcnZhbCIsICJNYXJrZG93biIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiU2Nyb2xsQm94IiwgIk1hcmtkb3duIiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VIaXRUZXN0IiwgInVzZU1vdXNlIiwgImNyZWF0ZVNpZ25hbCIsICJib290IiwgInZlcnNpb24iLCAidXNlSW50ZXJ2YWwiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJkZXRlY3RlZFRoZW1lIiwgImVsYXBzZWQiLCAiU0VTU0lPTl9DT0xPUlMiLCAieGFpQ29ubmVjdGVkIiwgInVzYWdlIiwgImhvbWVkaXIiLCAiYXJtZWQiLCAidXNlRm9jdXMiLCAiaXRlbXMiLCAicm93IiwgImZ1enp5U2NvcmUiLCAiU2Nyb2xsQm94IiwgIlRleHRBcmVhIiwgIk1lbnUiLCAicGVuZGluZyIsICJTcGlubmVyIiwgImNvbXBhY3ROdW1iZXIiLCAianN4IiwgImlzRGV2SW5zdGFsbCIsICJydW5VcGRhdGUiLCAiZmV0Y2hMYXRlc3RWZXJzaW9uIiwgIm5ld2VyVmVyc2lvbiIsICJydW5IZWFkbGVzcyIsICJydW5TaGVsbCIsICJyZWFkQ29uZmlnIiwgInRlcm1pbmFsQmFja2dyb3VuZCIsICJmaWxlVVJMVG9QYXRoIl0KfQo=
|